]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkSocPkg/QuarkNorthCluster/MemoryInit/Pei/meminit_utils.h
af7b8c8951201ced6db908cf81c9708935ec5124
[mirror_edk2.git] / QuarkSocPkg / QuarkNorthCluster / MemoryInit / Pei / meminit_utils.h
1 /************************************************************************
2 *
3 * Copyright (c) 2013-2017 Intel Corporation.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause-Patent
6 *
7 ***************************************************************************/
8 #ifndef _MEMINIT_UTILS_H_
9 #define _MEMINIT_UTILS_H_
10
11 // General Definitions:
12 #ifdef QUICKSIM
13 #define SAMPLE_SIZE 4 // reduce number of training samples in simulation env
14 #else
15 #define SAMPLE_SIZE 6 // must be odd number
16 #endif
17
18 #define EARLY_DB (0x12) // must be less than this number to enable early deadband
19 #define LATE_DB (0x34) // must be greater than this number to enable late deadband
20 #define CHX_REGS (11*4)
21 #define FULL_CLK 128
22 #define HALF_CLK 64
23 #define QRTR_CLK 32
24
25
26
27 #define MCEIL(num,den) ((uint8_t)((num+den-1)/den))
28 #define MMAX(a,b) ((((int32_t)(a))>((int32_t)(b)))?(a):(b))
29 #define MCOUNT(a) (sizeof(a)/sizeof(*a))
30
31 typedef enum ALGOS_enum {
32 eRCVN = 0,
33 eWDQS,
34 eWDQx,
35 eRDQS,
36 eVREF,
37 eWCMD,
38 eWCTL,
39 eWCLK,
40 eMAX_ALGOS,
41 } ALGOs_t;
42
43
44 // Prototypes:
45 void set_rcvn(uint8_t channel, uint8_t rank, uint8_t byte_lane, uint32_t pi_count);
46 void set_rdqs(uint8_t channel, uint8_t rank, uint8_t byte_lane, uint32_t pi_count);
47 void set_wdqs(uint8_t channel, uint8_t rank, uint8_t byte_lane, uint32_t pi_count);
48 void set_wdq(uint8_t channel, uint8_t rank, uint8_t byte_lane, uint32_t pi_count);
49 void set_wcmd(uint8_t channel, uint32_t pi_count);
50 void set_wclk(uint8_t channel, uint8_t grp, uint32_t pi_count);
51 void set_wctl(uint8_t channel, uint8_t rank, uint32_t pi_count);
52 void set_vref(uint8_t channel, uint8_t byte_lane, uint32_t setting);
53 uint32_t get_rcvn(uint8_t channel, uint8_t rank, uint8_t byte_lane);
54 uint32_t get_rdqs(uint8_t channel, uint8_t rank, uint8_t byte_lane);
55 uint32_t get_wdqs(uint8_t channel, uint8_t rank, uint8_t byte_lane);
56 uint32_t get_wdq(uint8_t channel, uint8_t rank, uint8_t byte_lane);
57 uint32_t get_wcmd(uint8_t channel);
58 uint32_t get_wclk(uint8_t channel, uint8_t group);
59 uint32_t get_wctl(uint8_t channel, uint8_t rank);
60 uint32_t get_vref(uint8_t channel, uint8_t byte_lane);
61
62 void clear_pointers(void);
63 void enable_cache(void);
64 void disable_cache(void);
65 void find_rising_edge(MRCParams_t *mrc_params, uint32_t delay[], uint8_t channel, uint8_t rank, bool rcvn);
66 uint32_t sample_dqs(MRCParams_t *mrc_params, uint8_t channel, uint8_t rank, bool rcvn);
67 uint32_t get_addr(MRCParams_t *mrc_params, uint8_t channel, uint8_t rank);
68 uint32_t byte_lane_mask(MRCParams_t *mrc_params);
69
70 uint64_t read_tsc(void);
71 uint32_t get_tsc_freq(void);
72 void delay_n(uint32_t nanoseconds);
73 void delay_u(uint32_t microseconds);
74 void delay_m(uint32_t milliseconds);
75 void delay_s(uint32_t seconds);
76
77 void post_code(uint8_t major, uint8_t minor);
78 void training_message(uint8_t channel, uint8_t rank, uint8_t byte_lane);
79 void print_timings(MRCParams_t *mrc_params);
80
81 void enable_scrambling(MRCParams_t *mrc_params);
82 void store_timings(MRCParams_t *mrc_params);
83 void restore_timings(MRCParams_t *mrc_params);
84 void default_timings(MRCParams_t *mrc_params);
85
86 #ifndef SIM
87 //
88 // Map memset() and memcpy() to BaseMemoryLib functions
89 //
90 #include <Library/BaseMemoryLib.h>
91 #define memset(d,c,n) ((c) == 0) ? ZeroMem ((d), (n)) : SetMem ((d), (n), (c))
92 #define memcpy(d,s,n) CopyMem ((d), (s), (n))
93 #endif
94
95 #endif // _MEMINIT_UTILS_H_