1
0
Fork 0

dcd: fix reinitialization of DDR

optimizations
Martin T. H. Sandsmark 2017-01-30 14:55:00 +01:00
parent 71c1effdad
commit 23f85ebd9b
1 changed files with 79 additions and 49 deletions

View File

@ -95,7 +95,7 @@ DATA 4 MX6_IOM_GRP_DDRPKE 0x00000000 /* Disable pull/keeper */
/* CLOCK:*/
/* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */
/* Don't bother setting it, 0x00000030 is the default value */
/* DATA 4 MX6_IOM_DRAM_SDCLK0_P 0x00000030 */
DATA 4 MX6_IOM_DRAM_SDCLK0_P 0x00000030
/* Control:*/
@ -148,6 +148,11 @@ DATA 4 MX6_IOM_DRAM_DQM1 0x00000030
DATA 4 MX6_IOM_DRAM_DQM2 0x00000030
DATA 4 MX6_IOM_DRAM_DQM3 0x00000030
/* Step 5.5 */
/* Disable periodic refresh to be able to run calibration */
DATA 4 MX6_MMDC_P0_MDREF 0x00000000
/* ============================================================================= */
/* DDR Controller Registers */
/* ============================================================================= */
@ -163,10 +168,6 @@ DATA 4 MX6_IOM_DRAM_DQM3 0x00000030
/* Data bus width 32 */
/* ============================================================================= */
/* DDR_PHY_P0_MPZQHWCTRL: enable both one-time & periodic HW ZQ calibration.*/
/* change ZQ_HW_PER=256ms: Original - 0xa1390003*/
DATA 4 MX6_MMDC_P0_MPZQHWCTRL 0xa1390023
/* write leveling: based on Freescale board layout and T topology*/
/* For target board: may need to run write leveling calibration*/
/* to fine tune these settings*/
@ -176,9 +177,7 @@ DATA 4 MX6_MMDC_P0_MPWLDECTRL0 0x002D0028
DATA 4 MX6_MMDC_P0_MPWLDECTRL1 0x00280028
/* ######################################################*/
/* calibration values based on calibration compare of 0x00ffff00:*/
/* Note: these calibration values are based on Freescale's board*/
/* May need to run calibration on target board to fine tune these*/
/* Calibration values from DDR stress tester tool */
/* ######################################################*/
/* MPDGCTRL0 PHY0*/
@ -200,6 +199,8 @@ DATA 4 MX6_MMDC_P0_MPRDDLCTL 0x3E3E4446
/* Write calibration */
DATA 4 MX6_MMDC_P0_MPWRDLCTL 0x38343830
/* Read data DQ byte 0-3 delay */
/* DDR_PHY_P0_MPREDQBY0DL3*/
/* DDR_PHY_P0_MPREDQBY1DL3*/
/* DDR_PHY_P0_MPREDQBY2DL3*/
@ -209,41 +210,36 @@ DATA 4 MX6_MMDC_P0_MPRDDQBY1DL 0x33333333
DATA 4 MX6_MMDC_P0_MPRDDQBY2DL 0x33333333
DATA 4 MX6_MMDC_P0_MPRDDQBY3DL 0x33333333
/* MMDC termination */
/* DDR_PHY_P0_MPODTCTRL*/
/*DATA 4 MX6_MMDC_P0_MPODTCTRL 0x00011117*/
DATA 4 MX6_MMDC_P0_MPODTCTRL 0x00022227
/* Complete calibration by forced measurement:*/
/* DDR_PHY_P0_MPMUR0: frc_msr*/
DATA 4 MX6_MMDC_P0_MPMUR0 0x00000800
/* MMDC0_MDPDC*/
/* MMDC0_MDOTC*/
/* MMDC0_MDCFG0*/
/* MMDC0_MDCFG1*/
/* MMDC0_MDCFG2*/
/* MMDC0_MDMISC*/
DATA 4 MX6_MMDC_P0_MDPDC 0x00020024
DATA 4 MX6_MMDC_P0_MDOTC 0x00333040
DATA 4 MX6_MMDC_P0_MDCFG0 0x3F435313
DATA 4 MX6_MMDC_P0_MDCFG1 0xB68E8B63
DATA 4 MX6_MMDC_P0_MDCFG2 0x01FF00DB
DATA 4 MX6_MMDC_P0_MDMISC 0x00091740
/* DATA 4 MX6_MMDC_P0_MDPDC 0x00020024 */
/* =============================================================== */
/* MMDC initialization sequence from 32.4.2 in the i.MX6SL manual */
/* =============================================================== */
/* MMDC0_MDCTL*/
/* Step 1 */
/* Set the Configuration request bit during MMDC set up*/
DATA 4 MX6_MMDC_P0_MDSCR MX6_MMDC_MDSCR_CON_REQ
/* Delay register; recommend to maintain the default values*/
DATA 4 MX6_MMDC_P0_MDRWD 0x000026d2
/* Out of reset delay register */
/* CKE HIGH to a valid command: 0 cycles */
/* Time from SDE enable to CKE rise: 1 cycle */
/* In case that DDR reset# is low, will wait */
/* until it's high and thenwait this period until */
/* rising CKE. (JEDEC value is 500 us) */
/* Time from SDE enable to DDR reset# high: 14 cycles */
DATA 4 MX6_MMDC_P0_MDOR 0x00431023
/* Step 2 */
/* Timing configuration */
DATA 4 MX6_MMDC_P0_MDCFG0 0x3F435313
DATA 4 MX6_MMDC_P0_MDCFG1 0xB68E8B63
DATA 4 MX6_MMDC_P0_MDCFG2 0x01FF00DB
DATA 4 MX6_MMDC_P0_MDOTC 0x00333040
/* CS0_END. Defines the absolute last address */
/* associated with CS0 with increments of 256Mb. */
/* CS0_END=AXI_ADDRESS[31:25] bits. */
@ -254,26 +250,75 @@ DATA 4 MX6_MMDC_P0_MDOR 0x00431023
DATA 4 MX6_MMDC_P0_MDASP 0x0000004F
/*DATA 4 MX6_MMDC_P0_MDASP 0x0000004F*/
/* Step 3 */
/* Configure DDR type */
DATA 4 MX6_MMDC_P0_MDMISC 0x00091742
/* Step 4 */
/* Out of reset delay register */
/* CKE HIGH to a valid command: 0 cycles */
/* Time from SDE enable to CKE rise: 1 cycle */
/* In case that DDR reset# is low, will wait */
/* until it's high and thenwait this period until */
/* rising CKE. (JEDEC value is 500 us) */
/* Time from SDE enable to DDR reset# high: 14 cycles */
DATA 4 MX6_MMDC_P0_MDOR 0x00431023
/* Step 5 */
/* DDR physical parameters (density/burst length */
/*DATA 4 MX6_MMDC_P0_MDCTL 0xC3190000*/
/*DATA 4 MX6_MMDC_P0_MDCTL 0x83190000*/
DATA 4 MX6_MMDC_P0_MDCTL 0x03190000
/* Step 6 */
/* DDR_PHY_P0_MPZQHWCTRL: enable one-time HW ZQ calibration.*/
DATA 4 MX6_MMDC_P0_MPZQHWCTRL 0xa1390001
/* Step 7 */
/* Enable MMDC with correct chip select */
DATA 4 MX6_MMDC_P0_MDCTL 0x83190000
/* Mode register writes*/
/* MMDC0_MDSCR: MR3 write: CS0*/
/* MMDC0_MDSCR: MR1 write: CS0*/
/* MMDC0_MDSCR: MR0 write: CS0*/
/* Step 8 */
/* Write mode registers to init ddr3 devices */
/* MMDC0_MDSCR: MR2 write: Bank 0, CS0
Load Mode Register Command
DDR3, set correct CMD_CS, CMD_BA, CMD_ADDR_LSB, CMD_ADDR_MSB)*/
DATA 4 MX6_MMDC_P0_MDSCR 0x02008032
/*DATA 4 MX6_MMDC_P0_MDSCR 0x04008032*/
/* MMDC0_MDSCR: MR3 write: CS0*/
DATA 4 MX6_MMDC_P0_MDSCR 0x00008033
/* MMDC0_MDSCR: MR1 write: CS0*/
DATA 4 MX6_MMDC_P0_MDSCR 0x00048031
/* MMDC0_MDSCR: MR0 write: CS0*/
DATA 4 MX6_MMDC_P0_MDSCR 0x05208030
/* MMDC0_MDSCR: ZQ calibration command sent to device on CS0 */
DATA 4 MX6_MMDC_P0_MDSCR 0x04008040
/* Step 10 */
/* Power down control and self-refresh */
/* MMDC0_MDPDC now SDCTL power down enabled*/
DATA 4 MX6_MMDC_P0_MDPDC 0x00025524
/* MMDC0_MAPSR ADOPT power down enabled*/
DATA 4 MX6_MMDC_P0_MAPSR 0x00011006
/* Step 11 */
/* DDR_PHY_P0_MPZQHWCTRL: enable both one-time & periodic HW ZQ calibration.*/
/* change ZQ_HW_PER=256ms: Original - 0xa1390003*/
DATA 4 MX6_MMDC_P0_MPZQHWCTRL 0xa1390023
/* Step 12 */
/* Configure and activate periodic refresh */
/* MMDC0_MDREF*/
DATA 4 MX6_MMDC_P0_MDREF 0x00005800
/* Step 13 */
/* De-assert configuration request (CON_REQ) */
DATA 4 MX6_MMDC_P0_MDSCR 0x00000000
/* Delay register; recommend to maintain the default values*/
/*DATA 4 MX6_MMDC_P0_MDRWD 0x000026d2*/
/* Mode register writes*/
/* MMDC0_MDSCR: MR2 write: CS1*/
/* MMDC0_MDSCR: MR3 write: CS1*/
/* MMDC0_MDSCR: MR1 write: CS1*/
@ -287,19 +332,4 @@ DATA 4 MX6_MMDC_P0_MDSCR 0x04008040
/* DATA 4 MX6_MMDC_P0_MDSCR 0x04008048 */
/* MMDC0_MDREF*/
/* DDR_PHY_P0_MPODTCTRL*/
DATA 4 MX6_MMDC_P0_MDREF 0x00005800
/*DATA 4 MX6_MMDC_P0_MPODTCTRL 0x00011117*/
DATA 4 MX6_MMDC_P0_MPODTCTRL 0x00022227
/* MMDC0_MDPDC now SDCTL power down enabled*/
/* MMDC0_MAPSR ADOPT power down enabled*/
/* MMDC0_MDSCR: clear this register (especially the configuration bit as initialization is complete*/
DATA 4 MX6_MMDC_P0_MDPDC 0x00025564
DATA 4 MX6_MMDC_P0_MAPSR 0x00011006
DATA 4 MX6_MMDC_P0_MDSCR 0x00000000