23#ifdef ENABLE_SDRAMC_CTL_DATA_DEBUG
24#define SDRAMC_CTL_DATA_DEBUG(format, ...) printf(format, ##__VA_ARGS__)
26#define SDRAMC_CTL_DATA_DEBUG(format, ...)
31#define ddr_readl(reg) \
33 ssdk_printf(SSDK_EMERG, "r(0x%x, r(0x%08x)\r\n", reg, readl(reg));
34#define ddr_writel(val, reg) \
36 ssdk_printf(SSDK_EMERG, "w(0x%x, 0x%08x), r(0x%08x)\r\n", reg, val, \
39#define ddr_writel(val, reg) writel(val, reg)
40#define ddr_readl(reg) readl(reg)
44#define BIT(nr) ((uint32_t)1u << (nr))
46#define SDRAMC_NS_2_TICKS(hz, ns) (((hz) / 10000u * (ns) + 100000u) / 100000u)
48#define SDRAMC_INIT (0x0u)
49#define SDRAMC_INIT_DONE BIT(31)
50#define SDRAMC_INIT_SOFT_RESET BIT(8)
51#define SDRAMC_INIT_CLK_OUT_EN BIT(4)
52#define SDRAMC_INIT_SDR_SYNC_FLUSH BIT(3)
53#define SDRAMC_INIT_DDR_ASYNC_FLUSH_B BIT(2)
54#define SDRAMC_INIT_CFG_MRS BIT(1)
55#define SDRAMC_INIT_START BIT(0)
57#define SDRAMC_AXI_RDY_CNT (0x4u)
58#define SDRAMC_AXI_RDY_CNT_R_CH_LSB (16u)
59#define SDRAMC_AXI_RDY_CNT_B_CH_LSB (0u)
61#define SDRAMC_AXI_FIFO_GAP (0x8u)
62#define SDRAMC_AXI_FIFO_GAP_B_LSB (10u)
63#define SDRAMC_AXI_FIFO_GAP_AR_LSB (8u)
64#define SDRAMC_AXI_FIFO_GAP_RD_LSB (6u)
65#define SDRAMC_AXI_FIFO_GAP_AW_LSB (4u)
66#define SDRAMC_AXI_FIFO_GAP_WR_LSB (0u)
68#define SDRAMC_BA (0x10u)
69#define SDRAMC_BA_BASE_ADDR_LSB (0u)
72#define RD_CLK_DUMMY_LSB (5u)
73#define RD_CLK_ASYNC_FIFO_RD_SEL_LSB (2u)
74#define RD_CLK_SEL_LSB (0u)
76#define SDRAM_DDR_MODE (0x18u)
77#define SDRAM_DDR_MODE_CFG BIT(0)
79#define SDRAM_BURST_MODE (0x1Cu)
80#define SDRAM_BURST_MODE_TYPE BIT(3)
81#define SDRAM_BURST_MODE_LSB (0u)
83#define SDRAM_WIDTH_MODE (0x20u)
84#define SDRAM_WIDTH_MODE_LSB (0u)
86#define SDRAMC_FLOW_CTRL (0x24u)
87#define SDRAMC_FLOW_CTRL_RR_SCH_STATUS BIT(25)
88#define SDRAMC_FLOW_CTRL_RR_SCH_MASK BIT(24)
89#define SDRAMC_FLOW_CTRL_RR_SCH_SET BIT(23)
90#define SDRAMC_FLOW_CTRL_RETURN_STATUS BIT(22)
91#define SDRAMC_FLOW_CTRL_SCH_STATUS BIT(21)
92#define SDRAMC_FLOW_CTRL_RD_STATUS BIT(20)
93#define SDRAMC_FLOW_CTRL_B_STATUS BIT(19)
94#define SDRAMC_FLOW_CTRL_WR_STATUS BIT(18)
95#define SDRAMC_FLOW_CTRL_AW_STATUS BIT(17)
96#define SDRAMC_FLOW_CTRL_AR_STATUS BIT(16)
97#define SDRAMC_FLOW_CTRL_RETURN_MASK BIT(14)
98#define SDRAMC_FLOW_CTRL_SCH_MASK BIT(13)
99#define SDRAMC_FLOW_CTRL_RD_MASK BIT(12)
100#define SDRAMC_FLOW_CTRL_B_MASK BIT(11)
101#define SDRAMC_FLOW_CTRL_WR_MASK BIT(10)
102#define SDRAMC_FLOW_CTRL_AW_MASK BIT(9)
103#define SDRAMC_FLOW_CTRL_AR_MASK BIT(8)
104#define SDRAMC_FLOW_CTRL_RETURN_SET BIT(6)
105#define SDRAMC_FLOW_CTRL_SCH_SET BIT(5)
106#define SDRAMC_FLOW_CTRL_RD_SET BIT(4)
107#define SDRAMC_FLOW_CTRL_B_SET BIT(3)
108#define SDRAMC_FLOW_CTRL_WR_SET BIT(2)
109#define SDRAMC_FLOW_CTRL_AW_SET BIT(1)
110#define SDRAMC_FLOW_CTRL_AR_SET BIT(0)
112#define SDRAMC_INTERRUPT (0x28u)
114#define SDRAMC_INTERRUPT_EN (0x2Cu)
122#define SDRAMC_SCH_WEIGHT (0x30u)
123#define SDRAMC_SCH_WEIGHT_RW_W_LSB (24u)
124#define SDRAMC_SCH_WEIGHT_PAGE_W_LSB (16u)
125#define SDRAMC_SCH_WEIGHT_BANKIDLE_W_LSB (8u)
126#define SDRAMC_SCH_WEIGHT_QOS_W_LSB (0u)
128#define SDRAMC_AGING_WEIGHT (0x34u)
129#define SDRAMC_AGING_WEIGHT_LSB (0u)
131#define SDRAMC_CAS_MODE (0x38u)
132#define SDRAMC_CAS_MODE_RD_NONE_DLY (8u)
133#define SDRAMC_CAS_MODE_LSB (0u)
135#define SDRAMC_OPERATING_MODE (0x3Cu)
136#define SDRAMC_OPERATING_MODE_A13_A9_LSB (16u)
137#define SDRAMC_OPERATING_MODE_LSB (0u)
139#define SDRAMC_EXTEND_CONTROL (0x40u)
140#define SDRAMC_EXTEND_CONTROL_A13_A2_LSB (16u)
141#define SDRAMC_EXTEND_CONTROL_DRIVE_STRENGTH (1u)
142#define SDRAMC_EXTEND_CONTROL_DLL_EN (0u)
144#define SDRAMC_TIMING_REGS_PART1 (0x44u)
145#define SDRAMC_TIMING_TRCD_LSB (24u)
146#define SDRAMC_TIMING_TRFC_LSB (16u)
147#define SDRAMC_TIMING_TRC_LSB (8u)
148#define SDRAMC_TIMING_TRAS_MIN_LSB (0u)
150#define SDRAMC_TIMING_REGS_PART2 (0x48u)
151#define SDRAMC_TIMING_TWTR_LSB (24u)
152#define SDRAMC_TIMING_TWR_LSB (16u)
153#define SDRAMC_TIMING_TRRD_LSB (8u)
154#define SDRAMC_TIMING_TRP_LSB (0u)
156#define SDRAMC_TIMING_REGS_PART3 (0x4Cu)
157#define SDRAMC_TIMING_CNT_200CYCLE_LSB (16u)
158#define SDRAMC_TIMING_TREFI_LSB (0u)
160#define SDRAMC_INIT_WAIT_CONT (0x50u)
161#define SDRAMC_INIT_WAIT_CONT_200US (0u)
163#define SDRAMC_ADDR_DIVED_MODE (0x54u)
164#define SDRAMC_ADDR_DIVED_MODE_CS_START_LSB (24u)
165#define SDRAMC_ADDR_DIVED_MODE_COLOW_START_LSB (16u)
166#define SDRAMC_ADDR_DIVED_MODE_BANK_START_LSB (8u)
167#define SDRAMC_ADDR_DIVED_MODE_ROW_MODE_LSB (5u)
168#define SDRAMC_ADDR_DIVED_MODE_ROW_START_LSB (0u)
170#define SDRAMC_CHIP_SELECT_MODE (0x58u)
171#define SDRAMC_CHIP_SELECT_COLOW_MODE_LSB (2u)
172#define SDRAMC_CHIP_SELECT_MODE_LSB (0u)
174#define SDRAMC_RETURN_FC_GAP (0x5Cu)
175#define SDRAMC_RETURN_FC_GAP_LSB (0u)
177#define SDRAMC_BANK_MODE (0x60u)
178#define SDRAMC_BANK_MODE_LSB (0u)
180#define SDRAMC_TIMING_REGS_PART4 (0x64u)
181#define SDRAMC_TIMING_TXSRD_LSB (16u)
182#define SDRAMC_TIMING_TRAS_MAX_LSB (0u)
184#define SDRAMC_MRD (0x68u)
185#define SDRAMC_MRD_TMR_LSB (0u)
187#define SDRAMC_CFG_CMD (0x6Cu)
188#define SDRAMC_CFG_CMD_SELF_REFRESH BIT(0)
190#define SDRAMC_CFG_PWR_DWN (0x70u)
191#define SDRAMC_CFG_PWR_DWN_EN BIT(0)
193#define WCMD_ERR_INT_SET (0x74u)
194#define WCMD_ERR_INT_SET_CLR BIT(0)
196#define SDRAMC_AXI_AWCNT (0x78u)
197#define SDRAMC_AXI_AWCNT_LSB (0u)
199#define SDRAMC_AXI_WCNT (0x7Cu)
200#define SDRAMC_AXI_WCNT_LSB (0u)
202#define SDRAMC_AXI_ARCNT (0x80u)
203#define SDRAMC_AXI_ARCNT_LSB (0u)
205#define SDRAMC_AXI_BRESP_CNT (0x84u)
206#define SDRAMC_AXI_BRESP_CNT_LSB (0u)
208#define SDRAMC_AXI_RCNT (0x88u)
209#define SDRAMC_AXI_RCNT_LSB (0u)
211#define SDRAMC_DRAM_RCNT (0x8Cu)
212#define SDRAMC_DRAM_RCNT_LSB (0u)
214#define SDRAMC_DRAM_WCNT (0x90u)
215#define SDRAMC_DRAM_WCNT_LSB (0u)
217#define SDRAMC_DRAM_DCNT (0x94u)
218#define SDRAMC_DRAM_DCNT_LSB (0u)
220#define SDRAMC_DLL0 (0x98u)
221#define SDRAMC_DLL0_SLVUPDGATE BIT(31)
222#define SDRAMC_DLL0_REFUPDINT1_LSB (28u)
223#define SDRAMC_DLL0_REFUPDINT0_LSB (25u)
224#define SDRAMC_DLL0_REF0RSTV_LSB (18u)
225#define SDRAMC_DLL0_REFSEL1_LSB (16u)
226#define SDRAMC_DLL0_OVRDVAL_LSB (9u)
227#define SDRAMC_DLL0_OVRDEN BIT(8)
228#define SDRAMC_DLL0_SLVTGRT_LSB (1u)
229#define SDRAMC_DLL0_DLLEN BIT(0)
231#define SDRAMC_DLL1 (0x9Cu)
232#define SDRAMC_DLL1_SLVUPDGATE BIT(31)
233#define SDRAMC_DLL1_REFUPDINT1_LSB (28u)
234#define SDRAMC_DLL1_REFUPDINT0_LSB (25u)
235#define SDRAMC_DLL1_REF0RSTV_LSB (18u)
236#define SDRAMC_DLL1_REFSEL1_LSB (16u)
237#define SDRAMC_DLL1_OVRDVAL_LSB (9u)
238#define SDRAMC_DLL1_OVRDEN BIT(8)
239#define SDRAMC_DLL1_SLVTGRT_LSB (1u)
240#define SDRAMC_DLL1_DLLEN BIT(0)
242#define SDRAMC_DLL2 (0xA0u)
243#define SDRAMC_DLL2_SLVUPDGATE BIT(31)
244#define SDRAMC_DLL2_REFUPDINT1_LSB (28u)
245#define SDRAMC_DLL2_REFUPDINT0_LSB (25u)
246#define SDRAMC_DLL2_REF0RSTV_LSB (18u)
247#define SDRAMC_DLL2_REFSEL1_LSB (16u)
248#define SDRAMC_DLL2_OVRDVAL_LSB (9u)
249#define SDRAMC_DLL2_OVRDEN BIT(8)
250#define SDRAMC_DLL2_SLVTGRT_LSB (1u)
251#define SDRAMC_DLL2_DLLEN BIT(0)
253#define SDRAMC_DLL3 (0xA4u)
254#define SDRAMC_DLL3_SLVUPDGATE BIT(31)
255#define SDRAMC_DLL3_REFUPDINT1_LSB (28u)
256#define SDRAMC_DLL3_REFUPDINT0_LSB (25u)
257#define SDRAMC_DLL3_REF0RSTV_LSB (18u)
258#define SDRAMC_DLL3_REFSEL1_LSB (16u)
259#define SDRAMC_DLL3_OVRDVAL_LSB (9u)
260#define SDRAMC_DLL3_OVRDEN BIT(8)
261#define SDRAMC_DLL3_SLVTGRT_LSB (1u)
262#define SDRAMC_DLL3_DLLEN BIT(0)
264#define SDRAMC_DLL_STATUS0 (0xA8u)
265#define SDRAMC_DLL_STATUS0_SLVSEL_LSB (9u)
266#define SDRAMC_DLL_STATUS0_SLVLOCK BIT(8)
267#define SDRAMC_DLL_STATUS0_REFSEL_LSB (1u)
268#define SDRAMC_DLL_STATUS0_REFLOCK BIT(0)
270#define SDRAMC_DLL_STATUS1 (0xACu)
271#define SDRAMC_DLL_STATUS1_SLVSEL_LSB (9u)
272#define SDRAMC_DLL_STATUS1_SLVLOCK BIT(8)
273#define SDRAMC_DLL_STATUS1_REFSEL_LSB (1u)
274#define SDRAMC_DLL_STATUS1_REFLOCK BIT(0)
276#define SDRAMC_DLL_STATUS2 (0xB0u)
277#define SDRAMC_DLL_STATUS2_SLVSEL_LSB (9u)
278#define SDRAMC_DLL_STATUS2_SLVLOCK BIT(8)
279#define SDRAMC_DLL_STATUS2_REFSEL_LSB (1u)
280#define SDRAMC_DLL_STATUS2_REFLOCK BIT(0)
282#define SDRAMC_DLL_STATUS3 (0xB4u)
283#define SDRAMC_DLL_STATUS3_SLVSEL_LSB (9u)
284#define SDRAMC_DLL_STATUS3_SLVLOCK BIT(8)
285#define SDRAMC_DLL_STATUS3_REFSEL_LSB (1u)
286#define SDRAMC_DLL_STATUS3_REFLOCK BIT(0)
288#define SDRAMC_DQS_QE_SET (0xB8u)
289#define SDRAMC_DQS_QE_SET_VAL BIT(1)
290#define SDRAMC_DQS_QE_SET_EN BIT(0)
292#define SDRAMC_DDR_DQS_SHIFT (0xC0u)
293#define SDRAMC_DDR_DQS_SHIFT_GATE_FORCE_TIE1 BIT(31)
294#define SDRAMC_DDR_DQS_SHIFT_NUM3NEG_LSB (28u)
295#define SDRAMC_DDR_DQS_SHIFT_NUM2NEG_LSB (24u)
296#define SDRAMC_DDR_DQS_SHIFT_NUM1NEG_LSB (20u)
297#define SDRAMC_DDR_DQS_SHIFT_NUM0NEG_LSB (16u)
298#define SDRAMC_DDR_DQS_SHIFT_NUM3_LSB (12u)
299#define SDRAMC_DDR_DQS_SHIFT_NUM2_LSB (8u)
300#define SDRAMC_DDR_DQS_SHIFT_NUM1_LSB (4u)
301#define SDRAMC_DDR_DQS_SHIFT_NUM0_LSB (0u)
303#define SDRAMC_SDR_DQS_SHIFT (0xC4u)
304#define SDRAMC_SDR_DQS_SHIFT_NUM_LSB (0u)
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_SDRAMC
Definition: sdrv_common.h:56
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
SemiDrive SDRAM driver header file.
struct gate_record gate_record_s
gate value record
void sdrv_set_sd_para(struct sd_para *cs)
save sdram para
struct sd_para sd_para_s
sdramc row column cs bank configuration
struct sdram_comm_config sdram_comm_config_t
sdramc commom configuration
struct sd_para * sdrv_get_sd_para(void)
get sdram para
int32_t sdrv_sdramc_init(addr_t base, sdram_config_t *conf)
sdramc init main function
sdrv_sdramc_error
sdramc status error code.
Definition: sdrv_sdramc.h:310
@ SDRV_STATUS_SDRAMC_DLL_WAYS_ERR
Definition: sdrv_sdramc.h:312
@ SDRV_STATUS_SDRAMC_SET_DDR_CLK_ERR
Definition: sdrv_sdramc.h:313
@ SDRV_STATUS_SDRAMC_DLL_LOCK_ERR
Definition: sdrv_sdramc.h:311
struct sdram_config sdram_config_t
sdramc private configuration
gate value record
Definition: sdrv_sdramc.h:357
uint32_t gate_index
Definition: sdrv_sdramc.h:359
uint32_t gate_val
Definition: sdrv_sdramc.h:358
sdramc row column cs bank configuration
Definition: sdrv_sdramc.h:345
uint32_t bank_bits
Definition: sdrv_sdramc.h:351
uint32_t column_start
Definition: sdrv_sdramc.h:346
uint32_t row_bits
Definition: sdrv_sdramc.h:353
uint32_t column_bits
Definition: sdrv_sdramc.h:347
uint32_t row_start
Definition: sdrv_sdramc.h:352
uint32_t cs_bits
Definition: sdrv_sdramc.h:349
uint32_t cs_start
Definition: sdrv_sdramc.h:348
uint32_t bank_start
Definition: sdrv_sdramc.h:350
sdramc commom configuration
Definition: sdrv_sdramc.h:317
uint32_t t_wtr_cycle
Definition: sdrv_sdramc.h:319
uint32_t t_rp_ns
Definition: sdrv_sdramc.h:326
uint32_t t_rrd_ns
Definition: sdrv_sdramc.h:325
uint32_t t_wr_ns
Definition: sdrv_sdramc.h:324
uint32_t mrd_cycle
Definition: sdrv_sdramc.h:318
uint32_t t_ras_ns
Definition: sdrv_sdramc.h:323
uint32_t t_rcd_ns
Definition: sdrv_sdramc.h:320
uint32_t t_rc_ns
Definition: sdrv_sdramc.h:322
uint32_t t_rfc_ns
Definition: sdrv_sdramc.h:321
sdramc private configuration
Definition: sdrv_sdramc.h:330
uint32_t cs_num
Definition: sdrv_sdramc.h:336
uint32_t column_num
Definition: sdrv_sdramc.h:334
uint32_t dq_width
Definition: sdrv_sdramc.h:337
bool ddr_mode
Definition: sdrv_sdramc.h:332
uint32_t row_num
Definition: sdrv_sdramc.h:333
const char * name
Definition: sdrv_sdramc.h:331
uint32_t cas_latency_x2
Definition: sdrv_sdramc.h:339
uint32_t bank_num
Definition: sdrv_sdramc.h:335
uint32_t clock
Definition: sdrv_sdramc.h:338
uint32_t burst_length
Definition: sdrv_sdramc.h:340
sdram_comm_config_t * comm_config
Definition: sdrv_sdramc.h:341