summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxiaobo gu <xiaobo.gu@amlogic.com>2018-12-29 20:32:36 +0800
committerDongjin Kim <tobetter@gmail.com>2020-02-13 17:13:40 +0900
commit62bcd231721b4ef8496bf04aeed91b634d894272 (patch)
treeea987221b19590d25dd08aab9f516669274a6bdc
parent27af2011a44b1bd73ee1f8508b32eb4d1f58e617 (diff)
downloadu-boot-odroid-c1-62bcd231721b4ef8496bf04aeed91b634d894272.tar.gz
uboot: update ddr and emmc driver. [1/3]
6a2a443 storage: mmc/nand: support support to read saved ddr parameter [1/1] cb80c6c uboot: emmc: setup emmc hs400 debug environment in uboot [1/1] 9927af4 ddr: timing:G12A/G12B/TL1/TM2 update LPDDR4_PHY_V_0_1_14 bl33 [2/3] c9dfa59 ddr: driver:G12A/G12B/TL1 update LPDDR4_PHY_V_0_1_13 bl33 [2/3] ac463ed ddr: timing:G12A/G12B/TL1_update_LPDDR4_PHY_V_0_1_12_bl33 [2/3] 3fead4a dram: scramble: update scramble key config [2/2] dram: scramble: update scramble key config [2/2] PD#SWPL-3152 Problem: can not configure non-sec memory scramble key in uboot Solution: add config interface in ddr function Verity: test pass on u200/w400/x301 Change-Id: Ie987ecc336483518913dc3cb850cbe04d348720e Signed-off-by: xiaobo gu <xiaobo.gu@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com> ddr: timing:G12A/G12B/TL1_update_LPDDR4_PHY_V_0_1_12_bl33 [2/3] PD#SWPL-5973 Problem: none Solution: DDR_DRIVER_VERSION "LPDDR4_PHY_V_0_1_12" 20190128 1 reduice funciton ddr_init_soc_calculate_impedence_ctrl code size 2 modify ddr4 DqDqsRcvCntrl register for swith to extend vref range improve vref training 3 adjust 16bit lpddr4 dfi mode register and DMC_DRAM_DFI_CTRL register for 16bit test 4 change ddr scramble to after exter_ddrtest 5 add amlogic vref correction function 6 combine g12 rev-a and rev-b 7 repair tl1 ddr3 autosize function 8 config cfg_ddr_dqs=5 improve rank switch speed 9 change ddr4 rtt_park to 0 for ddr4 dqs level will increase vddq power 10 add fail_pass_ddr test method 11 disable asr only apd after ddrtest 12 add ddr_fast_boot function 13 add lpddr4 fast boot vt function Verify: test pass at x301 Change-Id: I19c0100cd08990854ab1f006d5e7060e7c2cc1bf Signed-off-by: zhiguang.ouyang <zhiguang.ouyang@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com> ddr: driver:G12A/G12B/TL1 update LPDDR4_PHY_V_0_1_13 bl33 [2/3] PD#SWPL-7341 Problem: none. Solution: DDR_DRIVER_VERSION "LPDDR4_PHY_V_0_1_13" 20190417 1 add ddr_fast_boot data sha2 checksum 2 repair ddr reinit training all use for auto frequency scan 3 adjust tl1 bl2 stack link 4 reparir cs0 4GB support ,limit ddr addtest <=3928M 5 change tl1 board id to ddr id Verify: test pass at x301 and u200. Change-Id: I582fc6b67d6b565ef260b9bc4c144425ece95cc4 Signed-off-by: zhiguang.ouyang <zhiguang.ouyang@amlogic.com> ddr: timing:G12A/G12B/TL1/TM2 update LPDDR4_PHY_V_0_1_14 bl33 [2/3] PD#SWPL-7880 Problem: none. Solution: DDR_DRIVER_VERSION "LPDDR4_PHY_V_0_1_14" 20190426 1 add soc window vref offset function 2 add usb_download_full test function 3 repair lpddr4 CA delay offset function 4 repair suspend resume test command 5 2400 ddr4 change cl from 16 to 18. compatibility new JEDEC 6 add dfi_mrl max value limmit 7 change lpddr4 init soc vref value Verify: test pass at T309,U200,W400. Change-Id: Ie92971f4a009511b72b22eea6dba56c461438d2b Signed-off-by: zhiguang.ouyang <zhiguang.ouyang@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com> uboot: emmc: setup emmc hs400 debug environment in uboot [1/1] PD#SWPL-1265 Problem: HS400 enviroment is too complexity to debug Solution: setup HS400 environment in uboot Verify: verify on tl1_skt Change-Id: Iddc3ec8bdad496baf5792457d5417fe06ac3ce9b Signed-off-by: Ruixuan Li <ruixuan.li@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com> storage: mmc/nand: support support to read saved ddr parameter [1/1] PD#SWPL-5550 Problem: Implement to the function that can read ddr parameter which saved in reserved area. Solution: provide interface. Verify: tl1-x301 axg-s400 Change-Id: I68a0a83ac435ad6d4a11e01edc290aedae650941 Signed-off-by: Liang Yang <liang.yang@amlogic.com> Signed-off-by: Qiang Li <qiang.li@amlogic.com> Signed-off-by: Liang Yang <liang.yang@amlogic.com> Signed-off-by: Luan Yuan <luan.yuan@amlogic.com>
-rw-r--r--arch/arm/include/asm/arch-g12a/ddr_define.h2
-rw-r--r--arch/arm/include/asm/arch-g12a/timing.h16
-rw-r--r--arch/arm/include/asm/arch-g12b/ddr_define.h2
-rw-r--r--arch/arm/include/asm/arch-g12b/timing.h18
-rw-r--r--board/amlogic/g12a_skt_v1/firmware/timing.c25
-rw-r--r--board/amlogic/g12a_u200_v1/firmware/timing.c20
-rw-r--r--board/amlogic/g12a_u211_v1/firmware/timing.c20
-rw-r--r--board/amlogic/g12a_u212_v1/firmware/timing.c20
-rw-r--r--board/amlogic/g12a_u220_v1/firmware/timing.c374
-rw-r--r--board/amlogic/g12a_u221_v1/firmware/timing.c20
-rw-r--r--board/amlogic/g12b_skt_v1/firmware/timing.c92
-rw-r--r--board/amlogic/g12b_w400_v1/firmware/timing.c18
-rw-r--r--board/amlogic/tl1_skt_v1/firmware/timing.c6
-rw-r--r--common/cmd_ddr_test.c72390
-rw-r--r--common/store_interface.c5
15 files changed, 37104 insertions, 35924 deletions
diff --git a/arch/arm/include/asm/arch-g12a/ddr_define.h b/arch/arm/include/asm/arch-g12a/ddr_define.h
index ca44a90615..f13f5e18e7 100644
--- a/arch/arm/include/asm/arch-g12a/ddr_define.h
+++ b/arch/arm/include/asm/arch-g12a/ddr_define.h
@@ -83,6 +83,8 @@
(chl_set == CONFIG_DDR0_16BIT))
#define DDR_USE_2_RANK(chl_set) ((chl_set == CONFIG_DDR0_RANK01))
+#define DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT 1<<5
+#define DMC_TEST_SLT_ENABLE_DDR_AUTO_WINDOW_TEST 1<<4
/* DMC_DDR_CTRL defines */
#define DDR_DDR4_ENABLE (1<<22)
#define DDR_RANK1_ENABLE (1<<21)
diff --git a/arch/arm/include/asm/arch-g12a/timing.h b/arch/arm/include/asm/arch-g12a/timing.h
index de9da4950e..7170cbb210 100644
--- a/arch/arm/include/asm/arch-g12a/timing.h
+++ b/arch/arm/include/asm/arch-g12a/timing.h
@@ -73,7 +73,8 @@ typedef struct ddr_reg {
typedef struct ddr_set{
unsigned int magic;
- unsigned int rsv_int0;
+ unsigned char fast_boot[4];// 0 fastboot enable 1 window test margin 2 auto offset after window test 3 auto window test
+ //unsigned int rsv_int0;
unsigned char board_id;
//board id reserve,,do not modify
unsigned char version;
@@ -131,7 +132,9 @@ typedef struct ddr_set{
unsigned short training_SequenceCtrl[2];
//system reserve,do not modify
- unsigned char phy_odt_config_rank[4];
+ unsigned char phy_odt_config_rank[2];
+ unsigned char rever1;
+ unsigned char rever2;
//training odt config ,only use for training
// [0]Odt pattern for accesses targeting rank 0. [3:0] is used for write ODT [7:4] is used for read ODT
// [1]Odt pattern for accesses targeting rank 1. [3:0] is used for write ODT [7:4] is used for read ODT
@@ -232,7 +235,7 @@ typedef struct ddr_set{
unsigned char dfi_pinmux[DWC_DFI_PINMUX_TOTAL];
unsigned char slt_test_function[2]; //[0] slt test function enable,bit 0 enable 4 frequency scan,bit 1 enable force delay line offset ,[1],slt test parameter ,use for force delay line offset
//system reserve,do not modify
- unsigned short dq_bdlr_org;
+ unsigned short tdqs2dq;
unsigned char dram_data_wr_odt_ohm;
unsigned char bitTimeControl_2d;
//system reserve,do not modify
@@ -251,7 +254,7 @@ typedef struct ddr_set{
//system reserve,do not modify
/* align8 */
- unsigned long rsv_long0[2];
+ //unsigned long rsv_long0[2];
/* v1 end */
//unsigned char read_dqs_adjust[16]; //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 write //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 read
//unsigned char read_dq_bit_delay[72];
@@ -262,10 +265,13 @@ typedef struct ddr_set{
unsigned short write_dqs_delay[16];
unsigned short write_dq_bit_delay[72];
unsigned short read_dqs_gate_delay[16];
- unsigned char dq_dqs_delay_flag; //read_dqs read_dq,write_dqs, write_dq
+ unsigned char soc_bit_vref[32];
+ unsigned char dram_bit_vref[32];
+ unsigned char rever3;//read_dqs read_dq,write_dqs, write_dq
unsigned char dfi_mrl;
unsigned char dfi_hwtmrl;
unsigned char ARdPtrInitVal;
+ unsigned char retraining[16];
//override read bit delay
}__attribute__ ((packed)) ddr_set_t;
diff --git a/arch/arm/include/asm/arch-g12b/ddr_define.h b/arch/arm/include/asm/arch-g12b/ddr_define.h
index 8b3578e582..3e8a6f0ef0 100644
--- a/arch/arm/include/asm/arch-g12b/ddr_define.h
+++ b/arch/arm/include/asm/arch-g12b/ddr_define.h
@@ -83,6 +83,8 @@
(chl_set == CONFIG_DDR0_16BIT))
#define DDR_USE_2_RANK(chl_set) ((chl_set == CONFIG_DDR0_RANK01))
+#define DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT 1<<5
+#define DMC_TEST_SLT_ENABLE_DDR_AUTO_WINDOW_TEST 1<<4
/* DMC_DDR_CTRL defines */
#define DDR_DDR4_ENABLE (1<<22)
#define DDR_RANK1_ENABLE (1<<21)
diff --git a/arch/arm/include/asm/arch-g12b/timing.h b/arch/arm/include/asm/arch-g12b/timing.h
index cd1002ead9..4124457bf5 100644
--- a/arch/arm/include/asm/arch-g12b/timing.h
+++ b/arch/arm/include/asm/arch-g12b/timing.h
@@ -73,7 +73,8 @@ typedef struct ddr_reg {
typedef struct ddr_set{
unsigned int magic;
- unsigned int rsv_int0;
+ unsigned char fast_boot[4];// 0 fastboot enable 1 window test margin 2 auto offset after window test 3 auto window test
+ //unsigned int rsv_int0;
unsigned char board_id;
//board id reserve,,do not modify
unsigned char version;
@@ -131,7 +132,9 @@ typedef struct ddr_set{
unsigned short training_SequenceCtrl[2];
//system reserve,do not modify
- unsigned char phy_odt_config_rank[4];
+ unsigned char phy_odt_config_rank[2];
+ unsigned char rever1;
+ unsigned char rever2;
//training odt config ,only use for training
// [0]Odt pattern for accesses targeting rank 0. [3:0] is used for write ODT [7:4] is used for read ODT
// [1]Odt pattern for accesses targeting rank 1. [3:0] is used for write ODT [7:4] is used for read ODT
@@ -232,7 +235,7 @@ typedef struct ddr_set{
unsigned char dfi_pinmux[DWC_DFI_PINMUX_TOTAL];
unsigned char slt_test_function[2]; //[0] slt test function enable,bit 0 enable 4 frequency scan,bit 1 enable force delay line offset ,[1],slt test parameter ,use for force delay line offset
//system reserve,do not modify
- unsigned short dq_bdlr_org;
+ unsigned short tdqs2dq;
unsigned char dram_data_wr_odt_ohm;
unsigned char bitTimeControl_2d;
//system reserve,do not modify
@@ -251,7 +254,7 @@ typedef struct ddr_set{
//system reserve,do not modify
/* align8 */
- unsigned long rsv_long0[2];
+ //unsigned long rsv_long0[2];
/* v1 end */
//unsigned char read_dqs_adjust[16]; //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 write //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 read
//unsigned char read_dq_bit_delay[72];
@@ -260,12 +263,17 @@ typedef struct ddr_set{
unsigned char read_dqs_delay[16];
unsigned char read_dq_bit_delay[72];
unsigned short write_dqs_delay[16];
+//*/
unsigned short write_dq_bit_delay[72];
unsigned short read_dqs_gate_delay[16];
- unsigned char dq_dqs_delay_flag; //read_dqs read_dq,write_dqs, write_dq
+ unsigned char soc_bit_vref[32];
+ unsigned char dram_bit_vref[32];
+// /*
+ unsigned char rever3;//read_dqs read_dq,write_dqs, write_dq
unsigned char dfi_mrl;
unsigned char dfi_hwtmrl;
unsigned char ARdPtrInitVal;
+ unsigned char retraining[16];
//override read bit delay
}__attribute__ ((packed)) ddr_set_t;
diff --git a/board/amlogic/g12a_skt_v1/firmware/timing.c b/board/amlogic/g12a_skt_v1/firmware/timing.c
index 8bb82382db..20dee869c8 100644
--- a/board/amlogic/g12a_skt_v1/firmware/timing.c
+++ b/board/amlogic/g12a_skt_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -131,7 +131,7 @@ ddr_set_t __ddr_setting[] = {
.ddr_func = DDR_FUNC,
.magic = DRAM_CFG_MAGIC,
.slt_test_function={0x0,0x0}, //{0x1,0x0},enable slt 4 DRAMFreq test;{0x0,0x0},disable slt 4 DRAMFreq test;
- .read_dq_bit_delay={
+/* .read_dq_bit_delay={
6 ,
4 ,
7 ,
@@ -223,6 +223,7 @@ ddr_set_t __ddr_setting[] = {
0x0 ,
0x0 ,
},//DDR_ENABLE_FINE_TUNE_FLAG_READ_DQS|DDR_ENABLE_FINE_TUNE_FLAG_READ_DQ
+ */
// .dq_dqs_delay_flag = DDR_ENABLE_FINE_TUNE_FLAG_READ_DQS,
.bitTimeControl_2d=1, //use 6 about 1s 7 about 2s 1 about 400ms
},
@@ -245,8 +246,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//4096,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -328,8 +329,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -395,6 +396,7 @@ ddr_set_t __ddr_setting[] = {
.magic = DRAM_CFG_MAGIC,
.diagnose = CONFIG_DIAGNOSE_DISABLE,
.bitTimeControl_2d=1,
+ /*
//.slt_test_function = { DMC_TEST_SLT_SCAN_FREQUENCY|DMC_TEST_SLT_OFFSET_DELAY , 5},
.write_dq_bit_delay={
0x8002 ,
@@ -470,6 +472,7 @@ ddr_set_t __ddr_setting[] = {
0x8002 ,
0x8002 ,
} ,
+*/
//.dq_dqs_delay_flag = DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQ,
//.dq_dqs_delay_flag = DDR_ENABLE_FINE_TUNE_FLAG_READ_DQS|DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQ|
//DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQS|DDR_ENABLE_FINE_TUNE_FLAG_READ_DQ
@@ -494,8 +497,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -566,8 +569,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12a_u200_v1/firmware/timing.c b/board/amlogic/g12a_u200_v1/firmware/timing.c
index 194ee7d93c..800982d6ee 100644
--- a/board/amlogic/g12a_u200_v1/firmware/timing.c
+++ b/board/amlogic/g12a_u200_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -147,8 +147,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -230,8 +230,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -304,8 +304,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -375,8 +375,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12a_u211_v1/firmware/timing.c b/board/amlogic/g12a_u211_v1/firmware/timing.c
index 4d7632e79e..d91893eb10 100644
--- a/board/amlogic/g12a_u211_v1/firmware/timing.c
+++ b/board/amlogic/g12a_u211_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -147,8 +147,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -230,8 +230,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -303,8 +303,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -374,8 +374,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12a_u212_v1/firmware/timing.c b/board/amlogic/g12a_u212_v1/firmware/timing.c
index 4d7632e79e..d91893eb10 100644
--- a/board/amlogic/g12a_u212_v1/firmware/timing.c
+++ b/board/amlogic/g12a_u212_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -147,8 +147,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -230,8 +230,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -303,8 +303,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -374,8 +374,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12a_u220_v1/firmware/timing.c b/board/amlogic/g12a_u220_v1/firmware/timing.c
index 8e83ce6f22..1a4852640c 100644
--- a/board/amlogic/g12a_u220_v1/firmware/timing.c
+++ b/board/amlogic/g12a_u220_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -147,8 +147,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -230,8 +230,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,//40,
@@ -296,8 +296,9 @@ ddr_set_t __ddr_setting[] = {
.magic = DRAM_CFG_MAGIC,
.diagnose = CONFIG_DIAGNOSE_DISABLE,
},
+/*
{
- /* g12a u220 lpddr4 repair mode */
+ // g12a u220 lpddr4 repair mode
.board_id = CONFIG_BOARD_ID_MASK,
.version = 1,
//.dram_rank_config = CONFIG_DDR0_32BIT_RANK01_CH0,
@@ -316,15 +317,14 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,//40,
.cs_drv_ohm = 40,//40,
.ac_drv_ohm = 40,//40,
- /*
.soc_data_drv_ohm_p = 40,//30,//30,
.soc_data_drv_ohm_n = 40,//30,//30,
.soc_data_odt_ohm_p = 0,
@@ -332,8 +332,8 @@ ddr_set_t __ddr_setting[] = {
.dram_data_drv_ohm = 40,// 48, //lpddr4 sdram only240/1-6
.dram_data_odt_ohm = 120,// 48,//48,
.lpddr4_dram_vout_voltage_1_3_2_5_setting = 0,///1, 1/3vddq 0 2/5 vddq
- */
- ///*
+
+ ////
.soc_data_drv_ohm_p = 48,//30,//30,
.soc_data_drv_ohm_n = 48,//30,//30,
.soc_data_odt_ohm_p = 0,
@@ -342,7 +342,7 @@ ddr_set_t __ddr_setting[] = {
.dram_data_odt_ohm = 48,// 48,//48,
.dram_ac_odt_ohm = 120,
.lpddr4_dram_vout_voltage_1_3_2_5_setting = 1,///1, 1/3vddq 0 2/5 vddq
- //*/
+ ////
.soc_clk_slew_rate = 0x3ff,//0x253,
.soc_cs_slew_rate = 0x100,//0x253,
.soc_ac_slew_rate = 0x100,//0x253,
@@ -364,349 +364,13 @@ ddr_set_t __ddr_setting[] = {
.ddr_lpddr34_ca_remap = {00,00},
.ddr_lpddr34_dq_remap = {3,2,0,1,7,6,5,4, 14,13,12,15,8,9,11,10, 20,21,22,23,16,17,19,18, 24,25,28,26,31,30,27,29},
.dram_rtt_nom_wr_park = {00,00},
-
- /* pll ssc config:
- *
- * pll_ssc_mode = (1<<20) | (1<<8) | ([strength] << 4) | [mode],
- * ppm = strength * 500
- * mode: 0=center, 1=up, 2=down
- *
- * eg:
- * 1. config 1000ppm center ss. then mode=0, strength=2
- * .pll_ssc_mode = (1<<20) | (1<<8) | (2 << 4) | 0,
- * 2. config 3000ppm down ss. then mode=2, strength=6
- * .pll_ssc_mode = (1<<20) | (1<<8) | (6 << 4) | 2,
- */
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
.ddr_func = DDR_FUNC,
.magic = DRAM_CFG_MAGIC,
.diagnose = CONFIG_DIAGNOSE_DISABLE,
-/*
- .slt_test_function = { DMC_TEST_SLT_ENABLE_DDR_SKIP_TRAINING, 0},
- .dfi_hwtmrl = 7 ,
-
- .ac_trace_delay = {
- 32 ,
- 32 ,
- 30 ,
- 29 ,
- 0 ,
- 32 ,
- 32 ,
- 29 ,
- 27 ,
- 0 ,
- } ,
-
- .write_dqs_delay = {
- 144 ,
- 144 ,
- 160 ,
- 160 ,
- 160 ,
- 160 ,
- 140 ,
- 140 ,
- 142 ,
- 142 ,
- 160 ,
- 160 ,
- 160 ,
- 160 ,
- 142 ,
- 142 ,
- } ,
-
- .read_dqs_delay = {
- 11 ,
- 2 ,
- 11 ,
- 0 ,
- 13 ,
- 1 ,
- 13 ,
- 5 ,
- 13 ,
- 3 ,
- 10 ,
- 2 ,
- 11 ,
- 1 ,
- 10 ,
- 5 ,
- } ,
-
- .write_dq_bit_delay = {
- 77 ,
- 75 ,
- 80 ,
- 79 ,
- 84 ,
- 84 ,
- 84 ,
- 83 ,
- 79 ,
- 60 ,
- 62 ,
- 67 ,
- 65 ,
- 69 ,
- 69 ,
- 70 ,
- 70 ,
- 65 ,
- 60 ,
- 61 ,
- 67 ,
- 65 ,
- 69 ,
- 69 ,
- 69 ,
- 69 ,
- 65 ,
- 75 ,
- 74 ,
- 72 ,
- 79 ,
- 74 ,
- 80 ,
- 79 ,
- 79 ,
- 76 ,
- 76 ,
- 73 ,
- 79 ,
- 77 ,
- 82 ,
- 82 ,
- 82 ,
- 82 ,
- 78 ,
- 61 ,
- 63 ,
- 67 ,
- 65 ,
- 70 ,
- 70 ,
- 71 ,
- 70 ,
- 66 ,
- 61 ,
- 63 ,
- 68 ,
- 66 ,
- 71 ,
- 71 ,
- 70 ,
- 70 ,
- 66 ,
- 80 ,
- 78 ,
- 77 ,
- 82 ,
- 78 ,
- 84 ,
- 84 ,
- 84 ,
- 80 ,
- } ,
-
- .read_dq_bit_delay = {
- 4 ,
- 0 ,
- 18 ,
- 12 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 10 ,
- 8 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 4 ,
- 14 ,
- 12 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 10 ,
- 2 ,
- 0 ,
- 18 ,
- 0 ,
- 10 ,
- 10 ,
- 10 ,
- 0 ,
- 6 ,
- 0 ,
- 16 ,
- 14 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 2 ,
- 0 ,
- 10 ,
- 10 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 2 ,
- 12 ,
- 12 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 0 ,
- 10 ,
- 4 ,
- 0 ,
- 16 ,
- 0 ,
- 10 ,
- 10 ,
- 10 ,
- 0 ,
- } ,
-
- .read_dqs_gate_delay = {
- 375 ,
- 375 ,
- 367 ,
- 367 ,
- 363 ,
- 363 ,
- 371 ,
- 371 ,
- 379 ,
- 379 ,
- 371 ,
- 371 ,
- 371 ,
- 371 ,
- 381 ,
- 381 ,
- } ,
-
- .dq_dqs_delay_flag = DDR_ENABLE_FINE_TUNE_FLAG_READ_DQS|DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQ|
- DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQS|DDR_ENABLE_FINE_TUNE_FLAG_READ_DQ
- ,
- */
-///*
- .read_dqs_delay = {
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- 0x82 ,
- },
- .write_dq_bit_delay = {
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- 0x8002 ,
- } ,
-
- .dq_dqs_delay_flag = DDR_ENABLE_FINE_TUNE_FLAG_READ_DQS | DDR_ENABLE_FINE_TUNE_FLAG_WRITE_DQ,
- //*/
-},
+},
+*/
{
/* g12a Y2 dongle */
.board_id = CONFIG_BOARD_ID_MASK,
@@ -727,8 +391,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -798,8 +462,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12a_u221_v1/firmware/timing.c b/board/amlogic/g12a_u221_v1/firmware/timing.c
index 6642e98fce..ba1f632cbc 100644
--- a/board/amlogic/g12a_u221_v1/firmware/timing.c
+++ b/board/amlogic/g12a_u221_v1/firmware/timing.c
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -147,8 +147,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -230,8 +230,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -303,8 +303,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -374,8 +374,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x00c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
diff --git a/board/amlogic/g12b_skt_v1/firmware/timing.c b/board/amlogic/g12b_skt_v1/firmware/timing.c
index a67f508fd9..dece6dc9b7 100644
--- a/board/amlogic/g12b_skt_v1/firmware/timing.c
+++ b/board/amlogic/g12b_skt_v1/firmware/timing.c
@@ -61,6 +61,82 @@
ddr_set_t __ddr_setting[] = {
{
/* ddr4 */
+ ///*
+ .board_id = CONFIG_BOARD_ID_MASK,
+ .version = 1,
+ .dram_rank_config = CONFIG_DDR0_32BIT_RANK01_CH0,
+ .DramType = CONFIG_DDR_TYPE_DDR4,
+ .DRAMFreq = {1200, 0, 0, 0},
+ .ddr_rfc_type = DDR_RFC_TYPE_DDR4_2Gbx8,
+ .ddr_base_addr = CFG_DDR_BASE_ADDR,
+ .ddr_start_offset = CFG_DDR_START_OFFSET,
+ .imem_load_addr = 0xFFFC0000, //sram
+ .dmem_load_size = 0x1000, //4K
+
+ .DisabledDbyte = 0xf0,
+ .Is2Ttiming = 1,
+ .HdtCtrl = 0xC8,
+ .dram_cs0_size_MB = 0xffff,
+ .dram_cs1_size_MB = 0xffff,
+ .training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
+ .PllBypassEn = 0, //bit0-ps0,bit1-ps1
+ .ddr_rdbi_wr_enable = 1,
+ .clk_drv_ohm = 40,
+ .cs_drv_ohm = 40,
+ .ac_drv_ohm = 40,
+ .soc_data_drv_ohm_p = 48,
+ .soc_data_drv_ohm_n = 48,
+ .soc_data_odt_ohm_p = 48,
+ .soc_data_odt_ohm_n = 0,
+ .dram_data_drv_ohm = 48,//48, //34, //ddr4 sdram only 34 or 48, skt board use 34 better
+ .dram_data_odt_ohm = 48, //60,
+ .dram_ac_odt_ohm = 0,
+ .dram_data_wr_odt_ohm = 120,
+ //.max_core_timmming_frequency=1400,
+ .soc_clk_slew_rate = 0x3ff,
+ .soc_cs_slew_rate = 0x3ff,
+ .soc_ac_slew_rate = 0x3ff,
+ .soc_data_slew_rate = 0x2ff,
+ .vref_output_permil = 500,
+ .vref_receiver_permil = 820,//700,
+ .vref_dram_permil = 785,//700,
+ //.vref_reverse = 0,
+ //.ac_trace_delay = {0x0,0x0},// {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40},
+ .ac_trace_delay = {32+10,32+0,32+15,32+5,32,32,32+25,32+20,32+10,32},
+ //.ac_trace_delay = {32,32,32,32,32,32,32,32,32,32},
+ .ddr_dmc_remap = {
+ [0] = ( 5 | 7 << 5 | 8 << 10 | 9 << 15 | 10 << 20 | 11 << 25 ),
+ [1] = ( 12| 0 << 5 | 0 << 10 | 14 << 15 | 15 << 20 | 16 << 25 ),
+ [2] = ( 17| 18 << 5 | 19 << 10 | 21 << 15 | 22 << 20 | 23 << 25 ),
+ [3] = ( 24| 25 << 5 | 26 << 10 | 27 << 15 | 28 << 20 | 29 << 25 ),
+ [4] = ( 30| 13 << 5 | 20 << 10 | 6 << 15 | 0 << 20 | 0 << 25 ),
+ },
+ .ddr_lpddr34_ca_remap = {00,00},
+ .ddr_lpddr34_dq_remap = {00,00},
+ .dram_rtt_nom_wr_park = {00,00},
+
+ /* pll ssc config:
+ *
+ * pll_ssc_mode = (1<<20) | (1<<8) | ([strength] << 4) | [mode],
+ * ppm = strength * 500
+ * mode: 0=center, 1=up, 2=down
+ *
+ * eg:
+ * 1. config 1000ppm center ss. then mode=0, strength=2
+ * .pll_ssc_mode = (1<<20) | (1<<8) | (2 << 4) | 0,
+ * 2. config 3000ppm down ss. then mode=2, strength=6
+ * .pll_ssc_mode = (1<<20) | (1<<8) | (6 << 4) | 2,
+ */
+ .pll_ssc_mode = (1<<20) | (1<<8) | (2<<4) | 0,//center_ssc_1000ppm
+ .ddr_func = DDR_FUNC,
+ .magic = DRAM_CFG_MAGIC,
+ .bitTimeControl_2d = 1,
+},
+//*/
+{
+ /* ddr4 */
.board_id = CONFIG_BOARD_ID_MASK,
.version = 1,
.dram_rank_config = CONFIG_DDR0_32BIT_RANK0_CH0,
@@ -78,8 +154,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -148,8 +224,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -232,8 +308,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -306,8 +382,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
diff --git a/board/amlogic/g12b_w400_v1/firmware/timing.c b/board/amlogic/g12b_w400_v1/firmware/timing.c
index fae427d528..c904361cff 100644
--- a/board/amlogic/g12b_w400_v1/firmware/timing.c
+++ b/board/amlogic/g12b_w400_v1/firmware/timing.c
@@ -65,7 +65,7 @@ ddr_set_t __ddr_setting[] = {
.version = 1,
.dram_rank_config = CONFIG_DDR0_32BIT_RANK0_CH0,
.DramType = CONFIG_DDR_TYPE_DDR4,
- .DRAMFreq = {1200, 0, 0, 0},
+ .DRAMFreq = {1320, 0, 0, 0},
.ddr_rfc_type = DDR_RFC_TYPE_DDR4_2Gbx8,
.ddr_base_addr = CFG_DDR_BASE_ADDR,
.ddr_start_offset = CFG_DDR_START_OFFSET,
@@ -78,8 +78,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x23,0x13,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0d0d,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -148,8 +148,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,
.dram_cs1_size_MB = 0xffff,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0c0c,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -232,8 +232,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0xffff,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
@@ -307,8 +307,8 @@ ddr_set_t __ddr_setting[] = {
.dram_cs0_size_MB = 0xffff,//1024,
.dram_cs1_size_MB = 0,//1024,
.training_SequenceCtrl = {0x131f,0x61}, //ddr3 0x21f 0x31f
- .phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
- .dfi_odt_config = 0x0808,
+ .phy_odt_config_rank = {0x23,0x13}, //use 0x23 0x13 compatibility with 1rank and 2rank //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
+ .dfi_odt_config = 0x0d0d, //use 0d0d compatibility with 1rank and 2rank //0808
.PllBypassEn = 0, //bit0-ps0,bit1-ps1
.ddr_rdbi_wr_enable = 0,
.clk_drv_ohm = 40,
diff --git a/board/amlogic/tl1_skt_v1/firmware/timing.c b/board/amlogic/tl1_skt_v1/firmware/timing.c
index c52e5745fb..45a1f23f08 100644
--- a/board/amlogic/tl1_skt_v1/firmware/timing.c
+++ b/board/amlogic/tl1_skt_v1/firmware/timing.c
@@ -268,9 +268,9 @@ ddr_set_t __ddr_setting[] = {
.ddr_start_offset = CFG_DDR_START_OFFSET,
.DisabledDbyte = 0xf0,
.Is2Ttiming = 1,
- .HdtCtrl = 0x5,//0xC8,
- .dram_cs0_size_MB = 1024,
- .dram_cs1_size_MB =0,// 1024,
+ .HdtCtrl = 0xC8,
+ .dram_cs0_size_MB = 0xffff,
+ .dram_cs1_size_MB = 0,
.training_SequenceCtrl = {0x31f,0}, //ddr3 0x21f 0x31f
.phy_odt_config_rank = {0x30,0x30,0x30,0x30}, // // Odt pattern for accesses //targeting rank 0. [3:0] is used //for write ODT [7:4] is used for //read ODT
.dfi_odt_config = 0x0c0c,
diff --git a/common/cmd_ddr_test.c b/common/cmd_ddr_test.c
index 1b14987d22..fb5127803f 100644
--- a/common/cmd_ddr_test.c
+++ b/common/cmd_ddr_test.c
@@ -1,21 +1,37 @@
-#include <common.h>
-//#include <asm/arch/secure_apb.h>
-
-
-//#include<stdio.h>
-
-//#include <asm/io.h>
-//#include <asm/arch/io.h>
-//#include <asm/arch/register.h>
-//#include <asm/arch-g9tv/mmc.h> //jiaxing debug
-
-//extern void aml_cache_disable(void);
-//#ifndef char* itoa(intnum,char*str,intradix)
-
+#include <common.h>
+#include <u-boot/sha256.h>
+//#include <asm/arch/secure_apb.h>
+
+//#include<stdio.h>
+
+//#include <asm/io.h>
+//#include <asm/arch/io.h>
+//#include <asm/arch/register.h>
+//#include <asm/arch-g9tv/mmc.h> //jiaxing debug
+
+//extern void aml_cache_disable(void);
+//#ifndef char* itoa(intnum,char*str,intradix)
+
+
+//#define USE_FOR_NEWMAN
+//#define USE_FOR_UBOOT_2018
+#ifdef USE_FOR_NEWMAN
+///*
+int setenv(const char *varname, const char *varvalue)
+{
+return 1;
+}
+
+char *getenv(const char *name)
+{
+ return NULL;
+}
+//*/
+#endif
#define DWC_AC_PINMUX_TOTAL 28
-#define DWC_DFI_PINMUX_TOTAL 26
-
+#define DWC_DFI_PINMUX_TOTAL 26
+
//#define DDR_USE_DEFINE_TEMPLATE_CONFIG 1
#define DDR_STICKY_MAGIC_NUMBER 0x20180000
#define DDR_CHIP_ID 0x30
@@ -26,94 +42,95 @@
#define DDR_STICKY_SPECIAL_FUNCTION_CMD 0x2 //special test such as shift some bdlr or parameter or interleave test
#define DDR_INIT_CONFIG_STICKY_MESSAGE_SRAM_ADDRESS 0x00040000
-#define DDR_INIT_CONFIG_GLOBAL_MESSAGE_SRAM_ADDRESS 0x00050000
-#define CONFIG_DDR_TYPE_DDR3 0
-#define CONFIG_DDR_TYPE_DDR4 1
-#define CONFIG_DDR_TYPE_LPDDR4 2
-#define CONFIG_DDR_TYPE_LPDDR3 3
-#define CONFIG_DDR_TYPE_LPDDR2 4
-//#define CONFIG_DDR_TYPE_LPDDR4X 5
-#define CONFIG_DDR_TYPE_AUTO 0xf
-#define CONFIG_DDR_TYPE_AUTO_LIMIT CONFIG_DDR_TYPE_DDR4
-
-#define CONFIG_DDR0_16BIT_CH0 0x1
-#define CONFIG_DDR0_16BIT_RANK01_CH0 0x4
-#define CONFIG_DDR0_32BIT_RANK0_CH0 0x2
-#define CONFIG_DDR0_32BIT_RANK01_CH01 0x3
-#define CONFIG_DDR0_32BIT_16BIT_RANK0_CH0 0x5
-#define CONFIG_DDR0_32BIT_16BIT_RANK01_CH0 0x6
-#define CONFIG_DDR0_32BIT_RANK01_CH0 0x7
-#define CONFIG_DDR0_32BIT_RANK0_CH01 0x8
-
-/*
-static uint32_t ddr_rd_16bit_on_32reg(uint32_t addr)
-{
-uint32_t read_value=0;
-uint32_t addr_t=((addr>>2) << 2);
-read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
-read_value=(read_value>>((addr%4)<<3))&0xffff;
-return read_value;
-
-}
-static uint32_t ddr_wr_16bit_on_32reg(uint32_t addr,uint32_t value)
-{
-uint32_t read_value=0;
-uint32_t write_value=0;
-uint32_t addr_t=((addr>>2) << 2);
-uint32_t offset=((addr%4)<<3);
-read_value= *(volatile uint32_t *)(( unsigned long )(addr_t));
-write_value=(value<<offset)|(read_value&(~(0xffff<<offset)));
- *(volatile uint32_t *)(( unsigned long )(addr_t))=write_value;
-
-return write_value;
-
-}
-*/
-static uint32_t ddr_rd_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index)
-{
- uint32_t read_value=0;
- uint32_t addr_t=0;
- uint32_t offset=0;
- if(size==8){
- offset=((offset_index%4)<<3);
- addr_t=(base_addr+((offset_index>>2) << 2));
- read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
- read_value=(read_value>>offset)&0xff;
-
- }
- if(size==16){
- offset=((offset_index%2)<<4);
- addr_t=(base_addr+((offset_index>>1) << 2));
- read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
- read_value=(read_value>>offset)&0xffff;
- }
- return read_value;
-
-}
-static uint32_t ddr_wr_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index,uint32_t value)
-{
- uint32_t read_value=0;
- uint32_t write_value=0;
- uint32_t addr_t=0;
- uint32_t offset=0;
- if(size==8){
- offset=((offset_index%4)<<3);
- addr_t=(base_addr+((offset_index>>2) << 2));
- read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
- write_value=(value<<offset)|(read_value&(~(0xff<<offset)));
- }
- if(size==16){
- offset=((offset_index%2)<<4);
- addr_t=(base_addr+((offset_index>>1) << 2));
- read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
- write_value=(value<<offset)|(read_value&(~(0xffff<<offset)));
- }
- *(volatile uint32_t *)(( unsigned long )(addr_t))=write_value;
- return write_value;
-}
-typedef struct ddr_set{
+#define DDR_INIT_CONFIG_GLOBAL_MESSAGE_SRAM_ADDRESS 0x00050000
+#define CONFIG_DDR_TYPE_DDR3 0
+#define CONFIG_DDR_TYPE_DDR4 1
+#define CONFIG_DDR_TYPE_LPDDR4 2
+#define CONFIG_DDR_TYPE_LPDDR3 3
+#define CONFIG_DDR_TYPE_LPDDR2 4
+//#define CONFIG_DDR_TYPE_LPDDR4X 5
+#define CONFIG_DDR_TYPE_AUTO 0xf
+#define CONFIG_DDR_TYPE_AUTO_LIMIT CONFIG_DDR_TYPE_DDR4
+
+#define CONFIG_DDR0_16BIT_CH0 0x1
+#define CONFIG_DDR0_16BIT_RANK01_CH0 0x4
+#define CONFIG_DDR0_32BIT_RANK0_CH0 0x2
+#define CONFIG_DDR0_32BIT_RANK01_CH01 0x3
+#define CONFIG_DDR0_32BIT_16BIT_RANK0_CH0 0x5
+#define CONFIG_DDR0_32BIT_16BIT_RANK01_CH0 0x6
+#define CONFIG_DDR0_32BIT_RANK01_CH0 0x7
+#define CONFIG_DDR0_32BIT_RANK0_CH01 0x8
+
+/*
+static uint32_t ddr_rd_16bit_on_32reg(uint32_t addr)
+{
+uint32_t read_value=0;
+uint32_t addr_t=((addr>>2) << 2);
+read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
+read_value=(read_value>>((addr%4)<<3))&0xffff;
+return read_value;
+
+}
+static uint32_t ddr_wr_16bit_on_32reg(uint32_t addr,uint32_t value)
+{
+uint32_t read_value=0;
+uint32_t write_value=0;
+uint32_t addr_t=((addr>>2) << 2);
+uint32_t offset=((addr%4)<<3);
+read_value= *(volatile uint32_t *)(( unsigned long )(addr_t));
+write_value=(value<<offset)|(read_value&(~(0xffff<<offset)));
+ *(volatile uint32_t *)(( unsigned long )(addr_t))=write_value;
+
+return write_value;
+
+}
+*/
+static uint32_t ddr_rd_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index)
+{
+ uint32_t read_value=0;
+ uint32_t addr_t=0;
+ uint32_t offset=0;
+ if(size==8){
+ offset=((offset_index%4)<<3);
+ addr_t=(base_addr+((offset_index>>2) << 2));
+ read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
+ read_value=(read_value>>offset)&0xff;
+
+ }
+ if(size==16){
+ offset=((offset_index%2)<<4);
+ addr_t=(base_addr+((offset_index>>1) << 2));
+ read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
+ read_value=(read_value>>offset)&0xffff;
+ }
+ return read_value;
+
+}
+static uint32_t ddr_wr_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index,uint32_t value)
+{
+ uint32_t read_value=0;
+ uint32_t write_value=0;
+ uint32_t addr_t=0;
+ uint32_t offset=0;
+ if(size==8){
+ offset=((offset_index%4)<<3);
+ addr_t=(base_addr+((offset_index>>2) << 2));
+ read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
+ write_value=(value<<offset)|(read_value&(~(0xff<<offset)));
+ }
+ if(size==16){
+ offset=((offset_index%2)<<4);
+ addr_t=(base_addr+((offset_index>>1) << 2));
+ read_value= (*(volatile uint32_t *)(( unsigned long )(addr_t)));
+ write_value=(value<<offset)|(read_value&(~(0xffff<<offset)));
+ }
+ *(volatile uint32_t *)(( unsigned long )(addr_t))=write_value;
+ return write_value;
+}
+typedef struct ddr_set{
unsigned int magic;
- unsigned int rsv_int0;
+ unsigned char fast_boot[4];// 0 fastboot enable 1 window test margin 2 auto offset after window test 3 auto window test
+// unsigned int rsv_int0;
unsigned char board_id;
//board id reserve,,do not modify
unsigned char version;
@@ -171,7 +188,9 @@ typedef struct ddr_set{
unsigned short training_SequenceCtrl[2];
//system reserve,do not modify
- unsigned char phy_odt_config_rank[4];
+ unsigned char phy_odt_config_rank[2];
+ unsigned char rever1;
+ unsigned char rever2;
//training odt config ,only use for training
// [0]Odt pattern for accesses targeting rank 0. [3:0] is used for write ODT [7:4] is used for read ODT
// [1]Odt pattern for accesses targeting rank 1. [3:0] is used for write ODT [7:4] is used for read ODT
@@ -254,24 +273,28 @@ typedef struct ddr_set{
unsigned short soc_data_slew_rate;
//system reserve,do not modify
unsigned short vref_output_permil; //phy
- //setting same with vref_dram_permil
+ //setting same with vref_dram_permil
unsigned short vref_receiver_permil; //soc
//soc init SOC receiver vref ,config like 500 means 0.5VDDQ,take care ,please follow SI
unsigned short vref_dram_permil;
//soc init DRAM receiver vref ,config like 500 means 0.5VDDQ,take care ,please follow SI
- unsigned short vref_reverse;
- //system reserve,do not modify
+ unsigned short max_core_timmming_frequency;
+ //use for limited ddr speed core timmming parameter,for some old dram maybe have no over speed register
/* align8 */
- unsigned char ac_trace_delay[12];
+ unsigned char ac_trace_delay[10];
+ unsigned char lpddr4_dram_vout_voltage_1_3_2_5_setting;
+ unsigned char lpddr4_x8_mode;
//system reserve,do not modify ,take care ,please follow SI
unsigned char ac_pinmux[DWC_AC_PINMUX_TOTAL];
//use for lpddr3 /lpddr4 ca pinmux remap
unsigned char dfi_pinmux[DWC_DFI_PINMUX_TOTAL];
- unsigned char slt_test_function[2]; //[0] slt test function enable,bit 0 enable 4 frequency scan,bit 1 enable force delay line offset ,[1],slt test parameter ,use for force delay line offset
- //system reserve,do not modify
- unsigned short dq_bdlr_org;
- unsigned char rsv_char1[2];
+ unsigned char slt_test_function[2]; //[0] slt test function enable,bit 0 enable 4 frequency scan,bit 1 enable force delay line offset ,bit 7 enable skip training function
+ //[1],slt test parameter ,use for force delay line offset
+ //system reserve,do not modify
+ unsigned short tdqs2dq;//dq_bdlr_org;
+ unsigned char dram_data_wr_odt_ohm;
+ unsigned char bitTimeControl_2d;
//system reserve,do not modify
/* align8 */
@@ -288,19553 +311,19567 @@ typedef struct ddr_set{
//system reserve,do not modify
/* align8 */
- unsigned long rsv_long0[2];
+ //unsigned long rsv_long0[2];
/* v1 end */
- unsigned char dqs_adjust[16]; //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 write //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 read
- /* v2 start */
- unsigned char dq_bit_delay[72];
+// /*
+ unsigned char read_dqs_delay[16];
+ unsigned char read_dq_bit_delay[72];
+ unsigned short write_dqs_delay[16];
+// */
+ unsigned short write_dq_bit_delay[72];
+ unsigned short read_dqs_gate_delay[16];
+ unsigned char soc_bit_vref[32];
+ unsigned char dram_bit_vref[32];
+ ///*
+ unsigned char rever3;//read_dqs read_dq,write_dqs, write_dq
+ unsigned char dfi_mrl;
+ unsigned char dfi_hwtmrl;
+ unsigned char ARdPtrInitVal;
+ unsigned char retraining[16];
//override read bit delay
-// unsigned short dq_bdlr_org[2];
-// unsigned char dqs_adjust_line[16]; //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 write //rank 0 --lane 0 1 2 3 rank 1--4 5 6 7 read
-}ddr_set_t;
-
-ddr_set_t p_ddr_set_t;
-
-char* itoa_ddr_test(int num,char*str,int radix)
-{/*索引表*/
- printf("\nitoa_ddr_test 1\n");
- char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- unsigned unum;/*中间变量*/
- char temp;
- int i=0,j,k;
- /*确定unum的值*/
- if (radix == 10 && num<0) /*十进制负数*/
- {
- unum = (unsigned)-num;
- str[i++] = '-';
- }
- else
- unum = (unsigned)num;/*其他情况*/
- /*转换*/
- printf("\nitoa_ddr_test 2\n");
- printf("\nunum=0x%08x\n",unum);
- printf("\nunum2=0x%08x\n",(unum%(unsigned)radix));
- printf("\nradix=0x%08x\n",radix);
- str[0] = index[0];
- printf("\nitoa_ddr_test 22\n");
- unum /= radix;
- printf("\nitoa_ddr_test 23\n");
- do {
- str[i++] = index[unum%(unsigned)radix];
- unum /= radix;
- }while(unum);
- printf("\nitoa_ddr_test 3\n");
- str[i] = '\0';
- /*逆序*/
- if (str[0] == '-')
- k = 1;/*十进制负数*/
- else
- k = 0;
- printf("\nitoa_ddr_test 4\n");
- for (j = k;j <= (i-1)/2;j++)
- {
- temp = str[j];
- str[j] = str[i-1+k-j];
- str[i-1+k-j] = temp;
- }
- return str;
-}
-//#endif
-
-/*
-char *strsep(char **stringp, const char *delim)
-{
- char *s;
- const char *spanp;
- int c, sc;
- char *tok;
- if ((s = *stringp)== NULL)
- return (NULL);
- for (tok = s;;) {
- c = *s++;
- spanp = delim;
- do {
- if ((sc =*spanp++) == c) {
- if (c == 0)
- s = NULL;
- else
- s[-1] = 0;
- *stringp = s;
- return (tok);
- }
- } while (sc != 0);
- }
-
-}
-*/
-int TOLOWER(int ch)
-{
-
- if ((unsigned int)(ch - 'A') < 26u )
- ch += 'a' - 'A';
-
- return ch;
-}//大写字母转换为小写字母。
-
-int isxdigit(int ch)
-{
- return (unsigned int)( ch - '0') < 10u ||
- (unsigned int)((ch | 0x20) - 'a') < 6u;
-}//判断字符c是否为十六进制数字。
-//当c为A-F,a-f或0-9之间的十六进制数字时,返回非零值,否则返回零。
-int isdigit(int ch)
-{
- return (unsigned int)(ch - '0') < 10u;
-}//判断字符c是否为数字
-unsigned int simple_guess_base(const char *cp)
-{
- if (cp[0] == '0') {
- if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2]))
- return 16;
- else
- // return 8;
- return 10;
- } else {
- return 10;
- }
-}
-unsigned int simple_strtoull_ddr(const char *cp, char **endp, unsigned int base)
-{
- unsigned int result = 0;
- //printf("test sizeof(str_buf)==%d\n",1);
- if(cp == NULL) //jiaxing add 20170616
- return 0;
- if (!base)
- base = simple_guess_base(cp);
- if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x')
- cp += 2;
- if (base == 10) {
- while ((*cp)== '0')
- cp++;
- }
- while (isxdigit(*cp)) {//检查当前cp是否是个十六进制数值,不是直接返回0
- unsigned int value;
- value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10;
- if (value >= base)
- break;
- result = result * base + value;
- cp++;
- }
- if (endp)
- *endp = (char *)cp;
- return result;
-}
-unsigned int env_to_a_num(const char *env_name)
-{
- char *str_buf = NULL;
- char buf[48];
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
- str_buf = getenv(env_name);
- unsigned int a_num = 0;
- char *endp;
-
- printf("str==%s\n",str_buf);
-
- a_num=simple_strtoull_ddr(str_buf, &endp, 0);
- printf("%s==0x%08x\n",str_buf,a_num);
-
- return a_num;
-}
-unsigned int a_num_to_env(const char *env_name ,unsigned int *a_num)
-{
- char *str_buf=NULL;
- char buf[1024];
- //unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
- str_buf = getenv(env_name);
-
- printf("str==%s\n",str_buf);
-
- sprintf(buf, "0x%08x", *a_num);
-
- printf( "%s==0x%08x", buf,*a_num);
- setenv(env_name, buf);
-
- run_command("save",0);
- return 1;
-}
-unsigned int env_to_num(const char *env_name,unsigned int *num_arry)
-{
- char *str_buf = NULL;
- char buf[1024];
- unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
- str_buf = getenv(env_name);
-
- char * str[48];
- char *endp;
- int i;
- for (i = 0; i < 48; i++)
- str_to_numarry[i] = 0;
- printf("str==%s\n",str_buf);
- for (i = 0; i < 48; i++) {
- str[i] = strsep(&str_buf, ";");
- //str[i] = strsep(&str_buf, " ");
- if(str[i] == NULL)
- break;
- str_to_numarry[i] = simple_strtoull_ddr(str[i], &endp, 0);
- //printf("str_to_numarry[%d]==%d\n",i,str_to_numarry[i]);
- //num_arry[i]=str_to_numarry[i];
- }
- for (i = 0; i < 48; i++) {
- printf("str_to_numarry[%d]==%d\n",i,str_to_numarry[i]);
- num_arry[i] = str_to_numarry[i];
- }
- //num_arry=(unsigned int *)(&str_to_numarry);
- return 1;
-}
-
-unsigned int num_to_env(const char *env_name,unsigned int *num_arry)
-{
- char *str_buf=NULL;
- char buf[1024];
- int i;
- //unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
- str_buf = getenv(env_name);
-
- //char * str[48];
- printf("str==%s\n",str_buf);
-
-
- sprintf(buf, "0x%08x", num_arry[0]);
- for (i = 1; i < 48; i++) {
- //num_arry[i]=0;
- sprintf(buf, "%s;0x%08x", buf,num_arry[i]);
- printf("%d %d\n", i,num_arry[i]);
- }
- //sprintf(str, "%lx", value);
- printf( "%s", buf);
- setenv(env_name, buf);
-
- run_command("save",0);
- //num_arry=(unsigned int *)(&str_to_numarry);
- return 1;
-}
-
-#define TDATA32F 0xffffffff
-#define TDATA32A 0xaaaaaaaa
-#define TDATA325 0x55555555
-#define PREG_STICKY_G12A_REG0 (0xff634400 + (0x070 << 2))
-//#define DDR_TEST_AUTO_TEST_CMD_MAGIC 0x01234567
-#define DMC_STICKY_0 ((0x0000 << 2) + 0xff639800)
-#define DMC_STICKY_G12A_0 ((0x0000 << 2) + 0xff638800)
-#define DMC_STICKY_MAGIC_0 0x12345678
-#define DMC_STICKY_MAGIC_1 0xabcdbead
-#define DMC_STICKY_UBOOT_WINDOW_MAGIC_1 0x22
-#define DMC_STICKY_AUTO_TEST_CMD_INDEX_MAGIC_1 0x33
-unsigned int dmc_sticky[64];
-unsigned int sticky_reg_base_add=0;
-
-//#define DDR_TEST_ACLCDLR
-unsigned int global_boot_times= 0;
-unsigned int watchdog_time_s= 20;
-unsigned int global_ddr_clk=1;
-unsigned int bdlr_100step=0;
-unsigned int ui_1_32_100step=0;
-unsigned int error_count =0;
-unsigned int error_outof_count_flag=0;
-unsigned int copy_test_flag = 0;
-unsigned int training_pattern_flag = 0;
-unsigned int test_start_addr=0x1080000;
-
-unsigned int dq_lcd_bdl_value_aclcdlr_org_a;
-unsigned int dq_lcd_bdl_value_bdlr0_org_a;
-unsigned int dq_lcd_bdl_value_aclcdlr_min_a;
-unsigned int dq_lcd_bdl_value_bdlr0_min_a;
-unsigned int dq_lcd_bdl_value_aclcdlr_max_a;
-unsigned int dq_lcd_bdl_value_bdlr0_max_a;
-unsigned int dq_lcd_bdl_value_aclcdlr_status_a;
-unsigned int dq_lcd_bdl_value_bdlr0_status_a;
-
-unsigned int dq_lcd_bdl_value_aclcdlr_org_b;
-unsigned int dq_lcd_bdl_value_bdlr0_org_b;
-unsigned int dq_lcd_bdl_value_aclcdlr_min_b;
-unsigned int dq_lcd_bdl_value_bdlr0_min_b;
-unsigned int dq_lcd_bdl_value_aclcdlr_max_b;
-unsigned int dq_lcd_bdl_value_bdlr0_max_b;
-
-unsigned int dq_lcd_bdl_value_wdq_org_a[4];
-unsigned int dq_lcd_bdl_value_rdqs_org_a[4];
-unsigned int dq_lcd_bdl_value_wdq_min_a[4];
-unsigned int dq_lcd_bdl_value_wdq_max_a[4];
-unsigned int dq_lcd_bdl_value_rdqs_min_a[4];
-unsigned int dq_lcd_bdl_value_rdqs_max_a[4];
-unsigned int dq_lcd_bdl_value_wdq_status_a[4];
-unsigned int dq_lcd_bdl_value_rdqs_status_a[4];
-
-unsigned int dq_lcd_bdl_value_wdq_org_b[4];
-unsigned int dq_lcd_bdl_value_rdqs_org_b[4];
-unsigned int dq_lcd_bdl_value_wdq_min_b[4];
-unsigned int dq_lcd_bdl_value_wdq_max_b[4];
-unsigned int dq_lcd_bdl_value_rdqs_min_b[4];
-unsigned int dq_lcd_bdl_value_rdqs_max_b[4];
-unsigned int dq_lcd_bdl_value_wdq_status_b[4];
-unsigned int dq_lcd_bdl_value_rdqs_status_b[4];
-unsigned int acbdlr0_9_reg_org[10];
-unsigned int acbdlr0_9_reg_setup_max[40];
-unsigned int acbdlr0_9_reg_hold_max[40];
-unsigned int acbdlr0_9_reg_setup_time[40];
-unsigned int acbdlr0_9_reg_hold_time[40];
-// unsigned int data_bdlr0_5_reg_org[6];
-unsigned int data_bdlr0_5_reg_org[28];//4//4lane
-unsigned int bdlr0_9_reg_setup_max[24*4];//4//4 lane 96 bdlr
-unsigned int bdlr0_9_reg_hold_max[24*4];
-unsigned int bdlr0_9_reg_setup_time[24*4];
-unsigned int bdlr0_9_reg_hold_time[24*4];
-
-#define readl(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
-#define writel(data ,addr) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-
-#define wr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rd_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
-
-//#define CONFIG_DDR_CMD_BDL_TUNE
-//#define CONFIG_CMD_DDR_TEST
-
-#ifndef CONFIG_CHIP
-//#define CONFIG_CHIP CHIP_OLD //CHIP_OLD// //#define CHIP_OLD 0 //#define CHIP_TXLX 1
-#define CHIP_OLD 0
-#define CHIP_TXLX 1
-#define CHIP_A113 2
-#define CHIP_G12 3
-#define CONFIG_CHIP CHIP_G12// CHIP_OLD//
-#endif
-
-#define P_DDR_PHY_DEFAULT 0
-#define P_DDR_PHY_GX_BABY 1
-#define P_DDR_PHY_GX_TV_BABY 2
-#define P_DDR_PHY_905X 3
-
-//#define P_DDR_PHY_OLD_TAG 0
-#define P_DDR_PHY_G12 4
-
-#if (CONFIG_CHIP>=CHIP_G12)
-#define CONFIG_DDR_PHY P_DDR_PHY_G12
-#else
-//#define CONFIG_CHIP CHIP_OLD//
-//#define CONFIG_DDR_PHY P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
-//#define CONFIG_DDR_PHY P_DDR_PHY_G12//P_DDR_PHY_DEFAULT// P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
-#define CONFIG_DDR_PHY P_DDR_PHY_905X//P_DDR_PHY_DEFAULT// P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
-//#define CONFIG_DDR_PHY_NEW_TAG1 P_DDR_PHY_G12
-#endif
-
-#define G12_AM_DDR_PLL_CNTL0 0xff638c00
-
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
-#include <asm/arch/secure_apb.h>
-#endif
-
-#define PATTERN_USE_DDR_DES
-#define USE_64BIT_POINTER
-//#define USE_32BIT_POINTER
-#ifdef USE_64BIT_POINTER
-#define p_convter_int(a) ( unsigned int )( unsigned long )(a)
-#define int_convter_p(a) ( unsigned long )(a)
-
-#else
-#define p_convter_int(a) ( unsigned int )(a)
-#define int_convter_p(a) ( unsigned int )(a)
-#endif
-
-#ifdef PATTERN_USE_DDR_DES
-#define des_pattern(a,b,c,d) (des[a]^pattern_##b[c][d])
-#define des_inv_pattern(a,b,c,d) ( des[a]^(~(pattern_##b[c][d])))
-#define des_xor_pattern(a,b) ( a^b)
-//des[temp_i]^pattern_2[temp_k][temp_i]
-#else
-#define des_pattern(a,b,c,d) (des[a]&0)+pattern_##b[c][d]
-#define des_inv_pattern(a,b,c,d) (des[a]&0)+~(pattern_##b[c][d])
-#define des_xor_pattern(a,b) (a&0+b)
-#endif
-
-
-#define DDR_LCDLR_CK_USE_FAST_PATTERN
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
-#define DDR_PREFETCH_CACHE
-#endif
-#ifdef DDR_PREFETCH_CACHE
-#define ddr_pld_cache(P) asm ("prfm PLDL1KEEP, [%0, #376]"::"r" (P))
-#else
-#define ddr_pld_cache(P)
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
-#define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR1_PUB_REG_BASE 0xc8836000
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0x2000
-#define P_DDR0_CLK_CTRL 0xc8836c00
-#define P_DDR1_CLK_CTRL 0xc8836c00
-#define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
-#define OPEN_CHANNEL_B_PHY_CLK() (writel((0), 0xc8836c00))
-#define CLOSE_CHANNEL_A_PHY_CLK() (writel((5), 0xc8836c00))
-#define CLOSE_CHANNEL_B_PHY_CLK() (writel((5), 0xc8836c00))
-// #define P_ISA_TIMERE 0xc1109988
-// #define get_us_time() (readl(P_ISA_TIMERE))
-#define AM_DDR_PLL_CNTL 0xc8836800
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
-
-#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
-#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
-#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
-
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x95<<2))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x96<<2))
-#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE+(0x97<<2))
-//0x98 reserved)
-#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x99<<2))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x9A<<2))
-#define DDR0_PUB_ZQ2SR (DDR0_PUB_REG_BASE+(0x9B<<2))
-//0x9c reserved)
-#define DDR0_PUB_ZQ3PR (DDR0_PUB_REG_BASE+(0x9D<<2))
-#define DDR0_PUB_ZQ3DR (DDR0_PUB_REG_BASE+(0x9E<<2))
-#define DDR0_PUB_ZQ3SR (DDR0_PUB_REG_BASE+(0x9F<<2))
-#define ACBDLR_MAX 0X1F
-#define ACLCDLR_MAX 0XFF
-#define DQBDLR_MAX 0X1F
-#define DQLCDLR_MAX 0XFF
-#define DXNGTR_MAX 0X7
-#define ACBDLR_NUM 10
-#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
-
-
-#define DMC_REG_BASE 0xc8838000
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
- //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
- //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
- //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
- //bit 19:16. qos monitor channel select. select one at one time only.
- //bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
- // qos_mon_clk_timer. How long to measure the bandwidth.
-
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
- // at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
- // at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
-
-
-#elif (CONFIG_DDR_PHY == P_DDR_PHY_GX_TV_BABY)
-#define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR1_PUB_REG_BASE 0xc8837000
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0x1000
-#define P_DDR0_CLK_CTRL 0xc8836c00
-#define P_DDR1_CLK_CTRL 0xc8836c00
-#define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
-#define OPEN_CHANNEL_B_PHY_CLK() (writel((0), 0xc8837c00))
-#define CLOSE_CHANNEL_A_PHY_CLK() (writel((0x12a), 0xc8836c00))
-#define CLOSE_CHANNEL_B_PHY_CLK() (writel((0x12a), 0xc8837c00))
-// #define P_ISA_TIMERE 0xc1109988
-// #define get_us_time() (readl(P_ISA_TIMERE) )
-#define AM_DDR_PLL_CNTL 0xc8836800
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
-#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
-#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
-#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
-
-#define DDR0_PUB_ZQ0SR (DDR0_PUB_REG_BASE+(0x93<<2))
-//0x94 reserved)
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x95<<2))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x96<<2))
-#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE+(0x97<<2))
-//0x98 reserved)
-#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x99<<2))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x9A<<2))
-#define DDR0_PUB_ZQ2SR (DDR0_PUB_REG_BASE+(0x9B<<2))
-//0x9c reserved)
-#define DDR0_PUB_ZQ3PR (DDR0_PUB_REG_BASE+(0x9D<<2))
-#define DDR0_PUB_ZQ3DR (DDR0_PUB_REG_BASE+(0x9E<<2))
-#define DDR0_PUB_ZQ3SR (DDR0_PUB_REG_BASE+(0x9F<<2))
-#define ACBDLR_MAX 0X1F
-#define ACLCDLR_MAX 0XFF
-#define DQBDLR_MAX 0X1F
-#define DQLCDLR_MAX 0XFF
-#define DXNGTR_MAX 0X7
-#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
-#define DMC_REG_BASE 0xc8838000
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
- //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
- //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
- //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
- //bit 19:16. qos monitor channel select. select one at one time only.
- //bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
- // qos_mon_clk_timer. How long to measure the bandwidth.
-
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
- // at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
- // at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
- // at the test period, the granted data cycles for the selected channel and ports.
-
-#elif (CONFIG_DDR_PHY == P_DDR_PHY_905X)
-
- // #define P_ISA_TIMERE 0xc1109988
- // #define get_us_time() (readl(P_ISA_TIMERE) )
-#if CONFIG_CHIP >=CHIP_TXLX
-#define DDR0_PUB_REG_BASE ((0x0000 << 2) + 0xff636000)//DDR0_PUB_RIDR
-#define DDR1_PUB_REG_BASE ((0x0000 << 2) + 0xff636000)//DDR0_PUB_RIDR
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0//0x1000
-#define MMC_REG_BASE ((0x0000 << 2) + 0xff637000) // #define AM_DDR_PLL_CNTL0 ((0x0000 << 2) + 0xff637000) 0xc8837000
-#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
-#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
-#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
-#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-
-#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
-#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
-#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
-
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
-#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
-
-#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
-#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
-
-#define DDR0_PUB_DX0GCR0 ((0x01c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x0200 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x0240 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
-
-#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
-
-#define ACBDLR_MAX 0X3F
-#define ACLCDLR_MAX 0X1FF
-#define DQBDLR_MAX 0X3F
-#define DQLCDLR_MAX 0X1FF
-#define DXNGTR_MAX 0X1F
-
- // #define DMC_REG_BASE MMC_REG_BASE
-
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
- //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
- //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
- //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
- //bit 19:16. qos monitor channel select. select one at one time only.
- //bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
-// qos_mon_clk_timer. How long to measure the bandwidth.
-
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
- // at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
- // at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
- // at the test period, the granted data cycles for the selected channel and ports.
-
-#else
-#define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR1_PUB_REG_BASE 0xc8836000
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0//0x1000
-#define MMC_REG_BASE 0xc8837000
-#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
-#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
-#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
-#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-
-#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
-#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
-#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
-
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
-#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
-
-#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
-#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
-
-#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
-
-#define ACBDLR_MAX 0X3F
-#define ACLCDLR_MAX 0X1FF
-#define DQBDLR_MAX 0X3F
-#define DQLCDLR_MAX 0X1FF
-#define DXNGTR_MAX 0X1F
-#define DDR0_PUB_DX0GCR0 ((0x1c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x200 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x240 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
-#ifndef DMC_REG_BASE
-#define DMC_REG_BASE MMC_REG_BASE
-#endif
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
-//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
-//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
-//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
-//bit 19:16. qos monitor channel select. select one at one time only.
-//bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
-// qos_mon_clk_timer. How long to measure the bandwidth.
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
-// at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
-// at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
-// at the test period, the granted data cycles for the selected channel and ports.
-#endif
-
-#elif (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
-
-#define DDR0_PUB_REG_BASE 0xc8001000 //0xc8836000
-#define DDR1_PUB_REG_BASE 0xc8001000 // 0xc8836000
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0x2000
-#define P_DDR0_CLK_CTRL 0xc8000800
-#define P_DDR1_CLK_CTRL 0xc8002800
-#define OPEN_CHANNEL_A_PHY_CLK() (writel((0x12b), 0xc8000800))
-#define OPEN_CHANNEL_B_PHY_CLK() (writel((0x12b), 0xc8002800))
-#define CLOSE_CHANNEL_A_PHY_CLK() (writel((0x12a), 0xc8000800))
-#define CLOSE_CHANNEL_B_PHY_CLK() (writel((0x12a), 0xc8002800))
-// #define P_ISA_TIMERE 0xc1109988
-// #define get_us_time() (readl(P_ISA_TIMERE))
-
-#define PREG_STICKY_REG0 0xc1100000+(0x207c<<2)
-#define PREG_STICKY_REG1 0xc1100000+(0x207d<<2)
-#define WATCHDOG_TC 0xc1100000+(0x2640<<2)// 0x2640
-
-#define AM_DDR_PLL_CNTL 0xc8000400
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x91<<2))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x92<<2))
-#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x91<<2))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x92<<2))
-#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
-#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
-#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
-#define ACBDLR_MAX 0X1F
-#define ACLCDLR_MAX 0XFF
-#define DQBDLR_MAX 0X1F
-#define DQLCDLR_MAX 0XFF
-#define DXNGTR_MAX 0X7
-#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
-#define DMC_REG_BASE 0xc8006000
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
-//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
-//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
-//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
-//bit 19:16. qos monitor channel select. select one at one time only.
-//bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
-// qos_mon_clk_timer. How long to measure the bandwidth.
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
-// at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
-// at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
-// at the test period, the granted data cycles for the selected channel and ports.
-
-
-
-#elif (CONFIG_DDR_PHY == P_DDR_PHY_G12)
-#define DDR0_PUB_REG_BASE 0xff636000
-#define DDR1_PUB_REG_BASE 0xff636000
-#define CHANNEL_A_REG_BASE 0
-#define CHANNEL_B_REG_BASE 0//0x1000
-#define MMC_REG_BASE 0xff637000
-#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
-#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
-#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
-#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
-
-#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
-#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
-#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
-#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
-#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
-#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
-
-#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
-#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
-#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
-
-#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
-#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
-#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
-
-#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
-#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
-
-#define ACBDLR_MAX 0X3F
-#define ACLCDLR_MAX 0X1FF
-#define DQBDLR_MAX 0X3F
-#define DQLCDLR_MAX 0X1FF
-#define DXNGTR_MAX 0X1F
-#define DDR0_PUB_DX0GCR0 ((0x1c0 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX1GCR0 ((0x200 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX2GCR0 ((0x240 << 2) + DDR0_PUB_REG_BASE)
-#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
-#ifndef DMC_REG_BASE
-#define DMC_REG_BASE MMC_REG_BASE
-#endif
-#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
-//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
-//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
-//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
-//bit 19:16. qos monitor channel select. select one at one time only.
-//bit 15:0. port select for the selected channel.
-#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
-// qos_mon_clk_timer. How long to measure the bandwidth.
-
-
-#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
-// at the test period, the whole MMC request time.
-#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
- // at the test period, the whole MMC granted data cycles. 64bits unit.
-#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
- // at the test period, the granted data cycles for the selected channel and ports.
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
-#define DDR0_PUB_PIR (DDR0_PUB_REG_BASE+(0x01<<2))
-#define DDR0_PUB_PGCR0 (DDR0_PUB_REG_BASE + ( 0x004 << 2 ))// R/W - PHY General Configuration Register 0
-#define DDR0_PUB_PGCR1 ( DDR0_PUB_REG_BASE + ( 0x005 << 2 )) // R/W - PHY General Configuration Register 1
-#define DDR0_PUB_PGCR2 (DDR0_PUB_REG_BASE + ( 0x006 << 2 )) // R/W - PHY General Configuration Register 2
-#define DDR0_PUB_PGCR3 ( DDR0_PUB_REG_BASE + ( 0x007 << 2 )) // R/W - PHY General Configuration Register 3
-#define DDR0_PUB_PGCR4 ( DDR0_PUB_REG_BASE + ( 0x008 << 2 )) // R/W - PHY General Configuration Register 4
-#define DDR0_PUB_PGCR5 (DDR0_PUB_REG_BASE + ( 0x009 << 2 )) // R/W - PHY General Configuration Register 5
-#define DDR0_PUB_PGCR6 (DDR0_PUB_REG_BASE + ( 0x00A << 2 )) // R/W - PHY General Configuration Register 6
-#define DDR0_PUB_PGCR7 (DDR0_PUB_REG_BASE + ( 0x00B << 2 )) // R/W - PHY General Configuration Register 7
-#define DDR0_PUB_PGCR8 (DDR0_PUB_REG_BASE + ( 0x00C << 2 )) // R/W - PHY General Configuration Register 8
-
-#define DDR1_PUB_PIR (DDR1_PUB_REG_BASE+(0x01<<2))
-#define DDR1_PUB_PGCR0 (DDR0_PUB_REG_BASE + ( 0x004 << 2 )) // R/W - PHY General Configuration Register 0
-#define DDR1_PUB_PGCR1 (DDR0_PUB_REG_BASE + ( 0x005 << 2 )) // R/W - PHY General Configuration Register 1
-#define DDR1_PUB_PGCR2 ( DDR0_PUB_REG_BASE + ( 0x006 << 2 )) // R/W - PHY General Configuration Register 2
-#define DDR1_PUB_PGCR3 (DDR0_PUB_REG_BASE + ( 0x007 << 2 )) // R/W - PHY General Configuration Register 3
-#define DDR1_PUB_PGCR4 (DDR0_PUB_REG_BASE + ( 0x008 << 2 ) )// R/W - PHY General Configuration Register 4
-#define DDR1_PUB_PGCR5 (DDR0_PUB_REG_BASE + ( 0x009 << 2 )) // R/W - PHY General Configuration Register 5
-#define DDR1_PUB_PGCR6 (DDR0_PUB_REG_BASE + ( 0x00A << 2 )) // R/W - PHY General Configuration Register 6
-#define DDR1_PUB_PGCR7 (DDR0_PUB_REG_BASE + ( 0x00B << 2 )) // R/W - PHY General Configuration Register 7
-#define DDR1_PUB_PGCR8 (DDR0_PUB_REG_BASE + ( 0x00C << 2 ) )// R/W - PHY General Configuration Register 8
-
-#define DDR0_PUB_DX0BDLR0 (DDR0_PUB_REG_BASE + ( 0x1d0 << 2 ))
-#define DDR0_PUB_DX0BDLR1 (DDR0_PUB_REG_BASE + ( 0x1d1 << 2 ))
-#define DDR0_PUB_DX0BDLR2 ( DDR0_PUB_REG_BASE + ( 0x1d2 << 2 ))
-#define DDR0_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE + ( 0x1d4 << 2 ))
-#define DDR0_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE + ( 0x1d5 << 2 ))
-#define DDR0_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE + ( 0x1d6 << 2 ))
-#define DDR0_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE + ( 0x1d8 << 2 ))
-#define DDR0_PUB_DX0LCDLR0 (DDR0_PUB_REG_BASE + ( 0x1e0 << 2 ))
-#define DDR0_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE + ( 0x1e1 << 2 ))
-#define DDR0_PUB_DX0LCDLR2 (DDR0_PUB_REG_BASE + ( 0x1e2 << 2 ))
-#define DDR0_PUB_DX0LCDLR3 (DDR0_PUB_REG_BASE + ( 0x1e3 << 2 ))
-#define DDR0_PUB_DX0LCDLR4 (DDR0_PUB_REG_BASE + ( 0x1e4 << 2 ))
-#define DDR0_PUB_DX0LCDLR5 (DDR0_PUB_REG_BASE + ( 0x1e5 << 2 ))
-#define DDR0_PUB_DX0MDLR0 (DDR0_PUB_REG_BASE + ( 0x1e8 << 2 ))
-#define DDR0_PUB_DX0MDLR1 (DDR0_PUB_REG_BASE + ( 0x1e9 << 2) )
-#define DDR0_PUB_DX0GTR0 (DDR0_PUB_REG_BASE + ( 0x1f0 << 2 ))
-#define DDR0_PUB_DX0GTR1 (DDR0_PUB_REG_BASE + ( 0x1f1 << 2) )
-#define DDR0_PUB_DX0GTR2 (DDR0_PUB_REG_BASE + ( 0x1f2 << 2) )
-#define DDR0_PUB_DX0GTR3 (DDR0_PUB_REG_BASE + ( 0x1f3 << 2))
-
-#define DDR0_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE + ( 0x210 << 2) )
-#define DDR0_PUB_DX1BDLR1 (DDR0_PUB_REG_BASE + ( 0x211 << 2) )
-#define DDR0_PUB_DX1BDLR2 (DDR0_PUB_REG_BASE + ( 0x212 << 2) )
-#define DDR0_PUB_DX1BDLR3 (DDR0_PUB_REG_BASE + ( 0x214 << 2) )
-#define DDR0_PUB_DX1BDLR4 (DDR0_PUB_REG_BASE + ( 0x215 << 2) )
-#define DDR0_PUB_DX1BDLR5 ( DDR0_PUB_REG_BASE + ( 0x216 << 2) )
-#define DDR0_PUB_DX1BDLR6 ( DDR0_PUB_REG_BASE + ( 0x218 << 2) )
-#define DDR0_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE + ( 0x220 << 2) )
-#define DDR0_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE + ( 0x221 << 2) )
-#define DDR0_PUB_DX1LCDLR2 (DDR0_PUB_REG_BASE + ( 0x222 << 2) )
-#define DDR0_PUB_DX1LCDLR3 (DDR0_PUB_REG_BASE + ( 0x223 << 2) )
-#define DDR0_PUB_DX1LCDLR4 (DDR0_PUB_REG_BASE + ( 0x224 << 2) )
-#define DDR0_PUB_DX1LCDLR5 (DDR0_PUB_REG_BASE + ( 0x225 << 2) )
-#define DDR0_PUB_DX1MDLR0 (DDR0_PUB_REG_BASE + ( 0x228 << 2) )
-#define DDR0_PUB_DX1MDLR1 (DDR0_PUB_REG_BASE + ( 0x229 << 2) )
-#define DDR0_PUB_DX1GTR0 (DDR0_PUB_REG_BASE + ( 0x230 << 2 ))
-#define DDR0_PUB_DX1GTR1 (DDR0_PUB_REG_BASE + ( 0x231 << 2) )
-#define DDR0_PUB_DX1GTR2 (DDR0_PUB_REG_BASE + ( 0x232 << 2) )
-#define DDR0_PUB_DX1GTR3 (DDR0_PUB_REG_BASE + ( 0x233 << 2) )
-
-#define DDR0_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE + ( 0x250 << 2) )
-#define DDR0_PUB_DX2BDLR1 (DDR0_PUB_REG_BASE + ( 0x251 << 2) )
-#define DDR0_PUB_DX2BDLR2 (DDR0_PUB_REG_BASE + ( 0x252 << 2) )
-#define DDR0_PUB_DX2BDLR3 (DDR0_PUB_REG_BASE + ( 0x254 << 2) )
-#define DDR0_PUB_DX2BDLR4 (DDR0_PUB_REG_BASE + ( 0x255 << 2) )
-#define DDR0_PUB_DX2BDLR5 (DDR0_PUB_REG_BASE + ( 0x256 << 2) )
-#define DDR0_PUB_DX2BDLR6 (DDR0_PUB_REG_BASE + ( 0x258 << 2) )
-#define DDR0_PUB_DX2LCDLR0 ( DDR0_PUB_REG_BASE + ( 0x260 << 2) )
-#define DDR0_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE + ( 0x261 << 2) )
-#define DDR0_PUB_DX2LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x262 << 2) )
-#define DDR0_PUB_DX2LCDLR3 (DDR0_PUB_REG_BASE + ( 0x263 << 2) )
-#define DDR0_PUB_DX2LCDLR4 (DDR0_PUB_REG_BASE + ( 0x264 << 2) )
-#define DDR0_PUB_DX2LCDLR5 ( DDR0_PUB_REG_BASE + ( 0x265 << 2) )
-#define DDR0_PUB_DX2MDLR0 (DDR0_PUB_REG_BASE + ( 0x268 << 2) )
-#define DDR0_PUB_DX2MDLR1 (DDR0_PUB_REG_BASE + ( 0x269 << 2) )
-#define DDR0_PUB_DX2GTR0 ( DDR0_PUB_REG_BASE + ( 0x270 << 2 ))
-#define DDR0_PUB_DX2GTR1 (DDR0_PUB_REG_BASE + ( 0x271 << 2) )
-#define DDR0_PUB_DX2GTR2 (DDR0_PUB_REG_BASE + ( 0x272 << 2) )
-#define DDR0_PUB_DX2GTR3 (DDR0_PUB_REG_BASE + ( 0x273 << 2) )
-
-#define DDR0_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE + ( 0x290 << 2) )
-#define DDR0_PUB_DX3BDLR1 (DDR0_PUB_REG_BASE + ( 0x291 << 2) )
-#define DDR0_PUB_DX3BDLR2 (DDR0_PUB_REG_BASE + ( 0x292 << 2) )
-#define DDR0_PUB_DX3BDLR3 (DDR0_PUB_REG_BASE + ( 0x294 << 2) )
-#define DDR0_PUB_DX3BDLR4 (DDR0_PUB_REG_BASE + ( 0x295 << 2) )
-#define DDR0_PUB_DX3BDLR5 (DDR0_PUB_REG_BASE + ( 0x296 << 2) )
-#define DDR0_PUB_DX3BDLR6 (DDR0_PUB_REG_BASE + ( 0x298 << 2) )
-#define DDR0_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE + ( 0x2a0 << 2) )
-#define DDR0_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE + ( 0x2a1 << 2) )
-#define DDR0_PUB_DX3LCDLR2 (DDR0_PUB_REG_BASE + ( 0x2a2 << 2) )
-#define DDR0_PUB_DX3LCDLR3 (DDR0_PUB_REG_BASE + ( 0x2a3 << 2) )
-#define DDR0_PUB_DX3LCDLR4 (DDR0_PUB_REG_BASE + ( 0x2a4 << 2) )
-#define DDR0_PUB_DX3LCDLR5 (DDR0_PUB_REG_BASE + ( 0x2a5 << 2) )
-#define DDR0_PUB_DX3MDLR0 (DDR0_PUB_REG_BASE + ( 0x2a8 << 2) )
-#define DDR0_PUB_DX3MDLR1 (DDR0_PUB_REG_BASE + ( 0x2a9 << 2) )
-#define DDR0_PUB_DX3GTR0 (DDR0_PUB_REG_BASE + ( 0x2b0 << 2 ))
-#define DDR0_PUB_DX3GTR1 ( DDR0_PUB_REG_BASE + ( 0x2b1 << 2) )
-#define DDR0_PUB_DX3GTR2 ( DDR0_PUB_REG_BASE + ( 0x2b2 << 2) )
-#define DDR0_PUB_DX3GTR3 ( DDR0_PUB_REG_BASE + ( 0x2b3 << 2) )
-
-#define DDR1_PUB_DX0BDLR0 ( DDR0_PUB_REG_BASE + ( 0x1d0 << 2) )
-#define DDR1_PUB_DX0BDLR1 ( DDR0_PUB_REG_BASE + ( 0x1d1 << 2) )
-#define DDR1_PUB_DX0BDLR2 (DDR0_PUB_REG_BASE + ( 0x1d2 << 2 ))
-#define DDR1_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE + ( 0x1d4 << 2 ))
-#define DDR1_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE + ( 0x1d5 << 2) )
-#define DDR1_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE + ( 0x1d6 << 2) )
-#define DDR1_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE + ( 0x1d8 << 2) )
-#define DDR1_PUB_DX0LCDLR0 ( DDR0_PUB_REG_BASE + ( 0x1e0 << 2) )
-#define DDR1_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE + ( 0x1e1 << 2 ))
-#define DDR1_PUB_DX0LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x1e2 << 2) )
-#define DDR1_PUB_DX0LCDLR3 (DDR0_PUB_REG_BASE + ( 0x1e3 << 2 ))
-#define DDR1_PUB_DX0LCDLR4 ( DDR0_PUB_REG_BASE + ( 0x1e4 << 2) )
-#define DDR1_PUB_DX0LCDLR5 (DDR0_PUB_REG_BASE + ( 0x1e5 << 2 ))
-#define DDR1_PUB_DX0MDLR0 (DDR0_PUB_REG_BASE + ( 0x1e8 << 2 ))
-#define DDR1_PUB_DX0MDLR1 (DDR0_PUB_REG_BASE + ( 0x1e9 << 2 ))
-#define DDR1_PUB_DX0GTR0 (DDR0_PUB_REG_BASE + ( 0x1f0 << 2 ))
-#define DDR1_PUB_DX0GTR1 (DDR0_PUB_REG_BASE + ( 0x1f1 << 2) )
-#define DDR1_PUB_DX0GTR2 (DDR0_PUB_REG_BASE + ( 0x1f2 << 2) )
-#define DDR1_PUB_DX0GTR3 (DDR0_PUB_REG_BASE + ( 0x1f3 << 2))
-
-#define DDR1_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE + ( 0x210 << 2 ))
-#define DDR1_PUB_DX1BDLR1 (DDR0_PUB_REG_BASE + ( 0x211 << 2 ))
-#define DDR1_PUB_DX1BDLR2 (DDR0_PUB_REG_BASE + ( 0x212 << 2 ))
-#define DDR1_PUB_DX1BDLR3 (DDR0_PUB_REG_BASE + ( 0x214 << 2 ))
-#define DDR1_PUB_DX1BDLR4 (DDR0_PUB_REG_BASE + ( 0x215 << 2 ))
-#define DDR1_PUB_DX1BDLR5 (DDR0_PUB_REG_BASE + ( 0x216 << 2 ))
-#define DDR1_PUB_DX1BDLR6 (DDR0_PUB_REG_BASE + ( 0x218 << 2 ))
-#define DDR1_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE + ( 0x220 << 2 ))
-#define DDR1_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE + ( 0x221 << 2 ))
-#define DDR1_PUB_DX1LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x222 << 2 ))
-#define DDR1_PUB_DX1LCDLR3 (DDR0_PUB_REG_BASE + ( 0x223 << 2 ))
-#define DDR1_PUB_DX1LCDLR4 ( DDR0_PUB_REG_BASE + ( 0x224 << 2 ))
-#define DDR1_PUB_DX1LCDLR5 (DDR0_PUB_REG_BASE + ( 0x225 << 2 ))
-#define DDR1_PUB_DX1MDLR0 (DDR0_PUB_REG_BASE + ( 0x228 << 2 ))
-#define DDR1_PUB_DX1MDLR1 (DDR0_PUB_REG_BASE + ( 0x229 << 2 ))
-#define DDR1_PUB_DX1GTR0 (DDR0_PUB_REG_BASE + ( 0x230 << 2 ))
-#define DDR1_PUB_DX1GTR1 (DDR0_PUB_REG_BASE + ( 0x231 << 2 ))
-#define DDR1_PUB_DX1GTR2 (DDR0_PUB_REG_BASE + ( 0x232 << 2 ))
-#define DDR1_PUB_DX1GTR3 (DDR0_PUB_REG_BASE + ( 0x233 << 2 ))
-
-#define DDR1_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE + ( 0x250 << 2 ))
-#define DDR1_PUB_DX2BDLR1 (DDR0_PUB_REG_BASE + ( 0x251 << 2 ))
-#define DDR1_PUB_DX2BDLR2 (DDR0_PUB_REG_BASE + ( 0x252 << 2 ))
-#define DDR1_PUB_DX2BDLR3 (DDR0_PUB_REG_BASE + ( 0x254 << 2 ))
-#define DDR1_PUB_DX2BDLR4 (DDR0_PUB_REG_BASE + ( 0x255 << 2 ))
-#define DDR1_PUB_DX2BDLR5 (DDR0_PUB_REG_BASE + ( 0x256 << 2 ))
-#define DDR1_PUB_DX2BDLR6 (DDR0_PUB_REG_BASE + ( 0x258 << 2 ))
-#define DDR1_PUB_DX2LCDLR0 (DDR0_PUB_REG_BASE + ( 0x260 << 2 ))
-#define DDR1_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE + ( 0x261 << 2 ))
-#define DDR1_PUB_DX2LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x262 << 2 ))
-#define DDR1_PUB_DX2LCDLR3 (DDR0_PUB_REG_BASE + ( 0x263 << 2 ))
-#define DDR1_PUB_DX2LCDLR4 (DDR0_PUB_REG_BASE + ( 0x264 << 2 ))
-#define DDR1_PUB_DX2LCDLR5 (DDR0_PUB_REG_BASE + ( 0x265 << 2 ))
-#define DDR1_PUB_DX2MDLR0 (DDR0_PUB_REG_BASE + ( 0x268 << 2 ))
-#define DDR1_PUB_DX2MDLR1 (DDR0_PUB_REG_BASE + ( 0x269 << 2 ))
-#define DDR1_PUB_DX2GTR0 (DDR0_PUB_REG_BASE + ( 0x270 << 2 ))
-#define DDR1_PUB_DX2GTR1 (DDR0_PUB_REG_BASE + ( 0x271 << 2 ))
-#define DDR1_PUB_DX2GTR2 (DDR0_PUB_REG_BASE + ( 0x272 << 2 ))
-#define DDR1_PUB_DX2GTR3 (DDR0_PUB_REG_BASE + ( 0x273 << 2 ))
-
-#define DDR1_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE + ( 0x290 << 2 ))
-#define DDR1_PUB_DX3BDLR1 (DDR0_PUB_REG_BASE + ( 0x291 << 2 ))
-#define DDR1_PUB_DX3BDLR2 (DDR0_PUB_REG_BASE + ( 0x292 << 2 ))
-#define DDR1_PUB_DX3BDLR3 (DDR0_PUB_REG_BASE + ( 0x294 << 2 ))
-#define DDR1_PUB_DX3BDLR4 (DDR0_PUB_REG_BASE + ( 0x295 << 2 ))
-#define DDR1_PUB_DX3BDLR5 (DDR0_PUB_REG_BASE + ( 0x296 << 2 ))
-#define DDR1_PUB_DX3BDLR6 (DDR0_PUB_REG_BASE + ( 0x298 << 2 ))
-#define DDR1_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE + ( 0x2a0 << 2 ))
-#define DDR1_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE + ( 0x2a1 << 2 ))
-#define DDR1_PUB_DX3LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x2a2 << 2 ))
-#define DDR1_PUB_DX3LCDLR3 (DDR0_PUB_REG_BASE + ( 0x2a3 << 2 ))
-#define DDR1_PUB_DX3LCDLR4 (DDR0_PUB_REG_BASE + ( 0x2a4 << 2 ))
-#define DDR1_PUB_DX3LCDLR5 ( DDR0_PUB_REG_BASE + ( 0x2a5 << 2 ))
-#define DDR1_PUB_DX3MDLR0 (DDR0_PUB_REG_BASE + ( 0x2a8 << 2 ))
-#define DDR1_PUB_DX3MDLR1 (DDR0_PUB_REG_BASE + ( 0x2a9 << 2 ))
-#define DDR1_PUB_DX3GTR0 (DDR0_PUB_REG_BASE + ( 0x2b0 << 2 ))
-#define DDR1_PUB_DX3GTR1 (DDR0_PUB_REG_BASE + ( 0x2b1 << 2 ))
-#define DDR1_PUB_DX3GTR2 (DDR0_PUB_REG_BASE + ( 0x2b2 << 2 ))
-#define DDR1_PUB_DX3GTR3 (DDR0_PUB_REG_BASE + ( 0x2b3 << 2 ))
-
-
-#define DDR0_PUB_ACLCDLR (DDR0_PUB_REG_BASE + ( 0x160 << 2 )) // R/W - LC Delay Line Present Register
-#define DDR0_PUB_ACMDLR0 ( DDR0_PUB_REG_BASE + ( 0x168 << 2 )) // R/W - AC Master Delay Line Register 0
-#define DDR0_PUB_ACMDLR1 ( DDR0_PUB_REG_BASE + ( 0x169 << 2 )) // R/W - Master Delay Line Register 1
-#define DDR0_PUB_ACBDLR0 (DDR0_PUB_REG_BASE + ( 0x150 << 2 )) // R/W - AC Bit Delay Line Register 0
-#define DDR0_PUB_ACBDLR3 ( DDR0_PUB_REG_BASE + ( 0x153 << 2 ) ) // R/W - AC Bit Delay Line Register 3
-
-#define DDR1_PUB_ACLCDLR (DDR0_PUB_REG_BASE + ( 0x160 << 2 ) )// R/W - LC Delay Line Present Register
-#define DDR1_PUB_ACMDLR0 ( DDR0_PUB_REG_BASE + ( 0x168 << 2 )) // R/W - AC Master Delay Line Register 0
-#define DDR1_PUB_ACMDLR1 ( DDR0_PUB_REG_BASE + ( 0x169 << 2 )) // R/W - Master Delay Line Register 1
-#define DDR1_PUB_ACBDLR0 ( DDR0_PUB_REG_BASE + ( 0x150 << 2 ) )// R/W - AC Bit Delay Line Register 0
-
-
-#define DDR0_PUB_ACMDLR DDR0_PUB_ACMDLR0
-#define DDR1_PUB_ACMDLR DDR1_PUB_ACMDLR0
-#define DDR0_PUB_DX0GTR DDR0_PUB_DX0GTR0
-#define DDR0_PUB_DX1GTR DDR0_PUB_DX1GTR0
-#define DDR0_PUB_DX2GTR DDR0_PUB_DX2GTR0
-#define DDR0_PUB_DX3GTR DDR0_PUB_DX3GTR0
-#define DDR1_PUB_DX0GTR DDR0_PUB_DX0GTR0
-#define DDR1_PUB_DX1GTR DDR0_PUB_DX1GTR0
-#define DDR1_PUB_DX2GTR DDR0_PUB_DX2GTR0
-#define DDR1_PUB_DX3GTR DDR0_PUB_DX3GTR0
-
-
-#define DDR0_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 )) // R/W - IO VREF Control Register 0
-#define DDR0_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 )) // R/W - IO VREF Control Register 1
-#define DDR0_PUB_VTCR0 ( DDR0_PUB_REG_BASE + ( 0x14A << 2 ) )// R/W - VREF Training Control Register 0
-#define DDR0_PUB_VTCR1 ( DDR0_PUB_REG_BASE + ( 0x14B << 2 )) // R/W - VREF Training Control Register 1
-#define DDR1_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 )) // R/W - IO VREF Control Register 0
-#define DDR1_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 )) // R/W - IO VREF Control Register 1
-#define DDR1_PUB_VTCR0 ( DDR0_PUB_REG_BASE + ( 0x14A << 2 )) // R/W - VREF Training Control Register 0
-#define DDR1_PUB_VTCR1 ( DDR0_PUB_REG_BASE + ( 0x14B << 2 )) // R/W - VREF Training Control Register 1
-
-//#define DDR0_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
-//#define DDR1_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
-#define DDR0_PUB_DX0GCR6 ( DDR0_PUB_REG_BASE + ( 0x1c6 << 2 ) )
-#define DDR0_PUB_DX1GCR6 ( DDR0_PUB_REG_BASE + ( 0x206 << 2 ) )
-#define DDR0_PUB_DX2GCR6 ( DDR0_PUB_REG_BASE + ( 0x246 << 2 ) )
-#define DDR0_PUB_DX3GCR6 ( DDR0_PUB_REG_BASE + ( 0x286 << 2 ) )
-#define DDR0_PUB_DCR ( DDR0_PUB_REG_BASE + ( 0x040 << 2 ) ) // R/W - DRAM Configuration Register
-#define DDR0_PUB_MR0 ( DDR0_PUB_REG_BASE + ( 0x060 << 2 ) ) // R/W - Mode Register
-#define DDR0_PUB_MR1 ( DDR0_PUB_REG_BASE + ( 0x061 << 2 ) ) // R/W - Extended Mode Register
-#define DDR0_PUB_MR2 ( DDR0_PUB_REG_BASE + ( 0x062 << 2 ) ) // R/W - Extended Mode Register 2
-#define DDR0_PUB_MR3 ( DDR0_PUB_REG_BASE + ( 0x063 << 2 ) ) // R/W - Extended Mode Register 3
-#define DDR0_PUB_MR4 ( DDR0_PUB_REG_BASE + ( 0x064 << 2 ) ) // R/W - Extended Mode Register 4
-#define DDR0_PUB_MR5 ( DDR0_PUB_REG_BASE + ( 0x065 << 2 ) ) // R/W - Extended Mode Register 5
-#define DDR0_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
-#define DDR0_PUB_MR7 ( DDR0_PUB_REG_BASE + ( 0x067 << 2 ) ) // R/W - Extended Mode Register 7
-#define DDR0_PUB_MR11 ( DDR0_PUB_REG_BASE + ( 0x06B << 2 ) ) // R/W - Extended Mode Register 11
-#define DDR0_PUB_RANKIDR ( DDR0_PUB_REG_BASE + ( 0x137 << 2 ) ) // R/W - Rank ID Register
-#define DDR0_PUB_DTCR0 ( DDR0_PUB_REG_BASE + ( 0x080 << 2 ) ) // R/W - Data Training Configuration Register
-#define DDR0_PUB_DTEDR0 ( DDR0_PUB_REG_BASE + ( 0x08C << 2 ) ) // R/W - Data Training Eye Data Register 0
-#define DDR0_PUB_DTEDR1 ( DDR0_PUB_REG_BASE + ( 0x08D << 2 ) ) // R/W - Data Training Eye Data Register 1
-#define DDR0_PUB_DTEDR2 ( DDR0_PUB_REG_BASE + ( 0x08E << 2 ) ) // R/W - Data Training Eye Data Register 2
-#define DDR0_PUB_VTDR ( DDR0_PUB_REG_BASE + ( 0x08F << 2 ) ) // R/W - Vref Training Data Register
-#else
-
-#define DDR0_PUB_PIR (DDR0_PUB_REG_BASE+(0x01<<2))
-#define DDR0_PUB_PGCR0 (DDR0_PUB_REG_BASE+(0x02<<2))
-#define DDR0_PUB_PGCR1 (DDR0_PUB_REG_BASE+(0x03<<2))
-
-#define DDR1_PUB_PIR (DDR1_PUB_REG_BASE+(0x01<<2))
-#define DDR1_PUB_PGCR0 (DDR1_PUB_REG_BASE+(0x02<<2))
-#define DDR1_PUB_PGCR1 (DDR1_PUB_REG_BASE+(0x03<<2))
-
-#define DDR0_PUB_DX0BDLR0 (DDR0_PUB_REG_BASE+(0xA7<<2))
-#define DDR0_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE+(0xC7<<2))
-#define DDR0_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE+(0xE7<<2))
-#define DDR0_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE+(0x107<<2))
-
-#define DDR0_PUB_DX0BDLR1 (DDR0_PUB_REG_BASE+(0xA8<<2))
-#define DDR0_PUB_DX0BDLR2 (DDR0_PUB_REG_BASE+(0xA9<<2))
-#define DDR0_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE+(0xAA<<2))
-#define DDR0_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE+(0xAB<<2))
-#define DDR0_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE+(0xAC<<2))
-#define DDR0_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE+(0xAD<<2))
-
-#define DDR0_PUB_DX0LCDLR0 (DDR0_PUB_REG_BASE+(0xAE<<2))
-#define DDR0_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE+(0xAF<<2))
-#define DDR0_PUB_DX0LCDLR2 (DDR0_PUB_REG_BASE+(0xB0<<2))
-#define DDR0_PUB_DX0MDLR (DDR0_PUB_REG_BASE+(0xB1<<2))
-#define DDR0_PUB_DX0GTR (DDR0_PUB_REG_BASE+(0xB2<<2))
-#define DDR0_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE+(0xCE<<2))
-#define DDR0_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE+(0xCF<<2))
-#define DDR0_PUB_DX1LCDLR2 (DDR0_PUB_REG_BASE+(0xD0<<2))
-#define DDR0_PUB_DX1MDLR (DDR0_PUB_REG_BASE+(0xD1<<2))
-#define DDR0_PUB_DX1GTR (DDR0_PUB_REG_BASE+(0xD2<<2))
-#define DDR0_PUB_DX2LCDLR0 (DDR0_PUB_REG_BASE+(0xEE<<2))
-#define DDR0_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE+(0xEF<<2))
-#define DDR0_PUB_DX2LCDLR2 (DDR0_PUB_REG_BASE+(0xF0<<2))
-#define DDR0_PUB_DX2MDLR (DDR0_PUB_REG_BASE+(0xF1<<2))
-#define DDR0_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE+(0x10E<<2))
-#define DDR0_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE+(0x10F<<2))
-#define DDR0_PUB_DX3LCDLR2 (DDR0_PUB_REG_BASE+(0x110<<2))
-#define DDR0_PUB_DX3MDLR (DDR0_PUB_REG_BASE+(0x111<<2))
-#define DDR0_PUB_DX3GTR (DDR0_PUB_REG_BASE+(0x112<<2))
-
-#define DDR1_PUB_DX0LCDLR0 (DDR1_PUB_REG_BASE+(0xAE<<2))
-#define DDR1_PUB_DX0LCDLR1 (DDR1_PUB_REG_BASE+(0xAF<<2))
-#define DDR1_PUB_DX0LCDLR2 (DDR1_PUB_REG_BASE+(0xB0<<2))
-#define DDR1_PUB_DX0MDLR (DDR1_PUB_REG_BASE+(0xB1<<2))
-#define DDR1_PUB_DX0GTR (DDR1_PUB_REG_BASE+(0xB2<<2))
-#define DDR1_PUB_DX1LCDLR0 (DDR1_PUB_REG_BASE+(0xCE<<2))
-#define DDR1_PUB_DX1LCDLR1 (DDR1_PUB_REG_BASE+(0xCF<<2))
-#define DDR1_PUB_DX1LCDLR2 (DDR1_PUB_REG_BASE+(0xD0<<2))
-#define DDR1_PUB_DX1MDLR (DDR1_PUB_REG_BASE+(0xD1<<2))
-#define DDR1_PUB_DX1GTR (DDR1_PUB_REG_BASE+(0xD2<<2))
-#define DDR1_PUB_DX2LCDLR0 (DDR1_PUB_REG_BASE+(0xEE<<2))
-#define DDR1_PUB_DX2LCDLR1 (DDR1_PUB_REG_BASE+(0xEF<<2))
-#define DDR1_PUB_DX2LCDLR2 (DDR1_PUB_REG_BASE+(0xF0<<2))
-#define DDR1_PUB_DX2MDLR (DDR1_PUB_REG_BASE+(0xF1<<2))
-#define DDR1_PUB_DX3LCDLR0 (DDR1_PUB_REG_BASE+(0x10E<<2))
-#define DDR1_PUB_DX3LCDLR1 (DDR1_PUB_REG_BASE+(0x10F<<2))
-#define DDR1_PUB_DX3LCDLR2 (DDR1_PUB_REG_BASE+(0x110<<2))
-#define DDR1_PUB_DX3MDLR (DDR1_PUB_REG_BASE+(0x111<<2))
-#define DDR1_PUB_DX3GTR (DDR1_PUB_REG_BASE+(0x112<<2))
-
-
-#define DDR0_PUB_ACMDLR (DDR0_PUB_REG_BASE+(0x0E<<2))
-#define DDR0_PUB_ACLCDLR (DDR0_PUB_REG_BASE+(0x0F<<2))
-#define DDR0_PUB_ACBDLR0 (DDR0_PUB_REG_BASE+(0x10<<2))
-#define DDR0_PUB_ACBDLR3 (DDR0_PUB_REG_BASE+(0x13<<2))
-#define DDR1_PUB_ACMDLR (DDR1_PUB_REG_BASE+(0x0E<<2))
-#define DDR1_PUB_ACLCDLR (DDR1_PUB_REG_BASE+(0x0F<<2))
-#define DDR1_PUB_ACBDLR0 (DDR1_PUB_REG_BASE+(0x10<<2))
-
-#define DDR0_PUB_ACMDLR0 DDR0_PUB_ACMDLR
-#define DDR1_PUB_ACMDLR0 DDR1_PUB_ACMDLR
-#define DDR0_PUB_DX0MDLR0 DDR0_PUB_DX0MDLR
-#define DDR0_PUB_DX1MDLR0 DDR0_PUB_DX1MDLR
-#define DDR0_PUB_DX2MDLR0 DDR0_PUB_DX2MDLR
-#define DDR0_PUB_DX3MDLR0 DDR0_PUB_DX3MDLR
-#define DDR1_PUB_DX0MDLR0 DDR0_PUB_DX0MDLR
-#define DDR1_PUB_DX1MDLR0 DDR0_PUB_DX1MDLR
-#define DDR1_PUB_DX2MDLR0 DDR0_PUB_DX2MDLR
-#define DDR1_PUB_DX3MDLR0 DDR0_PUB_DX3MDLR
-#define DDR0_PUB_DCR (DDR0_PUB_REG_BASE+(0x22<<2))
-#define DDR0_PUB_MR0 (DDR0_PUB_REG_BASE+(0x27<<2))
-#define DDR0_PUB_MR1 (DDR0_PUB_REG_BASE+(0x28<<2))
-#define DDR0_PUB_MR2 (DDR0_PUB_REG_BASE+(0x29<<2))
-#define DDR0_PUB_MR3 (DDR0_PUB_REG_BASE+(0x2A<<2))
-#define DDR0_PUB_RANKIDR ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Rank ID Register
-#define DDR0_PUB_DTCR0 ( DDR0_PUB_REG_BASE + ( 0<< 2 ) ) // R/W - Data Training Configuration Register
-#define DDR0_PUB_DTEDR0 ( DDR0_PUB_REG_BASE + ( 0x0 << 2 ) ) // R/W - Data Training Eye Data Register 0
-#define DDR0_PUB_DTEDR1 ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Data Training Eye Data Register 1
-#define DDR0_PUB_DTEDR2 ( DDR0_PUB_REG_BASE + ( 0x0 << 2 ) ) // R/W - Data Training Eye Data Register 2
-#define DDR0_PUB_VTDR ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Vref Training Data Register
-
-#ifndef P_DDR0_CLK_CTRL
-#define P_DDR0_CLK_CTRL 0xc8000800
-#endif
-#ifndef P_DDR1_CLK_CTRL
-#define P_DDR1_CLK_CTRL 0xc8002800
-#endif
-
-#define DDR0_PUB_IOVCR0 (DDR0_PUB_REG_BASE+(0x8E<<2))
-#define DDR0_PUB_IOVCR1 (DDR0_PUB_REG_BASE+(0x8F<<2))
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
-//unsigned int des[8];
-/*
- unsigned int pattern_1[4][8]=
- {
- 0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-0xff00ff00 ,
-
-};
-unsigned int pattern_2[4][8]={
-0x0001fe00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0002fd00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0004fb00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0008f700 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0010ef00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0020df00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0040bf00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x00807f00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-0x0000ff00 ,
-
-};
-unsigned int pattern_3[4][8]={
- 0x00010000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00020000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00040000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00080000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00100000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00200000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00400000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00800000 ,
- 0x00000000 ,
- 0x00000000 ,
- 0x00000000 ,
-};
-unsigned int pattern_4[4][8]={
- 0x51c8c049 ,
- 0x2d43592c ,
- 0x0777b50b ,
- 0x9cd2ebe5 ,
- 0xc04199d5 ,
- 0xdc968dc0 ,
- 0xb8ba8a33 ,
- 0x35e4327f ,
- 0x51c8c049 ,
- 0x2d43592c ,
- 0x0777b50b ,
- 0x9cd2ebe5 ,
- 0xc04199d5 ,
- 0xdc968dc0 ,
- 0xb8ba8a33 ,
- 0x35e4327f ,
- 0x51c8c049 ,
- 0x2d43592c ,
- 0x0777b50b ,
- 0x9cd2ebe5 ,
- 0xc04199d5 ,
- 0xdc968dc0 ,
- 0xb8ba8a33 ,
- 0x35e4327f ,
- 0x51c8c049 ,
- 0x2d43592c ,
- 0x0777b50b ,
- 0x9cd2ebe5 ,
- 0xc04199d5 ,
- 0xdc968dc0 ,
- 0xb8ba8a33 ,
- 0x35e4327f ,
-};
-unsigned int pattern_5[4][8]={
- 0xaec9c149 ,
- 0xd243592c ,
- 0xf877b50b ,
- 0x63d2ebe5 ,
- 0x3f439bd5 ,
- 0x23968dc0 ,
- 0x47ba8a33 ,
- 0xcae4327f ,
- 0xaeccc449 ,
- 0xd243592c ,
- 0xf877b50b ,
- 0x63d2ebe5 ,
- 0x3f4991d5 ,
- 0x23968dc0 ,
- 0x47ba8a33 ,
- 0xcae4327f ,
- 0xaed8d049 ,
- 0xd243592c ,
- 0xf877b50b ,
- 0x63d2ebe5 ,
- 0x3f61b9d5 ,
- 0x23968dc0 ,
- 0x47ba8a33 ,
- 0xcae4327f ,
- 0xae888049 ,
- 0xd243592c ,
- 0xf877b50b ,
- 0x63d2ebe5 ,
- 0x3fc119d5 ,
- 0x23968dc0 ,
- 0x47ba8a33 ,
- 0xcae4327f ,
-};
-unsigned int pattern_6[4][8]={
- 0xaec9c149 ,
- 0xd243a62c ,
- 0xf8774a0b ,
- 0x63d214e5 ,
- 0x3f4366d5 ,
- 0x239672c0 ,
- 0x47ba7533 ,
- 0xcae4cd7f ,
- 0xaecc3f49 ,
- 0xd243a62c ,
- 0xf8774a0b ,
- 0x63d214e5 ,
- 0x3f4966d5 ,
- 0x239672c0 ,
- 0x47ba7533 ,
- 0xcae4cd7f ,
- 0xaed83f49 ,
- 0xd243a62c ,
- 0xf8774a0b ,
- 0x63d214e5 ,
- 0x3f6166d5 ,
- 0x239672c0 ,
- 0x47ba7533 ,
- 0xcae4cd7f ,
- 0xae883f49 ,
- 0xd243a62c ,
- 0xf8774a0b ,
- 0x63d214e5 ,
- 0x3fc166d5 ,
- 0x239672c0 ,
- 0x47ba7533 ,
- 0xcae4cd7f ,
-
-};
-unsigned int des[8] ={
- 0xaec83f49,
- 0xd243a62c,
- 0xf8774a0b,
- 0x63d214e5,
- 0x3f4166d5,
- 0x239672c0,
- 0x47ba7533,
- 0xcae4cd7f,
-};
-*/
-/*
- unsigned int des[8] ;
- des[0] = 0xaec83f49;
- des[1] = 0xd243a62c;
- des[2] = 0xf8774a0b;
- des[3] = 0x63d214e5;
- des[4] = 0x3f4166d5;
- des[5] = 0x239672c0;
- des[6] = 0x47ba7533;
- des[7] = 0xcae4cd7f;
- pattern_1[0][0] = 0xff00ff00;
- pattern_1[0][1] = 0xff00ff00;
- pattern_1[0][2] = 0xff00ff00;
- pattern_1[0][3] = 0xff00ff00;
- pattern_1[0][4] = 0xff00ff00;
- pattern_1[0][5] = 0xff00ff00;
- pattern_1[0][6] = 0xff00ff00;
- pattern_1[0][7] = 0xff00ff00;
-
- pattern_1[1][0] = 0xff00ff00;
- pattern_1[1][1] = 0xff00ff00;
- pattern_1[1][2] = 0xff00ff00;
- pattern_1[1][3] = 0xff00ff00;
- pattern_1[1][4] = 0xff00ff00;
- pattern_1[1][5] = 0xff00ff00;
- pattern_1[1][6] = 0xff00ff00;
- pattern_1[1][7] = 0xff00ff00;
-
- pattern_1[2][0] = 0xff00ff00;
- pattern_1[2][1] = 0xff00ff00;
- pattern_1[2][2] = 0xff00ff00;
- pattern_1[2][3] = 0xff00ff00;
- pattern_1[2][4] = 0xff00ff00;
- pattern_1[2][5] = 0xff00ff00;
- pattern_1[2][6] = 0xff00ff00;
- pattern_1[2][7] = 0xff00ff00;
-
- pattern_1[3][0] = 0xff00ff00;
- pattern_1[3][1] = 0xff00ff00;
- pattern_1[3][2] = 0xff00ff00;
- pattern_1[3][3] = 0xff00ff00;
- pattern_1[3][4] = 0xff00ff00;
- pattern_1[3][5] = 0xff00ff00;
- pattern_1[3][6] = 0xff00ff00;
- pattern_1[3][7] = 0xff00ff00;
-
- pattern_2[0][0] = 0x0001fe00;
- pattern_2[0][1] = 0x0000ff00;
- pattern_2[0][2] = 0x0000ff00;
- pattern_2[0][3] = 0x0000ff00;
- pattern_2[0][4] = 0x0002fd00;
- pattern_2[0][5] = 0x0000ff00;
- pattern_2[0][6] = 0x0000ff00;
- pattern_2[0][7] = 0x0000ff00;
-
- pattern_2[1][0] = 0x0004fb00;
- pattern_2[1][1] = 0x0000ff00;
- pattern_2[1][2] = 0x0000ff00;
- pattern_2[1][3] = 0x0000ff00;
- pattern_2[1][4] = 0x0008f700;
- pattern_2[1][5] = 0x0000ff00;
- pattern_2[1][6] = 0x0000ff00;
- pattern_2[1][7] = 0x0000ff00;
-
- pattern_2[2][0] = 0x0010ef00;
- pattern_2[2][1] = 0x0000ff00;
- pattern_2[2][2] = 0x0000ff00;
- pattern_2[2][3] = 0x0000ff00;
- pattern_2[2][4] = 0x0020df00;
- pattern_2[2][5] = 0x0000ff00;
- pattern_2[2][6] = 0x0000ff00;
-pattern_2[2][7] = 0x0000ff00;
-
-pattern_2[3][0] = 0x0040bf00;
-pattern_2[3][1] = 0x0000ff00;
-pattern_2[3][2] = 0x0000ff00;
-pattern_2[3][3] = 0x0000ff00;
-pattern_2[3][4] = 0x00807f00;
-pattern_2[3][5] = 0x0000ff00;
-pattern_2[3][6] = 0x0000ff00;
-pattern_2[3][7] = 0x0000ff00;
-
-pattern_3[0][0] = 0x00010000;
-pattern_3[0][1] = 0x00000000;
-pattern_3[0][2] = 0x00000000;
-pattern_3[0][3] = 0x00000000;
-pattern_3[0][4] = 0x00020000;
-pattern_3[0][5] = 0x00000000;
-pattern_3[0][6] = 0x00000000;
-pattern_3[0][7] = 0x00000000;
-
-pattern_3[1][0] = 0x00040000;
-pattern_3[1][1] = 0x00000000;
-pattern_3[1][2] = 0x00000000;
-pattern_3[1][3] = 0x00000000;
-pattern_3[1][4] = 0x00080000;
- pattern_3[1][5] = 0x00000000;
- pattern_3[1][6] = 0x00000000;
- pattern_3[1][7] = 0x00000000;
-
- pattern_3[2][0] = 0x00100000;
- pattern_3[2][1] = 0x00000000;
- pattern_3[2][2] = 0x00000000;
- pattern_3[2][3] = 0x00000000;
- pattern_3[2][4] = 0x00200000;
- pattern_3[2][5] = 0x00000000;
- pattern_3[2][6] = 0x00000000;
- pattern_3[2][7] = 0x00000000;
-
- pattern_3[3][0] = 0x00400000;
- pattern_3[3][1] = 0x00000000;
- pattern_3[3][2] = 0x00000000;
- pattern_3[3][3] = 0x00000000;
- pattern_3[3][4] = 0x00800000;
- pattern_3[3][5] = 0x00000000;
- pattern_3[3][6] = 0x00000000;
- pattern_3[3][7] = 0x00000000;
-
-pattern_4[0][0] = 0x51c8c049 ;
-pattern_4[0][1] = 0x2d43592c ;
-pattern_4[0][2] = 0x0777b50b ;
-pattern_4[0][3] = 0x9cd2ebe5 ;
-pattern_4[0][4] = 0xc04199d5 ;
-pattern_4[0][5] = 0xdc968dc0 ;
-pattern_4[0][6] = 0xb8ba8a33 ;
-pattern_4[0][7] = 0x35e4327f ;
-
-pattern_4[1][0] = 0x51c8c049 ;
-pattern_4[1][1] = 0x2d43592c ;
-pattern_4[1][2] = 0x0777b50b ;
-pattern_4[1][3] = 0x9cd2ebe5 ;
-pattern_4[1][4] = 0xc04199d5 ;
-pattern_4[1][5] = 0xdc968dc0 ;
-pattern_4[1][6] = 0xb8ba8a33 ;
-pattern_4[1][7] = 0x35e4327f ;
-
-pattern_4[2][0] = 0x51c8c049 ;
-pattern_4[2][1] = 0x2d43592c ;
-pattern_4[2][2] = 0x0777b50b ;
-pattern_4[2][3] = 0x9cd2ebe5 ;
-pattern_4[2][4] = 0xc04199d5 ;
-pattern_4[2][5] = 0xdc968dc0 ;
-pattern_4[2][6] = 0xb8ba8a33 ;
-pattern_4[2][7] = 0x35e4327f ;
-
-pattern_4[3][0] = 0x51c8c049 ;
-pattern_4[3][1] = 0x2d43592c ;
-pattern_4[3][2] = 0x0777b50b ;
-pattern_4[3][3] = 0x9cd2ebe5 ;
-pattern_4[3][4] = 0xc04199d5 ;
-pattern_4[3][5] = 0xdc968dc0 ;
-pattern_4[3][6] = 0xb8ba8a33 ;
-pattern_4[3][7] = 0x35e4327f ;
-
-pattern_5[0][0] = 0xaec9c149 ;
-pattern_5[0][1] = 0xd243592c ;
-pattern_5[0][2] = 0xf877b50b ;
-pattern_5[0][3] = 0x63d2ebe5 ;
-pattern_5[0][4] = 0x3f439bd5 ;
-pattern_5[0][5] = 0x23968dc0 ;
-pattern_5[0][6] = 0x47ba8a33 ;
-pattern_5[0][7] = 0xcae4327f ;
-pattern_5[1][0] = 0xaeccc449 ;
-pattern_5[1][1] = 0xd243592c ;
-pattern_5[1][2] = 0xf877b50b ;
-pattern_5[1][3] = 0x63d2ebe5 ;
-pattern_5[1][4] = 0x3f4991d5 ;
-pattern_5[1][5] = 0x23968dc0 ;
-pattern_5[1][6] = 0x47ba8a33 ;
-pattern_5[1][7] = 0xcae4327f ;
-pattern_5[2][0] = 0xaed8d049 ;
-pattern_5[2][1] = 0xd243592c ;
-pattern_5[2][2] = 0xf877b50b ;
-pattern_5[2][3] = 0x63d2ebe5 ;
-pattern_5[2][4] = 0x3f61b9d5 ;
-pattern_5[2][5] = 0x23968dc0 ;
-pattern_5[2][6] = 0x47ba8a33 ;
-pattern_5[2][7] = 0xcae4327f ;
-pattern_5[3][0] = 0xae888049 ;
-pattern_5[3][1] = 0xd243592c ;
-pattern_5[3][2] = 0xf877b50b ;
-pattern_5[3][3] = 0x63d2ebe5 ;
-pattern_5[3][4] = 0x3fc119d5 ;
-pattern_5[3][5] = 0x23968dc0 ;
-pattern_5[3][6] = 0x47ba8a33 ;
-pattern_5[3][7] = 0xcae4327f ;
-
-pattern_6[0][1] = 0xd243a62c ;
-pattern_6[0][2] = 0xf8774a0b ;
-pattern_6[0][3] = 0x63d214e5 ;
-pattern_6[0][4] = 0x3f4366d5 ;
-pattern_6[0][5] = 0x239672c0 ;
-pattern_6[0][6] = 0x47ba7533 ;
-pattern_6[0][7] = 0xcae4cd7f ;
-pattern_6[1][0] = 0xaecc3f49 ;
-pattern_6[1][1] = 0xd243a62c ;
-pattern_6[1][2] = 0xf8774a0b ;
-pattern_6[1][3] = 0x63d214e5 ;
-pattern_6[1][4] = 0x3f4966d5 ;
-pattern_6[1][5] = 0x239672c0 ;
-pattern_6[1][6] = 0x47ba7533 ;
-pattern_6[1][7] = 0xcae4cd7f ;
-pattern_6[2][0] = 0xaed83f49 ;
-pattern_6[2][1] = 0xd243a62c ;
-pattern_6[2][2] = 0xf8774a0b ;
-pattern_6[2][3] = 0x63d214e5 ;
-pattern_6[2][4] = 0x3f6166d5 ;
-pattern_6[2][5] = 0x239672c0 ;
-pattern_6[2][6] = 0x47ba7533 ;
-pattern_6[2][7] = 0xcae4cd7f ;
-pattern_6[3][0] = 0xae883f49 ;
-pattern_6[3][1] = 0xd243a62c ;
-pattern_6[3][2] = 0xf8774a0b ;
-pattern_6[3][3] = 0x63d214e5 ;
-pattern_6[3][4] = 0x3fc166d5 ;
-pattern_6[3][5] = 0x239672c0 ;
-pattern_6[3][6] = 0x47ba7533 ;
-pattern_6[3][7] = 0xcae4cd7f ;
-*/
-#endif
-
-#define DDR_TEST_START_ADDR 0x1080000// 0x10000000 //CONFIG_SYS_MEMTEST_START
-#define DDR_TEST_SIZE 0x2000000
-//#define DDR_TEST_SIZE 0x2000
-
-#if (CONFIG_CHIP>=CHIP_TXLX)
-
-#define P_EE_TIMER_E (volatile unsigned int *)((0x3c62 << 2) + 0xffd00000)
-
-///*
-//#ifndef P_PIN_MUX_REG1
-// Pin Mux (9)
-// ----------------------------
-#if (CONFIG_CHIP==CHIP_TXLX)
-#define PERIPHS_PIN_MUX_0 (0xff634400 + (0x2c << 2))
-#define SEC_PERIPHS_PIN_MUX_0 (0xff634400 + (0x2c << 2))
-#define P_PERIPHS_PIN_MUX_0 (volatile uint32_t *)(0xff634400 + (0x2c << 2))
-#define PERIPHS_PIN_MUX_1 (0xff634400 + (0x2d << 2))
-#define SEC_PERIPHS_PIN_MUX_1 (0xff634400 + (0x2d << 2))
-#define P_PERIPHS_PIN_MUX_1 (volatile uint32_t *)(0xff634400 + (0x2d << 2))
-#define PERIPHS_PIN_MUX_2 (0xff634400 + (0x2e << 2))
-#define SEC_PERIPHS_PIN_MUX_2 (0xff634400 + (0x2e << 2))
-#define P_PERIPHS_PIN_MUX_2 (volatile uint32_t *)(0xff634400 + (0x2e << 2))
-#define PERIPHS_PIN_MUX_3 (0xff634400 + (0x2f << 2))
-#define SEC_PERIPHS_PIN_MUX_3 (0xff634400 + (0x2f << 2))
-#define P_PERIPHS_PIN_MUX_3 (volatile uint32_t *)(0xff634400 + (0x2f << 2))
-#define PERIPHS_PIN_MUX_4 (0xff634400 + (0x30 << 2))
-#define SEC_PERIPHS_PIN_MUX_4 (0xff634400 + (0x30 << 2))
-#define P_PERIPHS_PIN_MUX_4 (volatile uint32_t *)(0xff634400 + (0x30 << 2))
-#define PERIPHS_PIN_MUX_5 (0xff634400 + (0x31 << 2))
-#define SEC_PERIPHS_PIN_MUX_5 (0xff634400 + (0x31 << 2))
-#define P_PERIPHS_PIN_MUX_5 (volatile uint32_t *)(0xff634400 + (0x31 << 2))
-#define PERIPHS_PIN_MUX_6 (0xff634400 + (0x32 << 2))
-#define SEC_PERIPHS_PIN_MUX_6 (0xff634400 + (0x32 << 2))
-#define P_PERIPHS_PIN_MUX_6 (volatile uint32_t *)(0xff634400 + (0x32 << 2))
-#define PERIPHS_PIN_MUX_7 (0xff634400 + (0x33 << 2))
-#define SEC_PERIPHS_PIN_MUX_7 (0xff634400 + (0x33 << 2))
-#define P_PERIPHS_PIN_MUX_7 (volatile uint32_t *)(0xff634400 + (0x33 << 2))
-#define PERIPHS_PIN_MUX_8 (0xff634400 + (0x34 << 2))
-#define SEC_PERIPHS_PIN_MUX_8 (0xff634400 + (0x34 << 2))
-#define P_PERIPHS_PIN_MUX_8 (volatile uint32_t *)(0xff634400 + (0x34 << 2))
-#define PERIPHS_PIN_MUX_9 (0xff634400 + (0x35 << 2))
-#define SEC_PERIPHS_PIN_MUX_9 (0xff634400 + (0x35 << 2))
-#define P_PERIPHS_PIN_MUX_9 (volatile uint32_t *)(0xff634400 + (0x35 << 2))
-#define PERIPHS_PIN_MUX_10 (0xff634400 + (0x36 << 2))
-#define SEC_PERIPHS_PIN_MUX_10 (0xff634400 + (0x36 << 2))
-#define P_PERIPHS_PIN_MUX_10 (volatile uint32_t *)(0xff634400 + (0x36 << 2))
-#define PERIPHS_PIN_MUX_11 (0xff634400 + (0x37 << 2))
-#define SEC_PERIPHS_PIN_MUX_11 (0xff634400 + (0x37 << 2))
-#define P_PERIPHS_PIN_MUX_11 (volatile uint32_t *)(0xff634400 + (0x37 << 2))
-#define PERIPHS_PIN_MUX_12 (0xff634400 + (0x38 << 2))
-#define SEC_PERIPHS_PIN_MUX_12 (0xff634400 + (0x38 << 2))
-#define P_PERIPHS_PIN_MUX_12 (volatile uint32_t *)(0xff634400 + (0x38 << 2))
-#endif
-#define P_PIN_MUX_REG1 P_PERIPHS_PIN_MUX_1// (((volatile unsigned *)(0xda834400 + (0x2d << 2))))
-#define P_PIN_MUX_REG2 P_PERIPHS_PIN_MUX_2// (((volatile unsigned *)(0xda834400 + (0x2e << 2))))
-#define P_PIN_MUX_REG3 P_PERIPHS_PIN_MUX_3//(((volatile unsigned *)(0xda834400 + (0x2f << 2))))
-#define P_PIN_MUX_REG7 P_PERIPHS_PIN_MUX_7//(((volatile unsigned *)(0xda834400 + (0x33 << 2))))
-//#endif
-
-//#ifndef P_PWM_MISC_REG_AB
-//#define P_PWM_MISC_REG_AB (*((volatile unsigned *)(0xc1100000 + (0x2156 << 2))))
-//#define P_PWM_PWM_B (*((volatile unsigned *)(0xc1100000 + (0x2155 << 2))))
-//#define P_PWM_MISC_REG_CD (*((volatile unsigned *)(0xc1100000 + (0x2192 << 2))))
-//#define P_PWM_PWM_D (*((volatile unsigned *)(0xc1100000 + (0x2191 << 2))))
-//#endif
-//*/
-//#define PWM_MISC_REG_AB (0x6c02)
-//#define P_PWM_MISC_REG_AB (volatile unsigned int *)((0x6c02 << 2) + 0xffd00000)
-//#define WATCHDOG_CNTL ((0x3c34 << 2) + 0xffd00000)
-//#define WATCHDOG_CNTL1 ((0x3c35 << 2) + 0xffd00000)
-//#define WATCHDOG_TCNT ((0x3c36 << 2) + 0xffd00000)
-//#define WATCHDOG_RESET ((0x3c37 << 2) + 0xffd00000)
-#else
-//#define ddr_udelay(a) do{}while((a<<5)--);
-#define P_EE_TIMER_E (volatile unsigned int *)(((0x2662 << 2) + 0xc1100000))
-//#define WATCHDOG_CNTL 0xc11098d0
-//#define WATCHDOG_CNTL1 0xc11098d4
-//#define WATCHDOG_TCNT 0xc11098d8
-//#define WATCHDOG_RESET 0xc11098dc
-#ifndef P_WATCHDOG_CNTL
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
-#define P_WATCHDOG_CNTL (volatile unsigned int *)0xc11098d0
-#define P_WATCHDOG_CNTL1 (volatile unsigned int *) 0xc11098d4
-#define P_WATCHDOG_TCNT (volatile unsigned int *)0xc11098d8
-#define P_WATCHDOG_RESET (volatile unsigned int *) 0xc11098dc
-#else
-#define P_WATCHDOG_CNTL (volatile unsigned int *)(0xc1100000+(0x2640<<2))
-//#define P_WATCHDOG_CNTL1 (volatile unsigned int *) 0xc11098d4
-//#define P_WATCHDOG_TCNT (volatile unsigned int *)0xc11098d8
-#define P_WATCHDOG_RESET (volatile unsigned int *)(0xc1100000+(0x2641<<2))
-#endif
-#endif
-
-
-#ifndef P_PIN_MUX_REG1
-#define P_PIN_MUX_REG1 (((volatile unsigned *)(0xda834400 + (0x2d << 2))))
-#define P_PIN_MUX_REG2 (((volatile unsigned *)(0xda834400 + (0x2e << 2))))
-#define P_PIN_MUX_REG3 (((volatile unsigned *)(0xda834400 + (0x2f << 2))))
-#define P_PIN_MUX_REG7 (((volatile unsigned *)(0xda834400 + (0x33 << 2))))
-#endif
-
-#ifndef P_PWM_MISC_REG_AB
-#define P_PWM_MISC_REG_AB (((volatile unsigned *)(0xc1100000 + (0x2156 << 2))))
-#define P_PWM_PWM_B (((volatile unsigned *)(0xc1100000 + (0x2155 << 2))))
-#define P_PWM_MISC_REG_CD (((volatile unsigned *)(0xc1100000 + (0x2192 << 2))))
-#define P_PWM_PWM_D (((volatile unsigned *)(0xc1100000 + (0x2191 << 2))))
-#endif
-
-#ifndef P_EE_TIMER_E
-#define P_EE_TIMER_E (((volatile unsigned *)(0xc1100000 + (0x2662 << 2))))
-#endif
-
-#endif
-
-#define get_us_time() (*P_EE_TIMER_E)// (readl(P_ISA_TIMERE))
-
-// #define P_ISA_TIMERE 0xc1109988
-// #define get_us_time() (readl(P_ISA_TIMERE))
-
-/*
-#define P_PIN_MUX_REG3 (*((volatile unsigned *)(0xff634400 + (0x2f << 2))))
-#define P_PIN_MUX_REG4 (*((volatile unsigned *)(0xff634400 + (0x30 << 2))))
-
-#define P_PWM_MISC_REG_AB (*((volatile unsigned *)(0xff807000 + (0x02 << 2))))
-#define P_PWM_PWM_A (*((volatile unsigned *)((0x6c00 << 2) + 0xffd00000)))
-
-#define AO_PIN_MUX_REG (*((volatile unsigned *)(0xff800000 + (0x05 << 2))))
-*/
-
-#define dwc_ddrphy_apb_wr(addr, dat) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))=((uint16_t)dat)
-#define dwc_ddrphy_apb_rd(addr) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))
-#define ACX_MAX 0x80
-
-void ddr_udelay(unsigned int us)
-{
-//#ifndef CONFIG_PXP_EMULATOR
- unsigned int t0 = (*((P_EE_TIMER_E)));
-
- while ((*((P_EE_TIMER_E))) - t0 <= us)
- ;
-//#endif
-}
-
-#define DDR_PARAMETER_SOURCE_FROM_DMC_STICKY 1
-#define DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV 2
-#define DDR_PARAMETER_SOURCE_FROM_UBOOT_IDME 3
-#define DDR_PARAMETER_SOURCE_FROM_ORG_STICKY 4
-
-#define DDR_PARAMETER_READ 1
-#define DDR_PARAMETER_WRITE 2
-#define DDR_PARAMETER_LEFT 1
-#define DDR_PARAMETER_RIGHT 2
-
-typedef struct ddr_test_struct {
- unsigned int ddr_data_source ;
- unsigned int ddr_data_test_size ;
- unsigned int ddr_address_test_size ;
- unsigned int ddr_test_watchdog_times_s ;
- unsigned int ddr_test_lane_disable ;
-
- unsigned int ddr_test_window_flag[8] ;
- unsigned int ddr_test_window_data[100] ;
-} ddr_test_struct_t;
-ddr_test_struct_t *g_ddr_test_struct;
-
-unsigned int read_write_window_test_parameter(unsigned int source_index, unsigned int parameter_index ,unsigned int parameter_value,unsigned int read_write_flag )
-{
-
- if(source_index == DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- {
- sticky_reg_base_add = (DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- if(read_write_flag == DDR_PARAMETER_WRITE)
- wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
- if(read_write_flag == DDR_PARAMETER_READ)
- parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
- }
-
- if(source_index == DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV)
- {
- char *pre_env_name = "ddr_test_data_num";
- char *env_name = "ddr_test_data_num_0000";
- char *str_buf = NULL;
- char *temp_s = NULL;
- char *endp = NULL;
- char buf[1024];
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- sprintf(env_name,"%s_%04d",pre_env_name,parameter_index);
- sprintf(buf, "0x%08x", parameter_value);
-
- if(read_write_flag == DDR_PARAMETER_WRITE)
- {
- setenv(env_name, buf);
- run_command("save",0);
- }
- if(read_write_flag == DDR_PARAMETER_READ)
- {
- temp_s = getenv(env_name);
- if(temp_s)
- parameter_value = simple_strtoull_ddr(temp_s, &endp, 0);
- else
- parameter_value = 0;
- }
- }
-
- if(source_index == DDR_PARAMETER_SOURCE_FROM_ORG_STICKY)
- {
- sticky_reg_base_add=(PREG_STICKY_REG0);
-
- if(read_write_flag==DDR_PARAMETER_WRITE)
- wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
- if(read_write_flag==DDR_PARAMETER_READ)
- parameter_value=rd_reg((sticky_reg_base_add+(parameter_index<<2)));
- }
- return parameter_value;
-}
-
-
-unsigned int read_write_window_test_flag(unsigned int source_index, unsigned int parameter_index ,unsigned int parameter_value,unsigned int read_write_flag )
-{
-
- if (source_index == DDR_PARAMETER_SOURCE_FROM_ORG_STICKY)
- {
- sticky_reg_base_add = PREG_STICKY_REG0;
-
- if (read_write_flag == DDR_PARAMETER_WRITE)
- wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
- if (read_write_flag == DDR_PARAMETER_READ)
- parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
- }
-
- if (source_index == DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- {
- sticky_reg_base_add = (DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- if (read_write_flag == DDR_PARAMETER_WRITE)
- wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
- if (read_write_flag == DDR_PARAMETER_READ)
- parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
- }
-
- if (source_index == DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV)
- {
- char *pre_env_name = "ddr_test_data_num";
- char *env_name = "ddr_test_data_num_0000";
- char *str_buf = NULL;
- char *temp_s = NULL;
- char *endp = NULL;
- char buf[1024];
- str_buf = (char *)(&buf);
- memset(str_buf, 0, sizeof(buf));
- sprintf(env_name,"%s_%04d",pre_env_name,parameter_index);
- sprintf(buf, "0x%08x", parameter_value);
-
- if (read_write_flag == DDR_PARAMETER_WRITE)
- {
- setenv(env_name, buf);
- run_command("save",0);
- }
- if(read_write_flag == DDR_PARAMETER_READ)
- {
- temp_s = getenv(env_name);
- if(temp_s)
- parameter_value = simple_strtoull_ddr(temp_s, &endp, 0);
- else
- parameter_value = 0;
- }
- }
-
- return parameter_value;
-}
-
-void ddr_test_watchdog_init(uint32_t msec)
-{
-
- // src: 24MHz
- // div: 24000 for 1ms
- // reset ao-22 and ee-21
- // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- *P_WATCHDOG_CNTL = (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1);
-
- // set timeout
- //*P_WATCHDOG_TCNT = msec;
- // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
- *P_WATCHDOG_TCNT = msec;
- //writel(0,(unsigned int )P_WATCHDOG_RESET);
- *P_WATCHDOG_RESET = 0;
- //*P_WATCHDOG_RESET = 0;
-
- // enable
- *P_WATCHDOG_CNTL = (*P_WATCHDOG_CNTL)|(1<<18);
- //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
- //*P_WATCHDOG_CNTL |= (1<<18);
-#else
- *P_WATCHDOG_CNTL = (0<<24)|(msec*8-1);
- //*P_WATCHDOG_TCNT=msec;
-#endif
-}
-
-void ddr_test_watchdog_enable(uint32_t sec)
-{
-
- // src: 24MHz
- // div: 24000 for 1ms
- // reset ao-22 and ee-21
- // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- *P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
- // set timeout
- //*P_WATCHDOG_TCNT = msec;
- // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
- if(sec*100>0xffff)
- *P_WATCHDOG_TCNT=0xffff;
- else
- *P_WATCHDOG_TCNT=sec*100; //max 655s
- //writel(0,(unsigned int )P_WATCHDOG_RESET);
- *P_WATCHDOG_RESET=0;
- //*P_WATCHDOG_RESET = 0;
-
- // enable
- *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)|(1<<18);
- //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
- //*P_WATCHDOG_CNTL |= (1<<18);
-#else
- //*P_WATCHDOG_CNTL=(1<<24)|(1<<19)|(sec*8000-1);
- *P_WATCHDOG_CNTL=(1<<24)|(1<<19)|(0xffff);
- printf("\nm8baby_watchdog max only 5s,please take care test size not too long for m8baby\n");
-#endif
- printf("\nP_WATCHDOG_ENABLE\n");
-}
-
-void ddr_test_watchdog_disable(void )
-{
-
- // src: 24MHz
- // div: 24000 for 1ms
- // reset ao-22 and ee-21
- // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- *P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
- // set timeout
- //*P_WATCHDOG_TCNT = msec;
- // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
- //*P_WATCHDOG_TCNT=sec*100;
- //writel(0,(unsigned int )P_WATCHDOG_RESET);
- *P_WATCHDOG_RESET=0;
- //*P_WATCHDOG_RESET = 0;
-
- // enable
- *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)&(~(1<<18));
- //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
- //*P_WATCHDOG_CNTL |= (1<<18);
-#else
- *P_WATCHDOG_CNTL=(0<<24)|(0<<19)|(24000-1);
-#endif
- printf("\nP_WATCHDOG_DISABLE\n");
-}
-
-
-void ddr_test_watchdog_clear(void )
-{
-
- // src: 24MHz
- // div: 24000 for 1ms
- // reset ao-22 and ee-21
- // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
- //*P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
- // set timeout
- //*P_WATCHDOG_TCNT = msec;
- // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
- //*P_WATCHDOG_TCNT=sec*100;
- //writel(0,(unsigned int )P_WATCHDOG_RESET);
- *P_WATCHDOG_RESET=0;
- //*P_WATCHDOG_RESET = 0;
-
- // enable
- //*P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)&(~(1<<18));
- //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
- //*P_WATCHDOG_CNTL |= (1<<18);
- //printf("\nP_WATCHDOG_CLEAR,reg=0x%8x\n",(P_WATCHDOG_RESET));
-}
-
-void ddr_test_watchdog_reset_system(void)
-{
- //#define P_WATCHDOG_CNTL 0xc11098d0
- //#define P_WATCHDOG_CNTL1 0xc11098d4
- //#define P_WATCHDOG_TCNT 0xc11098d8
- //#define P_WATCHDOG_RESET 0xc11098dc
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- int i;
-
- while (1) {
- /*
- writel( 0x3 | (1 << 21) // sys reset en ao ee 3
- | (1 << 23) // interrupt en
- | (1 << 24) // clk en
- | (1 << 25) // clk div en
- | (1 << 26) // sys reset now ao ee 3
- , (unsigned int )P_WATCHDOG_CNTL);
- */
- *P_WATCHDOG_CNTL=
- 0x3 | (1 << 21) // sys reset en ao ee 3
- | (1 << 23) // interrupt en
- | (1 << 24) // clk en
- | (1 << 25) // clk div en
- | (1 << 26); // sys reset now ao ee 3;
- //printf("\nP_WATCHDOG_CNTL reg_add_%x08==%x08",(unsigned int )P_WATCHDOG_CNTL,readl((unsigned int )P_WATCHDOG_CNTL));
- //printf("\nP_WATCHDOG_CNTL==%x08",readl((unsigned int )P_WATCHDOG_CNTL));
- //printf("\nP_WATCHDOG_CNTL==%x08",readl((unsigned int )P_WATCHDOG_CNTL));
- printf("\nP_WATCHDOG_CNTLREG_ADD %x08==%x08",(unsigned int)(unsigned long)P_WATCHDOG_CNTL,
- *P_WATCHDOG_CNTL);
- //writel(0, (unsigned int )P_WATCHDOG_RESET);
- *P_WATCHDOG_RESET=0;
-
- // writel(readl((unsigned int )P_WATCHDOG_CNTL) | (1<<18), // watchdog en
- //(unsigned int )P_WATCHDOG_CNTL);
- *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)|(1<<18);
- for (i=0; i<100; i++)
- *P_WATCHDOG_CNTL;
- //readl((unsigned int )P_WATCHDOG_CNTL);/*Deceive gcc for waiting some cycles */
- }
-
-#else
- //WRITE_CBUS_REG(WATCHDOG_TC, 0xf080000 | 2000);
- *P_WATCHDOG_CNTL=(0xf080000 | 2000);
-#endif
- while(1);
-}
-
-
-//just tune for lcdlr
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
-int do_ddr_fine_tune_lcdlr_env1(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter ddr_fine_tune_lcdlr_env function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i = 0;
- printf("\nargc== 0x%08x\n", argc);
- for(i = 0; i<argc; i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
-
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
-
-#define WR_RD_ADJ_USE_ENV 1
-#define WR_RD_ADJ_USE_UART_INPUT 2
- unsigned int wr_rd_adj_input_src=1;
- int wr_adj_per[12]={
- 100 ,
- 1000,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- };
- int rd_adj_per[12]={
- 100 ,
- 100 ,
- 80 ,
- 80 ,
- 80 ,
- 80 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- };
- if(argc == 1)
- printf("\nplease read help\n");
-
- if(argc >= 2)
- {
- wr_rd_adj_input_src = simple_strtoull_ddr(argv[1], &endp, 10);
-
- unsigned int i=0;
- if(wr_rd_adj_input_src==WR_RD_ADJ_USE_UART_INPUT)
- {
- printf("\ntune ddr lcdlr use uart input\n");
- if (argc>24+2)
- argc=24+2;
-
- for(i = 2;i<argc;i++)
- {
- if(i<(2+12))
- wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 10);
- else
- rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 10);
- }
- }
-
- // unsigned int = 0, max = 0xff, min = 0x00;
- if(wr_rd_adj_input_src==WR_RD_ADJ_USE_ENV)
- {
- printf("\ntune ddr lcdlr use uboot env\n");
- //char str[24];
- const char *s;
-
- // char *varname;
- int value=0;
-
- //*varname="env_ddrtest";
- s = getenv("env_wr_lcdlr_pr");
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",wr_adj_per);
- //sprintf(str,"d%",s);
- //getc
- }
- value = simple_strtoull_ddr(s, &endp, 16);
- printf("%d",value);
- }
- s = getenv("env_rd_lcdlr_pr");
-
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",rd_adj_per);
-
- }
- //value = simple_strtoull_ddr(s, &endp, 16);
- }
-
- //sprintf(str, "%lx", value);
- // setenv("env_ddrtest", str);
- //run_command("save",0);
-
- if (argc>24+2)
- argc=24+2;
- for(i = 2;i<argc;i++)
- {
- if(i<(2+12))
- wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
- else
- rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
- }
- }
- printf(" int wr_adj_per[12]={\n");
- for(i = 0;i<12;i++)
- printf("%04d ,\n",wr_adj_per[i]);
- printf("};\n");
- printf(" int rd_adj_per[12]={\n");
- for(i = 0;i<12;i++)
- printf("%04d ,\n",rd_adj_per[i]);
- printf("};\n");
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
- wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))|(1<<0));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
- wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))|(1<<0));
-#else
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
- wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))|(1<<26));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
- wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))|(1<<26));
-#endif
-
- int lcdlr_w=0,lcdlr_r=0;
- unsigned temp_reg=0;
- int temp_count=0;
- for( temp_count=0;temp_count<2;temp_count++)
- { temp_reg=(unsigned)(DDR0_PUB_ACLCDLR+(temp_count<<2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- if(temp_count==1)
- lcdlr_w=lcdlr_w&ACBDLR_MAX;
- wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
- }
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- for( temp_count=2;temp_count<6;temp_count++)
- { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
- wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
- wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
- }
-#else
- for ( temp_count=2;temp_count<6;temp_count++) {
- temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
- }
-#endif
- for( temp_count=6;temp_count<8;temp_count++) {
- temp_reg=(unsigned)(DDR1_PUB_ACLCDLR+((temp_count-6)<<2));
-
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- if(temp_count==7)
- lcdlr_w=lcdlr_w&ACBDLR_MAX;
- wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
- }
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- for( temp_count=8;temp_count<12;temp_count++) {
- temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
- wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
- wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR4-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
- }
-#else
- for( temp_count=8;temp_count<12;temp_count++) {
- temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-8));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&0xff);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&0xff);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
- }
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))&(~(1<<0)));
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
-
- wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))&(~(1<<0)));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
-#else
- wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))&(~(1<<26)));
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
-
- wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))&(~(1<<26)));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
-#endif
- printf("\nend adjust lcdlr\n");
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
- }
-
- return 1;
-}
-U_BOOT_CMD(
- ddr_test_tune_dqs_env, 30, 1, do_ddr_fine_tune_lcdlr_env1,
- "do_ddr_fine_tune_lcdlr_env arg1 arg2 arg3...",
- "do_ddr_fine_tune_lcdlr_env arg1 arg2 arg3... \n dcache off ? \n"
-);
-
-#endif
-//*/
-static void ddr_write(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- unsigned int i, j, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- for (j=0;j<32;j++)
- {
-
- if (m_len >= 128)
- n = 32;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- switch (i)
- {
- case 0:
- case 9:
- case 14:
- case 25:
- case 30:
- *(p+i) = TDATA32F;
- break;
- case 1:
- case 6:
- case 8:
- case 17:
- case 22:
- *(p+i) = 0;
- break;
- case 16:
- case 23:
- case 31:
- *(p+i) = TDATA32A;
- break;
- case 7:
- case 15:
- case 24:
- *(p+i) = TDATA325;
- break;
- case 2:
- case 4:
- case 10:
- case 12:
- case 19:
- case 21:
- case 27:
- case 29:
- *(p+i) = 1<<j;
- break;
- case 3:
- case 5:
- case 11:
- case 13:
- case 18:
- case 20:
- case 26:
- case 28:
- *(p+i) = ~(1<<j);
- break;
- }
- }
-
- if (m_len > 128)
- {
- m_len -= 128;
- p += 32;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_read(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- unsigned int i, j, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- for (j=0;j<32;j++)
- {
-
- if (m_len >= 128)
- n = 32;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
- switch (i)
- {
-
- case 0:
- case 9:
- case 14:
- case 25:
- case 30:
- if (*(p+i) != TDATA32F)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- case 1:
- case 6:
- case 8:
- case 17:
- case 22:
- if (*(p+i) != 0) {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0);
- }break;
- case 16:
- case 23:
- case 31:
- if (*(p+i) != TDATA32A) {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32A);
- } break;
- case 7:
- case 15:
- case 24:
- if (*(p+i) != TDATA325) {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA325);
- } break;
- case 2:
- case 4:
- case 10:
- case 12:
- case 19:
- case 21:
- case 27:
- case 29:
- if (*(p+i) != 1<<j) {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 1<<j);
- } break;
- case 3:
- case 5:
- case 11:
- case 13:
- case 18:
- case 20:
- case 26:
- case 28:
- if (*(p+i) != ~(1<<j)) {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~(1<<j));
- } break;
- }
- }
-
- if (m_len > 128)
- {
- m_len -= 128;
- p += 32;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-
-static void ddr_write4(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- unsigned int i, j, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- for (j=0;j<32;j++)
- {
-
- if (m_len >= 128)
- n = 32;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
-
- *(p+i) = 0xff00ff00;
- break;
- case 4:
- case 5:
- case 6:
- case 7:
-
- *(p+i) = ~0xff00ff00;
- break;
- case 8:
- case 9:
- case 10:
- case 11:
- *(p+i) = 0xaa55aa55;
- break;
- case 12:
- case 13:
- case 14:
- case 15:
- *(p+i) = ~0xaa55aa55;
- break;
- case 16:
- case 17:
- case 18:
- case 19:
-
- case 24:
- case 25:
- case 26:
- case 27:
-
- *(p+i) = 1<<j;
- break;
-
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- *(p+i) = ~(1<<j);
- break;
- }
- }
-
- if (m_len > 128)
- {
- m_len -= 128;
- p += 32;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_read4(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- unsigned int i, j, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- for (j=0;j<32;j++)
- {
-
- if (m_len >= 128)
- n = 32;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
- switch (i)
- {
-
- case 0:
- case 1:
- case 2:
- case 3:
-
- // *(p+i) = 0xff00ff00;
- if (*(p+i) != 0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- case 4:
- case 5:
- case 6:
- case 7:
-
- // *(p+i) = ~0xff00ff00;
- if (*(p+i) != ~0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- case 8:
- case 9:
- case 10:
- case 11:
- // *(p+i) = 0xaa55aa55;
- if (*(p+i) != 0xaa55aa55)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- case 12:
- case 13:
- case 14:
- case 15:
- // *(p+i) = ~0xaa55aa55;
- if (*(p+i) != ~0xaa55aa55)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- case 16:
- case 17:
- case 18:
- case 19:
-
- case 24:
- case 25:
- case 26:
- case 27:
-
- // *(p+i) = 1<<j;
- if (*(p+i) != (1<<j))
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
-
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- // *(p+i) = ~(1<<j);
- if (*(p+i) !=~( 1<<j))
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- }
- break;
- }
- }
-
- if (m_len > 128)
- {
- m_len -= 128;
- p += 32;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_read_full(void *buff, unsigned int m_length,unsigned int start_pattern,
- unsigned int pattern_offset)
-{
- unsigned int *p;
- unsigned int i=0;
- unsigned int m_len = m_length&0xfffffffc;
-
- p = ( unsigned int *)buff;
- //*(p)=start_pattern;
- while (m_len)
- {
- m_len=m_len-4;
-
- // *(p+i) = (*(p))+pattern_offset;
-
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p+i) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
- if ((*(p+i)) !=(start_pattern+pattern_offset*i))
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i),
- (start_pattern+pattern_offset*i));
- }
- break;
-
- i++;
- }
-}
-
-static void ddr_write_full(void *buff, unsigned int m_length,unsigned int start_pattern,
- unsigned int pattern_offset)
-{
- unsigned int *p;
- unsigned int i=0;
- unsigned int m_len = m_length&0xfffffffc;
-
- p = ( unsigned int *)buff;
- //*(p)=start_pattern;
- while (m_len)
- {
- m_len=m_len-4;
- *(p+i) = start_pattern+pattern_offset*i;
- i++;
- }
-}
-
-///*
-static void ddr_test_copy(void *addr_dest,void *addr_src,unsigned int memcpy_size)
-{
- unsigned int *p_dest;
- unsigned int *p_src;
-
- unsigned int m_len = memcpy_size;
-
- p_dest = ( unsigned int *)addr_dest;
- p_src = ( unsigned int *)addr_src;
- m_len = m_len/4; //assume it's multiple of 4
- while (m_len--) {
- ddr_pld_cache(p_src) ;//#define ddr_pld_cache(P) asm ("prfm PLDL1KEEP, [%0, #376]"::"r" (P))
- *p_dest++ = *p_src++;
- *p_dest++ = *p_src++;
- *p_dest++ = *p_src++;
- *p_dest++ = *p_src++;
- }
-}
-//*/
-int do_ddr_test_copy(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- unsigned long loop = 1;
- unsigned int print_flag =1;
- // unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int src_addr = DDR_TEST_START_ADDR;
- unsigned int dec_addr = DDR_TEST_START_ADDR+0x8000000;
- unsigned int test_size = DDR_TEST_SIZE;
-
-
- print_flag=1;
-
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
- // printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==1) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- // if (*argv[2] == 0 || *endp != 0)
- src_addr = DDR_TEST_START_ADDR;
- loop = 1;
- }
- if (argc > 2) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- src_addr = DDR_TEST_START_ADDR;
- }
- if (argc > 3) {
- src_addr = simple_strtoull_ddr(argv[1], &endp, 16);
- dec_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- loop = 1;
- if (*argv[3] == 0 || *endp != 0)
- test_size = DDR_TEST_SIZE;
-
- }
- if (test_size<0x1000)
- test_size = DDR_TEST_SIZE;
- if (argc > 4) {
- loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- loop = 1;
- }
- if (argc > 5) {
- print_flag = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- print_flag = 1;
- }
- //COPY_TEST_START:
-
- ///*
- unsigned long time_start, time_end,test_loops;
- test_loops=loop;
- unsigned long size_count=0;
- size_count=loop*test_size;
- time_start = get_us_time();//us
-
- do {
- // loop = 1;
- ddr_test_copy((void *)(int_convter_p(dec_addr)),(void *)(int_convter_p(src_addr)),test_size);
- //bcopy((void *)(int_convter_p(src_addr)),(void *)(int_convter_p(dec_addr)),test_size);
- //mcopy((void *)(int_convter_p(src_addr)),(void *)(int_convter_p(dec_addr)),test_size);
- if (print_flag)
- {
- printf("\nloop==0x%08x", ( unsigned int )loop);
- printf("\n \n");
- }
- }while(--loop);
- //*/
- time_end = get_us_time();//us
- printf("\ncopy %d times use %dus\n \n",( unsigned int )test_loops,( unsigned int )(time_end-time_start));
-
- printf("\nddr copy bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
- printf("\rEnd ddr test. \n");
-
- unsigned int m_len=0,counter=0;
- unsigned int *p_dest;
- p_dest= (void *)(int_convter_p(dec_addr));
- m_len = test_size/4; //assume it's multiple of 4
- counter=(unsigned int)test_loops;
- size_count=counter*test_size;
- time_start = get_us_time();//us
- do {
- loop = 1;
- m_len = test_size/4;
- while (m_len--) {
- ddr_pld_cache(p_dest) ;
- *p_dest++ = 0x12345678;
- *p_dest++ = 0x12345678;
- *p_dest++ = 0x12345678;
- *p_dest++ = 0x12345678;
- }
- }while(--counter);
- time_end = get_us_time();//us
- printf("\nwrite %d bytes use %dus\n \n",( unsigned int )test_size,( unsigned int )(time_end-time_start));
-
- printf("\nddr write bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
-
- unsigned int *p_src;
- p_src= (void *)(int_convter_p(src_addr));
- m_len = test_size/4; //assume it's multiple of 4
- unsigned int temp0=0;
- //unsigned int temp1=0;
- //unsigned int temp2=0;
- //unsigned int temp3=0;
- counter=(unsigned int)test_loops;
- size_count=counter*test_size;
-
- // #define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
- //writel((1000000<<0), DMC_MON_CTRL1);
- //writel((0<<31)|(1<<30)|(0<<20)|(1<<16)|(1<<0), DMC_MON_CTRL2);
- //writel((1<<31)|(0<<30)|(0<<20)|(1<<16)|(1<<0), DMC_MON_CTRL2);
- time_start = get_us_time();//us
- do {
- loop = 1;
- m_len = test_size/4;
- while (m_len--) {
- // ddr_pld_cache(p_src++) ;
-#ifdef DDR_PREFETCH_CACHE
- __asm__ __volatile__ ("prfm PLDL1KEEP, [%0, #376]"::"r" (p_src));
-#endif
- p_src++;
- temp0 =( *p_src);
- m_len--;
- m_len--;
- m_len--;
- m_len--;
- m_len--;
- m_len--;
- m_len--;
- }
- }while(--counter);
- *p_dest++ = temp0;
- *p_dest++ = *p_src;
- *p_dest++ = *p_src;
- *p_dest++ = *p_src;
- time_end = get_us_time();//us
-
- printf("\nread %d Kbytes use %dus\n \n",(unsigned int)(size_count/1000),( unsigned int )(time_end-time_start));
- printf("\nddr read bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
-
- return 0;
-}
-
-U_BOOT_CMD(
- ddr_test_copy, 7, 1, do_ddr_test_copy,
- "ddr_test_copy function",
- "ddr_test_copy 0x08000000 0x10000000 0x02000000 1 0 ? \n"
-);
-
-///*
-#define DDR_PATTERN_LOOP_1 32
-#define DDR_PATTERN_LOOP_2 64
-#define DDR_PATTERN_LOOP_3 96
-/*
-__asm
-{
-.Global memcpy_pld
-.type memcpy_pld ,%function
-.align 8
-memcpy_pld:
-mov x4,x0
-subs x2,x2,#8
-b.mi 2f
-1: ldr x3,[x1],#8
- subs x2,x2,#8
- str x3,[x4],#8
- prfm PLDL1KEEP,[x1,#376]
- b.pl 1b
-
-2: adds x2,x2,#4
- b.mi 3f
- ldr w3,[x1],#4
- sub x2,x2,#4
- str w3,[x4],#4
-
-3: adds x2,x2,#2
- b.mi 4f
- ldr w3,[x1],#2
- sub x2,x2,#4
- str w3,[x4],#4
-
-4: adds x2,x2,#1
- b.mi 5f
- ldr w3,[x1],#2
- sub x2,x2,#4
- str w3,[x4],#4
-
-5: ret
-}
-*/
-//static void ddr_memcpy_pld(void *addr_dest, void *addr_src, unsigned int m_length)
-//{
-/*
-asm
-{
-//.Global memcpy_pld
-.type memcpy_pld ,%function
-.align 8
-memcpy_pld:
-mov x4,x0
-subs x2,x2,#8
-b.mi 2f
-1: ldr x3,[x1],#8
- subs x2,x2,#8
- str x3,[x4],#8
- prfm PLDL1KEEP,[x1,#376]
- b.pl 1b
-
-2: adds x2,x2,#4
- b.mi 3f
- ldr w3,[x1],#4
- sub x2,x2,#4
- str w3,[x4],#4
-
-3: adds x2,x2,#2
- b.mi 4f
- ldr w3,[x1],#2
- sub x2,x2,#4
- str w3,[x4],#4
-
-4: adds x2,x2,#1
- b.mi 5f
- ldr w3,[x1],#2
- sub x2,x2,#4
- str w3,[x4],#4
-
-5: ret
-}
-memcpy_pld(addr_dest,addr_src,m_length);
-*/
-//}
-
-
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
-
-///*
-
-int ddr_test_gx_cross_talk_pattern(int ddr_test_size)
-{
- unsigned int start_addr = 0x10000000;
- error_outof_count_flag=1;
- error_count=0;
-
- unsigned int des[8] ;
- unsigned int pattern_1[4][8] ;
- unsigned int pattern_2[4][8] ;
- unsigned int pattern_3[4][8] ;
- unsigned int pattern_4[4][8] ;
- unsigned int pattern_5[4][8] ;
- unsigned int pattern_6[4][8] ;
-
- des[0] = 0xaec83f49;
- des[1] = 0xd243a62c;
- des[2] = 0xf8774a0b;
- des[3] = 0x63d214e5;
- des[4] = 0x3f4166d5;
- des[5] = 0x239672c0;
- des[6] = 0x47ba7533;
- des[7] = 0xcae4cd7f;
- pattern_1[0][0] = 0xff00ff00;
- pattern_1[0][1] = 0xff00ff00;
- pattern_1[0][2] = 0xff00ff00;
- pattern_1[0][3] = 0xff00ff00;
- pattern_1[0][4] = 0xff00ff00;
- pattern_1[0][5] = 0xff00ff00;
- pattern_1[0][6] = 0xff00ff00;
- pattern_1[0][7] = 0xff00ff00;
-
- pattern_1[1][0] = 0x00ffff00;
- pattern_1[1][1] = 0x00ffff00;
- pattern_1[1][2] = 0x00ffff00;
- pattern_1[1][3] = 0x00ffff00;
- pattern_1[1][4] = 0x00ffff00;
- pattern_1[1][5] = 0x00ffff00;
- pattern_1[1][6] = 0x00ffff00;
- pattern_1[1][7] = 0x00ffff00;
-
- pattern_1[2][0] = 0xffff0000;
- pattern_1[2][1] = 0xffff0000;
- pattern_1[2][2] = 0xffff0000;
- pattern_1[2][3] = 0xffff0000;
- pattern_1[2][4] = 0xffff0000;
- pattern_1[2][5] = 0xffff0000;
- pattern_1[2][6] = 0xffff0000;
- pattern_1[2][7] = 0xffff0000;
- pattern_1[3][0] = 0xff00ff00;
- pattern_1[3][1] = 0xff00ff00;
- pattern_1[3][2] = 0xff00ff00;
- pattern_1[3][3] = 0xff00ff00;
- pattern_1[3][4] = 0xff00ff00;
- pattern_1[3][5] = 0xff00ff00;
- pattern_1[3][6] = 0xff00ff00;
- pattern_1[3][7] = 0xff00ff00;
-
- pattern_2[0][0] = 0x0001fe00;
- pattern_2[0][1] = 0x0000ff00;
- pattern_2[0][2] = 0x0000ff00;
- pattern_2[0][3] = 0x0000ff00;
- pattern_2[0][4] = 0x0002fd00;
- pattern_2[0][5] = 0x0000ff00;
- pattern_2[0][6] = 0x0000ff00;
- pattern_2[0][7] = 0x0000ff00;
-
- pattern_2[1][0] = 0x0004fb00;
- pattern_2[1][1] = 0x0000ff00;
- pattern_2[1][2] = 0x0000ff00;
- pattern_2[1][3] = 0x0000ff00;
- pattern_2[1][4] = 0x0008f700;
- pattern_2[1][5] = 0x0000ff00;
- pattern_2[1][6] = 0x0000ff00;
- pattern_2[1][7] = 0x0000ff00;
-
- pattern_2[2][0] = 0x0010ef00;
- pattern_2[2][1] = 0x0000ff00;
- pattern_2[2][2] = 0x0000ff00;
- pattern_2[2][3] = 0x0000ff00;
- pattern_2[2][4] = 0x0020df00;
- pattern_2[2][5] = 0x0000ff00;
- pattern_2[2][6] = 0x0000ff00;
- pattern_2[2][7] = 0x0000ff00;
-
- pattern_2[3][0] = 0x0040bf00;
- pattern_2[3][1] = 0x0000ff00;
- pattern_2[3][2] = 0x0000ff00;
- pattern_2[3][3] = 0x0000ff00;
- pattern_2[3][4] = 0x00807f00;
- pattern_2[3][5] = 0x0000ff00;
- pattern_2[3][6] = 0x0000ff00;
- pattern_2[3][7] = 0x0000ff00;
-
- pattern_3[0][0] = 0x00010000;
- pattern_3[0][1] = 0x00000000;
- pattern_3[0][2] = 0x00000000;
- pattern_3[0][3] = 0x00000000;
- pattern_3[0][4] = 0x00020000;
- pattern_3[0][5] = 0x00000000;
- pattern_3[0][6] = 0x00000000;
- pattern_3[0][7] = 0x00000000;
-
- pattern_3[1][0] = 0x00040000;
- pattern_3[1][1] = 0x00000000;
- pattern_3[1][2] = 0x00000000;
- pattern_3[1][3] = 0x00000000;
- pattern_3[1][4] = 0x00080000;
- pattern_3[1][5] = 0x00000000;
- pattern_3[1][6] = 0x00000000;
- pattern_3[1][7] = 0x00000000;
-
- pattern_3[2][0] = 0x00100000;
- pattern_3[2][1] = 0x00000000;
- pattern_3[2][2] = 0x00000000;
- pattern_3[2][3] = 0x00000000;
- pattern_3[2][4] = 0x00200000;
- pattern_3[2][5] = 0x00000000;
- pattern_3[2][6] = 0x00000000;
- pattern_3[2][7] = 0x00000000;
-
- pattern_3[3][0] = 0x00400000;
- pattern_3[3][1] = 0x00000000;
- pattern_3[3][2] = 0x00000000;
- pattern_3[3][3] = 0x00000000;
- pattern_3[3][4] = 0x00800000;
- pattern_3[3][5] = 0x00000000;
- pattern_3[3][6] = 0x00000000;
- pattern_3[3][7] = 0x00000000;
-
- ///*
- pattern_4[0][0] = 0x51c8c049 ;
- pattern_4[0][1] = 0x2d43592c ;
- pattern_4[0][2] = 0x0777b50b ;
- pattern_4[0][3] = 0x9cd2ebe5 ;
- pattern_4[0][4] = 0xc04199d5 ;
- pattern_4[0][5] = 0xdc968dc0 ;
- pattern_4[0][6] = 0xb8ba8a33 ;
- pattern_4[0][7] = 0x35e4327f ;
-
- pattern_4[1][0] = 0xae37c049 ;
- pattern_4[1][1] = 0xd2bc592c ;
- pattern_4[1][2] = 0xf888b50b ;
- pattern_4[1][3] = 0x632debe5 ;
- pattern_4[1][4] = 0x3fbe99d5 ;
- pattern_4[1][5] = 0x23698dc0 ;
- pattern_4[1][6] = 0x47458a33 ;
- pattern_4[1][7] = 0xca1b327f ;
-
- pattern_4[2][0] = 0x51373f49 ;
- pattern_4[2][1] = 0x2dbca62c ;
- pattern_4[2][2] = 0x07884a0b ;
- pattern_4[2][3] = 0x9c2d14e5 ;
- pattern_4[2][4] = 0xc0be66d5 ;
- pattern_4[2][5] = 0xdc6972c0 ;
- pattern_4[2][6] = 0xb8457533 ;
- pattern_4[2][7] = 0x351bcd7f ;
-
-
- pattern_4[3][0] = 0x51c8c049 ;
- pattern_4[3][1] = 0x2d43592c ;
- pattern_4[3][2] = 0x0777b50b ;
- pattern_4[3][3] = 0x9cd2ebe5 ;
- pattern_4[3][4] = 0xc04199d5 ;
- pattern_4[3][5] = 0xdc968dc0 ;
- pattern_4[3][6] = 0xb8ba8a33 ;
- pattern_4[3][7] = 0x35e4327f ;
-
- pattern_5[0][0] = 0xaec9c149 ;
- pattern_5[0][1] = 0xd243592c ;
- pattern_5[0][2] = 0xf877b50b ;
- pattern_5[0][3] = 0x63d2ebe5 ;
- pattern_5[0][4] = 0x3f439bd5 ;
- pattern_5[0][5] = 0x23968dc0 ;
- pattern_5[0][6] = 0x47ba8a33 ;
- pattern_5[0][7] = 0xcae4327f ;
- pattern_5[1][0] = 0xaeccc449 ;
- pattern_5[1][1] = 0xd243592c ;
- pattern_5[1][2] = 0xf877b50b ;
- pattern_5[1][3] = 0x63d2ebe5 ;
- pattern_5[1][4] = 0x3f4991d5 ;
- pattern_5[1][5] = 0x23968dc0 ;
- pattern_5[1][6] = 0x47ba8a33 ;
- pattern_5[1][7] = 0xcae4327f ;
- pattern_5[2][0] = 0xaed8d049 ;
- pattern_5[2][1] = 0xd243592c ;
- pattern_5[2][2] = 0xf877b50b ;
- pattern_5[2][3] = 0x63d2ebe5 ;
- pattern_5[2][4] = 0x3f61b9d5 ;
- pattern_5[2][5] = 0x23968dc0 ;
- pattern_5[2][6] = 0x47ba8a33 ;
- pattern_5[2][7] = 0xcae4327f ;
- pattern_5[3][0] = 0xae888049 ;
- pattern_5[3][1] = 0xd243592c ;
- pattern_5[3][2] = 0xf877b50b ;
- pattern_5[3][3] = 0x63d2ebe5 ;
- pattern_5[3][4] = 0x3fc119d5 ;
- pattern_5[3][5] = 0x23968dc0 ;
- pattern_5[3][6] = 0x47ba8a33 ;
- pattern_5[3][7] = 0xcae4327f ;
-
- pattern_6[0][0] = 0xaec93f49 ;
- pattern_6[0][1] = 0xd243a62c ;
- pattern_6[0][2] = 0xf8774a0b ;
- pattern_6[0][3] = 0x63d214e5 ;
- pattern_6[0][4] = 0x3f4366d5 ;
- pattern_6[0][5] = 0x239672c0 ;
- pattern_6[0][6] = 0x47ba7533 ;
- pattern_6[0][7] = 0xcae4cd7f ;
- pattern_6[1][0] = 0xaecc3f49 ;
- pattern_6[1][1] = 0xd243a62c ;
- pattern_6[1][2] = 0xf8774a0b ;
- pattern_6[1][3] = 0x63d214e5 ;
- pattern_6[1][4] = 0x3f4966d5 ;
- pattern_6[1][5] = 0x239672c0 ;
- pattern_6[1][6] = 0x47ba7533 ;
- pattern_6[1][7] = 0xcae4cd7f ;
- pattern_6[2][0] = 0xaed83f49 ;
- pattern_6[2][1] = 0xd243a62c ;
- pattern_6[2][2] = 0xf8774a0b ;
- pattern_6[2][3] = 0x63d214e5 ;
- pattern_6[2][4] = 0x3f6166d5 ;
- pattern_6[2][5] = 0x239672c0 ;
- pattern_6[2][6] = 0x47ba7533 ;
- pattern_6[2][7] = 0xcae4cd7f ;
- pattern_6[3][0] = 0xae883f49 ;
- pattern_6[3][1] = 0xd243a62c ;
- pattern_6[3][2] = 0xf8774a0b ;
- pattern_6[3][3] = 0x63d214e5 ;
- pattern_6[3][4] = 0x3fc166d5 ;
- pattern_6[3][5] = 0x239672c0 ;
- pattern_6[3][6] = 0x47ba7533 ;
- pattern_6[3][7] = 0xcae4cd7f ;
- //*/
- //*/
- start_addr=0x10000000;
- unsigned int test_size = 0x20;
- unsigned int test_addr;
- unsigned int temp_i=0;
- unsigned int temp_k=0;
- unsigned int pattern_o[8];
- unsigned int pattern_d[8];
- {
- // if(lflag)
- // loop = 888;
-
- //if(old_pattern_flag==1)
- {
-
- printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
-
- /*
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
-
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
- flush_dcache_range(start_addr,start_addr + test_size);
-
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- */
- //if(pattern_flag1==1)
- {
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_4[temp_k][temp_i])
- {error_count++;
- printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
- }
-
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
- }
-
- }
- }
- }
- }
- //if(pattern_flag2==1)
- {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
- }
- }
- }
- }
-
- }
-
- // if(pattern_flag3==1)
- {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_6[temp_k][temp_i])
- {error_count++;
- printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
- }
- }
- }
- }
- }
-
-
-
- }
-
- printf("\Error count==0x%08x", error_count);
- printf("\n \n");
- }
-
- if (error_count)
- return 1;
- else
- return 0;
-}
-
-int ddr_test_gx_training_pattern(int ddr_test_size)
-{
- unsigned int start_addr = 0x10000000;
- error_outof_count_flag=1;
- error_count=0;
-
- unsigned int des[8] ;
- unsigned int pattern_1[4][8] ;
- // unsigned int pattern_2[4][8] ;
- // unsigned int pattern_3[4][8] ;
- // unsigned int pattern_4[4][8] ;
- // unsigned int pattern_5[4][8] ;
- //unsigned int pattern_6[4][8] ;
-
- des[0] = 0xaec83f49;
- des[1] = 0xd243a62c;
- des[2] = 0xf8774a0b;
- des[3] = 0x63d214e5;
- des[4] = 0x3f4166d5;
- des[5] = 0x239672c0;
- des[6] = 0x47ba7533;
- des[7] = 0xcae4cd7f;
- /*
- pattern_1[0][0] = 0x55005500;
- pattern_1[0][1] = 0xaa00aa00;
- pattern_1[0][2] = 0x55005500;
- pattern_1[0][3] = 0xaa00aa00;
- pattern_1[0][4] = 0x55005500;
- pattern_1[0][5] = 0xaa00aa00;
- pattern_1[0][6] = 0x55005500;
- pattern_1[0][7] = 0xaa00aa00;
-
- pattern_1[1][0] = 0x55005500;
- pattern_1[1][1] = 0xaa00aa00;
- pattern_1[1][2] = 0x55005500;
- pattern_1[1][3] = 0xaa00aa00;
- pattern_1[1][4] = 0x55005500;
- pattern_1[1][5] = 0xaa00aa00;
- pattern_1[1][6] = 0x55005500;
- pattern_1[1][7] = 0xaa00aa00;
-
- pattern_1[2][0] = 0x55005500;
- pattern_1[2][1] = 0xaa00aa00;
- pattern_1[2][2] = 0x55005500;
- pattern_1[2][3] = 0xaa00aa00;
- pattern_1[2][4] = 0x55005500;
- pattern_1[2][5] = 0xaa00aa00;
- pattern_1[2][6] = 0x55005500;
- pattern_1[2][7] = 0xaa00aa00;
-
- pattern_1[3][0] = 0x55005500;
- pattern_1[3][1] = 0xaa00aa00;
- pattern_1[3][2] = 0x55005500;
- pattern_1[3][3] = 0xaa00aa00;
- pattern_1[3][4] = 0x55005500;
- pattern_1[3][5] = 0xaa00aa00;
- pattern_1[3][6] = 0x55005500;
- pattern_1[3][7] = 0xaa00aa00;
- */
- // /*
- pattern_1[0][0] = 0x55aa5500;
- pattern_1[0][1] = 0x55aa5500;
- pattern_1[0][2] = 0x55aa5500;
- pattern_1[0][3] = 0x55aa5500;
- pattern_1[0][4] = 0xaa00ff00;
- pattern_1[0][5] = 0xaa00ff00;
- pattern_1[0][6] = 0xaa00ff00;
- pattern_1[0][7] = 0xaa00ff00;
-
- pattern_1[1][0] = 0x55005500;
- pattern_1[1][1] = 0xaa00aa00;
- pattern_1[1][2] = 0x55005500;
- pattern_1[1][3] = 0xaa00aa00;
- pattern_1[1][4] = 0x55005500;
- pattern_1[1][5] = 0xaa00aa00;
- pattern_1[1][6] = 0x55005500;
- pattern_1[1][7] = 0xaa00aa00;
-
- pattern_1[2][0] = 0x0001fe00;
- pattern_1[2][1] = 0x0000ff00;
- pattern_1[2][2] = 0x0000ff00;
- pattern_1[2][3] = 0x0000ff00;
- pattern_1[2][4] = 0x0002fd00;
- pattern_1[2][5] = 0x0000ff00;
- pattern_1[2][6] = 0x0000ff00;
- pattern_1[2][7] = 0x0000ff00;
-
- pattern_1[3][0] = 0x0004fb00;
- pattern_1[3][1] = 0x0000ff00;
- pattern_1[3][2] = 0x0000ff00;
- pattern_1[3][3] = 0x0000ff00;
- pattern_1[3][4] = 0x0008f700;
- pattern_1[3][5] = 0x0000ff00;
- pattern_1[3][6] = 0x0000ff00;
- pattern_1[3][7] = 0x0000ff00;
- //*/
- /*
- pattern_2[0][0] = 0x0001fe00;
- pattern_2[0][1] = 0x0000ff00;
- pattern_2[0][2] = 0x0000ff00;
- pattern_2[0][3] = 0x0000ff00;
- pattern_2[0][4] = 0x0002fd00;
- pattern_2[0][5] = 0x0000ff00;
- pattern_2[0][6] = 0x0000ff00;
- pattern_2[0][7] = 0x0000ff00;
-
- pattern_2[1][0] = 0x0004fb00;
- pattern_2[1][1] = 0x0000ff00;
- pattern_2[1][2] = 0x0000ff00;
- pattern_2[1][3] = 0x0000ff00;
- pattern_2[1][4] = 0x0008f700;
- pattern_2[1][5] = 0x0000ff00;
- pattern_2[1][6] = 0x0000ff00;
- pattern_2[1][7] = 0x0000ff00;
-
- pattern_2[2][0] = 0x0010ef00;
- pattern_2[2][1] = 0x0000ff00;
- pattern_2[2][2] = 0x0000ff00;
- pattern_2[2][3] = 0x0000ff00;
- pattern_2[2][4] = 0x0020df00;
- pattern_2[2][5] = 0x0000ff00;
- pattern_2[2][6] = 0x0000ff00;
- pattern_2[2][7] = 0x0000ff00;
-
- pattern_2[3][0] = 0x0040bf00;
- pattern_2[3][1] = 0x0000ff00;
- pattern_2[3][2] = 0x0000ff00;
- pattern_2[3][3] = 0x0000ff00;
- pattern_2[3][4] = 0x00807f00;
- pattern_2[3][5] = 0x0000ff00;
- pattern_2[3][6] = 0x0000ff00;
- pattern_2[3][7] = 0x0000ff00;
-
- pattern_3[0][0] = 0x00010000;
- pattern_3[0][1] = 0x00000000;
- pattern_3[0][2] = 0x00000000;
- pattern_3[0][3] = 0x00000000;
- pattern_3[0][4] = 0x00020000;
- pattern_3[0][5] = 0x00000000;
- pattern_3[0][6] = 0x00000000;
- pattern_3[0][7] = 0x00000000;
-
- pattern_3[1][0] = 0x00040000;
- pattern_3[1][1] = 0x00000000;
- pattern_3[1][2] = 0x00000000;
- pattern_3[1][3] = 0x00000000;
- pattern_3[1][4] = 0x00080000;
- pattern_3[1][5] = 0x00000000;
- pattern_3[1][6] = 0x00000000;
- pattern_3[1][7] = 0x00000000;
-
- pattern_3[2][0] = 0x00100000;
- pattern_3[2][1] = 0x00000000;
- pattern_3[2][2] = 0x00000000;
- pattern_3[2][3] = 0x00000000;
- pattern_3[2][4] = 0x00200000;
- pattern_3[2][5] = 0x00000000;
- pattern_3[2][6] = 0x00000000;
- pattern_3[2][7] = 0x00000000;
-
- pattern_3[3][0] = 0x00400000;
- pattern_3[3][1] = 0x00000000;
- pattern_3[3][2] = 0x00000000;
- pattern_3[3][3] = 0x00000000;
- pattern_3[3][4] = 0x00800000;
- pattern_3[3][5] = 0x00000000;
- pattern_3[3][6] = 0x00000000;
- pattern_3[3][7] = 0x00000000;
-
-
- pattern_4[0][0] = 0x51c8c049 ;
- pattern_4[0][1] = 0x2d43592c ;
- pattern_4[0][2] = 0x0777b50b ;
- pattern_4[0][3] = 0x9cd2ebe5 ;
- pattern_4[0][4] = 0xc04199d5 ;
- pattern_4[0][5] = 0xdc968dc0 ;
- pattern_4[0][6] = 0xb8ba8a33 ;
- pattern_4[0][7] = 0x35e4327f ;
-
- pattern_4[1][0] = 0xae37c049 ;
- pattern_4[1][1] = 0xd2bc592c ;
- pattern_4[1][2] = 0xf888b50b ;
- pattern_4[1][3] = 0x632debe5 ;
- pattern_4[1][4] = 0x3fbe99d5 ;
- pattern_4[1][5] = 0x23698dc0 ;
- pattern_4[1][6] = 0x47458a33 ;
- pattern_4[1][7] = 0xca1b327f ;
-
- pattern_4[2][0] = 0x51373f49 ;
- pattern_4[2][1] = 0x2dbca62c ;
- pattern_4[2][2] = 0x07884a0b ;
- pattern_4[2][3] = 0x9c2d14e5 ;
- pattern_4[2][4] = 0xc0be66d5 ;
- pattern_4[2][5] = 0xdc6972c0 ;
- pattern_4[2][6] = 0xb8457533 ;
- pattern_4[2][7] = 0x351bcd7f ;
-
-
- pattern_4[3][0] = 0x51c8c049 ;
- pattern_4[3][1] = 0x2d43592c ;
- pattern_4[3][2] = 0x0777b50b ;
- pattern_4[3][3] = 0x9cd2ebe5 ;
- pattern_4[3][4] = 0xc04199d5 ;
- pattern_4[3][5] = 0xdc968dc0 ;
- pattern_4[3][6] = 0xb8ba8a33 ;
- pattern_4[3][7] = 0x35e4327f ;
-
- pattern_5[0][0] = 0xaec9c149 ;
- pattern_5[0][1] = 0xd243592c ;
- pattern_5[0][2] = 0xf877b50b ;
- pattern_5[0][3] = 0x63d2ebe5 ;
- pattern_5[0][4] = 0x3f439bd5 ;
- pattern_5[0][5] = 0x23968dc0 ;
- pattern_5[0][6] = 0x47ba8a33 ;
- pattern_5[0][7] = 0xcae4327f ;
- pattern_5[1][0] = 0xaeccc449 ;
- pattern_5[1][1] = 0xd243592c ;
- pattern_5[1][2] = 0xf877b50b ;
- pattern_5[1][3] = 0x63d2ebe5 ;
- pattern_5[1][4] = 0x3f4991d5 ;
- pattern_5[1][5] = 0x23968dc0 ;
- pattern_5[1][6] = 0x47ba8a33 ;
- pattern_5[1][7] = 0xcae4327f ;
- pattern_5[2][0] = 0xaed8d049 ;
- pattern_5[2][1] = 0xd243592c ;
- pattern_5[2][2] = 0xf877b50b ;
- pattern_5[2][3] = 0x63d2ebe5 ;
- pattern_5[2][4] = 0x3f61b9d5 ;
- pattern_5[2][5] = 0x23968dc0 ;
- pattern_5[2][6] = 0x47ba8a33 ;
- pattern_5[2][7] = 0xcae4327f ;
- pattern_5[3][0] = 0xae888049 ;
- pattern_5[3][1] = 0xd243592c ;
- pattern_5[3][2] = 0xf877b50b ;
- pattern_5[3][3] = 0x63d2ebe5 ;
- pattern_5[3][4] = 0x3fc119d5 ;
- pattern_5[3][5] = 0x23968dc0 ;
- pattern_5[3][6] = 0x47ba8a33 ;
- pattern_5[3][7] = 0xcae4327f ;
-
- pattern_6[0][0] = 0xaec93f49 ;
- pattern_6[0][1] = 0xd243a62c ;
- pattern_6[0][2] = 0xf8774a0b ;
- pattern_6[0][3] = 0x63d214e5 ;
- pattern_6[0][4] = 0x3f4366d5 ;
- pattern_6[0][5] = 0x239672c0 ;
- pattern_6[0][6] = 0x47ba7533 ;
- pattern_6[0][7] = 0xcae4cd7f ;
- pattern_6[1][0] = 0xaecc3f49 ;
- pattern_6[1][1] = 0xd243a62c ;
- pattern_6[1][2] = 0xf8774a0b ;
- pattern_6[1][3] = 0x63d214e5 ;
- pattern_6[1][4] = 0x3f4966d5 ;
- pattern_6[1][5] = 0x239672c0 ;
- pattern_6[1][6] = 0x47ba7533 ;
- pattern_6[1][7] = 0xcae4cd7f ;
- pattern_6[2][0] = 0xaed83f49 ;
- pattern_6[2][1] = 0xd243a62c ;
- pattern_6[2][2] = 0xf8774a0b ;
- pattern_6[2][3] = 0x63d214e5 ;
- pattern_6[2][4] = 0x3f6166d5 ;
- pattern_6[2][5] = 0x239672c0 ;
- pattern_6[2][6] = 0x47ba7533 ;
- pattern_6[2][7] = 0xcae4cd7f ;
- pattern_6[3][0] = 0xae883f49 ;
- pattern_6[3][1] = 0xd243a62c ;
- pattern_6[3][2] = 0xf8774a0b ;
- pattern_6[3][3] = 0x63d214e5 ;
- pattern_6[3][4] = 0x3fc166d5 ;
- pattern_6[3][5] = 0x239672c0 ;
- pattern_6[3][6] = 0x47ba7533 ;
- pattern_6[3][7] = 0xcae4cd7f ;
- */
- //*/
- //*/
- start_addr=0x10000000;
- unsigned int test_size = 0x20;
- unsigned int test_addr;
- unsigned int temp_i=0;
- unsigned int temp_k=0;
- unsigned int pattern_o[8];
- unsigned int pattern_d[8];
- {
- // if(lflag)
- // loop = 888;
-
- //if(old_pattern_flag==1)
- {
-
- printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
-
- /*
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
-
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
- flush_dcache_range(start_addr,start_addr + test_size);
-
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- */
- //if(pattern_flag1==1)
- {
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- if ((pattern_o[temp_i]) != (des_pattern(temp_i,1,temp_k,temp_i)))
- {error_count++;
- // printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
- printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,1,temp_k,temp_i),pattern_1[temp_k][temp_i]);
- }
-
-
- }
- }
- }
-
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),des_inv_pattern(temp_i,1,temp_k,temp_i))) != pattern_d[temp_i])
- {error_count++;
- printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",
- pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_1[temp_k][temp_i]),pattern_d[temp_i]);
- }
-
- }
- }
- }
-
- }
- }
-
- printf("\Error count==0x%08x", error_count);
- printf("\n \n");
- }
- if (error_count)
- return 1;
- else
- return 0;
-}
-
-#endif
-
-static void ddr_write_pattern4_cross_talk_p(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
- //#define ddr_pattern_loop 32
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 8:
- case 9:
- case 10:
- case 11:
- case 16:
- case 17:
- case 18:
- case 19:
- case 24:
- case 25:
- case 26:
- case 27:
- // case 30:
- *(p+i) = TDATA32F;
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- case 12:
- case 13:
- case 14:
- case 15:
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- // case 22:
- *(p+i) = 0;
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- // case 30:
- *(p+i) = TDATA32A;
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- *(p+i) = TDATA325;
-
-
- break;
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- *(p+i) =0xfe01fe01;
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- *(p+i) =0xfd02fd02;
- break;
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- *(p+i) =0xfb04fb04;
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- *(p+i) =0xf708f708;
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- *(p+i) =0xef10ef10;
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- *(p+i) =0xdf20df20;
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- *(p+i) =0xbf40bf40;
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- *(p+i) =0x7f807f80;
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- *(p+i) =0x00000100;
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- *(p+i) =0x00000200;
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- *(p+i) =0x00000400;
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- *(p+i) =0x00000800;
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- *(p+i) =0x00001000;
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- *(p+i) =0x00002000;
- break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- *(p+i) =0x00004000;
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- *(p+i) =0x00008000;
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_write_pattern4_cross_talk_p2(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
- //#define ddr_pattern_loop 32
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
-
- switch (i)
- {
-
- case 0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_3+3:
- *(p+i) = 0xfe01fe01;
- break;
- case 4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_3+7:
- *(p+i) = 0xfd02fd02;
- break;
-
- case 8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_3+11:
- *(p+i) = 0xfb04fb04;
- break;
-
- case 12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_3+15:
- *(p+i) = 0xf708f708;
- break;
-
- case 16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_3+19:
- *(p+i) = 0xef10ef10;
- break;
-
- case 20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_3+23:
- *(p+i) = 0xdf20df20;
- break;
-
- case 24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_3+27:
- *(p+i) = 0xbf40bf40;
- break;
-
- case 28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_3+31:
- *(p+i) = 0x7f807f80;
- break;
-
-
- default:
-
- *(p+i) = 0xff00ff00;
- break;
-
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-static void ddr_read_pattern4_cross_talk_p(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
-
- switch (i)
- {
-
- case 0:
- case 1:
- case 2:
- case 3:
- case 8:
- case 9:
- case 10:
- case 11:
- case 16:
- case 17:
- case 18:
- case 19:
- case 24:
- case 25:
- case 26:
- case 27:
- // case 30:
- // *(p+i) = TDATA32F;
- if (*(p+i) != TDATA32F)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
- break;
- }
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- case 12:
- case 13:
- case 14:
- case 15:
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- // case 22:
- // *(p+i) = 0;
- if (*(p+i) != 0)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0);
- break;}
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- // case 30:
- // *(p+i) = TDATA32A;
- if (*(p+i) != TDATA32A)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32A);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- // *(p+i) = TDATA325;
- if (*(p+i) != TDATA325)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA325);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- // *(p+i) =0xfe01fe01;
- if (*(p+i) !=0xfe01fe01)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfe01fe01);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- // *(p+i) =0xfd02fd02;
- if (*(p+i) != 0xfd02fd02)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfd02fd02);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- // *(p+i) =0xfb04fb04;
- if (*(p+i) != 0xfb04fb04)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfb04fb04);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- // *(p+i) =0xf7b08f708;
- if (*(p+i) != 0xf708f708)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xf708f708);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- // *(p+i) =0xef10ef10;
- if (*(p+i) != 0xef10ef10)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xef10ef10);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- // *(p+i) =0xdf20df20;
- if (*(p+i) != 0xdf20df20)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xdf20df20);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- // *(p+i) =0xbf40bf40;
- if (*(p+i) != 0xbf40bf40)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xbf40bf40);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- // *(p+i) =0x7f807f80;
- if (*(p+i) != 0x7f807f80)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x7f807f80);
- break;
-
- }
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- // *(p+i) =0x00000100;
- if (*(p+i) != 0x00000100)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000100);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- // *(p+i) =0x00000100;
- if (*(p+i) != 0x00000200)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000200);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- // *(p+i) =0x00000100;
- if (*(p+i) != 0x00000400)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000400);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- // *(p+i) =0x00000100;
- if (*(p+i) != 0x00000800)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000800);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != 0x00001000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00001000);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != 0x00002000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00002000);
-
- } break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != 0x00004000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00004000);
- break;
- }
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != 0x00008000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00008000);
- break;
- }
- break;
-
-
-
- }
- }
-
- if (m_len > 128*4)
- {
- m_len -= 128*4;
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-//*/
-static void ddr_read_pattern4_cross_talk_p2(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
-
- switch (i)
- {
- case 0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_3+3:
- // *(p+i) = 0xfe01fe01;
- if (*(p+i) != 0xfe01fe01)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfe01fe01);
- break;
- }
- break;
- case 4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_3+7:
- // *(p+i) = 0xfd02fd02;
- if (*(p+i) != 0xfd02fd02)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfd02fd02);
- break;
- }
- break;
-
- case 8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_3+11:
- // *(p+i) = 0xfb04fb04;
- if (*(p+i) != 0xfb04fb04)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfb04fb04);
- break;
- }
- break;
-
- case 12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_3+15:
- // *(p+i) = 0xf708f708;
- if (*(p+i) != 0xf708f708)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xf708f708);
- break;
- }
- break;
-
- case 16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_3+19:
- // *(p+i) = 0xef10ef10;
- if (*(p+i) != 0xef10ef10)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xef10ef10);
- break;
- }
- break;
-
- case 20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_3+23:
- // *(p+i) = 0xdf20df20;
- if (*(p+i) != 0xdf20df20)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xdf20df20);
- break;
- }
- break;
-
- case 24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_3+27:
- // *(p+i) = 0xbf40bf40;
- if (*(p+i) != 0xbf40bf40)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xbf40bf40);
- break;
- }
- break;
- case 28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_3+31:
- // *(p+i) = 0x7f807f80;
- if (*(p+i) != 0x7f807f80)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x7f807f80);
- break;
- }
- break;
-
-
- default:
-
- // *(p+i) = 0xff00ff00;
- if (*(p+i) != 0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
- break;
- }
- break;
-
- break;
-
-
- }
- }
-
- if (m_len > 128*4)
- {
- m_len -= 128*4;
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_write_pattern4_cross_talk_n(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
- //#define ddr_pattern_loop 32
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 8:
- case 9:
- case 10:
- case 11:
- case 16:
- case 17:
- case 18:
- case 19:
- case 24:
- case 25:
- case 26:
- case 27:
- // case 30:
- *(p+i) = ~TDATA32F;
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- case 12:
- case 13:
- case 14:
- case 15:
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- // case 22:
- *(p+i) = ~0;
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- // case 30:
- *(p+i) = ~TDATA32A;
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- *(p+i) =~TDATA325;
-
-
- break;
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- *(p+i) =~0xfe01fe01;
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- *(p+i) =~0xfd02fd02;
- break;
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- *(p+i) =~0xfb04fb04;
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- *(p+i) =~0xf708f708;
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- *(p+i) =~0xef10ef10;
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- *(p+i) =~0xdf20df20;
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- *(p+i) =~0xbf40bf40;
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- *(p+i) =~0x7f807f80;
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- *(p+i) =~0x00000100;
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- *(p+i) =~0x00000200;
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- *(p+i) =~0x00000400;
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- *(p+i) =~0x00000800;
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- *(p+i) =~0x00001000;
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- *(p+i) =~0x00002000;
- break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- *(p+i) =~0x00004000;
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- *(p+i) =~0x00008000;
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-
-static void ddr_write_pattern4_cross_talk_n2(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
- //#define ddr_pattern_loop 32
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
-
- switch (i)
- {
- case 0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_3+3:
- *(p+i) = ~0xfe01fe01;
- break;
- case 4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_3+7:
- *(p+i) = ~0xfd02fd02;
- break;
-
- case 8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_3+11:
- *(p+i) = ~0xfb04fb04;
- break;
-
- case 12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_3+15:
- *(p+i) = ~0xf708f708;
- break;
-
- case 16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_3+19:
- *(p+i) = ~0xef10ef10;
- break;
-
- case 20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_3+23:
- *(p+i) = ~0xdf20df20;
- break;
-
- case 24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_3+27:
- *(p+i) =~0xbf40bf40;
- break;
- case 28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_3+31:
- *(p+i) = ~0x7f807f80;
- break;
-
-
- default:
-
- *(p+i) = ~0xff00ff00;
- break;
-
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_read_pattern4_cross_talk_n(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 8:
- case 9:
- case 10:
- case 11:
- case 16:
- case 17:
- case 18:
- case 19:
- case 24:
- case 25:
- case 26:
- case 27:
- // case 30:
- // *(p+i) = TDATA32F;
- if (*(p+i) !=~TDATA32F)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~TDATA32F);
- break;
- }
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- case 12:
- case 13:
- case 14:
- case 15:
- case 20:
- case 21:
- case 22:
- case 23:
- case 28:
- case 29:
- case 30:
- case 31:
- // case 22:
- // *(p+i) = 0;
- if (*(p+i) !=~0)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0);
- }
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- // case 30:
- // *(p+i) = TDATA32A;
- if (*(p+i) != ~TDATA32A)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i),~TDATA32A);
- }
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- // *(p+i) = TDATA325;
- if (*(p+i) != ~TDATA325)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~TDATA325);
- }
- break;
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- // *(p+i) =0xfe01fe01;
- if (*(p+i) !=~0xfe01fe01)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfe01fe01);
- }
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- // *(p+i) =0xfd02fd02;
- if (*(p+i) != ~0xfd02fd02)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfd02fd02);
- }
- break;
-
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- // *(p+i) =0xfb04fb04;
- if (*(p+i) != ~0xfb04fb04)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfb04fb04);
- }
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- // *(p+i) =0xf7b08f708;
- if (*(p+i) != ~0xf708f708)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xf708f708);
- }
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- // *(p+i) =0xef10ef10;
- if (*(p+i) != ~0xef10ef10)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xef10ef10);
- }
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- // *(p+i) =0xdf20df20;
- if (*(p+i) != ~0xdf20df20)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xdf20df20);
- }
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- // *(p+i) =0xbf40bf40;
- if (*(p+i) != ~0xbf40bf40)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xbf40bf40);
- }
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- // *(p+i) =0x7f807f80;
- if (*(p+i) != ~0x7f807f80)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x7f807f80);
- }
- break;
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- // *(p+i) =0x00000100;
- if (*(p+i) != ~0x00000100)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000100);
- }
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- // *(p+i) =0x00000100;
- if (*(p+i) != ~0x00000200)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000200);
- }
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- // *(p+i) =0x00000100;
- if (*(p+i) != ~0x00000400)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000400);
- }
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- // *(p+i) =0x00000100;
- if (*(p+i) != ~0x00000800)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000800);
- }
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != ~0x00001000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00001000);
- }
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != ~0x00002000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00002000);
- }
- break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != ~0x00004000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00004000);
- }
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- // *(p+i) =0xfffffeff;
- if (*(p+i) != ~0x00008000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00008000);
- }
- break;
-
-
-
- }
- }
-
- if (m_len > 128*4)
- {
- m_len -= 128*4;
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-
-//*/
-static void ddr_read_pattern4_cross_talk_n2(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
-
- switch (i)
- {
- case 0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_3+3:
- // *(p+i) = 0xfe01fe01;
- if (*(p+i) != ~0xfe01fe01)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfe01fe01);
- break;
- }
- break;
- case 4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_3+7:
- // *(p+i) = 0xfd02fd02;
- if (*(p+i) != ~0xfd02fd02)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfd02fd02);
- break;
- }
- break;
-
- case 8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_3+11:
- // *(p+i) = 0xfb04fb04;
- if (*(p+i) != ~0xfb04fb04)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfb04fb04);
- break;
- }
- break;
-
- case 12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_3+15:
- // *(p+i) = 0xf708f708;
- if (*(p+i) != ~0xf708f708)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xf708f708);
- break;
- }
- break;
-
- case 16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_3+19:
- // *(p+i) = 0xef10ef10;
- if (*(p+i) != ~0xef10ef10)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xef10ef10);
- break;
- }
- break;
-
- case 20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_3+23:
- // *(p+i) = 0xdf20df20;
- if (*(p+i) != ~0xdf20df20)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xdf20df20);
- break;
- }
- break;
-
- case 24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_3+27:
- // *(p+i) = 0xbf40bf40;
- if (*(p+i) != ~0xbf40bf40)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xbf40bf40);
- break;
- }
- break;
- case 28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_3+31:
- // *(p+i) = 0x7f807f80;
- if (*(p+i) != ~0x7f807f80)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x7f807f80);
- break;
- }
- break;
-
-
- default:
-
- // *(p+i) = 0xff00ff00;
- if (*(p+i) != ~0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
- break;
- }
- break;
-
- break;
-
-
- }
- }
-
- if (m_len > 128*4)
- {
- m_len -= 128*4;
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_write_pattern4_no_cross_talk(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
- //#define ddr_pattern_loop 32
- p = ( unsigned int *)buff;
-
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- *(p+i) = 0xff00ff00;
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- *(p+i) = 0xffff0000;
- break;
-
- case 8:
- case 9:
- case 10:
- case 11:
- *(p+i) = 0xff000000;
- break;
- case 12:
- case 13:
- case 14:
- case 15:
- *(p+i) = 0xff00ffff;
- break;
-
- case 16:
- case 17:
- case 18:
- case 19:
- *(p+i) = 0xff00ffff;
- break;
- case 20:
- case 21:
- case 22:
- case 23:
- *(p+i) = 0xff0000ff;
- break;
- case 24:
- case 25:
- case 26:
- case 27:
- *(p+i) = 0xffff0000;
- break;
-
- case 28:
- case 29:
- case 30:
- case 31:
- *(p+i) = 0x00ff00ff;
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- *(p+i) =~0xff00ff00;
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- *(p+i) =~0xffff0000;
- break;
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- *(p+i) =~0xff000000;
- break;
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- *(p+i) =~0xff00ffff;
- break;
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- *(p+i) =~0xff00ffff;
- break;
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- *(p+i) =~0xff00ffff;
- break;
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- *(p+i) =~0xffff0000;
- break;
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- *(p+i) =~0x00ff00ff;
- break;
-
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- *(p+i) =0x00ff0000;
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- *(p+i) =0xff000000;
- break;
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- *(p+i) =0x0000ffff;
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- *(p+i) =0x000000ff;
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- *(p+i) =0x00ff00ff;
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- *(p+i) =0xff00ff00;
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- *(p+i) =0xff00ffff;
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- *(p+i) =0xff00ff00;
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- *(p+i) =~0x00ff0000;
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- *(p+i) =~0xff000000;
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- *(p+i) =~0x0000ffff;
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- *(p+i) =~0x000000ff;
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- *(p+i) =~0x00ff00ff;
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- *(p+i) =~0xff00ff00;
- break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- *(p+i) =~0xff00ffff;
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- *(p+i) =~0xff00ff00;
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-static void ddr_read_pattern4_no_cross_talk(void *buff, unsigned int m_length)
-{
- unsigned int *p;
- // unsigned int i, j, n;
- unsigned int i, n;
- unsigned int m_len = m_length;
-
- p = ( unsigned int *)buff;
- while (m_len)
- {
- // for(j=0;j<32;j++)
- {
- if (m_len >= 128*4)
- n = 32*4;
- else
- n = m_len>>2;
-
- for (i = 0; i < n; i++)
- {
-#ifdef DDR_PREFETCH_CACHE
- ddr_pld_cache(p) ;
-#endif
- if ((error_outof_count_flag) && (error_count))
- {
- printf("Error data out of count");
- m_len=0;
- break;
- }
- switch (i)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- // if(*(p+i) !=~TDATA32F)
-
- if ( *(p+i) != 0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
- }
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- if ( *(p+i) != 0xffff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xffff0000);
- }
- break;
-
- case 8:
- case 9:
- case 10:
- case 11:
- // *(p+i) = 0xff000000;
- if ( *(p+i) != 0xff000000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff000000);
- }
- break;
- case 12:
- case 13:
- case 14:
- case 15:
- // *(p+i) = 0xff00ffff;
- if ( *(p+i) != 0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
- }
- break;
-
- case 16:
- case 17:
- case 18:
- case 19:
- // *(p+i) = 0xff00ffff;
- if ( *(p+i) != 0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
- }
- break;
- case 20:
- case 21:
- case 22:
- case 23:
- // *(p+i) = 0xff0000ff;
- if ( *(p+i) != 0xff0000ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff0000ff);
- }
- break;
- case 24:
- case 25:
- case 26:
- case 27:
- // *(p+i) = 0xffff0000;
- if ( *(p+i) != 0xffff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xffff0000);
- }
- break;
-
- case 28:
- case 29:
- case 30:
- case 31:
- // *(p+i) = 0x00ff00ff;
- if ( *(p+i) != 0x00ff00ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff00ff);
- }
- break;
- case DDR_PATTERN_LOOP_1+0:
- case DDR_PATTERN_LOOP_1+1:
- case DDR_PATTERN_LOOP_1+2:
- case DDR_PATTERN_LOOP_1+3:
- // *(p+i) =~0xff00ff00;
- if ( *(p+i) != ~0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
- }
- break;
- case DDR_PATTERN_LOOP_1+4:
- case DDR_PATTERN_LOOP_1+5:
- case DDR_PATTERN_LOOP_1+6:
- case DDR_PATTERN_LOOP_1+7:
- // *(p+i) =~0xffff0000;
- if ( *(p+i) != ~0xffff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xffff0000);
- }
- break;
- case DDR_PATTERN_LOOP_1+8:
- case DDR_PATTERN_LOOP_1+9:
- case DDR_PATTERN_LOOP_1+10:
- case DDR_PATTERN_LOOP_1+11:
- // *(p+i) =~0xff000000;
- if ( *(p+i) != ~0xff000000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff000000);
- }
- break;
- case DDR_PATTERN_LOOP_1+12:
- case DDR_PATTERN_LOOP_1+13:
- case DDR_PATTERN_LOOP_1+14:
- case DDR_PATTERN_LOOP_1+15:
- // *(p+i) =~0xff00ffff;
- if ( *(p+i) != ~0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
- }
- break;
- case DDR_PATTERN_LOOP_1+16:
- case DDR_PATTERN_LOOP_1+17:
- case DDR_PATTERN_LOOP_1+18:
- case DDR_PATTERN_LOOP_1+19:
- // *(p+i) =~0xff00ffff;
- if ( *(p+i) != ~0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
- }
- break;
- case DDR_PATTERN_LOOP_1+20:
- case DDR_PATTERN_LOOP_1+21:
- case DDR_PATTERN_LOOP_1+22:
- case DDR_PATTERN_LOOP_1+23:
- // *(p+i) =~0xff00ffff;
- if ( *(p+i) != ~0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
- }
- break;
- case DDR_PATTERN_LOOP_1+24:
- case DDR_PATTERN_LOOP_1+25:
- case DDR_PATTERN_LOOP_1+26:
- case DDR_PATTERN_LOOP_1+27:
- // *(p+i) =~0xffff0000;
- if ( *(p+i) != ~0xffff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xffff0000);
- }
- break;
- case DDR_PATTERN_LOOP_1+28:
- case DDR_PATTERN_LOOP_1+29:
- case DDR_PATTERN_LOOP_1+30:
- case DDR_PATTERN_LOOP_1+31:
- // *(p+i) =~0x00ff00ff;
- if ( *(p+i) != ~0x00ff00ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff00ff);
- }
- break;
-
- case DDR_PATTERN_LOOP_2+0:
- case DDR_PATTERN_LOOP_2+1:
- case DDR_PATTERN_LOOP_2+2:
- case DDR_PATTERN_LOOP_2+3:
- // *(p+i) =0x00ff0000;
- if ( *(p+i) != 0x00ff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff0000);
- }
- break;
- case DDR_PATTERN_LOOP_2+4:
- case DDR_PATTERN_LOOP_2+5:
- case DDR_PATTERN_LOOP_2+6:
- case DDR_PATTERN_LOOP_2+7:
- // *(p+i) =0xff000000;
- if ( *(p+i) != 0xff000000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff000000);
- }
- break;
- case DDR_PATTERN_LOOP_2+8:
- case DDR_PATTERN_LOOP_2+9:
- case DDR_PATTERN_LOOP_2+10:
- case DDR_PATTERN_LOOP_2+11:
- // *(p+i) =0x0000ffff;
- if ( *(p+i) != 0x0000ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x0000ffff);
- }
- break;
- case DDR_PATTERN_LOOP_2+12:
- case DDR_PATTERN_LOOP_2+13:
- case DDR_PATTERN_LOOP_2+14:
- case DDR_PATTERN_LOOP_2+15:
- // *(p+i) =0x000000ff;
- if ( *(p+i) != 0x000000ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x000000ff);
- }
- break;
- case DDR_PATTERN_LOOP_2+16:
- case DDR_PATTERN_LOOP_2+17:
- case DDR_PATTERN_LOOP_2+18:
- case DDR_PATTERN_LOOP_2+19:
- // *(p+i) =0x00ff00ff;
- if ( *(p+i) != 0x00ff00ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff00ff);
- }
- break;
- case DDR_PATTERN_LOOP_2+20:
- case DDR_PATTERN_LOOP_2+21:
- case DDR_PATTERN_LOOP_2+22:
- case DDR_PATTERN_LOOP_2+23:
- // *(p+i) =0xff00ff00;
- if ( *(p+i) != 0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
- }
- break;
- case DDR_PATTERN_LOOP_2+24:
- case DDR_PATTERN_LOOP_2+25:
- case DDR_PATTERN_LOOP_2+26:
- case DDR_PATTERN_LOOP_2+27:
- // *(p+i) =0xff00ffff;
- if ( *(p+i) != 0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
- }
- break;
- case DDR_PATTERN_LOOP_2+28:
- case DDR_PATTERN_LOOP_2+29:
- case DDR_PATTERN_LOOP_2+30:
- case DDR_PATTERN_LOOP_2+31:
- // *(p+i) =0xff00ff00;
- if ( *(p+i) != 0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
- }
- break;
- case DDR_PATTERN_LOOP_3+0:
- case DDR_PATTERN_LOOP_3+1:
- case DDR_PATTERN_LOOP_3+2:
- case DDR_PATTERN_LOOP_3+3:
- // *(p+i) =~0x00ff0000;
- if ( *(p+i) != ~0x00ff0000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff0000);
- }
- break;
- case DDR_PATTERN_LOOP_3+4:
- case DDR_PATTERN_LOOP_3+5:
- case DDR_PATTERN_LOOP_3+6:
- case DDR_PATTERN_LOOP_3+7:
- // *(p+i) =~0xff000000;
- if ( *(p+i) != ~0xff000000)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff000000);
- }
- break;
- case DDR_PATTERN_LOOP_3+8:
- case DDR_PATTERN_LOOP_3+9:
- case DDR_PATTERN_LOOP_3+10:
- case DDR_PATTERN_LOOP_3+11:
- // *(p+i) =~0x0000ffff;
- if ( *(p+i) != ~0x0000ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x0000ffff);
- }
- break;
- case DDR_PATTERN_LOOP_3+12:
- case DDR_PATTERN_LOOP_3+13:
- case DDR_PATTERN_LOOP_3+14:
- case DDR_PATTERN_LOOP_3+15:
- // *(p+i) =~0x000000ff;
- if ( *(p+i) != ~0x000000ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x000000ff);
- }
- break;
- case DDR_PATTERN_LOOP_3+16:
- case DDR_PATTERN_LOOP_3+17:
- case DDR_PATTERN_LOOP_3+18:
- case DDR_PATTERN_LOOP_3+19:
- // *(p+i) =~0x00ff00ff;
- if ( *(p+i) != ~0x00ff00ff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff00ff);
- }
- break;
- case DDR_PATTERN_LOOP_3+20:
- case DDR_PATTERN_LOOP_3+21:
- case DDR_PATTERN_LOOP_3+22:
- case DDR_PATTERN_LOOP_3+23:
- // *(p+i) =~0xff00ff00;
- if ( *(p+i) != ~0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
- }
- break;
- case DDR_PATTERN_LOOP_3+24:
- case DDR_PATTERN_LOOP_3+25:
- case DDR_PATTERN_LOOP_3+26:
- case DDR_PATTERN_LOOP_3+27:
- // *(p+i) =~0xff00ffff;
- if ( *(p+i) != ~0xff00ffff)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
- }
- break;
- case DDR_PATTERN_LOOP_3+28:
- case DDR_PATTERN_LOOP_3+29:
- case DDR_PATTERN_LOOP_3+30:
- case DDR_PATTERN_LOOP_3+31:
- // *(p+i) =~0xff00ff00;
- if ( *(p+i) != ~0xff00ff00)
- {error_count++;
- printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
- }
- break;
-
-
- }
- }
-
- if (m_len >( 128*4))
- {
- m_len -=( 128*4);
- p += 32*4;
- }
- else
- {
- p += (m_len>>2);
- m_len = 0;
- break;
- }
- }
- }
-}
-
-
-
-int do_ddr_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- unsigned int loop = 1;
- unsigned int lflag = 0;
- unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int test_size = DDR_TEST_SIZE;
- unsigned int simple_pattern_flag = 1;
- unsigned int cross_talk_pattern_flag = 1;
- unsigned int old_pattern_flag = 1;
-
- unsigned int print_flag = 1;
- // copy_test_flag = 0;
- print_flag = 1;
- error_outof_count_flag =0;
- error_count =0;
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- if (!argc)
- goto DDR_TEST_START;
- if (argc > 1) {
- if (strcmp(argv[1], "l") == 0) {
- lflag = 1;
- }
- else if (strcmp(argv[1], "h") == 0){
- goto usage;
- }
- else{
- loop = simple_strtoull_ddr(argv[1], &endp, 10);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
- }
- }
- // printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==1) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- // if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
- loop = 1;
-
- }
- if (argc > 2) {
- start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
-
- }
- if (argc > 3) {
- test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- test_size = DDR_TEST_SIZE;
-
- }
- if (test_size<0x1000)
- test_size = DDR_TEST_SIZE;
-
- old_pattern_flag = 1;
- simple_pattern_flag = 1;
- cross_talk_pattern_flag = 1;
- //printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==2) {
- if ( (strcmp(argv[1], "s") == 0))
- {
- simple_pattern_flag = 1;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 0;
- }
- else if ((strcmp(argv[1], "c") == 0))
- {
- simple_pattern_flag = 0;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 1;
- }
- else if ( (strcmp(argv[1], "e") == 0))
- {
- error_outof_count_flag=1;
- }
- }
- if (argc >2) {
- if ( (strcmp(argv[1], "n") == 0) || (strcmp(argv[2], "n") == 0))
- {
- print_flag = 0;
- }
- if ( (strcmp(argv[1], "p") == 0) || (strcmp(argv[2], "p") == 0))
- {
- copy_test_flag = 1;
- }
- if ( (strcmp(argv[1], "s") == 0) || (strcmp(argv[2], "s") == 0))
- {
- simple_pattern_flag = 1;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 0;
- }
- else if ((strcmp(argv[1], "c") == 0)||(strcmp(argv[2], "c") == 0))
- {
- simple_pattern_flag = 0;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 1;
- }
- else if ( (strcmp(argv[1], "e") == 0)||(strcmp(argv[2], "e") == 0))
- {
- error_outof_count_flag=1;
- }
- }
- //printf("\nLINE1== 0x%08x\n", __LINE__);
- if (argc > 3) {
- if ( (strcmp(argv[1], "p") == 0) || (strcmp(argv[2], "p") == 0) || (strcmp(argv[3], "p") == 0))
- {
- copy_test_flag = 1;
- }
- if ( (strcmp(argv[1], "n") == 0) || (strcmp(argv[2], "n") == 0) || (strcmp(argv[3], "n") == 0))
- {
- print_flag = 0;
- }
- if ( (strcmp(argv[1], "s") == 0) || (strcmp(argv[2], "s") == 0) || (strcmp(argv[3], "s") == 0))
- {
- simple_pattern_flag = 1;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 0;
- }
- if ((strcmp(argv[1], "c") == 0) || (strcmp(argv[2], "c") == 0) || (strcmp(argv[3], "c") == 0))
- {
- simple_pattern_flag = 0;
- old_pattern_flag=0;
- cross_talk_pattern_flag = 1;
- }
- if ( (strcmp(argv[1], "e") == 0) || (strcmp(argv[2], "e") == 0) || (strcmp(argv[3], "e") == 0))
- {
- error_outof_count_flag=1;
- }
- }
-
- // printf("\nLINE2== 0x%08x\n", __LINE__);
- // printf("\nLINE3== 0x%08x\n", __LINE__);
- // printf("\nLINE== 0x%08x\n", __LINE__);
-
-DDR_TEST_START:
-
- ///*
- do {
- if (lflag)
- loop = 888;
-
- if (old_pattern_flag == 1)
- {
- {
- // printf("\nLINE== 0x%08x\n", __LINE__);
- //printf("\nLINE== 0x%08x\n", __LINE__);
- //printf("\nLINE== 0x%08x\n", __LINE__);
- if (print_flag)
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
- ddr_write((void *)(int_convter_p(start_addr)), test_size);
- // flush_dcache_range(start_addr,start_addr + test_size);
- if (print_flag) {
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- }
- ddr_read((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");}
- ddr_read((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\nEnd 2nd read. ");
- printf("\nStart 3rd reading... ");}
- ddr_read((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag)
- printf("\nEnd 3rd read. \n");
-
- if (copy_test_flag)
- {if(print_flag)
- printf("\n copy_test_flag = 1,start copy test. \n");
- ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
- ddr_read((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- ddr_read((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- }
-
- }
- {
- // printf("\nLINE== 0x%08x\n", __LINE__);
- //printf("\nLINE== 0x%08x\n", __LINE__);
- //printf("\nLINE== 0x%08x\n", __LINE__);
- if (print_flag) {
- printf("\nStart *4 normal pattern. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
- }
- ddr_write4((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");}
- ddr_read4((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");}
- ddr_read4((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\nEnd 2nd read. ");
- printf("\nStart 3rd reading... ");}
- ddr_read4((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag)
- printf("\rEnd 3rd read. \n");
- if (copy_test_flag)
- {
-
- ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
- ddr_read4((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- ddr_read4((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- }
-
-
- }
- }
-
- if (simple_pattern_flag == 1)
- {
- if (print_flag) {
- printf("\nStart *4 no cross talk pattern. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
- }
- ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");}
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");}
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 2nd read. ");
- printf("\rStart 3rd reading... ");}
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag)
- printf("\rEnd 3rd read. \n");
-
- if (copy_test_flag)
- {
- ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- }
-
- }
-
- if (cross_talk_pattern_flag == 1)
- {if(print_flag){
- printf("\nStart *4 cross talk pattern p. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
- }
- ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");}
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");}
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 2nd read. ");
- printf("\rStart 3rd reading... ");}
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
- ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");}
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");}
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 2nd read. ");
- printf("\rStart 3rd reading... ");}
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 3rd read. \n");
-
- ///*
- printf("\nStart *4 cross talk pattern p2. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
- ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");}
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");}
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 2nd read. ");
- printf("\rStart 3rd reading... ");}
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n2. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
- ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");}
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");}
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag) {
- printf("\rEnd 2nd read. ");
- printf("\rStart 3rd reading... ");}
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
- if (print_flag)
- printf("\rEnd 3rd read. \n");
-
- if (copy_test_flag)
- {
- ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
- }
- // */
-
- }
-
- if (print_flag)
- printf("\nError count==0x%08x", error_count);
-
- }while(--loop);
- //*/
-
- printf("\rEnd ddr test. \n");
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-}
-
-U_BOOT_CMD(
- ddrtest, 5, 1, do_ddr_test,
- "DDR test function",
- "ddrtest [LOOP] [ADDR].Default address is 0x8d000000\n"
-);
-
-int do_ddr_special_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- unsigned int loop = 1;
- unsigned int lflag = 0;
- unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int test_addr = DDR_TEST_START_ADDR;
- unsigned int test_size = DDR_TEST_SIZE;
- unsigned int write_times = 1;
- unsigned int read_times = 3;
- // unsigned int old_pattern_flag = 1;
-
- unsigned int print_flag = 1;
- // copy_test_flag = 0;
- print_flag = 1;
- error_outof_count_flag =0;
- error_count =0;
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- if (strcmp(argv[1], "l") == 0) {
- lflag = 1;
- }
- else if (strcmp(argv[1], "h") == 0){
- goto usage;
- }
- else{
- loop = simple_strtoull_ddr(argv[1], &endp, 10);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
- }
-
- // printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==1) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- // if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
- loop = 1;
-
- }
- if (argc > 2) {
- start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
-
- }
- if (argc > 3) {
- test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- test_size = DDR_TEST_SIZE;
-
- }
- if (test_size<0x1000)
- test_size = DDR_TEST_SIZE;
- if (argc > 4) {
- write_times = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- write_times = 0;
-
- }
- if (argc > 5) {
- read_times = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- read_times = 0;
-
- }
- unsigned int base_pattern = 1;
- unsigned int inc_flag = 1;
- if (argc > 6) {
- base_pattern = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- base_pattern = 0;
-
- }
- if (argc > 7) {
- inc_flag = simple_strtoull_ddr(argv[7], &endp, 16);
- if (*argv[7] == 0 || *endp != 0)
- inc_flag = 0;
-
- }
-
-
- //printf("\nLINE== 0x%08x\n", __LINE__);
-
- //printf("\nLINE1== 0x%08x\n", __LINE__);
-
-
- // printf("\nLINE2== 0x%08x\n", __LINE__);
- // printf("\nLINE3== 0x%08x\n", __LINE__);
- // printf("\nLINE== 0x%08x\n", __LINE__);
-
-
- unsigned int count = 1;
- unsigned int test_val = 1;
-
- ///*
- do {
- if (lflag)
- loop = 888;
-
- if (1)
- {
-
- for (i=0;i<write_times;)
- {i++;
-
- printf("\nwrite_times==0x%08x \n",((unsigned int)i));
- // serial_put_hex(((unsigned long)i),32);
- // count=count_max;
- // reg=reg_base;
- // val=val_base;
- test_addr=start_addr;
- test_val=base_pattern;
- count=(test_size>>2);
- do
- {
- writel(test_val,(unsigned long)test_addr);
- test_addr=test_addr+4;
- if (inc_flag)
- test_val=test_val+1;
-
- }
- while (count--) ;
- }
-
- for (i=0;i<read_times;)
- {i++;
- printf("\nread_times==0x%08x \n",((unsigned int)i));
- //serial_puts("\nread_times= ");
- // serial_put_hex(((unsigned long)i),32);
- test_addr=start_addr;
- test_val=base_pattern;
- count=(test_size>>2);
-
- do
- {
-
- //writel(val,(unsigned long)reg);
- if (test_val != (readl((unsigned long)test_addr))) {
-
- printf("\nadd==0x%08x,pattern==0x%08x,read==0x%08x \n",((unsigned int)test_addr),((unsigned int)test_val),(readl((unsigned int)test_addr)));
- }
- test_addr=test_addr+4;
- if (inc_flag)
- test_val=test_val+1;
- }
- while (count--) ;
- }
- }
-
-
-
- if (print_flag)
- printf("\nError count==0x%08x", error_count);
-
- }while(--loop);
- //*/
-
- printf("\rEnd ddr test. \n");
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-}
-U_BOOT_CMD(
- ddr_spec_test, 8, 1, do_ddr_special_test,
- "DDR test function",
- "ddrtest [LOOP] [ADDR] [size] [write_times] [read times] [pattern] [inc].ddr_spec_test 1 0x1080000 0x200000 1 3 1 1 \n"
-);
-/*
-int do_mw_mask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-char *endp;
-unsigned int reg_add=0;
-unsigned int wr_reg_value=0;
-unsigned int rd_reg_value=0;
-unsigned int wr_reg_and_mask_1=0xffffffff;
-if (argc == 1)
-{ printf("\nplease read help\n");
-printf("\nexample only change 0xc8836800 0x8c010226 0x000fffff bit20-bit31,no change pll od oc \n");
-printf("\nmwm 0xc8836800 0x8c010226 0x000fffff\n");
-}
-else{
-if (argc >= 2)
-{
-reg_add = simple_strtoull_ddr(argv[1], &endp, 10);
-}
-if (argc >= 3)
-{
-wr_reg_value = simple_strtoull_ddr(argv[2], &endp, 10);
-}
-if (argc >= 4)
-{
-wr_reg_and_mask_1 = simple_strtoull_ddr(argv[3], &endp, 10);
-
-}
-rd_reg_value= (rd_reg(reg_add));
-wr_reg(reg_add,(rd_reg_value&wr_reg_and_mask_1)|(wr_reg_value&(~wr_reg_and_mask_1)) );
-
-printf("\nmodify ok read==0x%08x\n",(rd_reg(reg_add)));
-
-}
-return 1;
-}
-U_BOOT_CMD(
- mwm, 30, 1, do_mw_mask,
- "mw mask function",
- "mw 0xc8836800 0x8c82022c 0x000fffff\n"
-);
-*/
-
-///*
-
-int ddr_test_s_cross_talk_pattern(int ddr_test_size)
-{
-#define TEST_OFFSET 0//0X40000000
- // unsigned int start_addr = DDR_TEST_START_ADDR+TEST_OFFSET;
- unsigned int start_addr=test_start_addr;
-
- error_outof_count_flag=1;
-
- error_count=0;
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- training_pattern_flag=0;
-#endif
- ///*
- if (training_pattern_flag)
- {
-#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
- ddr_test_gx_training_pattern(ddr_test_size);
-#endif
- if (error_count)
- return 1;
- else
- return 0;
- }
- else
- {
-#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
- ddr_test_gx_training_pattern(ddr_test_size);
-#endif
-
- }
- // */
- /*
- ddr_test_gx_cross_talk_pattern( ddr_test_size);
- if (error_count)
- return 1;
- else
- return 0;
- */
- {
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
- if (error_count)
- return error_count;
- printf("\nStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
-
- if (error_count)
- return error_count;
- printf("\nStart *4 no cross talk pattern. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- }
-
- if (error_count)
- return error_count;
- //if(cross_talk_pattern_flag==1)
- {
- printf("\nStart *4 cross talk pattern p. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
- if (error_count)
- return error_count;
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
- }
- if (error_count)
- return error_count;
- {
- printf("\nStart *4 cross talk pattern p2. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
- if (error_count)
- return error_count;
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
- if (copy_test_flag)
- {
- if (error_count)
- return error_count;
- printf("\n start copy test ... ");
- ddr_test_copy((void *)(int_convter_p(start_addr+ddr_test_size/2)),(void *)(int_convter_p(start_addr)), ddr_test_size/2 );
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
- }
- }
-
- if (error_count)
- return 1;
- else
- return 0;
- }
-
-
-
-int ddr_test_s_cross_talk_pattern_quick_retrun(int ddr_test_size)
-{
- error_outof_count_flag =1;
- #define TEST_OFFSET 0//0X40000000
- // unsigned int start_addr = DDR_TEST_START_ADDR+TEST_OFFSET;
- unsigned int start_addr=test_start_addr;
-
- error_outof_count_flag=1;
-
- error_count=0;
-
- #if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- training_pattern_flag=0;
- #endif
- ///*
- if (training_pattern_flag)
- {
- #if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
- ddr_test_gx_training_pattern(ddr_test_size);
- #endif
- if (error_count)
- return 1;
- else
- return 0;
- }
- else
- {
- #if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
- ddr_test_gx_training_pattern(ddr_test_size);
- #endif
- }
- // */
- /*
- ddr_test_gx_cross_talk_pattern( ddr_test_size);
- if (error_count)
- return 1;
- else
- return 0;
- */
-
- {
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
-
- printf("\nStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
-
- printf("\nStart *4 no cross talk pattern. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- }
- //if(cross_talk_pattern_flag==1)
- {
- printf("\nStart *4 cross talk pattern p. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
-
- }
-
- {
- printf("\nStart *4 cross talk pattern p2. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
- // printf("\rEnd 3rd read. \n");
- if (copy_test_flag)
- {
- printf("\n start copy test ... ");
- ddr_test_copy((void *)(int_convter_p(start_addr+ddr_test_size/2)),(void *)(int_convter_p(start_addr)), ddr_test_size/2 );
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
- }
-
- }
-
- if (error_count)
- return 1;
- else
- return 0;
-}
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-int do_ddr_test_dqs_window_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test ddr dqs window step function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- unsigned int temp_test_error= 0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_lane_step=0;
- unsigned int testing_lane=0;
- unsigned int test_lane_step_rdqs_flag=0;
- unsigned int test_min_max_flag=0;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
-
- unsigned int dq_lcd_bdl_reg_org=0;
- unsigned int dq_lcd_bdl_reg_left=0;
- unsigned int dq_lcd_bdl_reg_right=0;
-
- unsigned int dq_lcd_bdl_reg_left_min=0;
- unsigned int dq_lcd_bdl_reg_right_min=0;
-
- unsigned int dq_lcd_bdl_temp_reg_value=0;
-
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
-
- unsigned int ddr_test_size= DDR_TEST_SIZE;//DDR_CORSS_TALK_TEST_SIZE;
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- {
- channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {
- channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
- {
- channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_TEST_SIZE;
- }
- }
- if (argc >4) {
- test_lane_step = 0;
- test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_lane_step = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_lane_step = 0;
- }
- }
- if (test_lane_step >7)
- test_lane_step = 0;
- unsigned int test_loop=1;
- if (argc >5) {
- test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max_flag = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- unsigned int test_temp_value_use_sticky_register=0;
- if (argc >6) {
- test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- test_temp_value_use_sticky_register = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
- printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
- printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
-
- const char *temp_s;
- char *env_lcdlr_temp_count;
- char *buf;
- buf="";
- unsigned int lcdlr_temp_count=0;
- env_lcdlr_temp_count="lcdlr_temp_count";
-
- if(test_temp_value_use_sticky_register)
- {
- lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
- }
- else
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- else
- {
- lcdlr_temp_count=0;
- }
- }
-
- //if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- //if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-for (test_times=0;(test_times<test_loop);(test_times++))
-{
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
-
- {
- printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- if( channel_b_en)
- {
- printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
- writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
- printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
- }
- if (test_lane_step>8)
- test_lane_step=0;
- printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
-
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_lane_step>>1);
- test_lane_step_rdqs_flag=test_lane_step%2;
- testing_lane=(test_lane_step>>1);
-
- dq_lcd_bdl_temp_reg_value=readl(reg_add);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
-
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- if (test_lane_step_rdqs_flag)
- {
- dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0xff00)>>8);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
- else
- {
- dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0x00ff)>>0);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
- #endif
-
- if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
- {
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value--;
-
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- }
-
- printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- if (!test_lane_step_rdqs_flag)
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
- #else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- #endif
- }
- else
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
- #endif
- }
- printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\n left edge detect \n");
- printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
- dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
- if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
- }
- }
- else
- {
- printf("\n left edge skip \n");
- }
-
- if (!test_lane_step_rdqs_flag)
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
- #else
- writel(dq_lcd_bdl_reg_org,reg_add);
- #endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- }
- else
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
- #else
- #endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
-
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
-
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
-
-
- if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
- {
- while (dq_lcd_bdl_temp_reg_value<DQLCDLR_MAX)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
-
-
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- if (!test_lane_step_rdqs_flag)
- {
- //writel(dq_lcd_bdl_temp_reg_value,reg_add);
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
- #else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- #endif
- }
- else
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
- #endif
- // writel(dq_lcd_bdl_temp_reg_value,reg_add);
- // writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
- printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd right edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect \n");
- printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
- dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
- if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
- }
- }
-
- if (!test_lane_step_rdqs_flag)
- {
- // writel(dq_lcd_bdl_reg_org,reg_add);
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
- #else
- writel(dq_lcd_bdl_reg_org,reg_add);
- #endif
- }
- else
- {
- #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
- #endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
- printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- }
- }
-
-}
-
- dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
- if (!test_lane_step_rdqs_flag)
- {
- if(channel_a_en)
- {
- dq_lcd_bdl_value_wdq_org_a[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_wdq_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_wdq_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- if (channel_b_en)
- {
- dq_lcd_bdl_value_wdq_org_b[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_wdq_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_wdq_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- }
- else
- {
- if (channel_a_en) {
- dq_lcd_bdl_value_rdqs_org_a[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_rdqs_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_rdqs_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- if (channel_b_en) {
- dq_lcd_bdl_value_rdqs_org_b[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_rdqs_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_rdqs_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- }
-
- return dq_lcd_bdl_temp_reg_value;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-U_BOOT_CMD(
- ddr_tune_dqs_step, 7, 1, do_ddr_test_dqs_window_step,
- "ddr_tune_dqs_step function",
- "ddr_tune_dqs_step a 0 0x80000 3 or ddr_tune_dqs_step b 0 0x80000 5 \n dcache off ? \n"
-);
-#else
-
-int do_ddr_test_fine_tune_dqs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Tune ddr dqs function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- unsigned int temp_count_i = 1;
- unsigned int temp_count_j= 1;
- unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-#define DATX8_DQ_LCD_BDL_REG_WIDTH 12
-
-#define DATX8_DQ_LANE_WIDTH 4
-#define CHANNEL_CHANNEL_WIDTH 2
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-
-#define DATX8_DQ_LANE_LANE00 0
-#define DATX8_DQ_LANE_LANE01 1
-#define DATX8_DQ_LANE_LANE02 2
-#define DATX8_DQ_LANE_LANE03 3
-
-#define DATX8_DQ_BDLR0 0
-#define DATX8_DQ_BDLR1 1
-#define DATX8_DQ_BDLR2 2
-#define DATX8_DQ_BDLR3 3
-#define DATX8_DQ_BDLR4 4
-#define DATX8_DQ_BDLR5 5
-#define DATX8_DQ_BDLR6 6
-#define DATX8_DQ_DXNLCDLR0 7
-#define DATX8_DQ_DXNLCDLR1 8
-#define DATX8_DQ_DXNLCDLR2 9
-#define DATX8_DQ_DXNMDLR 10
-#define DATX8_DQ_DXNGTR 11
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
-#define DQ_LCD_BDL_REG_NUM_PER_CHANNEL DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
-#define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
-
- unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
-
- unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
-
- unsigned int dq_lcd_bdl_temp_reg_value;
- unsigned int dq_lcd_bdl_temp_reg_value_dqs;
- unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
- unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
- unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
- // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
-
- unsigned int dq_lcd_bdl_temp_reg_lef;
- unsigned int dq_lcd_bdl_temp_reg_rig;
- unsigned int dq_lcd_bdl_temp_reg_center;
- unsigned int dq_lcd_bdl_temp_reg_windows;
- unsigned int dq_lcd_bdl_temp_reg_center_min;
- unsigned int dq_lcd_bdl_temp_reg_windows_min;
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
- if (argc >5) {
- training_pattern_flag = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_pattern_flag = 0;
- }
- else if(training_pattern_flag)
- training_pattern_flag = 1;
-
-
- }
-
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\training_pattern_flag== 0x%08x\n", training_pattern_flag);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
-
-
-
- for ((temp_count_j=0);(temp_count_j<DATX8_DQ_LCD_BDL_REG_WIDTH);(temp_count_j++))
- {
- dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=readl(reg_add+4*temp_count_j);
- dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
- printf("\n org add 0x%08x reg== 0x%08x\n",(reg_add+4*temp_count_j), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]));
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
- =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
- =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
-
- }
- }
-
- }
-
- }
-
- }////save and print org training dqs value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- { printf("\ntest lane==0x%08x\n ",temp_count_i);
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
- }
-
- for ((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
- {
-
- if (temp_count_k == 0)
- {
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- dq_lcd_bdl_temp_reg_value_dqs=(readl(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0));
- dq_lcd_bdl_temp_reg_value_wdqd=(readl(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0))&DQLCDLR_MAX;
- dq_lcd_bdl_temp_reg_value_rdqsd=(readl(reg_add+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0BDLR0))&DQLCDLR_MAX;
- // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
-#else
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
- // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
-#endif
-
- while (dq_lcd_bdl_temp_reg_value_wdqd>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_wdqd--;
- printf("\nwdqd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- writel(dq_lcd_bdl_temp_reg_value_wdqd,(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0));
-#else
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
-#endif
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value_wdqd++;
- break;
- }
- }
- printf("\nwdqd left edge detect \n");
- printf("\nwdqd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_wdqd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_wdqd>(dq_lcd_bdl_temp_reg_lef_min_value&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_lef_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
- }
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
-
- while (dq_lcd_bdl_temp_reg_value_wdqd<0xff)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_wdqd++;
- printf("\nwdqd rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd right edge detect \n");
- dq_lcd_bdl_temp_reg_value_wdqd--;
- break;
- }
- }
- printf("\nwdqd right edge detect \n");
- printf("\nwdqd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_wdqd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
-
- dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
- dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_wdqd<(dq_lcd_bdl_temp_reg_rig_min_value&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_rig_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
- }
-
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
-
- }
- else if(temp_count_k==1)
- {
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
- while (dq_lcd_bdl_temp_reg_value_rdqsd>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_rdqsd--;
- printf("\nrdqsd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nrdqsd left edge detect \n");
- dq_lcd_bdl_temp_reg_value_rdqsd++;
- break;
- }
- }
- printf("\nrdqsd left edge detect \n");
- printf("\nrdqsd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
-
- dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_rdqsd>((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_lef_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
- }
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
- while (dq_lcd_bdl_temp_reg_value_rdqsd<0xff)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_rdqsd++;
- printf("\nrdqsd right temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nrdqsd right edge detect \n");
- dq_lcd_bdl_temp_reg_value_rdqsd--;
- break;
- }
- }
- printf("\nrdqsd right edge detect \n");
- printf("\nrdqsd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_rdqsd<((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_rig_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
- }
-
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
-
-
-
- }
-
- }
- }
-
- }
- }
-
- ////tune and save training dqs value
-
-
-
-
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
-
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- // dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
-
- printf("\n org add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- printf("\n lef add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- printf("\n rig add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
- printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
- }
-
- dq_lcd_bdl_temp_reg_lef=(dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
- dq_lcd_bdl_temp_reg_rig=(dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
-
- if (test_times == 0)
- {
- (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_lef;
- (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_rig;
-
- }
- dq_lcd_bdl_temp_reg_lef_min_value=(dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
- dq_lcd_bdl_temp_reg_rig_min_value=(dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
-
-
- //dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value&0x0000ff);
- dq_lcd_bdl_temp_reg_center=( (((dq_lcd_bdl_temp_reg_lef&0xff)+(dq_lcd_bdl_temp_reg_rig&0xff))/2)
- |(((((dq_lcd_bdl_temp_reg_lef>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<8)
- |(((((dq_lcd_bdl_temp_reg_lef>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<16) );
-
- dq_lcd_bdl_temp_reg_windows=( (((dq_lcd_bdl_temp_reg_rig&0xff)-(dq_lcd_bdl_temp_reg_lef&0xff)))
- |(((((dq_lcd_bdl_temp_reg_rig>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<8)
- |(((((dq_lcd_bdl_temp_reg_rig>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<16) );
-
-
- dq_lcd_bdl_temp_reg_center_min=( (((dq_lcd_bdl_temp_reg_lef_min_value&0xff)+(dq_lcd_bdl_temp_reg_rig_min_value&0xff))/2)
- |(((((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<8)
- |(((((dq_lcd_bdl_temp_reg_lef_min_value>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<16) );
-
- dq_lcd_bdl_temp_reg_windows_min=( (((dq_lcd_bdl_temp_reg_rig_min_value&0xff)-(dq_lcd_bdl_temp_reg_lef_min_value&0xff)))
- |(((((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<8)
- |(((((dq_lcd_bdl_temp_reg_rig_min_value>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<16) );
-
- printf("\n add 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
- (dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- dq_lcd_bdl_temp_reg_center,dq_lcd_bdl_temp_reg_windows,
- (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- dq_lcd_bdl_temp_reg_center_min,dq_lcd_bdl_temp_reg_windows_min
- );
- }
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-U_BOOT_CMD(
- ddr_tune_dqs, 6, 1, do_ddr_test_fine_tune_dqs,
- "DDR tune dqs function",
- "ddr_tune_dqs a 0 0x80000 3 or ddr_tune_dqs b 0 0x80000 5 or ddr_tune_dqs a b 0x80000 l\n dcache off ? \n"
-);
-
-
-
-int do_ddr_test_dqs_window_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test ddr dqs window step function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_lane_step=0;
- unsigned int testing_lane=0;
- unsigned int test_lane_step_rdqs_flag=0;
- unsigned int test_min_max_flag=0;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
-
-
- unsigned int dq_lcd_bdl_reg_org=0;
- unsigned int dq_lcd_bdl_reg_left=0;
- unsigned int dq_lcd_bdl_reg_right=0;
-
-
- unsigned int dq_lcd_bdl_reg_left_min=0;
- unsigned int dq_lcd_bdl_reg_right_min=0;
-
- unsigned int dq_lcd_bdl_temp_reg_value=0;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_lane_step = 0;
- test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_lane_step = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_lane_step = 0;
- }
- }
- if (test_lane_step >7)
- test_lane_step = 0;
- unsigned int test_loop=1;
- if (argc >5) {
-
- test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max_flag = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- unsigned int test_temp_value_use_sticky_register=0;
- if (argc >6) {
-
- test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- test_temp_value_use_sticky_register = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
- printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
- printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
-
- const char *temp_s;
- char *env_lcdlr_temp_count;
- char *buf;
- buf="";
- unsigned int lcdlr_temp_count=0;
- env_lcdlr_temp_count="lcdlr_temp_count";
-
- if(test_temp_value_use_sticky_register)
- {lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
- }
- else
- {
-
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- else
- {lcdlr_temp_count=0;
- }
- }
-
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- }////save and print org training dqs value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
-
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
-
-
-
- {
- printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- if( channel_b_en)
- { printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
- writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
- printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
- }
- if (test_lane_step>8)
- test_lane_step=0;
- printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
-
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_lane_step>>1);
- test_lane_step_rdqs_flag=test_lane_step%2;
- testing_lane=(test_lane_step>>1);
- if (!test_lane_step_rdqs_flag)
- {reg_add=reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0;
- }
- else
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- reg_add=reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0;
-#else
- reg_add=reg_add+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0BDLR0;
-#endif
-
- }
-
- dq_lcd_bdl_temp_reg_value=readl(reg_add);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- if (test_lane_step_rdqs_flag)
- {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0xff00)>>8);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
- else
- {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0x00ff)>>0);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
-#endif
-
- if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
- {
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value--;
-
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- }
-
-
-
- printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- if (!test_lane_step_rdqs_flag)
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
-#else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
-#endif
- }
- else
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
-#else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
-#endif
- }
- printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\n left edge detect \n");
- printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
-
- dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
- if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
- }
- } else
- {
- printf("\n left edge skip \n");
- }
-
- if (!test_lane_step_rdqs_flag)
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
-#else
- writel(dq_lcd_bdl_reg_org,reg_add);
-#endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- }
- else
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
-#else
- writel(dq_lcd_bdl_reg_org,reg_add);
- writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
-#endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
-
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
-
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
-
-
- if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
- {
- while (dq_lcd_bdl_temp_reg_value<DQLCDLR_MAX)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
-
-
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- }
-
- printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- if (!test_lane_step_rdqs_flag)
- {
- //writel(dq_lcd_bdl_temp_reg_value,reg_add);
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
-#else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
-#endif
- }
- else
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
-#else
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
-#endif
- // writel(dq_lcd_bdl_temp_reg_value,reg_add);
- // writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
- printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd right edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect \n");
- printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
- dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
- if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
- }
- }
-
- if (!test_lane_step_rdqs_flag)
- {
- // writel(dq_lcd_bdl_reg_org,reg_add);
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
-#else
- writel(dq_lcd_bdl_reg_org,reg_add);
-#endif
- }
- else
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
-#else
- writel(dq_lcd_bdl_reg_org,reg_add);
- writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
-#endif
- // writel(dq_lcd_bdl_reg_org,reg_add);
- // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
- }
-
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
- printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- }
-
-
-
- }
- }
-
- }
-
- dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
- if (!test_lane_step_rdqs_flag)
- {if(channel_a_en){
- dq_lcd_bdl_value_wdq_org_a[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_wdq_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_wdq_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- if (channel_b_en)
- {
- dq_lcd_bdl_value_wdq_org_b[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_wdq_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_wdq_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- }
- else
- {
- if (channel_a_en) {
- dq_lcd_bdl_value_rdqs_org_a[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_rdqs_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_rdqs_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- if (channel_b_en) {
- dq_lcd_bdl_value_rdqs_org_b[testing_lane]=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_rdqs_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_rdqs_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
- }
- }
-
- return dq_lcd_bdl_temp_reg_value;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-///*
-U_BOOT_CMD(
- ddr_tune_dqs_step, 7, 1, do_ddr_test_dqs_window_step,
- "ddr_tune_dqs_step function",
- "ddr_tune_dqs_step a 0 0x80000 3 or ddr_tune_dqs_step b 0 0x80000 5 \n dcache off ? \n"
-);
-
-
-
-extern int ddr_test_s_add_cross_talk_pattern(int ddr_test_size);
-
-
-int do_ddr_test_lcdlr_clk_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test ddr lcdlr clk step function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_lane_step=0;
- // unsigned int testing_lane=0;
- // unsigned int test_lane_step_rdqs_flag=0;
- unsigned int test_min_max_flag=0;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
-
-
- unsigned int dq_lcd_bdl_reg_org=0;
- unsigned int dq_lcd_bdl_reg_left=0;
- unsigned int dq_lcd_bdl_reg_right=0;
-
-
- unsigned int dq_lcd_bdl_reg_left_min=0;
- unsigned int dq_lcd_bdl_reg_right_min=0;
-
- unsigned int dq_lcd_bdl_temp_reg_value=0;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_lane_step = 0;
- test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_lane_step = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_lane_step = 0;
- }
- }
- if (test_lane_step >7)
- test_lane_step = 0;
- unsigned int test_loop=1;
- if (argc >5) {
-
- test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max_flag = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- unsigned int test_temp_value_use_sticky_register=0;
- if (argc >6) {
-
- test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- test_temp_value_use_sticky_register = 0;
- }
- else
- {
- //test_min_max_flag =1;
- }
- }
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
- printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
- printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
- const char *temp_s;
- char *env_lcdlr_temp_count;
- char *buf;
- buf="";
- unsigned int lcdlr_temp_count=0;
- env_lcdlr_temp_count="lcdlr_temp_count_a";
- unsigned int lcdlr_max=0;
- if(test_temp_value_use_sticky_register)
- {lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
- }
- else
- {
-
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- else
- {lcdlr_temp_count=0;
- }
- }
-
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- }////save and print org training dqs value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
-
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
-
-
-
- {
- printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- if( channel_b_en)
- { printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
- writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
- printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
- }
- if (test_lane_step>2)
- test_lane_step=0;
- printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
- if(test_lane_step==0)
- {reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
- lcdlr_max=ACLCDLR_MAX;
- }
- if(test_lane_step==1)
- {reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
- lcdlr_max=ACBDLR_MAX;
- }
-
-
- dq_lcd_bdl_temp_reg_value=readl(reg_add);
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
-
- if(test_lane_step==0)
- {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&ACLCDLR_MAX));
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
- if(test_lane_step==1)
- {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&ACBDLR_MAX));
- dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
- }
-
-
- if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
- {
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value--;
-
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- }
-
-
-
- printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
- {
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- }
-
- printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
- //temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- //#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- // #else
- // temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- // temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- // #endif
-
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\n left edge detect \n");
- printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
-
- dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
- if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
- }
- }
- else
- {
- printf("\n left edge skip \n");
- }
-
-
- {
-
- writel(dq_lcd_bdl_reg_org,reg_add);
-
- }
-
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
-
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
-
-
- if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
- {
- //if(test_lane_step==0)
- while (dq_lcd_bdl_temp_reg_value<lcdlr_max)
- {
- ddr_test_watchdog_clear();
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s\n", buf);
- if(test_temp_value_use_sticky_register)
- {
- writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
- }
- else
- {
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- }
-
- printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- {
- writel(dq_lcd_bdl_temp_reg_value,reg_add);
- }
-
- printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
- // temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd right edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect \n");
- printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
-
- dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
- if (test_times == 0)
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
- if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
- }
- }
-
- {
- writel(dq_lcd_bdl_reg_org,reg_add);
- }
-
- printf("\n read reg==0x%08x\n ",(readl(reg_add)));
- printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- }
-
-
-
- }
- }
-
- }
-
- dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
-
- {if(channel_a_en){
- if(test_lane_step==0)
- {
- dq_lcd_bdl_value_aclcdlr_org_a=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_aclcdlr_min_a=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_aclcdlr_max_a=dq_lcd_bdl_reg_right_min;
- }
- if(test_lane_step==1)
- {
- dq_lcd_bdl_value_bdlr0_org_a=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_bdlr0_min_a=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_bdlr0_max_a=dq_lcd_bdl_reg_right_min;
- }
- }
- if (channel_b_en)
- {
- if(test_lane_step==0)
- {
- dq_lcd_bdl_value_aclcdlr_org_b=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_aclcdlr_min_b=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_aclcdlr_max_b=dq_lcd_bdl_reg_right_min;
- }
- if(test_lane_step==1)
- {
- dq_lcd_bdl_value_bdlr0_org_b=dq_lcd_bdl_reg_org;
- if (test_min_max_flag != 1)
- dq_lcd_bdl_value_bdlr0_min_b=dq_lcd_bdl_reg_left_min;
- if (test_min_max_flag != 2)
- dq_lcd_bdl_value_bdlr0_max_b=dq_lcd_bdl_reg_right_min;
- }
- }
- }
-
-
-
- return dq_lcd_bdl_temp_reg_value;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-U_BOOT_CMD(
- ddr_tune_aclcdlr_step, 7, 1, do_ddr_test_lcdlr_clk_step,
- "ddr_tune_aclcdlr_step function",
- "ddr_tune_aclcdlr_step a 0 0x80000 3 or ddr_tune_aclcdlr_step b 0 0x80000 5 \n dcache off ? \n"
-);
-
-int do_ddr_test_dqs_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_dqs_window function\n");
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
-
- unsigned int lane_step= 0;
- unsigned int reg_value= 0;
- //int argc2;
- //char * argv2[30];
- char *endp;
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
-
-
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
- //argc2=5;
- //for(i = 1;i<(argc);i++)
- {
- //argv2[i-1]=argv[i];
- }
-
- //argv2[0]=argv[1];
- //argv2[1]=argv[2];
- //argv2[2]=argv[3];
- //#include <stdio.h>
- // unsigned int wr_adj_per[24] ;
- if(1)
- {
- printf("\ntest use uboot env\n");
- {
- //char str[24];
- const char *s;
- unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
-
- unsigned int *num_arry;
- num_arry = (unsigned int *)(&str_to_numarry);
- int i;
- // char *varname;
- // int value=0;
-
- ///varname="env_ddrtest";
- s = getenv("env_wr_lcdlr_pr");
- if (s)
- {//i=0;
- //while(s_temp)
- {
- env_to_num("env_wr_lcdlr_pr",num_arry);//unsigned int *num_arry
-
-
- for (i = 0; i < 48; i++) {
-
- printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
- // printf("%s,lenth=%d",s,(strlen(s)));
- //sscanf(s,"d%,",wr_adj_per);
- //sprintf(str,"d%",s);
- //getc
- // if (strlen(s) > 16)
- {
- // sscanf(s, "%08x, %08x, %08x, \n",
- // &wr_adj_per[0], &wr_adj_per[1], &wr_adj_per[2]);
- }
- }
- }
- }
- }
- // unsigned int = 0, max = 0xff, min = 0x00;
- /*
- if(0)
- {
- {printf("\ntest use uboot env\n");
- {
- //char str[24];
- const char *s;
-
- // char *varname;
- int value=0;
-
- ///varname="env_ddrtest";
- s = getenv("env_wr_lcdlr_pr");
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",wr_adj_per);
- //sprintf(str,"d%",s);
- //getc
- if (strlen(s) > 16) {
- sscanf(s, "%08x, %08x, %08x, %08x, %08x\n",
- &wr_adj_per[i-2], &max, &min, &type_h, &type_l);
- } else {
- sscanf(buf, "%08x, %08x, %08x\n",
- &reg, &max, &min);
- }
-
- }
- value = simple_strtoull_ddr(s, &endp, 16);
- printf("%d",value);
- }
- s = getenv("env_rd_lcdlr_pr");
-
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",rd_adj_per);
-
- }
- //value = simple_strtoull_ddr(s, &endp, 16);
- }
-
- //sprintf(str, "%lx", value);
- // setenv("env_ddrtest", str);
-
-
- //run_command("save",0);
- }
-
- if (argc>24+2)
- argc=24+2;
- for(i = 2;i<argc;i++)
- {
- if(i<(2+12)){
- wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
- }
- else
- {
- rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
- }
- }
-
-
- }
- printf(" int wr_adj_per[12]={\n");
- for(i = 0;i<12;i++)
- {
- printf("%04d ,\n",wr_adj_per[i]);
-}
-printf("};\n");
-printf(" int rd_adj_per[12]={\n");
-for(i = 0;i<12;i++)
-{
- printf("%04d ,\n",rd_adj_per[i]);
-}
-printf("};\n");
-
-}
-*/
-
-char str[100];
-
-if (channel_a_en)
-{
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane a\n");
- for ((lane_step=0);(lane_step<8);(lane_step++))
- {
- //sprintf(argv2[3],"d%",( lane_step));
- //itoa_ddr_test(lane_step,(argv2[3]),10);
- //printf("\nargv2[%d]=%s\n",0,argv2[0]);
- // printf("\nargv2[%d]=%s\n",3,argv2[3]);
- // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d",ddr_test_size,( lane_step));
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- run_command(str,0);
-
- }
-}
-
-
-if (channel_b_en)
-{//*(char *)(argv2[0])="b";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane b\n");
- for ((lane_step=0);(lane_step<8);(lane_step++))
- {
- //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d",ddr_test_size,( lane_step));
- printf("\nstr=%s\n",str);
- run_command(str,0);
-
- }
-}
-
-if (channel_a_en)
-{
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_a[lane_step],
- dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
- dq_lcd_bdl_value_rdqs_org_a[lane_step],
- dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
- }}
-if (channel_b_en)
-{
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n b_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_b[lane_step],
- dq_lcd_bdl_value_wdq_min_b[lane_step],dq_lcd_bdl_value_wdq_max_b[lane_step],
- dq_lcd_bdl_value_rdqs_org_b[lane_step],
- dq_lcd_bdl_value_rdqs_min_b[lane_step],dq_lcd_bdl_value_rdqs_max_b[lane_step]);
- }}
-
-return reg_value;
-}
-
-/*
-U_BOOT_CMD(
- ddr_tune_dqs_step, 5, 1, do_ddr_test_fine_tune_dqs_step,
- "ddr_tune_dqs_step function",
- "ddr_tune_dqs_step a 0 0x800000 3 or ddr_tune_dqs_step b 0 0x800000 5 or ddr_tune_dqs_step a b 0x800000 l\n dcache off ? \n"
-);
-*/
-
-int do_ddr_test_fine_tune_dqs_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Tune ddr dqs step function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- unsigned int temp_count_i = 1;
- unsigned int temp_count_j= 1;
- unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_lane_step=0;
- unsigned int test_lane_step_rdqs_flag=0;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-#define DATX8_DQ_LCD_BDL_REG_WIDTH 12
-
-#define DATX8_DQ_LANE_WIDTH 4
-#define CHANNEL_CHANNEL_WIDTH 2
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-
-#define DATX8_DQ_LANE_LANE00 0
-#define DATX8_DQ_LANE_LANE01 1
-#define DATX8_DQ_LANE_LANE02 2
-#define DATX8_DQ_LANE_LANE03 3
-
-#define DATX8_DQ_BDLR0 0
-#define DATX8_DQ_BDLR1 1
-#define DATX8_DQ_BDLR2 2
-#define DATX8_DQ_BDLR3 3
-#define DATX8_DQ_BDLR4 4
-#define DATX8_DQ_BDLR5 5
-#define DATX8_DQ_BDLR6 6
-#define DATX8_DQ_DXNLCDLR0 7
-#define DATX8_DQ_DXNLCDLR1 8
-#define DATX8_DQ_DXNLCDLR2 9
-#define DATX8_DQ_DXNMDLR 10
-#define DATX8_DQ_DXNGTR 11
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
-#define DQ_LCD_BDL_REG_NUM_PER_CHANNEL DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
-#define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
-
- unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
-
- unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
- unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
-
- unsigned int dq_lcd_bdl_temp_reg_value;
- unsigned int dq_lcd_bdl_temp_reg_value_dqs;
- unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
- unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
- unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
- // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
-
- unsigned int dq_lcd_bdl_temp_reg_lef;
- unsigned int dq_lcd_bdl_temp_reg_rig;
- unsigned int dq_lcd_bdl_temp_reg_center;
- unsigned int dq_lcd_bdl_temp_reg_windows;
- unsigned int dq_lcd_bdl_temp_reg_center_min;
- unsigned int dq_lcd_bdl_temp_reg_windows_min;
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_lane_step = 0;
- test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_lane_step = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_lane_step = 0;
- }
- }
- test_loop=1;
-
- unsigned int test_min_max=0;
- if (argc >5) {
-
- test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max = 0;
- }
- else
- test_min_max=1;
-
- }
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\ntest_min_max== 0x%08x\n", test_min_max);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
-
-
-
- for ((temp_count_j=0);(temp_count_j<DATX8_DQ_LCD_BDL_REG_WIDTH);(temp_count_j++))
- {
- dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=readl(reg_add+4*temp_count_j);
- dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
- printf("\n org add 0x%08x reg== 0x%08x\n",(reg_add+4*temp_count_j), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]));
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
- =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
- =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
-
- }
- }
-
- }
-
- }
-
- }////save and print org training dqs value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- if (test_lane_step>8)
- test_lane_step=0;
- if (test_lane_step)
- {
- printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
- temp_count_i=(test_lane_step>>1);
- test_lane_step_rdqs_flag=test_lane_step-(temp_count_i<<1);
- test_lane_step=0;
- }
- {
- printf("\ntest lane==0x%08x\n ",temp_count_i);
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
- }
-
- for ((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
- {
- if (test_lane_step_rdqs_flag)
- {
- temp_count_k=1;
- test_lane_step_rdqs_flag=0;
- }
- if (temp_count_k == 0)
- {
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
- // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
-
- while (dq_lcd_bdl_temp_reg_value_wdqd>0)
- {
- if(test_min_max)
- {break;
- }
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_wdqd--;
- printf("\nwdqd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value_wdqd++;
- break;
- }
- }
- printf("\nwdqd left edge detect \n");
- printf("\nwdqd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_wdqd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_wdqd>(dq_lcd_bdl_temp_reg_lef_min_value&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_lef_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
- }
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
-
- while (dq_lcd_bdl_temp_reg_value_wdqd<0xff)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_wdqd++;
- printf("\nwdqd rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nwdqd right edge detect \n");
- dq_lcd_bdl_temp_reg_value_wdqd--;
- break;
- }
- }
- printf("\nwdqd right edge detect \n");
- printf("\nwdqd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_wdqd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
-
- dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
- dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_wdqd<(dq_lcd_bdl_temp_reg_rig_min_value&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_rig_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
- }
-
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
-
- }
- else if(temp_count_k==1)
- {
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
- while (dq_lcd_bdl_temp_reg_value_rdqsd>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_rdqsd--;
- printf("\nrdqsd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nrdqsd left edge detect \n");
- dq_lcd_bdl_temp_reg_value_rdqsd++;
- break;
- }
- }
- printf("\nrdqsd left edge detect \n");
- printf("\nrdqsd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
-
- dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_rdqsd>((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_lef_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
- }
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
- dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
- dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
- dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
-
- while (dq_lcd_bdl_temp_reg_value_rdqsd<0xff)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value_rdqsd++;
- printf("\nrdqsd right temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- //printf("\nrdqsd right edge detect \n");
- dq_lcd_bdl_temp_reg_value_rdqsd--;
- break;
- }
- }
- printf("\nrdqsd right edge detect \n");
- printf("\nrdqsd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
- dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
- dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
- dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
-
-
- dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
- if (dq_lcd_bdl_temp_reg_value_rdqsd<((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)) //update wdqd min value
- {
- dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
- =((dq_lcd_bdl_temp_reg_rig_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
- }
-
-
-
- writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
-
-
-
-
- }
-
- }
- }
-
- }
- }
-
- ////tune and save training dqs value
-
-
-
-
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
-
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- // dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
-
- printf("\n org add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- printf("\n lef add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
- {
- printf("\n rig add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
- }
-
- printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
- printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
- }
-
- dq_lcd_bdl_temp_reg_lef=(dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
- dq_lcd_bdl_temp_reg_rig=(dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
-
- if (test_times == 0)
- {
- (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_lef;
- (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_rig;
-
- }
- dq_lcd_bdl_temp_reg_lef_min_value=(dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
- dq_lcd_bdl_temp_reg_rig_min_value=(dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
-
-
- //dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value&0x0000ff);
- dq_lcd_bdl_temp_reg_center=( (((dq_lcd_bdl_temp_reg_lef&0xff)+(dq_lcd_bdl_temp_reg_rig&0xff))/2)
- |(((((dq_lcd_bdl_temp_reg_lef>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<8)
- |(((((dq_lcd_bdl_temp_reg_lef>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<16) );
-
- dq_lcd_bdl_temp_reg_windows=( (((dq_lcd_bdl_temp_reg_rig&0xff)-(dq_lcd_bdl_temp_reg_lef&0xff)))
- |(((((dq_lcd_bdl_temp_reg_rig>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<8)
- |(((((dq_lcd_bdl_temp_reg_rig>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<16) );
-
-
- dq_lcd_bdl_temp_reg_center_min=( (((dq_lcd_bdl_temp_reg_lef_min_value&0xff)+(dq_lcd_bdl_temp_reg_rig_min_value&0xff))/2)
- |(((((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<8)
- |(((((dq_lcd_bdl_temp_reg_lef_min_value>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<16) );
-
- dq_lcd_bdl_temp_reg_windows_min=( (((dq_lcd_bdl_temp_reg_rig_min_value&0xff)-(dq_lcd_bdl_temp_reg_lef_min_value&0xff)))
- |(((((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<8)
- |(((((dq_lcd_bdl_temp_reg_rig_min_value>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<16) );
-
- printf("\n add 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
- (dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- dq_lcd_bdl_temp_reg_center,dq_lcd_bdl_temp_reg_windows,
- (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
- dq_lcd_bdl_temp_reg_center_min,dq_lcd_bdl_temp_reg_windows_min
- );
- }
-
-
- }
-
- }
-
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-
-
-int do_ddr_test_dqs_window_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_dqs_window function\n");
- printf("\nddr_test_cmd 0x22 a 0 0x80000 ns lane_disable add_test_size --- watchdog should >15s\n");
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
-
- unsigned int lane_step= 0;
- unsigned int reg_value= 0;
- //int argc2;
- //char * argv2[30];
- char *endp;
- char *buf;
- buf="";
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
-
-
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
-
-
-
- if (argc >4) {
- watchdog_time_s = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- watchdog_time_s= 20;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
-
- unsigned int lane_disable= 0;
-
- if (argc >5) {
- lane_disable = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- unsigned int add_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- if (argc >6) {
- add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- add_test_size= ddr_test_size;
- }
- }
- printf("add_test_size==0x%08x\n",add_test_size);
- //argc2=5;
- //for(i = 1;i<(argc);i++)
- {
- //argv2[i-1]=argv[i];
- }
-
- //argv2[0]=argv[1];
- //argv2[1]=argv[2];
- //argv2[2]=argv[3];
- //#include <stdio.h>
- // unsigned int wr_adj_per[24] ;
- //if(1)
-
- printf("\ntest use uboot env\n");
-
- char str[1024]="";
- char str_temp1[1024]="";
- char str_temp2[1024]="";
- const char *s;
- unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
-
- unsigned int *num_arry;
- //unsigned int *num_arry_temp;
- unsigned int *num_arry_lane0=NULL;
- unsigned int *num_arry_lane1=NULL;
- unsigned int *num_arry_lane2=NULL;
- unsigned int *num_arry_lane3=NULL;
- char *name_lane0;
- char *name_lane1;
- char *name_lane2;
- char *name_lane3;
- num_arry = (unsigned int *)(&str_to_numarry);
- int i;
- char *varname; char *env_lcdlr_temp_count;
- unsigned int lcdlr_temp_count=0;
- const char *temp_s;const char *temp_s1;
- // int value=0;
-
- varname="env_ddrtest_data_lane";
- name_lane0="ddr_test_data_lane0";
- name_lane1="ddr_test_data_lane1";
- name_lane2="ddr_test_data_lane2";
- name_lane3="ddr_test_data_lane3";
- env_lcdlr_temp_count="lcdlr_temp_count";
- s = getenv(varname);
- if (s)
- {//i=0;
- //while(s_temp)
- {
- env_to_num(varname,num_arry);//unsigned int *num_arry
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- else
- {lcdlr_temp_count=0;
- }
-
- if(0){
- env_to_num(name_lane0,num_arry_lane0);//unsigned int *num_arry
- env_to_num(name_lane1,num_arry_lane1);//unsigned int *num_arry
- env_to_num(name_lane2,num_arry_lane2);//unsigned int *num_arry
- env_to_num(name_lane3,num_arry_lane3);//unsigned int *num_arry
- }
-
- for (i = 0; i < 48; i++) {
-
- printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
- //for (lane_step = 0;lane_step< 4;lane_step++)
- if(0)
- {
- for (i = 0; i < 8; i++) {
-
- printf("lane_0 str_to_numarry[%d]==%d\n",i,num_arry_lane0[i]);
- }
- for (i = 0; i < 8; i++) {
-
- printf("lane_1 str_to_numarry[%d]==%d\n",i,num_arry_lane1[i]);
- }
- for (i = 0; i < 8; i++) {
-
- printf("lane_2 str_to_numarry[%d]==%d\n",i,num_arry_lane2[i]);
- }
- for (i = 0; i < 8; i++) {
-
- printf("lane_3 str_to_numarry[%d]==%d\n",i,num_arry_lane3[i]);
- }
- }
- // printf("%s,lenth=%d",s,(strlen(s)));
- //sscanf(s,"d%,",wr_adj_per);
- //sprintf(str,"d%",s);
- //getc
- // if (strlen(s) > 16)
- {
- // sscanf(s, "%08x, %08x, %08x, \n",
- // &wr_adj_per[0], &wr_adj_per[1], &wr_adj_per[2]);
- }
- }
- }
- else
- {
- printf("no env set,exit\n");
- return 0;}
- s = getenv(varname);//for debug display env should add
-
-
- ///*
- //if(1)
-
- unsigned int test_arg_0_cmd0 =0; //master cmd
- unsigned int test_arg_1_cmd1 =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- // unsigned int lane_step= 0;
- //char str[24];
-
-
- test_arg_0_cmd0=num_arry[0];
- test_arg_1_cmd1=num_arry[1];
- test_arg_2_step=num_arry[2];
- test_arg_3_freq=num_arry[3];
- test_arg_4_step_status=num_arry[4];
- printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
- printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
-
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk)
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
- test_arg_0_cmd0=0x22;
- test_arg_1_cmd1=0;
- test_arg_2_step=1;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- num_arry[0]=test_arg_0_cmd0;
- num_arry[1]=test_arg_1_cmd1;
- num_arry[2]=test_arg_2_step;
- num_arry[3]=test_arg_3_freq;
- num_arry[4]=test_arg_4_step_status;
- num_arry[5]=0;
- num_arry[6]=0;
- num_arry[7]=0;
- for (i = 8; i < 48; i++) {
- num_arry[i]=0;
- }
-
- for (lane_step = 0; lane_step < 4; lane_step++)
- {
- //if(lane_step%2)
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0xff);
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))>>8)&0xff);
-#else
- dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0x1ff);
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff);
-
- printf("lcdlr1 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1),
- ((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0x1ff),dq_lcd_bdl_value_wdq_org_a[lane_step]);
- printf("lcdlr3 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3),
- (((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff),dq_lcd_bdl_value_rdqs_org_a[lane_step]);
-#endif
-
- //printf("lcdlr1 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
- //DDR0_PUB_DX0LCDLR1)
- //+DDR0_PUB_DX0LCDLR1));
- //printf("lcdlr3 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
- //DDR0_PUB_DX0LCDLR3)
- //+DDR0_PUB_DX0LCDLR3));
- //dq_lcd_bdl_value_rdqs_org_a[lane_step]=0;
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=0xffff;
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=0xffff;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- }
- //else
- {
- //dq_lcd_bdl_value_wdq_org_a[lane_step]=0;
- dq_lcd_bdl_value_wdq_min_a[lane_step]=0xffff;
- dq_lcd_bdl_value_wdq_max_a[lane_step]=0xffff;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- }
- }
-
- {
- dq_lcd_bdl_value_aclcdlr_org_a=((readl(DDR0_PUB_ACLCDLR))&ACLCDLR_MAX);
- dq_lcd_bdl_value_aclcdlr_min_a=0xffff;
- dq_lcd_bdl_value_aclcdlr_max_a=0xffff;
- dq_lcd_bdl_value_aclcdlr_status_a=0;
- dq_lcd_bdl_value_bdlr0_org_a=((readl(DDR0_PUB_ACBDLR0))&ACBDLR_MAX);
- dq_lcd_bdl_value_bdlr0_min_a=0xffff;
- dq_lcd_bdl_value_bdlr0_max_a=0xffff;
- dq_lcd_bdl_value_bdlr0_status_a=0;
- }
-
-
-
-#if 1 //( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- dq_lcd_bdl_value_wdq_status_a[0]=4;
- dq_lcd_bdl_value_rdqs_status_a[0]=4;
- }
- if(lane_disable&0x2){
- dq_lcd_bdl_value_wdq_status_a[1]=4;
- dq_lcd_bdl_value_rdqs_status_a[1]=4;
- }
- if(lane_disable&0x4){
- dq_lcd_bdl_value_wdq_status_a[2]=4;
- dq_lcd_bdl_value_rdqs_status_a[2]=4;
- }
- if(lane_disable&0x8){
- dq_lcd_bdl_value_wdq_status_a[3]=4;
- dq_lcd_bdl_value_rdqs_status_a[3]=4;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- dq_lcd_bdl_value_aclcdlr_status_a=4;
- printf("dq_lcd_bdl_value_aclcdlr_status_a==%x\n",dq_lcd_bdl_value_aclcdlr_status_a);
- }
- if(lane_disable&0x20){
- dq_lcd_bdl_value_bdlr0_status_a=4;
- printf("dq_lcd_bdl_value_bdlr0_status_a==%x\n",dq_lcd_bdl_value_bdlr0_status_a);
-
- }
- }
-
- {
- for (lane_step = 0; lane_step < 4; lane_step++)
-
-
- {
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- }
-
-
-
-
- lane_step=4;
- {
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- }
- }
-
- if(0){
- for (i = 0; i < 8; i++) {
- num_arry_lane0[i]=num_arry[8+i];
- }
- for (i = 0; i < 8; i++) {
- num_arry_lane1[i]=num_arry[8+8+i];
- }
- for (i = 0; i < 8; i++) {
- num_arry_lane2[i]=num_arry[8+8+8+i];
- }
- for (i = 0; i < 8; i++) {
- num_arry_lane3[i]=num_arry[8+8+8+8+i];
- }
- num_to_env(name_lane0,num_arry_lane0);
- num_to_env(name_lane1,num_arry_lane1);
- num_to_env(name_lane2,num_arry_lane2);
- num_to_env(name_lane3,num_arry_lane3);
- run_command("save",0);
- }
-
- }
-
-
-
-
- for (i = 0; i < 48; i++) {
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
-
-
- }
-
- test_arg_2_step++;
- num_arry[2]=test_arg_2_step;
- sprintf(str, "0x%08x", num_arry[0]);
- printf("%d %d\n", 0,num_arry[0]);
- for (i = 1; i < 48; i++) {
- //num_arry[i]=0;
- sprintf(str, "%s;0x%08x", str,num_arry[i]);
- printf("%d %d\n", i,num_arry[i]);
-
- }
- //sprintf(str, "%lx", value);
- printf("%s", str);
- setenv(varname, str);
- run_command("save",0);
-
-
- i=2;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
-
- for (i = 8; i < 48; i++) {
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- temp_s1= getenv(str_temp1);
- if(temp_s1)
- {
- num_arry[i]= simple_strtoull_ddr(temp_s1, &endp, 0);
- }
- else
- {num_arry[i]=0;
- }
- printf("ddr_test_data_num_%04d==%d\n",i,num_arry[i]);
- }
-
- ///*
- {
- for (lane_step = 0; lane_step < 4; lane_step++)
- {
- {
- dq_lcd_bdl_value_wdq_org_a[lane_step]=num_arry[8+lane_step*4*2+0];
- dq_lcd_bdl_value_wdq_min_a[lane_step]=num_arry[8+lane_step*4*2+1];
- dq_lcd_bdl_value_wdq_max_a[lane_step]=num_arry[8+lane_step*4*2+2];
- dq_lcd_bdl_value_wdq_status_a[lane_step]=num_arry[8+lane_step*4*2+3];
- }
- {
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=num_arry[8+lane_step*4*2+4];
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=num_arry[8+lane_step*4*2+5];
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=num_arry[8+lane_step*4*2+6];
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=num_arry[8+lane_step*4*2+7];
- }
-
-
- }
- lane_step=4;
- {
- dq_lcd_bdl_value_aclcdlr_org_a=num_arry[8+lane_step*4*2+0];
- dq_lcd_bdl_value_aclcdlr_min_a=num_arry[8+lane_step*4*2+1];
- dq_lcd_bdl_value_aclcdlr_max_a=num_arry[8+lane_step*4*2+2];
- dq_lcd_bdl_value_aclcdlr_status_a=num_arry[8+lane_step*4*2+3];
- dq_lcd_bdl_value_bdlr0_org_a=num_arry[8+lane_step*4*2+4];
- dq_lcd_bdl_value_bdlr0_min_a=num_arry[8+lane_step*4*2+5];
- dq_lcd_bdl_value_bdlr0_max_a=num_arry[8+lane_step*4*2+6];
- dq_lcd_bdl_value_bdlr0_status_a=num_arry[8+lane_step*4*2+7];
- }
- }
- //*/
-
-
-
-
- if (channel_a_en)
- {
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane a\n");
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- ddr_test_watchdog_enable(watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",watchdog_time_s);
-
- /*
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- */
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
- )
- {
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0))
- { dq_lcd_bdl_value_wdq_status_a[lane_step]=1;
- {
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+0),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
-
- }
- else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_wdq_min_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
-
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+1;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==2)||
- (dq_lcd_bdl_value_wdq_status_a[lane_step]==3))
- {
- // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
- // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- // num_to_env(varname,num_arry);
- // run_command("reset",0);
- // }
-
- {
- if(dq_lcd_bdl_value_wdq_status_a[lane_step]==2)
- { dq_lcd_bdl_value_wdq_status_a[lane_step]=3;
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+0),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
-
- }
- else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==3)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_wdq_max_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+2;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- run_command("reset",0);
- }
-
- }
-
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
- )
- {
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- { dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
-
- }
- else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+5;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3))
- {
-
- {
- if(dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)
- {
-
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
-
- }
- else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- //ddr_udelay(1000000);
- // num_to_env(varname,num_arry);
-
- {
- i=8+lane_step*8+6;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- run_command("reset",0);
- }
-
- }
-
- /*
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
- */
-
-
- ddr_test_watchdog_disable(); //s
- {printf("close watchdog\n");
- }
-
-
- }
-
-
-
- }
-
- if (channel_a_en)
- {
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest lcdlr ac bdlr window lane a...\n");
-
- {
- ddr_test_watchdog_enable(watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",watchdog_time_s);
- printf("\ndq_lcd_bdl_value_aclcdlr_status_a %d \n",dq_lcd_bdl_value_aclcdlr_status_a);
- lane_step=4;
- env_lcdlr_temp_count="lcdlr_temp_count_a";
- if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==0)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==1)
- )
- {
- if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==0))
- { dq_lcd_bdl_value_aclcdlr_status_a=1;
- {
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- i=8+lane_step*8+3;
- printf("aclcdlr_status_a==0x%08x\n",num_arry[i]);
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- printf("\n222test lcdlr ac bdlr window lane a...\n");
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- printf("\n333test lcdlr ac bdlr window lane a...\n");
- //ddr_tune_aclcdlr_step
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 0),2);
- printf("\nstr=%s\n",str);
- printf("aclcdlr_status_a1==0x%08x\n",num_arry[i]);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_aclcdlr_status_a=2;
-
- }
- else if (dq_lcd_bdl_value_aclcdlr_status_a==1)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_aclcdlr_min_a=lcdlr_temp_count;
- dq_lcd_bdl_value_aclcdlr_status_a=2;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
-
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+1;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_aclcdlr_status_a==2)||
- (dq_lcd_bdl_value_aclcdlr_status_a==3))
- {
- // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
- // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- // num_to_env(varname,num_arry);
- // run_command("reset",0);
- // }
-
- {
- if(dq_lcd_bdl_value_aclcdlr_status_a==2)
- { dq_lcd_bdl_value_aclcdlr_status_a=3;
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 0),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_aclcdlr_status_a=4;
-
- }
- else if (dq_lcd_bdl_value_aclcdlr_status_a==3)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_aclcdlr_max_a=lcdlr_temp_count;
- dq_lcd_bdl_value_aclcdlr_status_a=4;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+2;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- run_command("reset",0);
- }
-
- }
-
-
- if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
- ||(dq_lcd_bdl_value_bdlr0_status_a==0)
- ||(dq_lcd_bdl_value_bdlr0_status_a==1)
- )
- {
- if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
- ||(dq_lcd_bdl_value_bdlr0_status_a==0))
- { dq_lcd_bdl_value_bdlr0_status_a=1;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_bdlr0_status_a=2;
-
- }
- else if (dq_lcd_bdl_value_bdlr0_status_a==1)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_bdlr0_min_a=lcdlr_temp_count;
- dq_lcd_bdl_value_bdlr0_status_a=2;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
- //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+5;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_bdlr0_status_a==2)||
- (dq_lcd_bdl_value_bdlr0_status_a==3))
- {
-
- {
- if(dq_lcd_bdl_value_bdlr0_status_a==2)
- {
-
- dq_lcd_bdl_value_bdlr0_status_a=3;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_bdlr0_status_a=4;
-
- }
- else if (dq_lcd_bdl_value_bdlr0_status_a==3)
- {
- temp_s= getenv(env_lcdlr_temp_count);
- if(temp_s)
- {
- lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- }
- dq_lcd_bdl_value_bdlr0_max_a=lcdlr_temp_count;
- dq_lcd_bdl_value_bdlr0_status_a=4;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- //ddr_udelay(1000000);
- // num_to_env(varname,num_arry);
-
- {
- i=8+lane_step*8+6;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- run_command("reset",0);
- }
-
- }
-
- /*
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
- */
-
-
- ddr_test_watchdog_disable(); //s
- {printf("close watchdog\n");
- }
-
-
- }
-
-
-
- }
-
- if (channel_b_en)
- {//*(char *)(argv2[0])="b";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane b\n");
- for ((lane_step=0);(lane_step<8);(lane_step++))
- {
- //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d",ddr_test_size,( lane_step));
- printf("\nstr=%s\n",str);
- run_command(str,0);
-
- }
- }
-
- unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
- if (channel_a_en)
- {
- acmdlr=((readl((DDR0_PUB_ACMDLR)))&ACLCDLR_MAX);
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_a[lane_step],
- dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
- dq_lcd_bdl_value_rdqs_org_a[lane_step],
- dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
- }
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- dq_lcd_bdl_value_aclcdlr_org_a,
- dq_lcd_bdl_value_aclcdlr_min_a,dq_lcd_bdl_value_aclcdlr_max_a,
- dq_lcd_bdl_value_bdlr0_org_a,
- dq_lcd_bdl_value_bdlr0_min_a,dq_lcd_bdl_value_bdlr0_max_a);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- dq_lcd_bdl_value_aclcdlr_org_a,
- (((dq_lcd_bdl_value_aclcdlr_max_a-dq_lcd_bdl_value_aclcdlr_org_a)*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_aclcdlr_org_a-dq_lcd_bdl_value_aclcdlr_min_a)*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
- 2*dq_lcd_bdl_value_aclcdlr_org_a));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- dq_lcd_bdl_value_bdlr0_org_a,
- 0,
- 0,
- (((dq_lcd_bdl_value_bdlr0_org_a-dq_lcd_bdl_value_bdlr0_min_a)*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_bdlr0_max_a-dq_lcd_bdl_value_bdlr0_org_a)*delay_step_x100
- )/100),
-
- 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
- 2*dq_lcd_bdl_value_bdlr0_org_a));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_a[lane_step],
- (((dq_lcd_bdl_value_wdq_max_a[lane_step]-dq_lcd_bdl_value_wdq_org_a[lane_step])*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_wdq_org_a[lane_step]-dq_lcd_bdl_value_wdq_min_a[lane_step])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(dq_lcd_bdl_value_wdq_max_a[lane_step]+dq_lcd_bdl_value_wdq_min_a[lane_step])/(
- 2*dq_lcd_bdl_value_wdq_org_a[lane_step]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- dq_lcd_bdl_value_rdqs_org_a[lane_step],
- 0,
- 0,
-
- (((dq_lcd_bdl_value_rdqs_org_a[lane_step]-dq_lcd_bdl_value_rdqs_min_a[lane_step])*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_rdqs_max_a[lane_step]-dq_lcd_bdl_value_rdqs_org_a[lane_step])*delay_step_x100
- )/100),
- 100*(dq_lcd_bdl_value_rdqs_max_a[lane_step]+dq_lcd_bdl_value_rdqs_min_a[lane_step])/(
- 2*dq_lcd_bdl_value_rdqs_org_a[lane_step]));
-
-
-
- }
- }
-
-
-
- if (channel_b_en)
- {
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {;
- }
- }
-
- return reg_value;
-}
-
-
-U_BOOT_CMD(
- ddr_dqs_window_step, 6, 1, do_ddr_test_dqs_window_step,
- "DDR tune dqs function",
- "ddr_dqs_window_step a 0 0x800000 1 or ddr_dqs_window_step b 0 0x800000 5\n dcache off ? \n"
-);
-
-///*
-
-#endif
-
-int do_ddr2pll_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- extern int do_ddr2pll_g12_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
- do_ddr2pll_g12_cmd(cmdtp,flag,argc, argv);
- return 1;
-#endif
-
-#define DDR_TEST_CMD_TEST_ZQ 0
-#define DDR_TEST_CMD_TEST_AC_BIT_SETUP 1
-#define DDR_TEST_CMD_TEST_AC_BIT_HOLD 2
-#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_SETUP 3
-#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_HOLD 4
-#define DDR_TEST_CMD_TEST_DATA_READ_BIT_SETUP 5
-#define DDR_TEST_CMD_TEST_DATA_READ_BIT_HOLD 6
-#define DDR_TEST_CMD_TEST_DATA_VREF 7
-#define DDR_TEST_CMD_TEST_CLK_INVETER 8
-
-#define DDR_TEST_CMD_TEST_FULLTEST 0xffffffff
- char *endp;
- unsigned int pll, zqcr;
- unsigned int zqpr_soc_dram=0;
- unsigned int ddr_test_cmd_soc_vref=0;
- unsigned int ddr_test_cmd_dram_vref=0;//0x3f;
- unsigned int ddr_test_cmd_zq_vref=0;//0x3f;
-
-
- unsigned int ddr_full_test_enable=0;
- /*
-#define DDR3_DRV_40OHM 0
-#define DDR3_DRV_34OHM 1
-#define DDR3_ODT_0OHM 0
-#define DDR3_ODT_60OHM 1
-#define DDR3_ODT_120OHM 2
-#define DDR3_ODT_40OHM 3
-#define DDR3_ODT_20OHM 4
-#define DDR3_ODT_30OHM 5
-
- // lpddr2 drv odt
-#define LPDDR2_DRV_34OHM 1
-#define LPDDR2_DRV_40OHM 2
-#define LPDDR2_DRV_48OHM 3
-#define LPDDR2_DRV_60OHM 4
-#define LPDDR2_DRV_80OHM 6
-#define LPDDR2_DRV_120OHM 7
-#define LPDDR2_ODT_0OHM 0
-
- // lpddr3 drv odt
-#define LPDDR3_DRV_34OHM 1
-#define LPDDR3_DRV_40OHM 2
-#define LPDDR3_DRV_48OHM 3
-#define LPDDR3_DRV_60OHM 4
-#define LPDDR3_DRV_80OHM 6
-#define LPDDR3_DRV_34_40OHM 9
-#define LPDDR3_DRV_40_48OHM 10
-#define LPDDR3_DRV_34_48OHM 11
-#define LPDDR3_ODT_0OHM 0
-#define LPDDR3_ODT_60OHM 1
-#define LPDDR3_ODT_12OHM 2
-#define LPDDR3_ODT_240HM 3
-
-#define DDR4_DRV_34OHM 0
-#define DDR4_DRV_48OHM 1
-#define DDR4_ODT_0OHM 0
-#define DDR4_ODT_60OHM 1
-#define DDR4_ODT_120OHM 2
-#define DDR4_ODT_40OHM 3
-#define DDR4_ODT_240OHM 4
-#define DDR4_ODT_48OHM 5
-#define DDR4_ODT_80OHM 6
-#define DDR4_ODT_34OHM 7
-*/
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- unsigned int soc_data_drv_odt = 0;
- //unsigned int dram_drv = 0;
- //unsigned int dram_odt = 0;
- /* need at least two arguments */
- if (argc < 2)
- goto usage;
-
- pll = simple_strtoull_ddr(argv[1], &endp,0);
- if (*argv[1] == 0 || *endp != 0) {
- printf ("Error: Wrong format parament!\n");
- return 1;
- }
- if (argc >2)
- {
- zqcr = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0) {
- zqcr = 0;
- }
- }
- else
- {
- zqcr = 0;
- }
-
- if(zqcr==0xffffffff)
- {
- ddr_full_test_enable=1;
- zqcr=0;}
-
- if (argc >3)
- {
- // soc_data_drv_odt=zqpr_soc_dram&0xfffff;
- // dram_drv=(zqpr_soc_dram>>20)&0xf;
- // dram_odt=(zqpr_soc_dram>>24)&0xf;
- //bit28 enable soc_zqpr ,bit 29 enabe dram_drv bit 30 enabel dram_odt
- zqpr_soc_dram = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0) {
- zqpr_soc_dram = 0;
- }
- }
- else
- {
- zqpr_soc_dram = 0;
- }
-
- if (argc >4)
- {
- ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- ddr_test_cmd_soc_vref = 0;
- }
- }
- else
- {
- ddr_test_cmd_soc_vref = 0;
- }
- if (argc >5)
- {
- ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- ddr_test_cmd_dram_vref = 0;
- }
- }
- unsigned int soc_dram_hex_dec=0;
- if (argc >6)
- {
- soc_dram_hex_dec = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0) {
- soc_dram_hex_dec = 0;
- }
- }
- if (argc >7)
- {
- ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0) {
- ddr_test_cmd_zq_vref = 0;
- }
- }
-
-
-
- unsigned int soc_dram_drv_odt_use_vlaue=0;
- unsigned int soc_ac_drv=0;
- unsigned int soc_ac_odt=0;
- unsigned int soc_data_drv=0;
- unsigned int soc_data_odt=0;
- unsigned int dram_drv=0;
- unsigned int dram_odt=0;
- unsigned int soc_data_drv_odt_adj_enable=0;
- unsigned int dram_data_drv_adj_enable=0;
- unsigned int dram_data_odt_adj_enable=0;
-
- unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
- unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
- unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
-#define DDR_TYPE_LPDDR2 0
-#define DDR_TYPE_LPDDR3 1
-#define DDR_TYPE_DDR3 3
-#define DDR_TYPE_DDR4 4
- unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
- // unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
- if (argc >8)
- {
- soc_dram_drv_odt_use_vlaue = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0) {
- soc_dram_drv_odt_use_vlaue = 0;
- }
- }
- if(soc_dram_drv_odt_use_vlaue)
- {if(zqcr)
- {printf("zqcr[0x%08x],\n", zqcr);
- {
- soc_ac_drv=zqcr%100;
- if(soc_ac_drv>100)
- {soc_ac_drv=0;}
- if(soc_ac_drv==0)
- {soc_ac_drv=1;}
- soc_ac_drv=(480/soc_ac_drv)-1;
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(soc_ac_drv>0xf)
- {soc_ac_drv=zq0pr_org&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(soc_ac_drv>0xf)
- {soc_ac_drv=(zq0pr_org>>8)&0xf;}
- }
- }
-
-
- {
- soc_ac_odt=zqcr/100;
- if(soc_ac_odt>240)
- {soc_ac_odt=480;}
- if(soc_ac_odt==0)
- {soc_ac_odt=1;}
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- soc_ac_odt=(360/soc_ac_odt)-1;
- if(soc_ac_odt>0xf)
- {soc_ac_odt=(zq0pr_org>>4)&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- soc_ac_odt=(480/soc_ac_odt)-1;
- if(soc_ac_odt>0xf)
- {soc_ac_odt=(zq0pr_org>>16)&0xf;}
- }
- }
-
- zqcr=(soc_ac_odt<<16)|(soc_ac_drv<<12)|(soc_ac_drv<<8)|(soc_ac_odt<<4)|(soc_ac_drv);
- printf("zqcr[0x%08x],soc_ac_odt [0x%08x],soc_ac_drv [0x%08x]\n", zqcr,soc_ac_odt,soc_ac_drv);
- }
- if(zqpr_soc_dram)
- {printf("zqpr_soc_dram[0x%08x],\n", zqpr_soc_dram);
- {
- soc_data_drv=zqpr_soc_dram%100;
- printf("soc_data_drv[%d],\n", soc_data_drv);
- if(soc_data_drv>100)
- {soc_data_drv=0;
-
- }
- if(soc_data_drv==0)
- {soc_data_drv=1;
- //soc_data_drv_odt_adj_enable=0;
- }
- else
- {//soc_data_drv_odt_adj_enable=1;
- }
- soc_data_drv=(480/soc_data_drv)-1;
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(soc_data_drv>0xf)
- {soc_data_drv=zq1pr_org&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(soc_data_drv>0xf)
- {soc_data_drv=(zq1pr_org>>8)&0xf;}
- }
- }
-
-
- {
- soc_data_odt=(zqpr_soc_dram/100)%1000;
- printf("soc_data_odt[%d],\n", soc_data_odt);
- if(soc_data_odt>240)
- {soc_data_odt=360;}
- if(soc_data_odt==0)
- {soc_data_odt=1;}
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- soc_data_odt=(360/soc_data_odt)-1;
- if(soc_data_odt>0xf)
- {soc_data_odt=(zq1pr_org>>4)&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- soc_data_odt=(480/soc_data_odt)-1;
- if(soc_data_odt>0xf)
- {soc_data_odt=(zq1pr_org>>16)&0xf;}
- }
-
- }
-
- soc_data_drv_odt_adj_enable=1;
-
- {
- dram_drv=(zqpr_soc_dram/100000)%100;
- printf("dram_drv[%d],\n", dram_drv);
-
- if(dram_drv>100)
- {dram_drv=0;}
- if(dram_drv==0)
- {
- dram_data_drv_adj_enable=0;}
- else
- {dram_data_drv_adj_enable=1;
- }
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(dram_drv>=40)
- {dram_drv=0;}
-
- else
- {dram_drv=1;
- }
- }
-
-
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(dram_drv<48)
- {dram_drv=0;}
-
- else
- {dram_drv=1;
- }
- }
- }
-
-
- {
- dram_odt=(zqpr_soc_dram/100000)/100;
- printf("dram_odt[%d],\n", dram_odt);
- if(dram_odt>240)
- {dram_odt=480;}
- if(dram_odt==0)
- {
- dram_data_odt_adj_enable=0;
- }
- else
- {dram_data_odt_adj_enable=1;
- }
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(dram_odt>160)
- {dram_odt=0;}
- else if (dram_odt>90)
- {dram_odt=2;}
- else if (dram_odt>50)
- {dram_odt=1;}
- else if (dram_odt>35)
- {dram_odt=3;}
- else if (dram_odt>25)
- {dram_odt=5;}
- else if (dram_odt<=25)
- {dram_odt=4;}
-
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(dram_odt>280)
- {dram_odt=0;}
- else if (dram_odt>180)
- {dram_odt=4;}
- else if (dram_odt>100)
- {dram_odt=2;}
- else if (dram_odt>70)
- {dram_odt=6;}
- else if (dram_odt>54)
- {dram_odt=1;}
- else if (dram_odt>44)
- {dram_odt=5;}
- else if (dram_odt>37)
- {dram_odt=3;}
- else if (dram_odt<=34)
- {dram_odt=7;}
-
- }
-
-
-
- }
-
- zqpr_soc_dram=(dram_data_odt_adj_enable<<30)|(dram_data_drv_adj_enable<<29)|(soc_data_drv_odt_adj_enable<<28)|
- (dram_odt<<24)|(dram_drv<<20)|(soc_data_odt<<16)|(soc_data_drv<<12)|(soc_data_drv<<8)|(soc_data_odt<<4)|(soc_data_drv);
- }
- }
-
-
- if (soc_dram_hex_dec)
- {
- if (argc >4)
- {
- ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- ddr_test_cmd_soc_vref = 0;
- }
- }
- else
- {
- ddr_test_cmd_soc_vref = 0;
- }
- if (argc >5)
- {
- ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- ddr_test_cmd_dram_vref = 0;
- }
- }
- if (argc >7)
- {
- ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0) {
- ddr_test_cmd_zq_vref = 0;
- }
- }
- if (ddr_test_cmd_soc_vref)
- {
- if (ddr_test_cmd_soc_vref<45)
- ddr_test_cmd_soc_vref=45;
- if (ddr_test_cmd_soc_vref>88)
- ddr_test_cmd_soc_vref=88;
- ddr_test_cmd_soc_vref=(ddr_test_cmd_soc_vref*100-4407)/70;
- }
-
- if (ddr_test_cmd_dram_vref)
- {
- if (ddr_test_cmd_dram_vref<45)
- ddr_test_cmd_dram_vref=45;
- if (ddr_test_cmd_dram_vref>92)
- ddr_test_cmd_dram_vref=92;
- if (ddr_test_cmd_dram_vref>60) {
- ddr_test_cmd_dram_vref=(ddr_test_cmd_dram_vref*100-6000)/65;
- }
- else{
- ddr_test_cmd_dram_vref=((ddr_test_cmd_dram_vref*100-4500)/65)|(1<<6);
- }
- }
-
-
- printf("\nSet ddr_test_cmd_dram_vref [0x%08x]\n",ddr_test_cmd_dram_vref);
- if (ddr_test_cmd_zq_vref == 0)
- ddr_test_cmd_zq_vref=0;
- if (ddr_test_cmd_zq_vref) {
- if (ddr_test_cmd_zq_vref<45)
- ddr_test_cmd_zq_vref=45;
- if (ddr_test_cmd_zq_vref>88)
- ddr_test_cmd_zq_vref=88;
- ddr_test_cmd_zq_vref=(ddr_test_cmd_zq_vref*100-4407)/70;
- }
- }
-
- //if(ddr_test_cmd_type==DDR_TEST_CMD_TEST_AC_BIT_HOLD)
- //{if (ddr_test_cmd_clk_seed ==0)
- //ddr_test_cmd_clk_seed = 0x3f;
- //if (ddr_test_cmd_acbdl_x_seed ==0)
- //ddr_test_cmd_acbdl_x_seed = 0x3f;
- //}
-
-#if defined(CONFIG_M6TV) || defined(CONFIG_M6TVD)
- writel(zqcr | (0x3c << 24), PREG_STICKY_REG0);
-#else
- writel(zqcr | (0xf13 << 20), PREG_STICKY_REG0);
-#endif
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- writel((ddr_test_cmd_zq_vref<<24)|(ddr_test_cmd_soc_vref<<8)|ddr_test_cmd_dram_vref , PREG_STICKY_REG9);
- writel((zqpr_soc_dram<<0) , PREG_STICKY_REG8);
- soc_data_drv_odt=zqpr_soc_dram&0xfffff;
- dram_drv=(zqpr_soc_dram>>20)&0xf;
- dram_odt=(zqpr_soc_dram>>24)&0xf;
- printf("setting zqpr_soc_dram [0x%08x],..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n", zqpr_soc_dram);
- printf("soc_data_drv_odt [0x%08x],dram_drv [0x%08x],dram_odt [0x%08x]\n", soc_data_drv_odt,dram_drv,dram_odt);
- if(ddr_full_test_enable)
- {
- pll=(ddr_full_test_enable<<21)|pll;
- printf("ddr_full_test_enable %08x,set sticky reg1 bit 21 1\n", ddr_full_test_enable);
- }
-
-#endif
-
-
- writel(pll, PREG_STICKY_REG1);
-
- printf("Set pll done [0x%08x]\n", readl(PREG_STICKY_REG1));
- printf("Set STICKY_REG0 [0x%08x]\n", readl(PREG_STICKY_REG0));
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- printf("Set STICKY_REG9 [0x%08x]\n", readl(PREG_STICKY_REG9));
- printf("Set STICKY_REG8 [0x%08x]\n", readl(PREG_STICKY_REG8));
-
-#endif
- printf("\nbegin reset 111...........\n");
- printf("\nbegin reset 2...........\n");
- printf("\nbegin reset 3...........\n");
-
-#ifdef CONFIG_M8B
- printf(" t1 \n");
- writel(0xf080000 | 2000, WATCHDOG_TC);
-#else
- printf(" t2 \n");
- // writel(WATCHDOG_TC, 0xf400000 | 2000);
- // *P_WATCHDOG_RESET = 0;
- ddr_test_watchdog_reset_system();
-#endif
- while(1);
- return 0;
-
-usage:
-
- printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
- printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
- printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
- printf("or ddr_test_cmd 0x17 1200 6034 0603406034 0 0 0 0 1 \n");
- printf("setting zqpr_soc_dram ,..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n");
- printf("setting zqpr_soc_dram ,bit0-bit19 soc_data_drv_odt,bit20-bit24 dram_drv , bit24-bit28 dram_odt\n");
- printf("setting zqpr_soc_dram ,bit0-bit19 bit 0-7 use for ddr3,bit8-19 use for ddr4,odt_down_up\n");
- printf("setting zqpr_soc_dram ,soc_drv=(480/((setting)+1));ddr4---soc_odt=(480/(setting)+1));ddr3---soc_odt=(360/(setting)+1));\n");
-
- printf(" DDR3_DRV_40OHM 0\n");
- printf(" DDR3_DRV_34OHM 1\n\n");
-
- printf(" DDR3_ODT_0OHM 0\n");
- printf(" DDR3_ODT_60OHM 1\n");
- printf(" DDR3_ODT_120OHM 2\n");
- printf(" DDR3_ODT_40OHM 3\n");
- printf(" DDR3_ODT_20OHM 4\n");
- printf(" DDR3_ODT_30OHM 5\n\n\n");
-
- printf(" LPDDR2_DRV_34OHM 1\n");
- printf(" LPDDR2_DRV_40OHM 2\n");
- printf(" LPDDR2_DRV_48OHM 3\n");
- printf(" LPDDR2_DRV_60OHM 4\n");
- printf(" LPDDR2_DRV_80OHM 6\n");
- printf(" LPDDR2_DRV_120OHM 7\n\n");
-
- printf(" LPDDR2_ODT_0OHM 0\n\n\n");
-
-
- printf(" LPDDR3_DRV_34OHM 1\n");
- printf(" LPDDR3_DRV_40OHM 2\n");
- printf(" LPDDR3_DRV_48OHM 3\n");
- printf(" LPDDR3_DRV_60OHM 4\n");
- printf(" LPDDR3_DRV_80OHM 6\n");
- printf(" LPDDR3_DRV_34_40OHM 9\n");
- printf(" LPDDR3_DRV_40_48OHM 10\n");
- printf(" LPDDR3_DRV_34_48OHM 11\n\n");
-
- printf(" LPDDR3_ODT_0OHM 0\n");
- printf(" LPDDR3_ODT_60OHM 1\n");
- printf(" LPDDR3_ODT_12OHM 2\n");
- printf(" LPDDR3_ODT_240HM 3\n\n\n");
-
- printf(" DDR4_DRV_34OHM 0\n");
- printf(" DDR4_DRV_48OHM 1\n\n");
-
- printf(" DDR4_ODT_0OHM 0\n");
- printf(" DDR4_ODT_60OHM 1\n");
- printf(" DDR4_ODT_120OHM 2\n");
- printf(" DDR4_ODT_40OHM 3\n");
- printf(" DDR4_ODT_240OHM 4\n");
- printf(" DDR4_ODT_48OHM 5\n");
- printf(" DDR4_ODT_80OHM 6\n");
- printf(" DDR4_ODT_34OHM 7\n\n\n\n");
-
-
- cmd_usage(cmdtp);
- return 1;
-}
-
-int do_ddr_uboot_new_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- //ddr_test_cmd 0x36 0x20180030 0x1 cmd_offset cmd_value value_size reset_enable
-#if 1
- //#define DDR_USE_DEFINE_TEMPLATE_CONFIG 1
- //#define DDR_STICKY_MAGIC_NUMBER 0x20180000
- //#define DDR_CHIP_ID 0x30
- //#define DDR_STICKY_SOURCE_DMC_STICKY 0x1
- //#define DDR_STICKY_SOURCE_SRAM 0x2
- //dmc sticky reg default not 0. need use common sticky reg as identity
-
-#if 0
- unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL0);
- extern int pll_convert_to_ddr_clk_g12a(unsigned int);
- global_ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
-#endif
+ //extra
+// unsigned short dmc_test_worst_window_tx;
+// unsigned short dmc_test_worst_window_rx;
+// */
+}ddr_set_t;
+
+ddr_set_t p_ddr_set_t;
+
+char* itoa_ddr_test(int num,char*str,int radix)
+{/*索引表*/
+ printf("\nitoa_ddr_test 1\n");
+ char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ unsigned unum;/*中间变量*/
+ char temp;
+ int i=0,j,k;
+ /*确定unum的值*/
+ if (radix == 10 && num<0) /*十进制负数*/
+ {
+ unum = (unsigned)-num;
+ str[i++] = '-';
+ }
+ else
+ unum = (unsigned)num;/*其他情况*/
+ /*转换*/
+ printf("\nitoa_ddr_test 2\n");
+ printf("\nunum=0x%08x\n",unum);
+ printf("\nunum2=0x%08x\n",(unum%(unsigned)radix));
+ printf("\nradix=0x%08x\n",radix);
+ str[0] = index[0];
+ printf("\nitoa_ddr_test 22\n");
+ unum /= radix;
+ printf("\nitoa_ddr_test 23\n");
+ do {
+ str[i++] = index[unum%(unsigned)radix];
+ unum /= radix;
+ }while(unum);
+ printf("\nitoa_ddr_test 3\n");
+ str[i] = '\0';
+ /*逆序*/
+ if (str[0] == '-')
+ k = 1;/*十进制负数*/
+ else
+ k = 0;
+ printf("\nitoa_ddr_test 4\n");
+ for (j = k;j <= (i-1)/2;j++)
+ {
+ temp = str[j];
+ str[j] = str[i-1+k-j];
+ str[i-1+k-j] = temp;
+ }
+ return str;
+}
+//#endif
+
+/*
+char *strsep(char **stringp, const char *delim)
+{
+ char *s;
+ const char *spanp;
+ int c, sc;
+ char *tok;
+ if ((s = *stringp)== NULL)
+ return (NULL);
+ for (tok = s;;) {
+ c = *s++;
+ spanp = delim;
+ do {
+ if ((sc =*spanp++) == c) {
+ if (c == 0)
+ s = NULL;
+ else
+ s[-1] = 0;
+ *stringp = s;
+ return (tok);
+ }
+ } while (sc != 0);
+ }
+
+}
+*/
+int TOLOWER(int ch)
+{
+
+ if ((unsigned int)(ch - 'A') < 26u )
+ ch += 'a' - 'A';
+
+ return ch;
+}//大写字母转换为小写字母。
+
+int isxdigit(int ch)
+{
+ return (unsigned int)( ch - '0') < 10u ||
+ (unsigned int)((ch | 0x20) - 'a') < 6u;
+}//判断字符c是否为十六进制数字。
+//当c为A-F,a-f或0-9之间的十六进制数字时,返回非零值,否则返回零。
+int isdigit(int ch)
+{
+ return (unsigned int)(ch - '0') < 10u;
+}//判断字符c是否为数字
+unsigned int simple_guess_base(const char *cp)
+{
+ if (cp[0] == '0') {
+ if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2]))
+ return 16;
+ else
+ // return 8;
+ return 10;
+ } else {
+ return 10;
+ }
+}
+unsigned int simple_strtoull_ddr(const char *cp, char **endp, unsigned int base)
+{
+ unsigned int result = 0;
+ //printf("test sizeof(str_buf)==%d\n",1);
+ if(cp == NULL) //jiaxing add 20170616
+ return 0;
+ if (!base)
+ base = simple_guess_base(cp);
+ if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x')
+ cp += 2;
+ if (base == 10) {
+ while ((*cp)== '0')
+ cp++;
+ }
+ while (isxdigit(*cp)) {//检查当前cp是否是个十六进制数值,不是直接返回0
+ unsigned int value;
+ value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10;
+ if (value >= base)
+ break;
+ result = result * base + value;
+ cp++;
+ }
+ if (endp)
+ *endp = (char *)cp;
+ return result;
+}
+unsigned int env_to_a_num(const char *env_name)
+{
+ char *str_buf = NULL;
+ char buf[48];
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
+ str_buf = getenv(env_name);
+ unsigned int a_num = 0;
+ char *endp;
+
+ printf("str==%s\n",str_buf);
+
+ a_num=simple_strtoull_ddr(str_buf, &endp, 0);
+ printf("%s==0x%08x\n",str_buf,a_num);
+
+ return a_num;
+}
+unsigned int a_num_to_env(const char *env_name ,unsigned int *a_num)
+{
+ char *str_buf=NULL;
+ char buf[1024];
+ //unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
+ str_buf = getenv(env_name);
+
+ printf("str==%s\n",str_buf);
+
+ sprintf(buf, "0x%08x", *a_num);
+
+ printf( "%s==0x%08x", buf,*a_num);
+ setenv(env_name, buf);
+
+ run_command("save",0);
+ return 1;
+}
+unsigned int env_to_num(const char *env_name,unsigned int *num_arry)
+{
+ char *str_buf = NULL;
+ char buf[1024];
+ unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
+ str_buf = getenv(env_name);
+
+ char * str[48];
+ char *endp;
+ int i;
+ for (i = 0; i < 48; i++)
+ str_to_numarry[i] = 0;
+ printf("str==%s\n",str_buf);
+ for (i = 0; i < 48; i++) {
+ str[i] = strsep(&str_buf, ";");
+ //str[i] = strsep(&str_buf, " ");
+ if(str[i] == NULL)
+ break;
+ str_to_numarry[i] = simple_strtoull_ddr(str[i], &endp, 0);
+ //printf("str_to_numarry[%d]==%d\n",i,str_to_numarry[i]);
+ //num_arry[i]=str_to_numarry[i];
+ }
+ for (i = 0; i < 48; i++) {
+ printf("str_to_numarry[%d]==%d\n",i,str_to_numarry[i]);
+ num_arry[i] = str_to_numarry[i];
+ }
+ //num_arry=(unsigned int *)(&str_to_numarry);
+ return 1;
+}
+
+unsigned int num_to_env(const char *env_name,unsigned int *num_arry)
+{
+ char *str_buf=NULL;
+ char buf[1024];
+ int i;
+ //unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ printf("sizeof(str_buf)==%d\n",(unsigned int)(sizeof(buf)));
+ str_buf = getenv(env_name);
+
+ //char * str[48];
+ printf("str==%s\n",str_buf);
+
+
+ sprintf(buf, "0x%08x", num_arry[0]);
+ for (i = 1; i < 48; i++) {
+ //num_arry[i]=0;
+ sprintf(buf, "%s;0x%08x", buf,num_arry[i]);
+ printf("%d %d\n", i,num_arry[i]);
+ }
+ //sprintf(str, "%lx", value);
+ printf( "%s", buf);
+ setenv(env_name, buf);
+
+ run_command("save",0);
+ //num_arry=(unsigned int *)(&str_to_numarry);
+ return 1;
+}
+
+#define TDATA32F 0xffffffff
+#define TDATA32A 0xaaaaaaaa
+#define TDATA325 0x55555555
+#define PREG_STICKY_G12A_REG0 (0xff634400 + (0x070 << 2))
+//#define DDR_TEST_AUTO_TEST_CMD_MAGIC 0x01234567
+#define DMC_STICKY_0 ((0x0000 << 2) + 0xff639800)
+#define DMC_STICKY_G12A_0 ((0x0000 << 2) + 0xff638800)
+#define DMC_STICKY_MAGIC_0 0x12345678
+#define DMC_STICKY_MAGIC_1 0xabcdbead
+#define DMC_STICKY_UBOOT_WINDOW_MAGIC_1 0x22
+#define DMC_STICKY_AUTO_TEST_CMD_INDEX_MAGIC_1 0x33
+unsigned int dmc_sticky[64];
+unsigned int sticky_reg_base_add=0;
+
+//#define DDR_TEST_ACLCDLR
+unsigned int global_boot_times= 0;
+unsigned int watchdog_time_s= 20;
+unsigned int global_ddr_clk=1;
+unsigned int bdlr_100step=0;
+unsigned int ui_1_32_100step=0;
+unsigned int error_count =0;
+unsigned int error_outof_count_flag=0;
+unsigned int copy_test_flag = 0;
+unsigned int training_pattern_flag = 0;
+unsigned int test_start_addr=0x1080000;
+
+unsigned int dq_lcd_bdl_value_aclcdlr_org_a;
+unsigned int dq_lcd_bdl_value_bdlr0_org_a;
+unsigned int dq_lcd_bdl_value_aclcdlr_min_a;
+unsigned int dq_lcd_bdl_value_bdlr0_min_a;
+unsigned int dq_lcd_bdl_value_aclcdlr_max_a;
+unsigned int dq_lcd_bdl_value_bdlr0_max_a;
+unsigned int dq_lcd_bdl_value_aclcdlr_status_a;
+unsigned int dq_lcd_bdl_value_bdlr0_status_a;
+
+unsigned int dq_lcd_bdl_value_aclcdlr_org_b;
+unsigned int dq_lcd_bdl_value_bdlr0_org_b;
+unsigned int dq_lcd_bdl_value_aclcdlr_min_b;
+unsigned int dq_lcd_bdl_value_bdlr0_min_b;
+unsigned int dq_lcd_bdl_value_aclcdlr_max_b;
+unsigned int dq_lcd_bdl_value_bdlr0_max_b;
+
+unsigned int dq_lcd_bdl_value_wdq_org_a[4];
+unsigned int dq_lcd_bdl_value_rdqs_org_a[4];
+unsigned int dq_lcd_bdl_value_wdq_min_a[4];
+unsigned int dq_lcd_bdl_value_wdq_max_a[4];
+unsigned int dq_lcd_bdl_value_rdqs_min_a[4];
+unsigned int dq_lcd_bdl_value_rdqs_max_a[4];
+unsigned int dq_lcd_bdl_value_wdq_status_a[4];
+unsigned int dq_lcd_bdl_value_rdqs_status_a[4];
+
+unsigned int dq_lcd_bdl_value_wdq_org_b[4];
+unsigned int dq_lcd_bdl_value_rdqs_org_b[4];
+unsigned int dq_lcd_bdl_value_wdq_min_b[4];
+unsigned int dq_lcd_bdl_value_wdq_max_b[4];
+unsigned int dq_lcd_bdl_value_rdqs_min_b[4];
+unsigned int dq_lcd_bdl_value_rdqs_max_b[4];
+unsigned int dq_lcd_bdl_value_wdq_status_b[4];
+unsigned int dq_lcd_bdl_value_rdqs_status_b[4];
+unsigned int acbdlr0_9_reg_org[10];
+unsigned int acbdlr0_9_reg_setup_max[40];
+unsigned int acbdlr0_9_reg_hold_max[40];
+unsigned int acbdlr0_9_reg_setup_time[40];
+unsigned int acbdlr0_9_reg_hold_time[40];
+// unsigned int data_bdlr0_5_reg_org[6];
+unsigned int data_bdlr0_5_reg_org[28];//4//4lane
+unsigned int bdlr0_9_reg_setup_max[24*4];//4//4 lane 96 bdlr
+unsigned int bdlr0_9_reg_hold_max[24*4];
+unsigned int bdlr0_9_reg_setup_time[24*4];
+unsigned int bdlr0_9_reg_hold_time[24*4];
+
+#define readl(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+#define writel(data ,addr) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+
+#define wr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rd_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+
+//#define CONFIG_DDR_CMD_BDL_TUNE
+//#define CONFIG_CMD_DDR_TEST
+
+#ifndef CONFIG_CHIP
+//#define CONFIG_CHIP CHIP_OLD //CHIP_OLD// //#define CHIP_OLD 0 //#define CHIP_TXLX 1
+#define CHIP_OLD 0
+#define CHIP_TXLX 1
+#define CHIP_A113 2
+#define CHIP_G12 3
+#define CONFIG_CHIP CHIP_G12// CHIP_OLD//
+#endif
+
+#define P_DDR_PHY_DEFAULT 0
+#define P_DDR_PHY_GX_BABY 1
+#define P_DDR_PHY_GX_TV_BABY 2
+#define P_DDR_PHY_905X 3
+
+//#define P_DDR_PHY_OLD_TAG 0
+#define P_DDR_PHY_G12 4
+
+#if (CONFIG_CHIP>=CHIP_G12)
+#define CONFIG_DDR_PHY P_DDR_PHY_G12
+#else
+//#define CONFIG_CHIP CHIP_OLD//
+//#define CONFIG_DDR_PHY P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
+//#define CONFIG_DDR_PHY P_DDR_PHY_G12//P_DDR_PHY_DEFAULT// P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
+#define CONFIG_DDR_PHY P_DDR_PHY_905X//P_DDR_PHY_DEFAULT// P_DDR_PHY_905X//P_DDR_PHY_GX_BABY//P_DDR_PHY_905X// P_DDR_PHY_GX_BABY
+//#define CONFIG_DDR_PHY_NEW_TAG1 P_DDR_PHY_G12
+#endif
+
+#define G12_AM_DDR_PLL_CNTL0 0xff638c00
+
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+#include <asm/arch/secure_apb.h>
+#endif
+
+#define PATTERN_USE_DDR_DES
+#define USE_64BIT_POINTER
+//#define USE_32BIT_POINTER
+#ifdef USE_64BIT_POINTER
+#define p_convter_int(a) ( unsigned int )( unsigned long )(a)
+#define int_convter_p(a) ( unsigned long )(a)
+
+#else
+#define p_convter_int(a) ( unsigned int )(a)
+#define int_convter_p(a) ( unsigned int )(a)
+#endif
+
+#ifdef PATTERN_USE_DDR_DES
+#define des_pattern(a,b,c,d) (des[a]^pattern_##b[c][d])
+#define des_inv_pattern(a,b,c,d) ( des[a]^(~(pattern_##b[c][d])))
+#define des_xor_pattern(a,b) ( a^b)
+//des[temp_i]^pattern_2[temp_k][temp_i]
+#else
+#define des_pattern(a,b,c,d) (des[a]&0)+pattern_##b[c][d]
+#define des_inv_pattern(a,b,c,d) (des[a]&0)+~(pattern_##b[c][d])
+#define des_xor_pattern(a,b) (a&0+b)
+#endif
+
+
+#define DDR_LCDLR_CK_USE_FAST_PATTERN
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+#define DDR_PREFETCH_CACHE
+#endif
+#ifdef DDR_PREFETCH_CACHE
+#define ddr_pld_cache(P) asm ("prfm PLDL1KEEP, [%0, #376]"::"r" (P))
+#else
+#define ddr_pld_cache(P)
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+#define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR1_PUB_REG_BASE 0xc8836000
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0x2000
+#define P_DDR0_CLK_CTRL 0xc8836c00
+#define P_DDR1_CLK_CTRL 0xc8836c00
+#define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
+#define OPEN_CHANNEL_B_PHY_CLK() (writel((0), 0xc8836c00))
+#define CLOSE_CHANNEL_A_PHY_CLK() (writel((5), 0xc8836c00))
+#define CLOSE_CHANNEL_B_PHY_CLK() (writel((5), 0xc8836c00))
+// #define P_ISA_TIMERE 0xc1109988
+// #define get_us_time() (readl(P_ISA_TIMERE))
+#define AM_DDR_PLL_CNTL 0xc8836800
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
+
+#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
+#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
+#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
+
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x95<<2))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x96<<2))
+#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE+(0x97<<2))
+//0x98 reserved)
+#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x99<<2))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x9A<<2))
+#define DDR0_PUB_ZQ2SR (DDR0_PUB_REG_BASE+(0x9B<<2))
+//0x9c reserved)
+#define DDR0_PUB_ZQ3PR (DDR0_PUB_REG_BASE+(0x9D<<2))
+#define DDR0_PUB_ZQ3DR (DDR0_PUB_REG_BASE+(0x9E<<2))
+#define DDR0_PUB_ZQ3SR (DDR0_PUB_REG_BASE+(0x9F<<2))
+#define ACBDLR_MAX 0X1F
+#define ACLCDLR_MAX 0XFF
+#define DQBDLR_MAX 0X1F
+#define DQLCDLR_MAX 0XFF
+#define DXNGTR_MAX 0X7
+#define ACBDLR_NUM 10
+#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
+
+
+#define DMC_REG_BASE 0xc8838000
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+ //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+ //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+ //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+ //bit 19:16. qos monitor channel select. select one at one time only.
+ //bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+ // qos_mon_clk_timer. How long to measure the bandwidth.
+
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+ // at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+ // at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+
+
+#elif (CONFIG_DDR_PHY == P_DDR_PHY_GX_TV_BABY)
+#define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR1_PUB_REG_BASE 0xc8837000
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0x1000
+#define P_DDR0_CLK_CTRL 0xc8836c00
+#define P_DDR1_CLK_CTRL 0xc8836c00
+#define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
+#define OPEN_CHANNEL_B_PHY_CLK() (writel((0), 0xc8837c00))
+#define CLOSE_CHANNEL_A_PHY_CLK() (writel((0x12a), 0xc8836c00))
+#define CLOSE_CHANNEL_B_PHY_CLK() (writel((0x12a), 0xc8837c00))
+// #define P_ISA_TIMERE 0xc1109988
+// #define get_us_time() (readl(P_ISA_TIMERE) )
+#define AM_DDR_PLL_CNTL 0xc8836800
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
+#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
+#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
+#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
+
+#define DDR0_PUB_ZQ0SR (DDR0_PUB_REG_BASE+(0x93<<2))
+//0x94 reserved)
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x95<<2))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x96<<2))
+#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE+(0x97<<2))
+//0x98 reserved)
+#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x99<<2))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x9A<<2))
+#define DDR0_PUB_ZQ2SR (DDR0_PUB_REG_BASE+(0x9B<<2))
+//0x9c reserved)
+#define DDR0_PUB_ZQ3PR (DDR0_PUB_REG_BASE+(0x9D<<2))
+#define DDR0_PUB_ZQ3DR (DDR0_PUB_REG_BASE+(0x9E<<2))
+#define DDR0_PUB_ZQ3SR (DDR0_PUB_REG_BASE+(0x9F<<2))
+#define ACBDLR_MAX 0X1F
+#define ACLCDLR_MAX 0XFF
+#define DQBDLR_MAX 0X1F
+#define DQLCDLR_MAX 0XFF
+#define DXNGTR_MAX 0X7
+#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
+#define DMC_REG_BASE 0xc8838000
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+ //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+ //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+ //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+ //bit 19:16. qos monitor channel select. select one at one time only.
+ //bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+ // qos_mon_clk_timer. How long to measure the bandwidth.
+
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+ // at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+ // at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+ // at the test period, the granted data cycles for the selected channel and ports.
+
+#elif (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+
+ // #define P_ISA_TIMERE 0xc1109988
+ // #define get_us_time() (readl(P_ISA_TIMERE) )
+#if CONFIG_CHIP >=CHIP_TXLX
+#define DDR0_PUB_REG_BASE ((0x0000 << 2) + 0xff636000)//DDR0_PUB_RIDR
+#define DDR1_PUB_REG_BASE ((0x0000 << 2) + 0xff636000)//DDR0_PUB_RIDR
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0//0x1000
+#define MMC_REG_BASE ((0x0000 << 2) + 0xff637000) // #define AM_DDR_PLL_CNTL0 ((0x0000 << 2) + 0xff637000) 0xc8837000
+#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
+#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
+#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
+#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+
+#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
+#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
+#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
+
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
+#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
+
+#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
+#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
+
+#define DDR0_PUB_DX0GCR0 ((0x01c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x0200 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x0240 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
+
+#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
+
+#define ACBDLR_MAX 0X3F
+#define ACLCDLR_MAX 0X1FF
+#define DQBDLR_MAX 0X3F
+#define DQLCDLR_MAX 0X1FF
+#define DXNGTR_MAX 0X1F
+
+ // #define DMC_REG_BASE MMC_REG_BASE
+
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+ //bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+ //bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+ //bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+ //bit 19:16. qos monitor channel select. select one at one time only.
+ //bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+// qos_mon_clk_timer. How long to measure the bandwidth.
+
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+ // at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+ // at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+ // at the test period, the granted data cycles for the selected channel and ports.
+
+#else
+#define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR1_PUB_REG_BASE 0xc8836000
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0//0x1000
+#define MMC_REG_BASE 0xc8837000
+#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
+#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
+#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
+#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+
+#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
+#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
+#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
+
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
+#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
+
+#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
+#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
+
+#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
+
+#define ACBDLR_MAX 0X3F
+#define ACLCDLR_MAX 0X1FF
+#define DQBDLR_MAX 0X3F
+#define DQLCDLR_MAX 0X1FF
+#define DXNGTR_MAX 0X1F
+#define DDR0_PUB_DX0GCR0 ((0x1c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x200 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x240 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
+#ifndef DMC_REG_BASE
+#define DMC_REG_BASE MMC_REG_BASE
+#endif
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+//bit 19:16. qos monitor channel select. select one at one time only.
+//bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+// qos_mon_clk_timer. How long to measure the bandwidth.
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+// at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+// at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+// at the test period, the granted data cycles for the selected channel and ports.
+#endif
+
+#elif (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
+
+#define DDR0_PUB_REG_BASE 0xc8001000 //0xc8836000
+#define DDR1_PUB_REG_BASE 0xc8001000 // 0xc8836000
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0x2000
+#define P_DDR0_CLK_CTRL 0xc8000800
+#define P_DDR1_CLK_CTRL 0xc8002800
+#define OPEN_CHANNEL_A_PHY_CLK() (writel((0x12b), 0xc8000800))
+#define OPEN_CHANNEL_B_PHY_CLK() (writel((0x12b), 0xc8002800))
+#define CLOSE_CHANNEL_A_PHY_CLK() (writel((0x12a), 0xc8000800))
+#define CLOSE_CHANNEL_B_PHY_CLK() (writel((0x12a), 0xc8002800))
+// #define P_ISA_TIMERE 0xc1109988
+// #define get_us_time() (readl(P_ISA_TIMERE))
+
+#define PREG_STICKY_REG0 0xc1100000+(0x207c<<2)
+#define PREG_STICKY_REG1 0xc1100000+(0x207d<<2)
+#define WATCHDOG_TC 0xc1100000+(0x2640<<2)// 0x2640
+
+#define AM_DDR_PLL_CNTL 0xc8000400
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE+(0x90<<2))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE+(0x91<<2))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE+(0x92<<2))
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE+(0x91<<2))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE+(0x92<<2))
+#define DDR0_PUB_ZQ2PR (DDR0_PUB_REG_BASE+(0x91<<2))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE+(0x92<<2))
+#define DDR1_PUB_ZQCR (DDR1_PUB_REG_BASE+(0x90<<2))
+#define DDR1_PUB_ZQ0PR (DDR1_PUB_REG_BASE+(0x91<<2))
+#define DDR1_PUB_ZQ0DR (DDR1_PUB_REG_BASE+(0x92<<2))
+#define ACBDLR_MAX 0X1F
+#define ACLCDLR_MAX 0XFF
+#define DQBDLR_MAX 0X1F
+#define DQLCDLR_MAX 0XFF
+#define DXNGTR_MAX 0X7
+#define DDR0_PUB_DX0GCR0 ((0xa0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x0c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x0e0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0100 << 2) + DDR0_PUB_REG_BASE)
+#define DMC_REG_BASE 0xc8006000
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+//bit 19:16. qos monitor channel select. select one at one time only.
+//bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+// qos_mon_clk_timer. How long to measure the bandwidth.
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+// at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+// at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+// at the test period, the granted data cycles for the selected channel and ports.
+
+
+
+#elif (CONFIG_DDR_PHY == P_DDR_PHY_G12)
+#define DDR0_PUB_REG_BASE 0xff636000
+#define DDR1_PUB_REG_BASE 0xff636000
+#define CHANNEL_A_REG_BASE 0
+#define CHANNEL_B_REG_BASE 0//0x1000
+#define MMC_REG_BASE 0xff637000
+#define DDR_CLK_CNTL (MMC_REG_BASE + ( 0x7 << 2 ))
+#define P_DDR0_CLK_CTRL DDR_CLK_CNTL
+#define P_DDR1_CLK_CTRL DDR_CLK_CNTL
+#define OPEN_CHANNEL_A_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define OPEN_CHANNEL_B_PHY_CLK() // (writel((0Xb000a000), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_A_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+#define CLOSE_CHANNEL_B_PHY_CLK() // (writel((0Xb000a005), DDR_CLK_CNTL))
+
+#define AM_DDR_PLL_CNTL0 (MMC_REG_BASE + ( 0x0 << 2 ))
+#define AM_DDR_PLL_CNTL AM_DDR_PLL_CNTL0
+#define DDR0_PUB_ZQCR (DDR0_PUB_REG_BASE + ( 0x1a0 << 2 ))
+#define DDR0_PUB_ZQ0PR (DDR0_PUB_REG_BASE + ( 0x1a1 << 2 ))
+#define DDR0_PUB_ZQ0DR (DDR0_PUB_REG_BASE + ( 0x1a2 << 2 ))
+#define DDR0_PUB_ZQ0SR ( DDR0_PUB_REG_BASE + ( 0x1a3 << 2 ))
+
+#define DDR0_PUB_ZQ1PR (DDR0_PUB_REG_BASE + ( 0x1a5 << 2 ))
+#define DDR0_PUB_ZQ1DR (DDR0_PUB_REG_BASE + ( 0x1a6 << 2 ))
+#define DDR0_PUB_ZQ1SR (DDR0_PUB_REG_BASE + ( 0x1a7 << 2 ))
+
+#define DDR0_PUB_ZQ2PR ( DDR0_PUB_REG_BASE + ( 0x1a9 << 2 ))
+#define DDR0_PUB_ZQ2DR (DDR0_PUB_REG_BASE + ( 0x1aA << 2 ))
+#define DDR0_PUB_ZQ2SR ( DDR0_PUB_REG_BASE + ( 0x1aB << 2 ))
+
+#define DDR1_PUB_ZQCR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0PR DDR0_PUB_ZQ0PR
+#define DDR1_PUB_ZQ0DR DDR0_PUB_ZQ0DR
+
+#define ACBDLR_MAX 0X3F
+#define ACLCDLR_MAX 0X1FF
+#define DQBDLR_MAX 0X3F
+#define DQLCDLR_MAX 0X1FF
+#define DXNGTR_MAX 0X1F
+#define DDR0_PUB_DX0GCR0 ((0x1c0 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX1GCR0 ((0x200 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX2GCR0 ((0x240 << 2) + DDR0_PUB_REG_BASE)
+#define DDR0_PUB_DX3GCR0 ((0x0280 << 2) + DDR0_PUB_REG_BASE)
+#ifndef DMC_REG_BASE
+#define DMC_REG_BASE MMC_REG_BASE
+#endif
+#define DMC_MON_CTRL2 (DMC_REG_BASE + (0x26 <<2 ))
+//bit 31. qos_mon_en. write 1 to trigger the enable. polling this bit 0, means finished. or use interrupt to check finish.
+//bit 30. qos_mon interrupt clear. clear the qos monitor result. read 1 = qos mon finish interrupt.
+//bit 20. qos_mon_trig_sel. 1 = vsync. 0 = timer.
+//bit 19:16. qos monitor channel select. select one at one time only.
+//bit 15:0. port select for the selected channel.
+#define DMC_MON_CTRL3 (DMC_REG_BASE + (0x27 <<2 ))
+// qos_mon_clk_timer. How long to measure the bandwidth.
+
+
+#define DMC_MON_ALL_REQ_CNT (DMC_REG_BASE + (0x28 <<2 ))
+// at the test period, the whole MMC request time.
+#define DMC_MON_ALL_GRANT_CNT (DMC_REG_BASE + (0x29 <<2 ))
+ // at the test period, the whole MMC granted data cycles. 64bits unit.
+#define DMC_MON_ONE_GRANT_CNT (DMC_REG_BASE + (0x2a <<2 ))
+ // at the test period, the granted data cycles for the selected channel and ports.
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+#define DDR0_PUB_PIR (DDR0_PUB_REG_BASE+(0x01<<2))
+#define DDR0_PUB_PGCR0 (DDR0_PUB_REG_BASE + ( 0x004 << 2 ))// R/W - PHY General Configuration Register 0
+#define DDR0_PUB_PGCR1 ( DDR0_PUB_REG_BASE + ( 0x005 << 2 )) // R/W - PHY General Configuration Register 1
+#define DDR0_PUB_PGCR2 (DDR0_PUB_REG_BASE + ( 0x006 << 2 )) // R/W - PHY General Configuration Register 2
+#define DDR0_PUB_PGCR3 ( DDR0_PUB_REG_BASE + ( 0x007 << 2 )) // R/W - PHY General Configuration Register 3
+#define DDR0_PUB_PGCR4 ( DDR0_PUB_REG_BASE + ( 0x008 << 2 )) // R/W - PHY General Configuration Register 4
+#define DDR0_PUB_PGCR5 (DDR0_PUB_REG_BASE + ( 0x009 << 2 )) // R/W - PHY General Configuration Register 5
+#define DDR0_PUB_PGCR6 (DDR0_PUB_REG_BASE + ( 0x00A << 2 )) // R/W - PHY General Configuration Register 6
+#define DDR0_PUB_PGCR7 (DDR0_PUB_REG_BASE + ( 0x00B << 2 )) // R/W - PHY General Configuration Register 7
+#define DDR0_PUB_PGCR8 (DDR0_PUB_REG_BASE + ( 0x00C << 2 )) // R/W - PHY General Configuration Register 8
+
+#define DDR1_PUB_PIR (DDR1_PUB_REG_BASE+(0x01<<2))
+#define DDR1_PUB_PGCR0 (DDR0_PUB_REG_BASE + ( 0x004 << 2 )) // R/W - PHY General Configuration Register 0
+#define DDR1_PUB_PGCR1 (DDR0_PUB_REG_BASE + ( 0x005 << 2 )) // R/W - PHY General Configuration Register 1
+#define DDR1_PUB_PGCR2 ( DDR0_PUB_REG_BASE + ( 0x006 << 2 )) // R/W - PHY General Configuration Register 2
+#define DDR1_PUB_PGCR3 (DDR0_PUB_REG_BASE + ( 0x007 << 2 )) // R/W - PHY General Configuration Register 3
+#define DDR1_PUB_PGCR4 (DDR0_PUB_REG_BASE + ( 0x008 << 2 ) )// R/W - PHY General Configuration Register 4
+#define DDR1_PUB_PGCR5 (DDR0_PUB_REG_BASE + ( 0x009 << 2 )) // R/W - PHY General Configuration Register 5
+#define DDR1_PUB_PGCR6 (DDR0_PUB_REG_BASE + ( 0x00A << 2 )) // R/W - PHY General Configuration Register 6
+#define DDR1_PUB_PGCR7 (DDR0_PUB_REG_BASE + ( 0x00B << 2 )) // R/W - PHY General Configuration Register 7
+#define DDR1_PUB_PGCR8 (DDR0_PUB_REG_BASE + ( 0x00C << 2 ) )// R/W - PHY General Configuration Register 8
+
+#define DDR0_PUB_DX0BDLR0 (DDR0_PUB_REG_BASE + ( 0x1d0 << 2 ))
+#define DDR0_PUB_DX0BDLR1 (DDR0_PUB_REG_BASE + ( 0x1d1 << 2 ))
+#define DDR0_PUB_DX0BDLR2 ( DDR0_PUB_REG_BASE + ( 0x1d2 << 2 ))
+#define DDR0_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE + ( 0x1d4 << 2 ))
+#define DDR0_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE + ( 0x1d5 << 2 ))
+#define DDR0_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE + ( 0x1d6 << 2 ))
+#define DDR0_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE + ( 0x1d8 << 2 ))
+#define DDR0_PUB_DX0LCDLR0 (DDR0_PUB_REG_BASE + ( 0x1e0 << 2 ))
+#define DDR0_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE + ( 0x1e1 << 2 ))
+#define DDR0_PUB_DX0LCDLR2 (DDR0_PUB_REG_BASE + ( 0x1e2 << 2 ))
+#define DDR0_PUB_DX0LCDLR3 (DDR0_PUB_REG_BASE + ( 0x1e3 << 2 ))
+#define DDR0_PUB_DX0LCDLR4 (DDR0_PUB_REG_BASE + ( 0x1e4 << 2 ))
+#define DDR0_PUB_DX0LCDLR5 (DDR0_PUB_REG_BASE + ( 0x1e5 << 2 ))
+#define DDR0_PUB_DX0MDLR0 (DDR0_PUB_REG_BASE + ( 0x1e8 << 2 ))
+#define DDR0_PUB_DX0MDLR1 (DDR0_PUB_REG_BASE + ( 0x1e9 << 2) )
+#define DDR0_PUB_DX0GTR0 (DDR0_PUB_REG_BASE + ( 0x1f0 << 2 ))
+#define DDR0_PUB_DX0GTR1 (DDR0_PUB_REG_BASE + ( 0x1f1 << 2) )
+#define DDR0_PUB_DX0GTR2 (DDR0_PUB_REG_BASE + ( 0x1f2 << 2) )
+#define DDR0_PUB_DX0GTR3 (DDR0_PUB_REG_BASE + ( 0x1f3 << 2))
+
+#define DDR0_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE + ( 0x210 << 2) )
+#define DDR0_PUB_DX1BDLR1 (DDR0_PUB_REG_BASE + ( 0x211 << 2) )
+#define DDR0_PUB_DX1BDLR2 (DDR0_PUB_REG_BASE + ( 0x212 << 2) )
+#define DDR0_PUB_DX1BDLR3 (DDR0_PUB_REG_BASE + ( 0x214 << 2) )
+#define DDR0_PUB_DX1BDLR4 (DDR0_PUB_REG_BASE + ( 0x215 << 2) )
+#define DDR0_PUB_DX1BDLR5 ( DDR0_PUB_REG_BASE + ( 0x216 << 2) )
+#define DDR0_PUB_DX1BDLR6 ( DDR0_PUB_REG_BASE + ( 0x218 << 2) )
+#define DDR0_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE + ( 0x220 << 2) )
+#define DDR0_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE + ( 0x221 << 2) )
+#define DDR0_PUB_DX1LCDLR2 (DDR0_PUB_REG_BASE + ( 0x222 << 2) )
+#define DDR0_PUB_DX1LCDLR3 (DDR0_PUB_REG_BASE + ( 0x223 << 2) )
+#define DDR0_PUB_DX1LCDLR4 (DDR0_PUB_REG_BASE + ( 0x224 << 2) )
+#define DDR0_PUB_DX1LCDLR5 (DDR0_PUB_REG_BASE + ( 0x225 << 2) )
+#define DDR0_PUB_DX1MDLR0 (DDR0_PUB_REG_BASE + ( 0x228 << 2) )
+#define DDR0_PUB_DX1MDLR1 (DDR0_PUB_REG_BASE + ( 0x229 << 2) )
+#define DDR0_PUB_DX1GTR0 (DDR0_PUB_REG_BASE + ( 0x230 << 2 ))
+#define DDR0_PUB_DX1GTR1 (DDR0_PUB_REG_BASE + ( 0x231 << 2) )
+#define DDR0_PUB_DX1GTR2 (DDR0_PUB_REG_BASE + ( 0x232 << 2) )
+#define DDR0_PUB_DX1GTR3 (DDR0_PUB_REG_BASE + ( 0x233 << 2) )
+
+#define DDR0_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE + ( 0x250 << 2) )
+#define DDR0_PUB_DX2BDLR1 (DDR0_PUB_REG_BASE + ( 0x251 << 2) )
+#define DDR0_PUB_DX2BDLR2 (DDR0_PUB_REG_BASE + ( 0x252 << 2) )
+#define DDR0_PUB_DX2BDLR3 (DDR0_PUB_REG_BASE + ( 0x254 << 2) )
+#define DDR0_PUB_DX2BDLR4 (DDR0_PUB_REG_BASE + ( 0x255 << 2) )
+#define DDR0_PUB_DX2BDLR5 (DDR0_PUB_REG_BASE + ( 0x256 << 2) )
+#define DDR0_PUB_DX2BDLR6 (DDR0_PUB_REG_BASE + ( 0x258 << 2) )
+#define DDR0_PUB_DX2LCDLR0 ( DDR0_PUB_REG_BASE + ( 0x260 << 2) )
+#define DDR0_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE + ( 0x261 << 2) )
+#define DDR0_PUB_DX2LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x262 << 2) )
+#define DDR0_PUB_DX2LCDLR3 (DDR0_PUB_REG_BASE + ( 0x263 << 2) )
+#define DDR0_PUB_DX2LCDLR4 (DDR0_PUB_REG_BASE + ( 0x264 << 2) )
+#define DDR0_PUB_DX2LCDLR5 ( DDR0_PUB_REG_BASE + ( 0x265 << 2) )
+#define DDR0_PUB_DX2MDLR0 (DDR0_PUB_REG_BASE + ( 0x268 << 2) )
+#define DDR0_PUB_DX2MDLR1 (DDR0_PUB_REG_BASE + ( 0x269 << 2) )
+#define DDR0_PUB_DX2GTR0 ( DDR0_PUB_REG_BASE + ( 0x270 << 2 ))
+#define DDR0_PUB_DX2GTR1 (DDR0_PUB_REG_BASE + ( 0x271 << 2) )
+#define DDR0_PUB_DX2GTR2 (DDR0_PUB_REG_BASE + ( 0x272 << 2) )
+#define DDR0_PUB_DX2GTR3 (DDR0_PUB_REG_BASE + ( 0x273 << 2) )
+
+#define DDR0_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE + ( 0x290 << 2) )
+#define DDR0_PUB_DX3BDLR1 (DDR0_PUB_REG_BASE + ( 0x291 << 2) )
+#define DDR0_PUB_DX3BDLR2 (DDR0_PUB_REG_BASE + ( 0x292 << 2) )
+#define DDR0_PUB_DX3BDLR3 (DDR0_PUB_REG_BASE + ( 0x294 << 2) )
+#define DDR0_PUB_DX3BDLR4 (DDR0_PUB_REG_BASE + ( 0x295 << 2) )
+#define DDR0_PUB_DX3BDLR5 (DDR0_PUB_REG_BASE + ( 0x296 << 2) )
+#define DDR0_PUB_DX3BDLR6 (DDR0_PUB_REG_BASE + ( 0x298 << 2) )
+#define DDR0_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE + ( 0x2a0 << 2) )
+#define DDR0_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE + ( 0x2a1 << 2) )
+#define DDR0_PUB_DX3LCDLR2 (DDR0_PUB_REG_BASE + ( 0x2a2 << 2) )
+#define DDR0_PUB_DX3LCDLR3 (DDR0_PUB_REG_BASE + ( 0x2a3 << 2) )
+#define DDR0_PUB_DX3LCDLR4 (DDR0_PUB_REG_BASE + ( 0x2a4 << 2) )
+#define DDR0_PUB_DX3LCDLR5 (DDR0_PUB_REG_BASE + ( 0x2a5 << 2) )
+#define DDR0_PUB_DX3MDLR0 (DDR0_PUB_REG_BASE + ( 0x2a8 << 2) )
+#define DDR0_PUB_DX3MDLR1 (DDR0_PUB_REG_BASE + ( 0x2a9 << 2) )
+#define DDR0_PUB_DX3GTR0 (DDR0_PUB_REG_BASE + ( 0x2b0 << 2 ))
+#define DDR0_PUB_DX3GTR1 ( DDR0_PUB_REG_BASE + ( 0x2b1 << 2) )
+#define DDR0_PUB_DX3GTR2 ( DDR0_PUB_REG_BASE + ( 0x2b2 << 2) )
+#define DDR0_PUB_DX3GTR3 ( DDR0_PUB_REG_BASE + ( 0x2b3 << 2) )
+
+#define DDR1_PUB_DX0BDLR0 ( DDR0_PUB_REG_BASE + ( 0x1d0 << 2) )
+#define DDR1_PUB_DX0BDLR1 ( DDR0_PUB_REG_BASE + ( 0x1d1 << 2) )
+#define DDR1_PUB_DX0BDLR2 (DDR0_PUB_REG_BASE + ( 0x1d2 << 2 ))
+#define DDR1_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE + ( 0x1d4 << 2 ))
+#define DDR1_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE + ( 0x1d5 << 2) )
+#define DDR1_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE + ( 0x1d6 << 2) )
+#define DDR1_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE + ( 0x1d8 << 2) )
+#define DDR1_PUB_DX0LCDLR0 ( DDR0_PUB_REG_BASE + ( 0x1e0 << 2) )
+#define DDR1_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE + ( 0x1e1 << 2 ))
+#define DDR1_PUB_DX0LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x1e2 << 2) )
+#define DDR1_PUB_DX0LCDLR3 (DDR0_PUB_REG_BASE + ( 0x1e3 << 2 ))
+#define DDR1_PUB_DX0LCDLR4 ( DDR0_PUB_REG_BASE + ( 0x1e4 << 2) )
+#define DDR1_PUB_DX0LCDLR5 (DDR0_PUB_REG_BASE + ( 0x1e5 << 2 ))
+#define DDR1_PUB_DX0MDLR0 (DDR0_PUB_REG_BASE + ( 0x1e8 << 2 ))
+#define DDR1_PUB_DX0MDLR1 (DDR0_PUB_REG_BASE + ( 0x1e9 << 2 ))
+#define DDR1_PUB_DX0GTR0 (DDR0_PUB_REG_BASE + ( 0x1f0 << 2 ))
+#define DDR1_PUB_DX0GTR1 (DDR0_PUB_REG_BASE + ( 0x1f1 << 2) )
+#define DDR1_PUB_DX0GTR2 (DDR0_PUB_REG_BASE + ( 0x1f2 << 2) )
+#define DDR1_PUB_DX0GTR3 (DDR0_PUB_REG_BASE + ( 0x1f3 << 2))
+
+#define DDR1_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE + ( 0x210 << 2 ))
+#define DDR1_PUB_DX1BDLR1 (DDR0_PUB_REG_BASE + ( 0x211 << 2 ))
+#define DDR1_PUB_DX1BDLR2 (DDR0_PUB_REG_BASE + ( 0x212 << 2 ))
+#define DDR1_PUB_DX1BDLR3 (DDR0_PUB_REG_BASE + ( 0x214 << 2 ))
+#define DDR1_PUB_DX1BDLR4 (DDR0_PUB_REG_BASE + ( 0x215 << 2 ))
+#define DDR1_PUB_DX1BDLR5 (DDR0_PUB_REG_BASE + ( 0x216 << 2 ))
+#define DDR1_PUB_DX1BDLR6 (DDR0_PUB_REG_BASE + ( 0x218 << 2 ))
+#define DDR1_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE + ( 0x220 << 2 ))
+#define DDR1_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE + ( 0x221 << 2 ))
+#define DDR1_PUB_DX1LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x222 << 2 ))
+#define DDR1_PUB_DX1LCDLR3 (DDR0_PUB_REG_BASE + ( 0x223 << 2 ))
+#define DDR1_PUB_DX1LCDLR4 ( DDR0_PUB_REG_BASE + ( 0x224 << 2 ))
+#define DDR1_PUB_DX1LCDLR5 (DDR0_PUB_REG_BASE + ( 0x225 << 2 ))
+#define DDR1_PUB_DX1MDLR0 (DDR0_PUB_REG_BASE + ( 0x228 << 2 ))
+#define DDR1_PUB_DX1MDLR1 (DDR0_PUB_REG_BASE + ( 0x229 << 2 ))
+#define DDR1_PUB_DX1GTR0 (DDR0_PUB_REG_BASE + ( 0x230 << 2 ))
+#define DDR1_PUB_DX1GTR1 (DDR0_PUB_REG_BASE + ( 0x231 << 2 ))
+#define DDR1_PUB_DX1GTR2 (DDR0_PUB_REG_BASE + ( 0x232 << 2 ))
+#define DDR1_PUB_DX1GTR3 (DDR0_PUB_REG_BASE + ( 0x233 << 2 ))
+
+#define DDR1_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE + ( 0x250 << 2 ))
+#define DDR1_PUB_DX2BDLR1 (DDR0_PUB_REG_BASE + ( 0x251 << 2 ))
+#define DDR1_PUB_DX2BDLR2 (DDR0_PUB_REG_BASE + ( 0x252 << 2 ))
+#define DDR1_PUB_DX2BDLR3 (DDR0_PUB_REG_BASE + ( 0x254 << 2 ))
+#define DDR1_PUB_DX2BDLR4 (DDR0_PUB_REG_BASE + ( 0x255 << 2 ))
+#define DDR1_PUB_DX2BDLR5 (DDR0_PUB_REG_BASE + ( 0x256 << 2 ))
+#define DDR1_PUB_DX2BDLR6 (DDR0_PUB_REG_BASE + ( 0x258 << 2 ))
+#define DDR1_PUB_DX2LCDLR0 (DDR0_PUB_REG_BASE + ( 0x260 << 2 ))
+#define DDR1_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE + ( 0x261 << 2 ))
+#define DDR1_PUB_DX2LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x262 << 2 ))
+#define DDR1_PUB_DX2LCDLR3 (DDR0_PUB_REG_BASE + ( 0x263 << 2 ))
+#define DDR1_PUB_DX2LCDLR4 (DDR0_PUB_REG_BASE + ( 0x264 << 2 ))
+#define DDR1_PUB_DX2LCDLR5 (DDR0_PUB_REG_BASE + ( 0x265 << 2 ))
+#define DDR1_PUB_DX2MDLR0 (DDR0_PUB_REG_BASE + ( 0x268 << 2 ))
+#define DDR1_PUB_DX2MDLR1 (DDR0_PUB_REG_BASE + ( 0x269 << 2 ))
+#define DDR1_PUB_DX2GTR0 (DDR0_PUB_REG_BASE + ( 0x270 << 2 ))
+#define DDR1_PUB_DX2GTR1 (DDR0_PUB_REG_BASE + ( 0x271 << 2 ))
+#define DDR1_PUB_DX2GTR2 (DDR0_PUB_REG_BASE + ( 0x272 << 2 ))
+#define DDR1_PUB_DX2GTR3 (DDR0_PUB_REG_BASE + ( 0x273 << 2 ))
+
+#define DDR1_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE + ( 0x290 << 2 ))
+#define DDR1_PUB_DX3BDLR1 (DDR0_PUB_REG_BASE + ( 0x291 << 2 ))
+#define DDR1_PUB_DX3BDLR2 (DDR0_PUB_REG_BASE + ( 0x292 << 2 ))
+#define DDR1_PUB_DX3BDLR3 (DDR0_PUB_REG_BASE + ( 0x294 << 2 ))
+#define DDR1_PUB_DX3BDLR4 (DDR0_PUB_REG_BASE + ( 0x295 << 2 ))
+#define DDR1_PUB_DX3BDLR5 (DDR0_PUB_REG_BASE + ( 0x296 << 2 ))
+#define DDR1_PUB_DX3BDLR6 (DDR0_PUB_REG_BASE + ( 0x298 << 2 ))
+#define DDR1_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE + ( 0x2a0 << 2 ))
+#define DDR1_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE + ( 0x2a1 << 2 ))
+#define DDR1_PUB_DX3LCDLR2 ( DDR0_PUB_REG_BASE + ( 0x2a2 << 2 ))
+#define DDR1_PUB_DX3LCDLR3 (DDR0_PUB_REG_BASE + ( 0x2a3 << 2 ))
+#define DDR1_PUB_DX3LCDLR4 (DDR0_PUB_REG_BASE + ( 0x2a4 << 2 ))
+#define DDR1_PUB_DX3LCDLR5 ( DDR0_PUB_REG_BASE + ( 0x2a5 << 2 ))
+#define DDR1_PUB_DX3MDLR0 (DDR0_PUB_REG_BASE + ( 0x2a8 << 2 ))
+#define DDR1_PUB_DX3MDLR1 (DDR0_PUB_REG_BASE + ( 0x2a9 << 2 ))
+#define DDR1_PUB_DX3GTR0 (DDR0_PUB_REG_BASE + ( 0x2b0 << 2 ))
+#define DDR1_PUB_DX3GTR1 (DDR0_PUB_REG_BASE + ( 0x2b1 << 2 ))
+#define DDR1_PUB_DX3GTR2 (DDR0_PUB_REG_BASE + ( 0x2b2 << 2 ))
+#define DDR1_PUB_DX3GTR3 (DDR0_PUB_REG_BASE + ( 0x2b3 << 2 ))
+
+
+#define DDR0_PUB_ACLCDLR (DDR0_PUB_REG_BASE + ( 0x160 << 2 )) // R/W - LC Delay Line Present Register
+#define DDR0_PUB_ACMDLR0 ( DDR0_PUB_REG_BASE + ( 0x168 << 2 )) // R/W - AC Master Delay Line Register 0
+#define DDR0_PUB_ACMDLR1 ( DDR0_PUB_REG_BASE + ( 0x169 << 2 )) // R/W - Master Delay Line Register 1
+#define DDR0_PUB_ACBDLR0 (DDR0_PUB_REG_BASE + ( 0x150 << 2 )) // R/W - AC Bit Delay Line Register 0
+#define DDR0_PUB_ACBDLR3 ( DDR0_PUB_REG_BASE + ( 0x153 << 2 ) ) // R/W - AC Bit Delay Line Register 3
+
+#define DDR1_PUB_ACLCDLR (DDR0_PUB_REG_BASE + ( 0x160 << 2 ) )// R/W - LC Delay Line Present Register
+#define DDR1_PUB_ACMDLR0 ( DDR0_PUB_REG_BASE + ( 0x168 << 2 )) // R/W - AC Master Delay Line Register 0
+#define DDR1_PUB_ACMDLR1 ( DDR0_PUB_REG_BASE + ( 0x169 << 2 )) // R/W - Master Delay Line Register 1
+#define DDR1_PUB_ACBDLR0 ( DDR0_PUB_REG_BASE + ( 0x150 << 2 ) )// R/W - AC Bit Delay Line Register 0
+
+
+#define DDR0_PUB_ACMDLR DDR0_PUB_ACMDLR0
+#define DDR1_PUB_ACMDLR DDR1_PUB_ACMDLR0
+#define DDR0_PUB_DX0GTR DDR0_PUB_DX0GTR0
+#define DDR0_PUB_DX1GTR DDR0_PUB_DX1GTR0
+#define DDR0_PUB_DX2GTR DDR0_PUB_DX2GTR0
+#define DDR0_PUB_DX3GTR DDR0_PUB_DX3GTR0
+#define DDR1_PUB_DX0GTR DDR0_PUB_DX0GTR0
+#define DDR1_PUB_DX1GTR DDR0_PUB_DX1GTR0
+#define DDR1_PUB_DX2GTR DDR0_PUB_DX2GTR0
+#define DDR1_PUB_DX3GTR DDR0_PUB_DX3GTR0
+
+
+#define DDR0_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 )) // R/W - IO VREF Control Register 0
+#define DDR0_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 )) // R/W - IO VREF Control Register 1
+#define DDR0_PUB_VTCR0 ( DDR0_PUB_REG_BASE + ( 0x14A << 2 ) )// R/W - VREF Training Control Register 0
+#define DDR0_PUB_VTCR1 ( DDR0_PUB_REG_BASE + ( 0x14B << 2 )) // R/W - VREF Training Control Register 1
+#define DDR1_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 )) // R/W - IO VREF Control Register 0
+#define DDR1_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 )) // R/W - IO VREF Control Register 1
+#define DDR1_PUB_VTCR0 ( DDR0_PUB_REG_BASE + ( 0x14A << 2 )) // R/W - VREF Training Control Register 0
+#define DDR1_PUB_VTCR1 ( DDR0_PUB_REG_BASE + ( 0x14B << 2 )) // R/W - VREF Training Control Register 1
+
+//#define DDR0_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
+//#define DDR1_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
+#define DDR0_PUB_DX0GCR6 ( DDR0_PUB_REG_BASE + ( 0x1c6 << 2 ) )
+#define DDR0_PUB_DX1GCR6 ( DDR0_PUB_REG_BASE + ( 0x206 << 2 ) )
+#define DDR0_PUB_DX2GCR6 ( DDR0_PUB_REG_BASE + ( 0x246 << 2 ) )
+#define DDR0_PUB_DX3GCR6 ( DDR0_PUB_REG_BASE + ( 0x286 << 2 ) )
+#define DDR0_PUB_DCR ( DDR0_PUB_REG_BASE + ( 0x040 << 2 ) ) // R/W - DRAM Configuration Register
+#define DDR0_PUB_MR0 ( DDR0_PUB_REG_BASE + ( 0x060 << 2 ) ) // R/W - Mode Register
+#define DDR0_PUB_MR1 ( DDR0_PUB_REG_BASE + ( 0x061 << 2 ) ) // R/W - Extended Mode Register
+#define DDR0_PUB_MR2 ( DDR0_PUB_REG_BASE + ( 0x062 << 2 ) ) // R/W - Extended Mode Register 2
+#define DDR0_PUB_MR3 ( DDR0_PUB_REG_BASE + ( 0x063 << 2 ) ) // R/W - Extended Mode Register 3
+#define DDR0_PUB_MR4 ( DDR0_PUB_REG_BASE + ( 0x064 << 2 ) ) // R/W - Extended Mode Register 4
+#define DDR0_PUB_MR5 ( DDR0_PUB_REG_BASE + ( 0x065 << 2 ) ) // R/W - Extended Mode Register 5
+#define DDR0_PUB_MR6 ( DDR0_PUB_REG_BASE + ( 0x066 << 2 ) ) // R/W - Extended Mode Register 6
+#define DDR0_PUB_MR7 ( DDR0_PUB_REG_BASE + ( 0x067 << 2 ) ) // R/W - Extended Mode Register 7
+#define DDR0_PUB_MR11 ( DDR0_PUB_REG_BASE + ( 0x06B << 2 ) ) // R/W - Extended Mode Register 11
+#define DDR0_PUB_RANKIDR ( DDR0_PUB_REG_BASE + ( 0x137 << 2 ) ) // R/W - Rank ID Register
+#define DDR0_PUB_DTCR0 ( DDR0_PUB_REG_BASE + ( 0x080 << 2 ) ) // R/W - Data Training Configuration Register
+#define DDR0_PUB_DTEDR0 ( DDR0_PUB_REG_BASE + ( 0x08C << 2 ) ) // R/W - Data Training Eye Data Register 0
+#define DDR0_PUB_DTEDR1 ( DDR0_PUB_REG_BASE + ( 0x08D << 2 ) ) // R/W - Data Training Eye Data Register 1
+#define DDR0_PUB_DTEDR2 ( DDR0_PUB_REG_BASE + ( 0x08E << 2 ) ) // R/W - Data Training Eye Data Register 2
+#define DDR0_PUB_VTDR ( DDR0_PUB_REG_BASE + ( 0x08F << 2 ) ) // R/W - Vref Training Data Register
+#else
+
+#define DDR0_PUB_PIR (DDR0_PUB_REG_BASE+(0x01<<2))
+#define DDR0_PUB_PGCR0 (DDR0_PUB_REG_BASE+(0x02<<2))
+#define DDR0_PUB_PGCR1 (DDR0_PUB_REG_BASE+(0x03<<2))
+
+#define DDR1_PUB_PIR (DDR1_PUB_REG_BASE+(0x01<<2))
+#define DDR1_PUB_PGCR0 (DDR1_PUB_REG_BASE+(0x02<<2))
+#define DDR1_PUB_PGCR1 (DDR1_PUB_REG_BASE+(0x03<<2))
+
+#define DDR0_PUB_DX0BDLR0 (DDR0_PUB_REG_BASE+(0xA7<<2))
+#define DDR0_PUB_DX1BDLR0 (DDR0_PUB_REG_BASE+(0xC7<<2))
+#define DDR0_PUB_DX2BDLR0 (DDR0_PUB_REG_BASE+(0xE7<<2))
+#define DDR0_PUB_DX3BDLR0 (DDR0_PUB_REG_BASE+(0x107<<2))
+
+#define DDR0_PUB_DX0BDLR1 (DDR0_PUB_REG_BASE+(0xA8<<2))
+#define DDR0_PUB_DX0BDLR2 (DDR0_PUB_REG_BASE+(0xA9<<2))
+#define DDR0_PUB_DX0BDLR3 (DDR0_PUB_REG_BASE+(0xAA<<2))
+#define DDR0_PUB_DX0BDLR4 (DDR0_PUB_REG_BASE+(0xAB<<2))
+#define DDR0_PUB_DX0BDLR5 (DDR0_PUB_REG_BASE+(0xAC<<2))
+#define DDR0_PUB_DX0BDLR6 (DDR0_PUB_REG_BASE+(0xAD<<2))
+
+#define DDR0_PUB_DX0LCDLR0 (DDR0_PUB_REG_BASE+(0xAE<<2))
+#define DDR0_PUB_DX0LCDLR1 (DDR0_PUB_REG_BASE+(0xAF<<2))
+#define DDR0_PUB_DX0LCDLR2 (DDR0_PUB_REG_BASE+(0xB0<<2))
+#define DDR0_PUB_DX0MDLR (DDR0_PUB_REG_BASE+(0xB1<<2))
+#define DDR0_PUB_DX0GTR (DDR0_PUB_REG_BASE+(0xB2<<2))
+#define DDR0_PUB_DX1LCDLR0 (DDR0_PUB_REG_BASE+(0xCE<<2))
+#define DDR0_PUB_DX1LCDLR1 (DDR0_PUB_REG_BASE+(0xCF<<2))
+#define DDR0_PUB_DX1LCDLR2 (DDR0_PUB_REG_BASE+(0xD0<<2))
+#define DDR0_PUB_DX1MDLR (DDR0_PUB_REG_BASE+(0xD1<<2))
+#define DDR0_PUB_DX1GTR (DDR0_PUB_REG_BASE+(0xD2<<2))
+#define DDR0_PUB_DX2LCDLR0 (DDR0_PUB_REG_BASE+(0xEE<<2))
+#define DDR0_PUB_DX2LCDLR1 (DDR0_PUB_REG_BASE+(0xEF<<2))
+#define DDR0_PUB_DX2LCDLR2 (DDR0_PUB_REG_BASE+(0xF0<<2))
+#define DDR0_PUB_DX2MDLR (DDR0_PUB_REG_BASE+(0xF1<<2))
+#define DDR0_PUB_DX3LCDLR0 (DDR0_PUB_REG_BASE+(0x10E<<2))
+#define DDR0_PUB_DX3LCDLR1 (DDR0_PUB_REG_BASE+(0x10F<<2))
+#define DDR0_PUB_DX3LCDLR2 (DDR0_PUB_REG_BASE+(0x110<<2))
+#define DDR0_PUB_DX3MDLR (DDR0_PUB_REG_BASE+(0x111<<2))
+#define DDR0_PUB_DX3GTR (DDR0_PUB_REG_BASE+(0x112<<2))
+
+#define DDR1_PUB_DX0LCDLR0 (DDR1_PUB_REG_BASE+(0xAE<<2))
+#define DDR1_PUB_DX0LCDLR1 (DDR1_PUB_REG_BASE+(0xAF<<2))
+#define DDR1_PUB_DX0LCDLR2 (DDR1_PUB_REG_BASE+(0xB0<<2))
+#define DDR1_PUB_DX0MDLR (DDR1_PUB_REG_BASE+(0xB1<<2))
+#define DDR1_PUB_DX0GTR (DDR1_PUB_REG_BASE+(0xB2<<2))
+#define DDR1_PUB_DX1LCDLR0 (DDR1_PUB_REG_BASE+(0xCE<<2))
+#define DDR1_PUB_DX1LCDLR1 (DDR1_PUB_REG_BASE+(0xCF<<2))
+#define DDR1_PUB_DX1LCDLR2 (DDR1_PUB_REG_BASE+(0xD0<<2))
+#define DDR1_PUB_DX1MDLR (DDR1_PUB_REG_BASE+(0xD1<<2))
+#define DDR1_PUB_DX1GTR (DDR1_PUB_REG_BASE+(0xD2<<2))
+#define DDR1_PUB_DX2LCDLR0 (DDR1_PUB_REG_BASE+(0xEE<<2))
+#define DDR1_PUB_DX2LCDLR1 (DDR1_PUB_REG_BASE+(0xEF<<2))
+#define DDR1_PUB_DX2LCDLR2 (DDR1_PUB_REG_BASE+(0xF0<<2))
+#define DDR1_PUB_DX2MDLR (DDR1_PUB_REG_BASE+(0xF1<<2))
+#define DDR1_PUB_DX3LCDLR0 (DDR1_PUB_REG_BASE+(0x10E<<2))
+#define DDR1_PUB_DX3LCDLR1 (DDR1_PUB_REG_BASE+(0x10F<<2))
+#define DDR1_PUB_DX3LCDLR2 (DDR1_PUB_REG_BASE+(0x110<<2))
+#define DDR1_PUB_DX3MDLR (DDR1_PUB_REG_BASE+(0x111<<2))
+#define DDR1_PUB_DX3GTR (DDR1_PUB_REG_BASE+(0x112<<2))
+
+
+#define DDR0_PUB_ACMDLR (DDR0_PUB_REG_BASE+(0x0E<<2))
+#define DDR0_PUB_ACLCDLR (DDR0_PUB_REG_BASE+(0x0F<<2))
+#define DDR0_PUB_ACBDLR0 (DDR0_PUB_REG_BASE+(0x10<<2))
+#define DDR0_PUB_ACBDLR3 (DDR0_PUB_REG_BASE+(0x13<<2))
+#define DDR1_PUB_ACMDLR (DDR1_PUB_REG_BASE+(0x0E<<2))
+#define DDR1_PUB_ACLCDLR (DDR1_PUB_REG_BASE+(0x0F<<2))
+#define DDR1_PUB_ACBDLR0 (DDR1_PUB_REG_BASE+(0x10<<2))
+
+#define DDR0_PUB_ACMDLR0 DDR0_PUB_ACMDLR
+#define DDR1_PUB_ACMDLR0 DDR1_PUB_ACMDLR
+#define DDR0_PUB_DX0MDLR0 DDR0_PUB_DX0MDLR
+#define DDR0_PUB_DX1MDLR0 DDR0_PUB_DX1MDLR
+#define DDR0_PUB_DX2MDLR0 DDR0_PUB_DX2MDLR
+#define DDR0_PUB_DX3MDLR0 DDR0_PUB_DX3MDLR
+#define DDR1_PUB_DX0MDLR0 DDR0_PUB_DX0MDLR
+#define DDR1_PUB_DX1MDLR0 DDR0_PUB_DX1MDLR
+#define DDR1_PUB_DX2MDLR0 DDR0_PUB_DX2MDLR
+#define DDR1_PUB_DX3MDLR0 DDR0_PUB_DX3MDLR
+#define DDR0_PUB_DCR (DDR0_PUB_REG_BASE+(0x22<<2))
+#define DDR0_PUB_MR0 (DDR0_PUB_REG_BASE+(0x27<<2))
+#define DDR0_PUB_MR1 (DDR0_PUB_REG_BASE+(0x28<<2))
+#define DDR0_PUB_MR2 (DDR0_PUB_REG_BASE+(0x29<<2))
+#define DDR0_PUB_MR3 (DDR0_PUB_REG_BASE+(0x2A<<2))
+#define DDR0_PUB_RANKIDR ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Rank ID Register
+#define DDR0_PUB_DTCR0 ( DDR0_PUB_REG_BASE + ( 0<< 2 ) ) // R/W - Data Training Configuration Register
+#define DDR0_PUB_DTEDR0 ( DDR0_PUB_REG_BASE + ( 0x0 << 2 ) ) // R/W - Data Training Eye Data Register 0
+#define DDR0_PUB_DTEDR1 ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Data Training Eye Data Register 1
+#define DDR0_PUB_DTEDR2 ( DDR0_PUB_REG_BASE + ( 0x0 << 2 ) ) // R/W - Data Training Eye Data Register 2
+#define DDR0_PUB_VTDR ( DDR0_PUB_REG_BASE + ( 0x0<< 2 ) ) // R/W - Vref Training Data Register
+
+#ifndef P_DDR0_CLK_CTRL
+#define P_DDR0_CLK_CTRL 0xc8000800
+#endif
+#ifndef P_DDR1_CLK_CTRL
+#define P_DDR1_CLK_CTRL 0xc8002800
+#endif
+
+#define DDR0_PUB_IOVCR0 (DDR0_PUB_REG_BASE+(0x8E<<2))
+#define DDR0_PUB_IOVCR1 (DDR0_PUB_REG_BASE+(0x8F<<2))
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+//unsigned int des[8];
+/*
+ unsigned int pattern_1[4][8]=
+ {
+ 0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+0xff00ff00 ,
+
+};
+unsigned int pattern_2[4][8]={
+0x0001fe00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0002fd00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0004fb00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0008f700 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0010ef00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0020df00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0040bf00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x00807f00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+0x0000ff00 ,
+
+};
+unsigned int pattern_3[4][8]={
+ 0x00010000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00020000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00040000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00080000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00100000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00200000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00400000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00800000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+ 0x00000000 ,
+};
+unsigned int pattern_4[4][8]={
+ 0x51c8c049 ,
+ 0x2d43592c ,
+ 0x0777b50b ,
+ 0x9cd2ebe5 ,
+ 0xc04199d5 ,
+ 0xdc968dc0 ,
+ 0xb8ba8a33 ,
+ 0x35e4327f ,
+ 0x51c8c049 ,
+ 0x2d43592c ,
+ 0x0777b50b ,
+ 0x9cd2ebe5 ,
+ 0xc04199d5 ,
+ 0xdc968dc0 ,
+ 0xb8ba8a33 ,
+ 0x35e4327f ,
+ 0x51c8c049 ,
+ 0x2d43592c ,
+ 0x0777b50b ,
+ 0x9cd2ebe5 ,
+ 0xc04199d5 ,
+ 0xdc968dc0 ,
+ 0xb8ba8a33 ,
+ 0x35e4327f ,
+ 0x51c8c049 ,
+ 0x2d43592c ,
+ 0x0777b50b ,
+ 0x9cd2ebe5 ,
+ 0xc04199d5 ,
+ 0xdc968dc0 ,
+ 0xb8ba8a33 ,
+ 0x35e4327f ,
+};
+unsigned int pattern_5[4][8]={
+ 0xaec9c149 ,
+ 0xd243592c ,
+ 0xf877b50b ,
+ 0x63d2ebe5 ,
+ 0x3f439bd5 ,
+ 0x23968dc0 ,
+ 0x47ba8a33 ,
+ 0xcae4327f ,
+ 0xaeccc449 ,
+ 0xd243592c ,
+ 0xf877b50b ,
+ 0x63d2ebe5 ,
+ 0x3f4991d5 ,
+ 0x23968dc0 ,
+ 0x47ba8a33 ,
+ 0xcae4327f ,
+ 0xaed8d049 ,
+ 0xd243592c ,
+ 0xf877b50b ,
+ 0x63d2ebe5 ,
+ 0x3f61b9d5 ,
+ 0x23968dc0 ,
+ 0x47ba8a33 ,
+ 0xcae4327f ,
+ 0xae888049 ,
+ 0xd243592c ,
+ 0xf877b50b ,
+ 0x63d2ebe5 ,
+ 0x3fc119d5 ,
+ 0x23968dc0 ,
+ 0x47ba8a33 ,
+ 0xcae4327f ,
+};
+unsigned int pattern_6[4][8]={
+ 0xaec9c149 ,
+ 0xd243a62c ,
+ 0xf8774a0b ,
+ 0x63d214e5 ,
+ 0x3f4366d5 ,
+ 0x239672c0 ,
+ 0x47ba7533 ,
+ 0xcae4cd7f ,
+ 0xaecc3f49 ,
+ 0xd243a62c ,
+ 0xf8774a0b ,
+ 0x63d214e5 ,
+ 0x3f4966d5 ,
+ 0x239672c0 ,
+ 0x47ba7533 ,
+ 0xcae4cd7f ,
+ 0xaed83f49 ,
+ 0xd243a62c ,
+ 0xf8774a0b ,
+ 0x63d214e5 ,
+ 0x3f6166d5 ,
+ 0x239672c0 ,
+ 0x47ba7533 ,
+ 0xcae4cd7f ,
+ 0xae883f49 ,
+ 0xd243a62c ,
+ 0xf8774a0b ,
+ 0x63d214e5 ,
+ 0x3fc166d5 ,
+ 0x239672c0 ,
+ 0x47ba7533 ,
+ 0xcae4cd7f ,
+
+};
+unsigned int des[8] ={
+ 0xaec83f49,
+ 0xd243a62c,
+ 0xf8774a0b,
+ 0x63d214e5,
+ 0x3f4166d5,
+ 0x239672c0,
+ 0x47ba7533,
+ 0xcae4cd7f,
+};
+*/
+/*
+ unsigned int des[8] ;
+ des[0] = 0xaec83f49;
+ des[1] = 0xd243a62c;
+ des[2] = 0xf8774a0b;
+ des[3] = 0x63d214e5;
+ des[4] = 0x3f4166d5;
+ des[5] = 0x239672c0;
+ des[6] = 0x47ba7533;
+ des[7] = 0xcae4cd7f;
+ pattern_1[0][0] = 0xff00ff00;
+ pattern_1[0][1] = 0xff00ff00;
+ pattern_1[0][2] = 0xff00ff00;
+ pattern_1[0][3] = 0xff00ff00;
+ pattern_1[0][4] = 0xff00ff00;
+ pattern_1[0][5] = 0xff00ff00;
+ pattern_1[0][6] = 0xff00ff00;
+ pattern_1[0][7] = 0xff00ff00;
+
+ pattern_1[1][0] = 0xff00ff00;
+ pattern_1[1][1] = 0xff00ff00;
+ pattern_1[1][2] = 0xff00ff00;
+ pattern_1[1][3] = 0xff00ff00;
+ pattern_1[1][4] = 0xff00ff00;
+ pattern_1[1][5] = 0xff00ff00;
+ pattern_1[1][6] = 0xff00ff00;
+ pattern_1[1][7] = 0xff00ff00;
+
+ pattern_1[2][0] = 0xff00ff00;
+ pattern_1[2][1] = 0xff00ff00;
+ pattern_1[2][2] = 0xff00ff00;
+ pattern_1[2][3] = 0xff00ff00;
+ pattern_1[2][4] = 0xff00ff00;
+ pattern_1[2][5] = 0xff00ff00;
+ pattern_1[2][6] = 0xff00ff00;
+ pattern_1[2][7] = 0xff00ff00;
+
+ pattern_1[3][0] = 0xff00ff00;
+ pattern_1[3][1] = 0xff00ff00;
+ pattern_1[3][2] = 0xff00ff00;
+ pattern_1[3][3] = 0xff00ff00;
+ pattern_1[3][4] = 0xff00ff00;
+ pattern_1[3][5] = 0xff00ff00;
+ pattern_1[3][6] = 0xff00ff00;
+ pattern_1[3][7] = 0xff00ff00;
+
+ pattern_2[0][0] = 0x0001fe00;
+ pattern_2[0][1] = 0x0000ff00;
+ pattern_2[0][2] = 0x0000ff00;
+ pattern_2[0][3] = 0x0000ff00;
+ pattern_2[0][4] = 0x0002fd00;
+ pattern_2[0][5] = 0x0000ff00;
+ pattern_2[0][6] = 0x0000ff00;
+ pattern_2[0][7] = 0x0000ff00;
+
+ pattern_2[1][0] = 0x0004fb00;
+ pattern_2[1][1] = 0x0000ff00;
+ pattern_2[1][2] = 0x0000ff00;
+ pattern_2[1][3] = 0x0000ff00;
+ pattern_2[1][4] = 0x0008f700;
+ pattern_2[1][5] = 0x0000ff00;
+ pattern_2[1][6] = 0x0000ff00;
+ pattern_2[1][7] = 0x0000ff00;
+
+ pattern_2[2][0] = 0x0010ef00;
+ pattern_2[2][1] = 0x0000ff00;
+ pattern_2[2][2] = 0x0000ff00;
+ pattern_2[2][3] = 0x0000ff00;
+ pattern_2[2][4] = 0x0020df00;
+ pattern_2[2][5] = 0x0000ff00;
+ pattern_2[2][6] = 0x0000ff00;
+pattern_2[2][7] = 0x0000ff00;
+
+pattern_2[3][0] = 0x0040bf00;
+pattern_2[3][1] = 0x0000ff00;
+pattern_2[3][2] = 0x0000ff00;
+pattern_2[3][3] = 0x0000ff00;
+pattern_2[3][4] = 0x00807f00;
+pattern_2[3][5] = 0x0000ff00;
+pattern_2[3][6] = 0x0000ff00;
+pattern_2[3][7] = 0x0000ff00;
+
+pattern_3[0][0] = 0x00010000;
+pattern_3[0][1] = 0x00000000;
+pattern_3[0][2] = 0x00000000;
+pattern_3[0][3] = 0x00000000;
+pattern_3[0][4] = 0x00020000;
+pattern_3[0][5] = 0x00000000;
+pattern_3[0][6] = 0x00000000;
+pattern_3[0][7] = 0x00000000;
+
+pattern_3[1][0] = 0x00040000;
+pattern_3[1][1] = 0x00000000;
+pattern_3[1][2] = 0x00000000;
+pattern_3[1][3] = 0x00000000;
+pattern_3[1][4] = 0x00080000;
+ pattern_3[1][5] = 0x00000000;
+ pattern_3[1][6] = 0x00000000;
+ pattern_3[1][7] = 0x00000000;
+
+ pattern_3[2][0] = 0x00100000;
+ pattern_3[2][1] = 0x00000000;
+ pattern_3[2][2] = 0x00000000;
+ pattern_3[2][3] = 0x00000000;
+ pattern_3[2][4] = 0x00200000;
+ pattern_3[2][5] = 0x00000000;
+ pattern_3[2][6] = 0x00000000;
+ pattern_3[2][7] = 0x00000000;
+
+ pattern_3[3][0] = 0x00400000;
+ pattern_3[3][1] = 0x00000000;
+ pattern_3[3][2] = 0x00000000;
+ pattern_3[3][3] = 0x00000000;
+ pattern_3[3][4] = 0x00800000;
+ pattern_3[3][5] = 0x00000000;
+ pattern_3[3][6] = 0x00000000;
+ pattern_3[3][7] = 0x00000000;
+
+pattern_4[0][0] = 0x51c8c049 ;
+pattern_4[0][1] = 0x2d43592c ;
+pattern_4[0][2] = 0x0777b50b ;
+pattern_4[0][3] = 0x9cd2ebe5 ;
+pattern_4[0][4] = 0xc04199d5 ;
+pattern_4[0][5] = 0xdc968dc0 ;
+pattern_4[0][6] = 0xb8ba8a33 ;
+pattern_4[0][7] = 0x35e4327f ;
+
+pattern_4[1][0] = 0x51c8c049 ;
+pattern_4[1][1] = 0x2d43592c ;
+pattern_4[1][2] = 0x0777b50b ;
+pattern_4[1][3] = 0x9cd2ebe5 ;
+pattern_4[1][4] = 0xc04199d5 ;
+pattern_4[1][5] = 0xdc968dc0 ;
+pattern_4[1][6] = 0xb8ba8a33 ;
+pattern_4[1][7] = 0x35e4327f ;
+
+pattern_4[2][0] = 0x51c8c049 ;
+pattern_4[2][1] = 0x2d43592c ;
+pattern_4[2][2] = 0x0777b50b ;
+pattern_4[2][3] = 0x9cd2ebe5 ;
+pattern_4[2][4] = 0xc04199d5 ;
+pattern_4[2][5] = 0xdc968dc0 ;
+pattern_4[2][6] = 0xb8ba8a33 ;
+pattern_4[2][7] = 0x35e4327f ;
+
+pattern_4[3][0] = 0x51c8c049 ;
+pattern_4[3][1] = 0x2d43592c ;
+pattern_4[3][2] = 0x0777b50b ;
+pattern_4[3][3] = 0x9cd2ebe5 ;
+pattern_4[3][4] = 0xc04199d5 ;
+pattern_4[3][5] = 0xdc968dc0 ;
+pattern_4[3][6] = 0xb8ba8a33 ;
+pattern_4[3][7] = 0x35e4327f ;
+
+pattern_5[0][0] = 0xaec9c149 ;
+pattern_5[0][1] = 0xd243592c ;
+pattern_5[0][2] = 0xf877b50b ;
+pattern_5[0][3] = 0x63d2ebe5 ;
+pattern_5[0][4] = 0x3f439bd5 ;
+pattern_5[0][5] = 0x23968dc0 ;
+pattern_5[0][6] = 0x47ba8a33 ;
+pattern_5[0][7] = 0xcae4327f ;
+pattern_5[1][0] = 0xaeccc449 ;
+pattern_5[1][1] = 0xd243592c ;
+pattern_5[1][2] = 0xf877b50b ;
+pattern_5[1][3] = 0x63d2ebe5 ;
+pattern_5[1][4] = 0x3f4991d5 ;
+pattern_5[1][5] = 0x23968dc0 ;
+pattern_5[1][6] = 0x47ba8a33 ;
+pattern_5[1][7] = 0xcae4327f ;
+pattern_5[2][0] = 0xaed8d049 ;
+pattern_5[2][1] = 0xd243592c ;
+pattern_5[2][2] = 0xf877b50b ;
+pattern_5[2][3] = 0x63d2ebe5 ;
+pattern_5[2][4] = 0x3f61b9d5 ;
+pattern_5[2][5] = 0x23968dc0 ;
+pattern_5[2][6] = 0x47ba8a33 ;
+pattern_5[2][7] = 0xcae4327f ;
+pattern_5[3][0] = 0xae888049 ;
+pattern_5[3][1] = 0xd243592c ;
+pattern_5[3][2] = 0xf877b50b ;
+pattern_5[3][3] = 0x63d2ebe5 ;
+pattern_5[3][4] = 0x3fc119d5 ;
+pattern_5[3][5] = 0x23968dc0 ;
+pattern_5[3][6] = 0x47ba8a33 ;
+pattern_5[3][7] = 0xcae4327f ;
+
+pattern_6[0][1] = 0xd243a62c ;
+pattern_6[0][2] = 0xf8774a0b ;
+pattern_6[0][3] = 0x63d214e5 ;
+pattern_6[0][4] = 0x3f4366d5 ;
+pattern_6[0][5] = 0x239672c0 ;
+pattern_6[0][6] = 0x47ba7533 ;
+pattern_6[0][7] = 0xcae4cd7f ;
+pattern_6[1][0] = 0xaecc3f49 ;
+pattern_6[1][1] = 0xd243a62c ;
+pattern_6[1][2] = 0xf8774a0b ;
+pattern_6[1][3] = 0x63d214e5 ;
+pattern_6[1][4] = 0x3f4966d5 ;
+pattern_6[1][5] = 0x239672c0 ;
+pattern_6[1][6] = 0x47ba7533 ;
+pattern_6[1][7] = 0xcae4cd7f ;
+pattern_6[2][0] = 0xaed83f49 ;
+pattern_6[2][1] = 0xd243a62c ;
+pattern_6[2][2] = 0xf8774a0b ;
+pattern_6[2][3] = 0x63d214e5 ;
+pattern_6[2][4] = 0x3f6166d5 ;
+pattern_6[2][5] = 0x239672c0 ;
+pattern_6[2][6] = 0x47ba7533 ;
+pattern_6[2][7] = 0xcae4cd7f ;
+pattern_6[3][0] = 0xae883f49 ;
+pattern_6[3][1] = 0xd243a62c ;
+pattern_6[3][2] = 0xf8774a0b ;
+pattern_6[3][3] = 0x63d214e5 ;
+pattern_6[3][4] = 0x3fc166d5 ;
+pattern_6[3][5] = 0x239672c0 ;
+pattern_6[3][6] = 0x47ba7533 ;
+pattern_6[3][7] = 0xcae4cd7f ;
+*/
+#endif
+
+#define DDR_TEST_START_ADDR 0x1080000// 0x10000000 //CONFIG_SYS_MEMTEST_START
+#define DDR_TEST_SIZE 0x2000000
+//#define DDR_TEST_SIZE 0x2000
+
+#if (CONFIG_CHIP>=CHIP_TXLX)
+
+#define P_EE_TIMER_E (volatile unsigned int *)((0x3c62 << 2) + 0xffd00000)
+
+///*
+//#ifndef P_PIN_MUX_REG1
+// Pin Mux (9)
+// ----------------------------
+#if (CONFIG_CHIP==CHIP_TXLX)
+#define PERIPHS_PIN_MUX_0 (0xff634400 + (0x2c << 2))
+#define SEC_PERIPHS_PIN_MUX_0 (0xff634400 + (0x2c << 2))
+#define P_PERIPHS_PIN_MUX_0 (volatile uint32_t *)(0xff634400 + (0x2c << 2))
+#define PERIPHS_PIN_MUX_1 (0xff634400 + (0x2d << 2))
+#define SEC_PERIPHS_PIN_MUX_1 (0xff634400 + (0x2d << 2))
+#define P_PERIPHS_PIN_MUX_1 (volatile uint32_t *)(0xff634400 + (0x2d << 2))
+#define PERIPHS_PIN_MUX_2 (0xff634400 + (0x2e << 2))
+#define SEC_PERIPHS_PIN_MUX_2 (0xff634400 + (0x2e << 2))
+#define P_PERIPHS_PIN_MUX_2 (volatile uint32_t *)(0xff634400 + (0x2e << 2))
+#define PERIPHS_PIN_MUX_3 (0xff634400 + (0x2f << 2))
+#define SEC_PERIPHS_PIN_MUX_3 (0xff634400 + (0x2f << 2))
+#define P_PERIPHS_PIN_MUX_3 (volatile uint32_t *)(0xff634400 + (0x2f << 2))
+#define PERIPHS_PIN_MUX_4 (0xff634400 + (0x30 << 2))
+#define SEC_PERIPHS_PIN_MUX_4 (0xff634400 + (0x30 << 2))
+#define P_PERIPHS_PIN_MUX_4 (volatile uint32_t *)(0xff634400 + (0x30 << 2))
+#define PERIPHS_PIN_MUX_5 (0xff634400 + (0x31 << 2))
+#define SEC_PERIPHS_PIN_MUX_5 (0xff634400 + (0x31 << 2))
+#define P_PERIPHS_PIN_MUX_5 (volatile uint32_t *)(0xff634400 + (0x31 << 2))
+#define PERIPHS_PIN_MUX_6 (0xff634400 + (0x32 << 2))
+#define SEC_PERIPHS_PIN_MUX_6 (0xff634400 + (0x32 << 2))
+#define P_PERIPHS_PIN_MUX_6 (volatile uint32_t *)(0xff634400 + (0x32 << 2))
+#define PERIPHS_PIN_MUX_7 (0xff634400 + (0x33 << 2))
+#define SEC_PERIPHS_PIN_MUX_7 (0xff634400 + (0x33 << 2))
+#define P_PERIPHS_PIN_MUX_7 (volatile uint32_t *)(0xff634400 + (0x33 << 2))
+#define PERIPHS_PIN_MUX_8 (0xff634400 + (0x34 << 2))
+#define SEC_PERIPHS_PIN_MUX_8 (0xff634400 + (0x34 << 2))
+#define P_PERIPHS_PIN_MUX_8 (volatile uint32_t *)(0xff634400 + (0x34 << 2))
+#define PERIPHS_PIN_MUX_9 (0xff634400 + (0x35 << 2))
+#define SEC_PERIPHS_PIN_MUX_9 (0xff634400 + (0x35 << 2))
+#define P_PERIPHS_PIN_MUX_9 (volatile uint32_t *)(0xff634400 + (0x35 << 2))
+#define PERIPHS_PIN_MUX_10 (0xff634400 + (0x36 << 2))
+#define SEC_PERIPHS_PIN_MUX_10 (0xff634400 + (0x36 << 2))
+#define P_PERIPHS_PIN_MUX_10 (volatile uint32_t *)(0xff634400 + (0x36 << 2))
+#define PERIPHS_PIN_MUX_11 (0xff634400 + (0x37 << 2))
+#define SEC_PERIPHS_PIN_MUX_11 (0xff634400 + (0x37 << 2))
+#define P_PERIPHS_PIN_MUX_11 (volatile uint32_t *)(0xff634400 + (0x37 << 2))
+#define PERIPHS_PIN_MUX_12 (0xff634400 + (0x38 << 2))
+#define SEC_PERIPHS_PIN_MUX_12 (0xff634400 + (0x38 << 2))
+#define P_PERIPHS_PIN_MUX_12 (volatile uint32_t *)(0xff634400 + (0x38 << 2))
+#endif
+#define P_PIN_MUX_REG1 P_PERIPHS_PIN_MUX_1// (((volatile unsigned *)(0xda834400 + (0x2d << 2))))
+#define P_PIN_MUX_REG2 P_PERIPHS_PIN_MUX_2// (((volatile unsigned *)(0xda834400 + (0x2e << 2))))
+#define P_PIN_MUX_REG3 P_PERIPHS_PIN_MUX_3//(((volatile unsigned *)(0xda834400 + (0x2f << 2))))
+#define P_PIN_MUX_REG7 P_PERIPHS_PIN_MUX_7//(((volatile unsigned *)(0xda834400 + (0x33 << 2))))
+//#endif
+
+//#ifndef P_PWM_MISC_REG_AB
+//#define P_PWM_MISC_REG_AB (*((volatile unsigned *)(0xc1100000 + (0x2156 << 2))))
+//#define P_PWM_PWM_B (*((volatile unsigned *)(0xc1100000 + (0x2155 << 2))))
+//#define P_PWM_MISC_REG_CD (*((volatile unsigned *)(0xc1100000 + (0x2192 << 2))))
+//#define P_PWM_PWM_D (*((volatile unsigned *)(0xc1100000 + (0x2191 << 2))))
+//#endif
+//*/
+//#define PWM_MISC_REG_AB (0x6c02)
+//#define P_PWM_MISC_REG_AB (volatile unsigned int *)((0x6c02 << 2) + 0xffd00000)
+//#define WATCHDOG_CNTL ((0x3c34 << 2) + 0xffd00000)
+//#define WATCHDOG_CNTL1 ((0x3c35 << 2) + 0xffd00000)
+//#define WATCHDOG_TCNT ((0x3c36 << 2) + 0xffd00000)
+//#define WATCHDOG_RESET ((0x3c37 << 2) + 0xffd00000)
+#else
+//#define ddr_udelay(a) do{}while((a<<5)--);
+#define P_EE_TIMER_E (volatile unsigned int *)(((0x2662 << 2) + 0xc1100000))
+//#define WATCHDOG_CNTL 0xc11098d0
+//#define WATCHDOG_CNTL1 0xc11098d4
+//#define WATCHDOG_TCNT 0xc11098d8
+//#define WATCHDOG_RESET 0xc11098dc
+#ifndef P_WATCHDOG_CNTL
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+#define P_WATCHDOG_CNTL (volatile unsigned int *)0xc11098d0
+#define P_WATCHDOG_CNTL1 (volatile unsigned int *) 0xc11098d4
+#define P_WATCHDOG_TCNT (volatile unsigned int *)0xc11098d8
+#define P_WATCHDOG_RESET (volatile unsigned int *) 0xc11098dc
+#else
+#define P_WATCHDOG_CNTL (volatile unsigned int *)(0xc1100000+(0x2640<<2))
+//#define P_WATCHDOG_CNTL1 (volatile unsigned int *) 0xc11098d4
+//#define P_WATCHDOG_TCNT (volatile unsigned int *)0xc11098d8
+#define P_WATCHDOG_RESET (volatile unsigned int *)(0xc1100000+(0x2641<<2))
+#endif
+#endif
+
+
+#ifndef P_PIN_MUX_REG1
+#define P_PIN_MUX_REG1 (((volatile unsigned *)(0xda834400 + (0x2d << 2))))
+#define P_PIN_MUX_REG2 (((volatile unsigned *)(0xda834400 + (0x2e << 2))))
+#define P_PIN_MUX_REG3 (((volatile unsigned *)(0xda834400 + (0x2f << 2))))
+#define P_PIN_MUX_REG7 (((volatile unsigned *)(0xda834400 + (0x33 << 2))))
+#endif
+
+#ifndef P_PWM_MISC_REG_AB
+#define P_PWM_MISC_REG_AB (((volatile unsigned *)(0xc1100000 + (0x2156 << 2))))
+#define P_PWM_PWM_B (((volatile unsigned *)(0xc1100000 + (0x2155 << 2))))
+#define P_PWM_MISC_REG_CD (((volatile unsigned *)(0xc1100000 + (0x2192 << 2))))
+#define P_PWM_PWM_D (((volatile unsigned *)(0xc1100000 + (0x2191 << 2))))
+#endif
+
+#ifndef P_EE_TIMER_E
+#define P_EE_TIMER_E (((volatile unsigned *)(0xc1100000 + (0x2662 << 2))))
+#endif
+
+#endif
+
+#define get_us_time() (*P_EE_TIMER_E)// (readl(P_ISA_TIMERE))
+
+// #define P_ISA_TIMERE 0xc1109988
+// #define get_us_time() (readl(P_ISA_TIMERE))
+
+/*
+#define P_PIN_MUX_REG3 (*((volatile unsigned *)(0xff634400 + (0x2f << 2))))
+#define P_PIN_MUX_REG4 (*((volatile unsigned *)(0xff634400 + (0x30 << 2))))
+
+#define P_PWM_MISC_REG_AB (*((volatile unsigned *)(0xff807000 + (0x02 << 2))))
+#define P_PWM_PWM_A (*((volatile unsigned *)((0x6c00 << 2) + 0xffd00000)))
+
+#define AO_PIN_MUX_REG (*((volatile unsigned *)(0xff800000 + (0x05 << 2))))
+*/
+
+#define dwc_ddrphy_apb_wr(addr, dat) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))=((uint16_t)dat)
+#define dwc_ddrphy_apb_rd(addr) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))
+#define ACX_MAX 0x80
+
+void ddr_udelay(unsigned int us)
+{
+//#ifndef CONFIG_PXP_EMULATOR
+ unsigned int t0 = (*((P_EE_TIMER_E)));
+
+ while ((*((P_EE_TIMER_E))) - t0 <= us)
+ ;
+//#endif
+}
+
+#define DDR_PARAMETER_SOURCE_FROM_DMC_STICKY 1
+#define DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV 2
+#define DDR_PARAMETER_SOURCE_FROM_UBOOT_IDME 3
+#define DDR_PARAMETER_SOURCE_FROM_ORG_STICKY 4
+
+#define DDR_PARAMETER_READ 1
+#define DDR_PARAMETER_WRITE 2
+#define DDR_PARAMETER_LEFT 1
+#define DDR_PARAMETER_RIGHT 2
+
+typedef struct ddr_test_struct {
+ unsigned int ddr_data_source ;
+ unsigned int ddr_data_test_size ;
+ unsigned int ddr_address_test_size ;
+ unsigned int ddr_test_watchdog_times_s ;
+ unsigned int ddr_test_lane_disable ;
+
+ unsigned int ddr_test_window_flag[8] ;
+ unsigned int ddr_test_window_data[100] ;
+} ddr_test_struct_t;
+ddr_test_struct_t *g_ddr_test_struct;
+
+unsigned int read_write_window_test_parameter(unsigned int source_index, unsigned int parameter_index ,unsigned int parameter_value,unsigned int read_write_flag )
+{
+
+ if(source_index == DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ {
+ sticky_reg_base_add = (DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ if(read_write_flag == DDR_PARAMETER_WRITE)
+ wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
+ if(read_write_flag == DDR_PARAMETER_READ)
+ parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
+ }
+
+ if(source_index == DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV)
+ {
+ char *pre_env_name = "ddr_test_data_num";
+ char *env_name = "ddr_test_data_num_0000";
+ char *str_buf = NULL;
+ char *temp_s = NULL;
+ char *endp = NULL;
+ char buf[1024];
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ sprintf(env_name,"%s_%04d",pre_env_name,parameter_index);
+ sprintf(buf, "0x%08x", parameter_value);
+
+ if(read_write_flag == DDR_PARAMETER_WRITE)
+ {
+ setenv(env_name, buf);
+ run_command("save",0);
+ }
+ if(read_write_flag == DDR_PARAMETER_READ)
+ {
+ temp_s = getenv(env_name);
+ if(temp_s)
+ parameter_value = simple_strtoull_ddr(temp_s, &endp, 0);
+ else
+ parameter_value = 0;
+ }
+ }
+
+ if(source_index == DDR_PARAMETER_SOURCE_FROM_ORG_STICKY)
+ {
+ sticky_reg_base_add=(PREG_STICKY_REG0);
+
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
+ if(read_write_flag==DDR_PARAMETER_READ)
+ parameter_value=rd_reg((sticky_reg_base_add+(parameter_index<<2)));
+ }
+ return parameter_value;
+}
+
+
+unsigned int read_write_window_test_flag(unsigned int source_index, unsigned int parameter_index ,unsigned int parameter_value,unsigned int read_write_flag )
+{
+
+ if (source_index == DDR_PARAMETER_SOURCE_FROM_ORG_STICKY)
+ {
+ sticky_reg_base_add = PREG_STICKY_REG0;
+
+ if (read_write_flag == DDR_PARAMETER_WRITE)
+ wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
+ if (read_write_flag == DDR_PARAMETER_READ)
+ parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
+ }
+
+ if (source_index == DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ {
+ sticky_reg_base_add = (DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ if (read_write_flag == DDR_PARAMETER_WRITE)
+ wr_reg((sticky_reg_base_add+(parameter_index<<2)), parameter_value);
+ if (read_write_flag == DDR_PARAMETER_READ)
+ parameter_value = rd_reg((sticky_reg_base_add+(parameter_index<<2)));
+ }
+
+ if (source_index == DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV)
+ {
+ char *pre_env_name = "ddr_test_data_num";
+ char *env_name = "ddr_test_data_num_0000";
+ char *str_buf = NULL;
+ char *temp_s = NULL;
+ char *endp = NULL;
+ char buf[1024];
+ str_buf = (char *)(&buf);
+ memset(str_buf, 0, sizeof(buf));
+ sprintf(env_name,"%s_%04d",pre_env_name,parameter_index);
+ sprintf(buf, "0x%08x", parameter_value);
+
+ if (read_write_flag == DDR_PARAMETER_WRITE)
+ {
+ setenv(env_name, buf);
+ run_command("save",0);
+ }
+ if(read_write_flag == DDR_PARAMETER_READ)
+ {
+ temp_s = getenv(env_name);
+ if(temp_s)
+ parameter_value = simple_strtoull_ddr(temp_s, &endp, 0);
+ else
+ parameter_value = 0;
+ }
+ }
+
+ return parameter_value;
+}
+
+void ddr_test_watchdog_init(uint32_t msec)
+{
+
+ // src: 24MHz
+ // div: 24000 for 1ms
+ // reset ao-22 and ee-21
+ // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ *P_WATCHDOG_CNTL = (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1);
+
+ // set timeout
+ //*P_WATCHDOG_TCNT = msec;
+ // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
+ *P_WATCHDOG_TCNT = msec;
+ //writel(0,(unsigned int )P_WATCHDOG_RESET);
+ *P_WATCHDOG_RESET = 0;
+ //*P_WATCHDOG_RESET = 0;
+
+ // enable
+ *P_WATCHDOG_CNTL = (*P_WATCHDOG_CNTL)|(1<<18);
+ //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
+ //*P_WATCHDOG_CNTL |= (1<<18);
+#else
+ *P_WATCHDOG_CNTL = (0<<24)|(msec*8-1);
+ //*P_WATCHDOG_TCNT=msec;
+#endif
+}
+
+void ddr_test_watchdog_enable(uint32_t sec)
+{
+
+ // src: 24MHz
+ // div: 24000 for 1ms
+ // reset ao-22 and ee-21
+ // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ *P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
+ // set timeout
+ //*P_WATCHDOG_TCNT = msec;
+ // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
+ if(sec*100>0xffff)
+ *P_WATCHDOG_TCNT=0xffff;
+ else
+ *P_WATCHDOG_TCNT=sec*100; //max 655s
+ //writel(0,(unsigned int )P_WATCHDOG_RESET);
+ *P_WATCHDOG_RESET=0;
+ //*P_WATCHDOG_RESET = 0;
+
+ // enable
+ *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)|(1<<18);
+ //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
+ //*P_WATCHDOG_CNTL |= (1<<18);
+#else
+ //*P_WATCHDOG_CNTL=(1<<24)|(1<<19)|(sec*8000-1);
+ *P_WATCHDOG_CNTL=(1<<24)|(1<<19)|(0xffff);
+ printf("\nm8baby_watchdog max only 5s,please take care test size not too long for m8baby\n");
+#endif
+ printf("\nP_WATCHDOG_ENABLE\n");
+}
+
+void ddr_test_watchdog_disable(void )
+{
+
+ // src: 24MHz
+ // div: 24000 for 1ms
+ // reset ao-22 and ee-21
+ // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ *P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
+ // set timeout
+ //*P_WATCHDOG_TCNT = msec;
+ // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
+ //*P_WATCHDOG_TCNT=sec*100;
+ //writel(0,(unsigned int )P_WATCHDOG_RESET);
+ *P_WATCHDOG_RESET=0;
+ //*P_WATCHDOG_RESET = 0;
+
+ // enable
+ *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)&(~(1<<18));
+ //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
+ //*P_WATCHDOG_CNTL |= (1<<18);
+#else
+ *P_WATCHDOG_CNTL=(0<<24)|(0<<19)|(24000-1);
+#endif
+ printf("\nP_WATCHDOG_DISABLE\n");
+}
+
+
+void ddr_test_watchdog_clear(void )
+{
+
+ // src: 24MHz
+ // div: 24000 for 1ms
+ // reset ao-22 and ee-21
+ // writel( (1<<24)|(1<<25)|(1<<23)|(1<<21)|(24000-1),(unsigned int )P_WATCHDOG_CNTL);
+ //*P_WATCHDOG_CNTL=(1<<24)|(1<<25)|(1<<23)|(1<<21)|(240000-1); //10ms
+ // set timeout
+ //*P_WATCHDOG_TCNT = msec;
+ // writel(msec,(unsigned int )P_WATCHDOG_CNTL); //bit0-15
+ //*P_WATCHDOG_TCNT=sec*100;
+ //writel(0,(unsigned int )P_WATCHDOG_RESET);
+ *P_WATCHDOG_RESET=0;
+ //*P_WATCHDOG_RESET = 0;
+
+ // enable
+ //*P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)&(~(1<<18));
+ //writel((readl((unsigned int )P_WATCHDOG_CNTL))|(1<<18),(unsigned int )P_WATCHDOG_CNTL);
+ //*P_WATCHDOG_CNTL |= (1<<18);
+ //printf("\nP_WATCHDOG_CLEAR,reg=0x%8x\n",(P_WATCHDOG_RESET));
+}
+
+void ddr_test_watchdog_reset_system(void)
+{
+ //#define P_WATCHDOG_CNTL 0xc11098d0
+ //#define P_WATCHDOG_CNTL1 0xc11098d4
+ //#define P_WATCHDOG_TCNT 0xc11098d8
+ //#define P_WATCHDOG_RESET 0xc11098dc
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ int i;
+
+ while (1) {
+ /*
+ writel( 0x3 | (1 << 21) // sys reset en ao ee 3
+ | (1 << 23) // interrupt en
+ | (1 << 24) // clk en
+ | (1 << 25) // clk div en
+ | (1 << 26) // sys reset now ao ee 3
+ , (unsigned int )P_WATCHDOG_CNTL);
+ */
+ *P_WATCHDOG_CNTL=
+ 0x3 | (1 << 21) // sys reset en ao ee 3
+ | (1 << 23) // interrupt en
+ | (1 << 24) // clk en
+ | (1 << 25) // clk div en
+ | (1 << 26); // sys reset now ao ee 3;
+ //printf("\nP_WATCHDOG_CNTL reg_add_%x08==%x08",(unsigned int )P_WATCHDOG_CNTL,readl((unsigned int )P_WATCHDOG_CNTL));
+ //printf("\nP_WATCHDOG_CNTL==%x08",readl((unsigned int )P_WATCHDOG_CNTL));
+ //printf("\nP_WATCHDOG_CNTL==%x08",readl((unsigned int )P_WATCHDOG_CNTL));
+ printf("\nP_WATCHDOG_CNTLREG_ADD %x08==%x08",(unsigned int)(unsigned long)P_WATCHDOG_CNTL,
+ *P_WATCHDOG_CNTL);
+ //writel(0, (unsigned int )P_WATCHDOG_RESET);
+ *P_WATCHDOG_RESET=0;
+
+ // writel(readl((unsigned int )P_WATCHDOG_CNTL) | (1<<18), // watchdog en
+ //(unsigned int )P_WATCHDOG_CNTL);
+ *P_WATCHDOG_CNTL=(*P_WATCHDOG_CNTL)|(1<<18);
+ for (i=0; i<100; i++)
+ *P_WATCHDOG_CNTL;
+ //readl((unsigned int )P_WATCHDOG_CNTL);/*Deceive gcc for waiting some cycles */
+ }
+
+#else
+ //WRITE_CBUS_REG(WATCHDOG_TC, 0xf080000 | 2000);
+ *P_WATCHDOG_CNTL=(0xf080000 | 2000);
+#endif
+ while(1);
+}
+
+
+//just tune for lcdlr
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+int do_ddr_fine_tune_lcdlr_env1(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter ddr_fine_tune_lcdlr_env function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i = 0;
+ printf("\nargc== 0x%08x\n", argc);
+ for(i = 0; i<argc; i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+
+#define WR_RD_ADJ_USE_ENV 1
+#define WR_RD_ADJ_USE_UART_INPUT 2
+ unsigned int wr_rd_adj_input_src=1;
+ int wr_adj_per[12]={
+ 100 ,
+ 1000,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ };
+ int rd_adj_per[12]={
+ 100 ,
+ 100 ,
+ 80 ,
+ 80 ,
+ 80 ,
+ 80 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ };
+ if(argc == 1)
+ printf("\nplease read help\n");
+
+ if(argc >= 2)
+ {
+ wr_rd_adj_input_src = simple_strtoull_ddr(argv[1], &endp, 10);
+
+ unsigned int i=0;
+ if(wr_rd_adj_input_src==WR_RD_ADJ_USE_UART_INPUT)
+ {
+ printf("\ntune ddr lcdlr use uart input\n");
+ if (argc>24+2)
+ argc=24+2;
+
+ for(i = 2;i<argc;i++)
+ {
+ if(i<(2+12))
+ wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 10);
+ else
+ rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 10);
+ }
+ }
+
+ // unsigned int = 0, max = 0xff, min = 0x00;
+ if(wr_rd_adj_input_src==WR_RD_ADJ_USE_ENV)
+ {
+ printf("\ntune ddr lcdlr use uboot env\n");
+ //char str[24];
+ const char *s;
+
+ // char *varname;
+ int value=0;
+
+ //*varname="env_ddrtest";
+ s = getenv("env_wr_lcdlr_pr");
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",wr_adj_per);
+ //sprintf(str,"d%",s);
+ //getc
+ }
+ value = simple_strtoull_ddr(s, &endp, 16);
+ printf("%d",value);
+ }
+ s = getenv("env_rd_lcdlr_pr");
+
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",rd_adj_per);
+
+ }
+ //value = simple_strtoull_ddr(s, &endp, 16);
+ }
+
+ //sprintf(str, "%lx", value);
+ // setenv("env_ddrtest", str);
+ //run_command("save",0);
+
+ if (argc>24+2)
+ argc=24+2;
+ for(i = 2;i<argc;i++)
+ {
+ if(i<(2+12))
+ wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
+ else
+ rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
+ }
+ }
+ printf(" int wr_adj_per[12]={\n");
+ for(i = 0;i<12;i++)
+ printf("%04d ,\n",wr_adj_per[i]);
+ printf("};\n");
+ printf(" int rd_adj_per[12]={\n");
+ for(i = 0;i<12;i++)
+ printf("%04d ,\n",rd_adj_per[i]);
+ printf("};\n");
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
+ wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))|(1<<0));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
+ wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))|(1<<0));
+#else
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
+ wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))|(1<<26));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
+ wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))|(1<<26));
+#endif
+
+ int lcdlr_w=0,lcdlr_r=0;
+ unsigned temp_reg=0;
+ int temp_count=0;
+ for( temp_count=0;temp_count<2;temp_count++)
+ { temp_reg=(unsigned)(DDR0_PUB_ACLCDLR+(temp_count<<2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ if(temp_count==1)
+ lcdlr_w=lcdlr_w&ACBDLR_MAX;
+ wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
+ }
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ for( temp_count=2;temp_count<6;temp_count++)
+ { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
+ wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
+ wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
+ }
+#else
+ for ( temp_count=2;temp_count<6;temp_count++) {
+ temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
+ }
+#endif
+ for( temp_count=6;temp_count<8;temp_count++) {
+ temp_reg=(unsigned)(DDR1_PUB_ACLCDLR+((temp_count-6)<<2));
+
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ if(temp_count==7)
+ lcdlr_w=lcdlr_w&ACBDLR_MAX;
+ wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
+ }
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ for( temp_count=8;temp_count<12;temp_count++) {
+ temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
+ wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
+ wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR4-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
+ }
+#else
+ for( temp_count=8;temp_count<12;temp_count++) {
+ temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-8));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&0xff);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&0xff);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
+ }
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))&(~(1<<0)));
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
+
+ wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))&(~(1<<0)));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
+#else
+ wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))&(~(1<<26)));
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
+
+ wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))&(~(1<<26)));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
+#endif
+ printf("\nend adjust lcdlr\n");
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+ }
+
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_test_tune_dqs_env, 30, 1, do_ddr_fine_tune_lcdlr_env1,
+ "do_ddr_fine_tune_lcdlr_env arg1 arg2 arg3...",
+ "do_ddr_fine_tune_lcdlr_env arg1 arg2 arg3... \n dcache off ? \n"
+);
+
+#endif
+//*/
+static void ddr_write(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ unsigned int i, j, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ for (j=0;j<32;j++)
+ {
+
+ if (m_len >= 128)
+ n = 32;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ switch (i)
+ {
+ case 0:
+ case 9:
+ case 14:
+ case 25:
+ case 30:
+ *(p+i) = TDATA32F;
+ break;
+ case 1:
+ case 6:
+ case 8:
+ case 17:
+ case 22:
+ *(p+i) = 0;
+ break;
+ case 16:
+ case 23:
+ case 31:
+ *(p+i) = TDATA32A;
+ break;
+ case 7:
+ case 15:
+ case 24:
+ *(p+i) = TDATA325;
+ break;
+ case 2:
+ case 4:
+ case 10:
+ case 12:
+ case 19:
+ case 21:
+ case 27:
+ case 29:
+ *(p+i) = 1<<j;
+ break;
+ case 3:
+ case 5:
+ case 11:
+ case 13:
+ case 18:
+ case 20:
+ case 26:
+ case 28:
+ *(p+i) = ~(1<<j);
+ break;
+ }
+ }
+
+ if (m_len > 128)
+ {
+ m_len -= 128;
+ p += 32;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_read(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ unsigned int i, j, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ for (j=0;j<32;j++)
+ {
+
+ if (m_len >= 128)
+ n = 32;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+ switch (i)
+ {
+
+ case 0:
+ case 9:
+ case 14:
+ case 25:
+ case 30:
+ if (*(p+i) != TDATA32F)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ case 1:
+ case 6:
+ case 8:
+ case 17:
+ case 22:
+ if (*(p+i) != 0) {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0);
+ }break;
+ case 16:
+ case 23:
+ case 31:
+ if (*(p+i) != TDATA32A) {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32A);
+ } break;
+ case 7:
+ case 15:
+ case 24:
+ if (*(p+i) != TDATA325) {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA325);
+ } break;
+ case 2:
+ case 4:
+ case 10:
+ case 12:
+ case 19:
+ case 21:
+ case 27:
+ case 29:
+ if (*(p+i) != 1<<j) {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 1<<j);
+ } break;
+ case 3:
+ case 5:
+ case 11:
+ case 13:
+ case 18:
+ case 20:
+ case 26:
+ case 28:
+ if (*(p+i) != ~(1<<j)) {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~(1<<j));
+ } break;
+ }
+ }
+
+ if (m_len > 128)
+ {
+ m_len -= 128;
+ p += 32;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+
+static void ddr_write4(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ unsigned int i, j, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ for (j=0;j<32;j++)
+ {
+
+ if (m_len >= 128)
+ n = 32;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+
+ *(p+i) = 0xff00ff00;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+
+ *(p+i) = ~0xff00ff00;
+ break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ *(p+i) = 0xaa55aa55;
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ *(p+i) = ~0xaa55aa55;
+ break;
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+
+ *(p+i) = 1<<j;
+ break;
+
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ *(p+i) = ~(1<<j);
+ break;
+ }
+ }
+
+ if (m_len > 128)
+ {
+ m_len -= 128;
+ p += 32;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_read4(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ unsigned int i, j, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ for (j=0;j<32;j++)
+ {
+
+ if (m_len >= 128)
+ n = 32;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+ switch (i)
+ {
+
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+
+ // *(p+i) = 0xff00ff00;
+ if (*(p+i) != 0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+
+ // *(p+i) = ~0xff00ff00;
+ if (*(p+i) != ~0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ // *(p+i) = 0xaa55aa55;
+ if (*(p+i) != 0xaa55aa55)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ // *(p+i) = ~0xaa55aa55;
+ if (*(p+i) != ~0xaa55aa55)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+
+ // *(p+i) = 1<<j;
+ if (*(p+i) != (1<<j))
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // *(p+i) = ~(1<<j);
+ if (*(p+i) !=~( 1<<j))
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ }
+ break;
+ }
+ }
+
+ if (m_len > 128)
+ {
+ m_len -= 128;
+ p += 32;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_read_full(void *buff, unsigned int m_length,unsigned int start_pattern,
+ unsigned int pattern_offset)
+{
+ unsigned int *p;
+ unsigned int i=0;
+ unsigned int m_len = m_length&0xfffffffc;
+
+ p = ( unsigned int *)buff;
+ //*(p)=start_pattern;
+ while (m_len)
+ {
+ m_len=m_len-4;
+
+ // *(p+i) = (*(p))+pattern_offset;
+
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p+i) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+ if ((*(p+i)) !=(start_pattern+pattern_offset*i))
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i),
+ (start_pattern+pattern_offset*i));
+ }
+ break;
+
+ i++;
+ }
+}
+
+static void ddr_write_full(void *buff, unsigned int m_length,unsigned int start_pattern,
+ unsigned int pattern_offset)
+{
+ unsigned int *p;
+ unsigned int i=0;
+ unsigned int m_len = m_length&0xfffffffc;
+
+ p = ( unsigned int *)buff;
+ //*(p)=start_pattern;
+ while (m_len)
+ {
+ m_len=m_len-4;
+ *(p+i) = start_pattern+pattern_offset*i;
+ i++;
+ }
+}
+
+///*
+static void ddr_test_copy(void *addr_dest,void *addr_src,unsigned int memcpy_size)
+{
+ unsigned int *p_dest;
+ unsigned int *p_src;
+
+ unsigned int m_len = memcpy_size;
+
+ p_dest = ( unsigned int *)addr_dest;
+ p_src = ( unsigned int *)addr_src;
+ m_len = m_len/4; //assume it's multiple of 4
+ while (m_len--) {
+ ddr_pld_cache(p_src) ;//#define ddr_pld_cache(P) asm ("prfm PLDL1KEEP, [%0, #376]"::"r" (P))
+ *p_dest++ = *p_src++;
+ *p_dest++ = *p_src++;
+ *p_dest++ = *p_src++;
+ *p_dest++ = *p_src++;
+ }
+}
+//*/
+int do_ddr_test_copy(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ unsigned long loop = 1;
+ unsigned int print_flag =1;
+ // unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int src_addr = DDR_TEST_START_ADDR;
+ unsigned int dec_addr = DDR_TEST_START_ADDR+0x8000000;
+ unsigned int test_size = DDR_TEST_SIZE;
+
+
+ print_flag=1;
+
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==1) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ // if (*argv[2] == 0 || *endp != 0)
+ src_addr = DDR_TEST_START_ADDR;
+ loop = 1;
+ }
+ if (argc > 2) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ src_addr = DDR_TEST_START_ADDR;
+ }
+ if (argc > 3) {
+ src_addr = simple_strtoull_ddr(argv[1], &endp, 16);
+ dec_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ loop = 1;
+ if (*argv[3] == 0 || *endp != 0)
+ test_size = DDR_TEST_SIZE;
+
+ }
+ if (test_size<0x1000)
+ test_size = DDR_TEST_SIZE;
+ if (argc > 4) {
+ loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ loop = 1;
+ }
+ if (argc > 5) {
+ print_flag = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ print_flag = 1;
+ }
+ //COPY_TEST_START:
+
+ ///*
+ unsigned long time_start, time_end,test_loops;
+ test_loops=loop;
+ unsigned long size_count=0;
+ size_count=loop*test_size;
+ time_start = get_us_time();//us
+
+ do {
+ // loop = 1;
+ ddr_test_copy((void *)(int_convter_p(dec_addr)),(void *)(int_convter_p(src_addr)),test_size);
+ //bcopy((void *)(int_convter_p(src_addr)),(void *)(int_convter_p(dec_addr)),test_size);
+ //mcopy((void *)(int_convter_p(src_addr)),(void *)(int_convter_p(dec_addr)),test_size);
+ if (print_flag)
+ {
+ printf("\nloop==0x%08x", ( unsigned int )loop);
+ printf("\n \n");
+ }
+ }while(--loop);
+ //*/
+ time_end = get_us_time();//us
+ printf("\ncopy %d times use %dus\n \n",( unsigned int )test_loops,( unsigned int )(time_end-time_start));
+
+ printf("\nddr copy bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
+ printf("\rEnd ddr test. \n");
+
+ unsigned int m_len=0,counter=0;
+ unsigned int *p_dest;
+ p_dest= (void *)(int_convter_p(dec_addr));
+ m_len = test_size/4; //assume it's multiple of 4
+ counter=(unsigned int)test_loops;
+ size_count=counter*test_size;
+ time_start = get_us_time();//us
+ do {
+ loop = 1;
+ m_len = test_size/4;
+ while (m_len--) {
+ ddr_pld_cache(p_dest) ;
+ *p_dest++ = 0x12345678;
+ *p_dest++ = 0x12345678;
+ *p_dest++ = 0x12345678;
+ *p_dest++ = 0x12345678;
+ }
+ }while(--counter);
+ time_end = get_us_time();//us
+ printf("\nwrite %d bytes use %dus\n \n",( unsigned int )test_size,( unsigned int )(time_end-time_start));
+
+ printf("\nddr write bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
+
+ unsigned int *p_src;
+ p_src= (void *)(int_convter_p(src_addr));
+ m_len = test_size/4; //assume it's multiple of 4
+ unsigned int temp0=0;
+ //unsigned int temp1=0;
+ //unsigned int temp2=0;
+ //unsigned int temp3=0;
+ counter=(unsigned int)test_loops;
+ size_count=counter*test_size;
+
+ // #define OPEN_CHANNEL_A_PHY_CLK() (writel((0), 0xc8836c00))
+ //writel((1000000<<0), DMC_MON_CTRL1);
+ //writel((0<<31)|(1<<30)|(0<<20)|(1<<16)|(1<<0), DMC_MON_CTRL2);
+ //writel((1<<31)|(0<<30)|(0<<20)|(1<<16)|(1<<0), DMC_MON_CTRL2);
+ time_start = get_us_time();//us
+ do {
+ loop = 1;
+ m_len = test_size/4;
+ while (m_len--) {
+ // ddr_pld_cache(p_src++) ;
+#ifdef DDR_PREFETCH_CACHE
+ __asm__ __volatile__ ("prfm PLDL1KEEP, [%0, #376]"::"r" (p_src));
+#endif
+ p_src++;
+ temp0 =( *p_src);
+ m_len--;
+ m_len--;
+ m_len--;
+ m_len--;
+ m_len--;
+ m_len--;
+ m_len--;
+ }
+ }while(--counter);
+ *p_dest++ = temp0;
+ *p_dest++ = *p_src;
+ *p_dest++ = *p_src;
+ *p_dest++ = *p_src;
+ time_end = get_us_time();//us
+
+ printf("\nread %d Kbytes use %dus\n \n",(unsigned int)(size_count/1000),( unsigned int )(time_end-time_start));
+ printf("\nddr read bandwidth==%d MBYTE/S \n \n",(unsigned int)(size_count/(time_end-time_start)));
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ ddr_test_copy, 7, 1, do_ddr_test_copy,
+ "ddr_test_copy function",
+ "ddr_test_copy 0x08000000 0x10000000 0x02000000 1 0 ? \n"
+);
+
+///*
+#define DDR_PATTERN_LOOP_1 32
+#define DDR_PATTERN_LOOP_2 64
+#define DDR_PATTERN_LOOP_3 96
+/*
+__asm
+{
+.Global memcpy_pld
+.type memcpy_pld ,%function
+.align 8
+memcpy_pld:
+mov x4,x0
+subs x2,x2,#8
+b.mi 2f
+1: ldr x3,[x1],#8
+ subs x2,x2,#8
+ str x3,[x4],#8
+ prfm PLDL1KEEP,[x1,#376]
+ b.pl 1b
+
+2: adds x2,x2,#4
+ b.mi 3f
+ ldr w3,[x1],#4
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+3: adds x2,x2,#2
+ b.mi 4f
+ ldr w3,[x1],#2
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+4: adds x2,x2,#1
+ b.mi 5f
+ ldr w3,[x1],#2
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+5: ret
+}
+*/
+//static void ddr_memcpy_pld(void *addr_dest, void *addr_src, unsigned int m_length)
+//{
+/*
+asm
+{
+//.Global memcpy_pld
+.type memcpy_pld ,%function
+.align 8
+memcpy_pld:
+mov x4,x0
+subs x2,x2,#8
+b.mi 2f
+1: ldr x3,[x1],#8
+ subs x2,x2,#8
+ str x3,[x4],#8
+ prfm PLDL1KEEP,[x1,#376]
+ b.pl 1b
+
+2: adds x2,x2,#4
+ b.mi 3f
+ ldr w3,[x1],#4
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+3: adds x2,x2,#2
+ b.mi 4f
+ ldr w3,[x1],#2
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+4: adds x2,x2,#1
+ b.mi 5f
+ ldr w3,[x1],#2
+ sub x2,x2,#4
+ str w3,[x4],#4
+
+5: ret
+}
+memcpy_pld(addr_dest,addr_src,m_length);
+*/
+//}
+
+
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+
+///*
+
+int ddr_test_gx_cross_talk_pattern(int ddr_test_size)
+{
+ unsigned int start_addr = 0x10000000;
+ error_outof_count_flag=1;
+ error_count=0;
+
+ unsigned int des[8] ;
+ unsigned int pattern_1[4][8] ;
+ unsigned int pattern_2[4][8] ;
+ unsigned int pattern_3[4][8] ;
+ unsigned int pattern_4[4][8] ;
+ unsigned int pattern_5[4][8] ;
+ unsigned int pattern_6[4][8] ;
+
+ des[0] = 0xaec83f49;
+ des[1] = 0xd243a62c;
+ des[2] = 0xf8774a0b;
+ des[3] = 0x63d214e5;
+ des[4] = 0x3f4166d5;
+ des[5] = 0x239672c0;
+ des[6] = 0x47ba7533;
+ des[7] = 0xcae4cd7f;
+ pattern_1[0][0] = 0xff00ff00;
+ pattern_1[0][1] = 0xff00ff00;
+ pattern_1[0][2] = 0xff00ff00;
+ pattern_1[0][3] = 0xff00ff00;
+ pattern_1[0][4] = 0xff00ff00;
+ pattern_1[0][5] = 0xff00ff00;
+ pattern_1[0][6] = 0xff00ff00;
+ pattern_1[0][7] = 0xff00ff00;
+
+ pattern_1[1][0] = 0x00ffff00;
+ pattern_1[1][1] = 0x00ffff00;
+ pattern_1[1][2] = 0x00ffff00;
+ pattern_1[1][3] = 0x00ffff00;
+ pattern_1[1][4] = 0x00ffff00;
+ pattern_1[1][5] = 0x00ffff00;
+ pattern_1[1][6] = 0x00ffff00;
+ pattern_1[1][7] = 0x00ffff00;
+
+ pattern_1[2][0] = 0xffff0000;
+ pattern_1[2][1] = 0xffff0000;
+ pattern_1[2][2] = 0xffff0000;
+ pattern_1[2][3] = 0xffff0000;
+ pattern_1[2][4] = 0xffff0000;
+ pattern_1[2][5] = 0xffff0000;
+ pattern_1[2][6] = 0xffff0000;
+ pattern_1[2][7] = 0xffff0000;
+ pattern_1[3][0] = 0xff00ff00;
+ pattern_1[3][1] = 0xff00ff00;
+ pattern_1[3][2] = 0xff00ff00;
+ pattern_1[3][3] = 0xff00ff00;
+ pattern_1[3][4] = 0xff00ff00;
+ pattern_1[3][5] = 0xff00ff00;
+ pattern_1[3][6] = 0xff00ff00;
+ pattern_1[3][7] = 0xff00ff00;
+
+ pattern_2[0][0] = 0x0001fe00;
+ pattern_2[0][1] = 0x0000ff00;
+ pattern_2[0][2] = 0x0000ff00;
+ pattern_2[0][3] = 0x0000ff00;
+ pattern_2[0][4] = 0x0002fd00;
+ pattern_2[0][5] = 0x0000ff00;
+ pattern_2[0][6] = 0x0000ff00;
+ pattern_2[0][7] = 0x0000ff00;
+
+ pattern_2[1][0] = 0x0004fb00;
+ pattern_2[1][1] = 0x0000ff00;
+ pattern_2[1][2] = 0x0000ff00;
+ pattern_2[1][3] = 0x0000ff00;
+ pattern_2[1][4] = 0x0008f700;
+ pattern_2[1][5] = 0x0000ff00;
+ pattern_2[1][6] = 0x0000ff00;
+ pattern_2[1][7] = 0x0000ff00;
+
+ pattern_2[2][0] = 0x0010ef00;
+ pattern_2[2][1] = 0x0000ff00;
+ pattern_2[2][2] = 0x0000ff00;
+ pattern_2[2][3] = 0x0000ff00;
+ pattern_2[2][4] = 0x0020df00;
+ pattern_2[2][5] = 0x0000ff00;
+ pattern_2[2][6] = 0x0000ff00;
+ pattern_2[2][7] = 0x0000ff00;
+
+ pattern_2[3][0] = 0x0040bf00;
+ pattern_2[3][1] = 0x0000ff00;
+ pattern_2[3][2] = 0x0000ff00;
+ pattern_2[3][3] = 0x0000ff00;
+ pattern_2[3][4] = 0x00807f00;
+ pattern_2[3][5] = 0x0000ff00;
+ pattern_2[3][6] = 0x0000ff00;
+ pattern_2[3][7] = 0x0000ff00;
+
+ pattern_3[0][0] = 0x00010000;
+ pattern_3[0][1] = 0x00000000;
+ pattern_3[0][2] = 0x00000000;
+ pattern_3[0][3] = 0x00000000;
+ pattern_3[0][4] = 0x00020000;
+ pattern_3[0][5] = 0x00000000;
+ pattern_3[0][6] = 0x00000000;
+ pattern_3[0][7] = 0x00000000;
+
+ pattern_3[1][0] = 0x00040000;
+ pattern_3[1][1] = 0x00000000;
+ pattern_3[1][2] = 0x00000000;
+ pattern_3[1][3] = 0x00000000;
+ pattern_3[1][4] = 0x00080000;
+ pattern_3[1][5] = 0x00000000;
+ pattern_3[1][6] = 0x00000000;
+ pattern_3[1][7] = 0x00000000;
+
+ pattern_3[2][0] = 0x00100000;
+ pattern_3[2][1] = 0x00000000;
+ pattern_3[2][2] = 0x00000000;
+ pattern_3[2][3] = 0x00000000;
+ pattern_3[2][4] = 0x00200000;
+ pattern_3[2][5] = 0x00000000;
+ pattern_3[2][6] = 0x00000000;
+ pattern_3[2][7] = 0x00000000;
+
+ pattern_3[3][0] = 0x00400000;
+ pattern_3[3][1] = 0x00000000;
+ pattern_3[3][2] = 0x00000000;
+ pattern_3[3][3] = 0x00000000;
+ pattern_3[3][4] = 0x00800000;
+ pattern_3[3][5] = 0x00000000;
+ pattern_3[3][6] = 0x00000000;
+ pattern_3[3][7] = 0x00000000;
+
+ ///*
+ pattern_4[0][0] = 0x51c8c049 ;
+ pattern_4[0][1] = 0x2d43592c ;
+ pattern_4[0][2] = 0x0777b50b ;
+ pattern_4[0][3] = 0x9cd2ebe5 ;
+ pattern_4[0][4] = 0xc04199d5 ;
+ pattern_4[0][5] = 0xdc968dc0 ;
+ pattern_4[0][6] = 0xb8ba8a33 ;
+ pattern_4[0][7] = 0x35e4327f ;
+
+ pattern_4[1][0] = 0xae37c049 ;
+ pattern_4[1][1] = 0xd2bc592c ;
+ pattern_4[1][2] = 0xf888b50b ;
+ pattern_4[1][3] = 0x632debe5 ;
+ pattern_4[1][4] = 0x3fbe99d5 ;
+ pattern_4[1][5] = 0x23698dc0 ;
+ pattern_4[1][6] = 0x47458a33 ;
+ pattern_4[1][7] = 0xca1b327f ;
+
+ pattern_4[2][0] = 0x51373f49 ;
+ pattern_4[2][1] = 0x2dbca62c ;
+ pattern_4[2][2] = 0x07884a0b ;
+ pattern_4[2][3] = 0x9c2d14e5 ;
+ pattern_4[2][4] = 0xc0be66d5 ;
+ pattern_4[2][5] = 0xdc6972c0 ;
+ pattern_4[2][6] = 0xb8457533 ;
+ pattern_4[2][7] = 0x351bcd7f ;
+
+
+ pattern_4[3][0] = 0x51c8c049 ;
+ pattern_4[3][1] = 0x2d43592c ;
+ pattern_4[3][2] = 0x0777b50b ;
+ pattern_4[3][3] = 0x9cd2ebe5 ;
+ pattern_4[3][4] = 0xc04199d5 ;
+ pattern_4[3][5] = 0xdc968dc0 ;
+ pattern_4[3][6] = 0xb8ba8a33 ;
+ pattern_4[3][7] = 0x35e4327f ;
+
+ pattern_5[0][0] = 0xaec9c149 ;
+ pattern_5[0][1] = 0xd243592c ;
+ pattern_5[0][2] = 0xf877b50b ;
+ pattern_5[0][3] = 0x63d2ebe5 ;
+ pattern_5[0][4] = 0x3f439bd5 ;
+ pattern_5[0][5] = 0x23968dc0 ;
+ pattern_5[0][6] = 0x47ba8a33 ;
+ pattern_5[0][7] = 0xcae4327f ;
+ pattern_5[1][0] = 0xaeccc449 ;
+ pattern_5[1][1] = 0xd243592c ;
+ pattern_5[1][2] = 0xf877b50b ;
+ pattern_5[1][3] = 0x63d2ebe5 ;
+ pattern_5[1][4] = 0x3f4991d5 ;
+ pattern_5[1][5] = 0x23968dc0 ;
+ pattern_5[1][6] = 0x47ba8a33 ;
+ pattern_5[1][7] = 0xcae4327f ;
+ pattern_5[2][0] = 0xaed8d049 ;
+ pattern_5[2][1] = 0xd243592c ;
+ pattern_5[2][2] = 0xf877b50b ;
+ pattern_5[2][3] = 0x63d2ebe5 ;
+ pattern_5[2][4] = 0x3f61b9d5 ;
+ pattern_5[2][5] = 0x23968dc0 ;
+ pattern_5[2][6] = 0x47ba8a33 ;
+ pattern_5[2][7] = 0xcae4327f ;
+ pattern_5[3][0] = 0xae888049 ;
+ pattern_5[3][1] = 0xd243592c ;
+ pattern_5[3][2] = 0xf877b50b ;
+ pattern_5[3][3] = 0x63d2ebe5 ;
+ pattern_5[3][4] = 0x3fc119d5 ;
+ pattern_5[3][5] = 0x23968dc0 ;
+ pattern_5[3][6] = 0x47ba8a33 ;
+ pattern_5[3][7] = 0xcae4327f ;
+
+ pattern_6[0][0] = 0xaec93f49 ;
+ pattern_6[0][1] = 0xd243a62c ;
+ pattern_6[0][2] = 0xf8774a0b ;
+ pattern_6[0][3] = 0x63d214e5 ;
+ pattern_6[0][4] = 0x3f4366d5 ;
+ pattern_6[0][5] = 0x239672c0 ;
+ pattern_6[0][6] = 0x47ba7533 ;
+ pattern_6[0][7] = 0xcae4cd7f ;
+ pattern_6[1][0] = 0xaecc3f49 ;
+ pattern_6[1][1] = 0xd243a62c ;
+ pattern_6[1][2] = 0xf8774a0b ;
+ pattern_6[1][3] = 0x63d214e5 ;
+ pattern_6[1][4] = 0x3f4966d5 ;
+ pattern_6[1][5] = 0x239672c0 ;
+ pattern_6[1][6] = 0x47ba7533 ;
+ pattern_6[1][7] = 0xcae4cd7f ;
+ pattern_6[2][0] = 0xaed83f49 ;
+ pattern_6[2][1] = 0xd243a62c ;
+ pattern_6[2][2] = 0xf8774a0b ;
+ pattern_6[2][3] = 0x63d214e5 ;
+ pattern_6[2][4] = 0x3f6166d5 ;
+ pattern_6[2][5] = 0x239672c0 ;
+ pattern_6[2][6] = 0x47ba7533 ;
+ pattern_6[2][7] = 0xcae4cd7f ;
+ pattern_6[3][0] = 0xae883f49 ;
+ pattern_6[3][1] = 0xd243a62c ;
+ pattern_6[3][2] = 0xf8774a0b ;
+ pattern_6[3][3] = 0x63d214e5 ;
+ pattern_6[3][4] = 0x3fc166d5 ;
+ pattern_6[3][5] = 0x239672c0 ;
+ pattern_6[3][6] = 0x47ba7533 ;
+ pattern_6[3][7] = 0xcae4cd7f ;
+ //*/
+ //*/
+ start_addr=0x10000000;
+ unsigned int test_size = 0x20;
+ unsigned int test_addr;
+ unsigned int temp_i=0;
+ unsigned int temp_k=0;
+ unsigned int pattern_o[8];
+ unsigned int pattern_d[8];
+ {
+ // if(lflag)
+ // loop = 888;
+
+ //if(old_pattern_flag==1)
+ {
+
+ printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
+
+ /*
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+ flush_dcache_range(start_addr,start_addr + test_size);
+
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ */
+ //if(pattern_flag1==1)
+ {
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_4[temp_k][temp_i])
+ {error_count++;
+ printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
+ }
+
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+
+ }
+ }
+ }
+ }
+ //if(pattern_flag2==1)
+ {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+
+ }
+
+ // if(pattern_flag3==1)
+ {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_6[temp_k][temp_i])
+ {error_count++;
+ printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ printf("\Error count==0x%08x", error_count);
+ printf("\n \n");
+ }
+
+ if (error_count)
+ return 1;
+ else
+ return 0;
+}
+
+int ddr_test_gx_training_pattern(int ddr_test_size)
+{
+ unsigned int start_addr = 0x10000000;
+ error_outof_count_flag=1;
+ error_count=0;
+
+ unsigned int des[8] ;
+ unsigned int pattern_1[4][8] ;
+ // unsigned int pattern_2[4][8] ;
+ // unsigned int pattern_3[4][8] ;
+ // unsigned int pattern_4[4][8] ;
+ // unsigned int pattern_5[4][8] ;
+ //unsigned int pattern_6[4][8] ;
+
+ des[0] = 0xaec83f49;
+ des[1] = 0xd243a62c;
+ des[2] = 0xf8774a0b;
+ des[3] = 0x63d214e5;
+ des[4] = 0x3f4166d5;
+ des[5] = 0x239672c0;
+ des[6] = 0x47ba7533;
+ des[7] = 0xcae4cd7f;
+ /*
+ pattern_1[0][0] = 0x55005500;
+ pattern_1[0][1] = 0xaa00aa00;
+ pattern_1[0][2] = 0x55005500;
+ pattern_1[0][3] = 0xaa00aa00;
+ pattern_1[0][4] = 0x55005500;
+ pattern_1[0][5] = 0xaa00aa00;
+ pattern_1[0][6] = 0x55005500;
+ pattern_1[0][7] = 0xaa00aa00;
+
+ pattern_1[1][0] = 0x55005500;
+ pattern_1[1][1] = 0xaa00aa00;
+ pattern_1[1][2] = 0x55005500;
+ pattern_1[1][3] = 0xaa00aa00;
+ pattern_1[1][4] = 0x55005500;
+ pattern_1[1][5] = 0xaa00aa00;
+ pattern_1[1][6] = 0x55005500;
+ pattern_1[1][7] = 0xaa00aa00;
+
+ pattern_1[2][0] = 0x55005500;
+ pattern_1[2][1] = 0xaa00aa00;
+ pattern_1[2][2] = 0x55005500;
+ pattern_1[2][3] = 0xaa00aa00;
+ pattern_1[2][4] = 0x55005500;
+ pattern_1[2][5] = 0xaa00aa00;
+ pattern_1[2][6] = 0x55005500;
+ pattern_1[2][7] = 0xaa00aa00;
+
+ pattern_1[3][0] = 0x55005500;
+ pattern_1[3][1] = 0xaa00aa00;
+ pattern_1[3][2] = 0x55005500;
+ pattern_1[3][3] = 0xaa00aa00;
+ pattern_1[3][4] = 0x55005500;
+ pattern_1[3][5] = 0xaa00aa00;
+ pattern_1[3][6] = 0x55005500;
+ pattern_1[3][7] = 0xaa00aa00;
+ */
+ // /*
+ pattern_1[0][0] = 0x55aa5500;
+ pattern_1[0][1] = 0x55aa5500;
+ pattern_1[0][2] = 0x55aa5500;
+ pattern_1[0][3] = 0x55aa5500;
+ pattern_1[0][4] = 0xaa00ff00;
+ pattern_1[0][5] = 0xaa00ff00;
+ pattern_1[0][6] = 0xaa00ff00;
+ pattern_1[0][7] = 0xaa00ff00;
+
+ pattern_1[1][0] = 0x55005500;
+ pattern_1[1][1] = 0xaa00aa00;
+ pattern_1[1][2] = 0x55005500;
+ pattern_1[1][3] = 0xaa00aa00;
+ pattern_1[1][4] = 0x55005500;
+ pattern_1[1][5] = 0xaa00aa00;
+ pattern_1[1][6] = 0x55005500;
+ pattern_1[1][7] = 0xaa00aa00;
+
+ pattern_1[2][0] = 0x0001fe00;
+ pattern_1[2][1] = 0x0000ff00;
+ pattern_1[2][2] = 0x0000ff00;
+ pattern_1[2][3] = 0x0000ff00;
+ pattern_1[2][4] = 0x0002fd00;
+ pattern_1[2][5] = 0x0000ff00;
+ pattern_1[2][6] = 0x0000ff00;
+ pattern_1[2][7] = 0x0000ff00;
+
+ pattern_1[3][0] = 0x0004fb00;
+ pattern_1[3][1] = 0x0000ff00;
+ pattern_1[3][2] = 0x0000ff00;
+ pattern_1[3][3] = 0x0000ff00;
+ pattern_1[3][4] = 0x0008f700;
+ pattern_1[3][5] = 0x0000ff00;
+ pattern_1[3][6] = 0x0000ff00;
+ pattern_1[3][7] = 0x0000ff00;
+ //*/
+ /*
+ pattern_2[0][0] = 0x0001fe00;
+ pattern_2[0][1] = 0x0000ff00;
+ pattern_2[0][2] = 0x0000ff00;
+ pattern_2[0][3] = 0x0000ff00;
+ pattern_2[0][4] = 0x0002fd00;
+ pattern_2[0][5] = 0x0000ff00;
+ pattern_2[0][6] = 0x0000ff00;
+ pattern_2[0][7] = 0x0000ff00;
+
+ pattern_2[1][0] = 0x0004fb00;
+ pattern_2[1][1] = 0x0000ff00;
+ pattern_2[1][2] = 0x0000ff00;
+ pattern_2[1][3] = 0x0000ff00;
+ pattern_2[1][4] = 0x0008f700;
+ pattern_2[1][5] = 0x0000ff00;
+ pattern_2[1][6] = 0x0000ff00;
+ pattern_2[1][7] = 0x0000ff00;
+
+ pattern_2[2][0] = 0x0010ef00;
+ pattern_2[2][1] = 0x0000ff00;
+ pattern_2[2][2] = 0x0000ff00;
+ pattern_2[2][3] = 0x0000ff00;
+ pattern_2[2][4] = 0x0020df00;
+ pattern_2[2][5] = 0x0000ff00;
+ pattern_2[2][6] = 0x0000ff00;
+ pattern_2[2][7] = 0x0000ff00;
+
+ pattern_2[3][0] = 0x0040bf00;
+ pattern_2[3][1] = 0x0000ff00;
+ pattern_2[3][2] = 0x0000ff00;
+ pattern_2[3][3] = 0x0000ff00;
+ pattern_2[3][4] = 0x00807f00;
+ pattern_2[3][5] = 0x0000ff00;
+ pattern_2[3][6] = 0x0000ff00;
+ pattern_2[3][7] = 0x0000ff00;
+
+ pattern_3[0][0] = 0x00010000;
+ pattern_3[0][1] = 0x00000000;
+ pattern_3[0][2] = 0x00000000;
+ pattern_3[0][3] = 0x00000000;
+ pattern_3[0][4] = 0x00020000;
+ pattern_3[0][5] = 0x00000000;
+ pattern_3[0][6] = 0x00000000;
+ pattern_3[0][7] = 0x00000000;
+
+ pattern_3[1][0] = 0x00040000;
+ pattern_3[1][1] = 0x00000000;
+ pattern_3[1][2] = 0x00000000;
+ pattern_3[1][3] = 0x00000000;
+ pattern_3[1][4] = 0x00080000;
+ pattern_3[1][5] = 0x00000000;
+ pattern_3[1][6] = 0x00000000;
+ pattern_3[1][7] = 0x00000000;
+
+ pattern_3[2][0] = 0x00100000;
+ pattern_3[2][1] = 0x00000000;
+ pattern_3[2][2] = 0x00000000;
+ pattern_3[2][3] = 0x00000000;
+ pattern_3[2][4] = 0x00200000;
+ pattern_3[2][5] = 0x00000000;
+ pattern_3[2][6] = 0x00000000;
+ pattern_3[2][7] = 0x00000000;
+
+ pattern_3[3][0] = 0x00400000;
+ pattern_3[3][1] = 0x00000000;
+ pattern_3[3][2] = 0x00000000;
+ pattern_3[3][3] = 0x00000000;
+ pattern_3[3][4] = 0x00800000;
+ pattern_3[3][5] = 0x00000000;
+ pattern_3[3][6] = 0x00000000;
+ pattern_3[3][7] = 0x00000000;
+
+
+ pattern_4[0][0] = 0x51c8c049 ;
+ pattern_4[0][1] = 0x2d43592c ;
+ pattern_4[0][2] = 0x0777b50b ;
+ pattern_4[0][3] = 0x9cd2ebe5 ;
+ pattern_4[0][4] = 0xc04199d5 ;
+ pattern_4[0][5] = 0xdc968dc0 ;
+ pattern_4[0][6] = 0xb8ba8a33 ;
+ pattern_4[0][7] = 0x35e4327f ;
+
+ pattern_4[1][0] = 0xae37c049 ;
+ pattern_4[1][1] = 0xd2bc592c ;
+ pattern_4[1][2] = 0xf888b50b ;
+ pattern_4[1][3] = 0x632debe5 ;
+ pattern_4[1][4] = 0x3fbe99d5 ;
+ pattern_4[1][5] = 0x23698dc0 ;
+ pattern_4[1][6] = 0x47458a33 ;
+ pattern_4[1][7] = 0xca1b327f ;
+
+ pattern_4[2][0] = 0x51373f49 ;
+ pattern_4[2][1] = 0x2dbca62c ;
+ pattern_4[2][2] = 0x07884a0b ;
+ pattern_4[2][3] = 0x9c2d14e5 ;
+ pattern_4[2][4] = 0xc0be66d5 ;
+ pattern_4[2][5] = 0xdc6972c0 ;
+ pattern_4[2][6] = 0xb8457533 ;
+ pattern_4[2][7] = 0x351bcd7f ;
+
+
+ pattern_4[3][0] = 0x51c8c049 ;
+ pattern_4[3][1] = 0x2d43592c ;
+ pattern_4[3][2] = 0x0777b50b ;
+ pattern_4[3][3] = 0x9cd2ebe5 ;
+ pattern_4[3][4] = 0xc04199d5 ;
+ pattern_4[3][5] = 0xdc968dc0 ;
+ pattern_4[3][6] = 0xb8ba8a33 ;
+ pattern_4[3][7] = 0x35e4327f ;
+
+ pattern_5[0][0] = 0xaec9c149 ;
+ pattern_5[0][1] = 0xd243592c ;
+ pattern_5[0][2] = 0xf877b50b ;
+ pattern_5[0][3] = 0x63d2ebe5 ;
+ pattern_5[0][4] = 0x3f439bd5 ;
+ pattern_5[0][5] = 0x23968dc0 ;
+ pattern_5[0][6] = 0x47ba8a33 ;
+ pattern_5[0][7] = 0xcae4327f ;
+ pattern_5[1][0] = 0xaeccc449 ;
+ pattern_5[1][1] = 0xd243592c ;
+ pattern_5[1][2] = 0xf877b50b ;
+ pattern_5[1][3] = 0x63d2ebe5 ;
+ pattern_5[1][4] = 0x3f4991d5 ;
+ pattern_5[1][5] = 0x23968dc0 ;
+ pattern_5[1][6] = 0x47ba8a33 ;
+ pattern_5[1][7] = 0xcae4327f ;
+ pattern_5[2][0] = 0xaed8d049 ;
+ pattern_5[2][1] = 0xd243592c ;
+ pattern_5[2][2] = 0xf877b50b ;
+ pattern_5[2][3] = 0x63d2ebe5 ;
+ pattern_5[2][4] = 0x3f61b9d5 ;
+ pattern_5[2][5] = 0x23968dc0 ;
+ pattern_5[2][6] = 0x47ba8a33 ;
+ pattern_5[2][7] = 0xcae4327f ;
+ pattern_5[3][0] = 0xae888049 ;
+ pattern_5[3][1] = 0xd243592c ;
+ pattern_5[3][2] = 0xf877b50b ;
+ pattern_5[3][3] = 0x63d2ebe5 ;
+ pattern_5[3][4] = 0x3fc119d5 ;
+ pattern_5[3][5] = 0x23968dc0 ;
+ pattern_5[3][6] = 0x47ba8a33 ;
+ pattern_5[3][7] = 0xcae4327f ;
+
+ pattern_6[0][0] = 0xaec93f49 ;
+ pattern_6[0][1] = 0xd243a62c ;
+ pattern_6[0][2] = 0xf8774a0b ;
+ pattern_6[0][3] = 0x63d214e5 ;
+ pattern_6[0][4] = 0x3f4366d5 ;
+ pattern_6[0][5] = 0x239672c0 ;
+ pattern_6[0][6] = 0x47ba7533 ;
+ pattern_6[0][7] = 0xcae4cd7f ;
+ pattern_6[1][0] = 0xaecc3f49 ;
+ pattern_6[1][1] = 0xd243a62c ;
+ pattern_6[1][2] = 0xf8774a0b ;
+ pattern_6[1][3] = 0x63d214e5 ;
+ pattern_6[1][4] = 0x3f4966d5 ;
+ pattern_6[1][5] = 0x239672c0 ;
+ pattern_6[1][6] = 0x47ba7533 ;
+ pattern_6[1][7] = 0xcae4cd7f ;
+ pattern_6[2][0] = 0xaed83f49 ;
+ pattern_6[2][1] = 0xd243a62c ;
+ pattern_6[2][2] = 0xf8774a0b ;
+ pattern_6[2][3] = 0x63d214e5 ;
+ pattern_6[2][4] = 0x3f6166d5 ;
+ pattern_6[2][5] = 0x239672c0 ;
+ pattern_6[2][6] = 0x47ba7533 ;
+ pattern_6[2][7] = 0xcae4cd7f ;
+ pattern_6[3][0] = 0xae883f49 ;
+ pattern_6[3][1] = 0xd243a62c ;
+ pattern_6[3][2] = 0xf8774a0b ;
+ pattern_6[3][3] = 0x63d214e5 ;
+ pattern_6[3][4] = 0x3fc166d5 ;
+ pattern_6[3][5] = 0x239672c0 ;
+ pattern_6[3][6] = 0x47ba7533 ;
+ pattern_6[3][7] = 0xcae4cd7f ;
+ */
+ //*/
+ //*/
+ start_addr=0x10000000;
+ unsigned int test_size = 0x20;
+ unsigned int test_addr;
+ unsigned int temp_i=0;
+ unsigned int temp_k=0;
+ unsigned int pattern_o[8];
+ unsigned int pattern_d[8];
+ {
+ // if(lflag)
+ // loop = 888;
+
+ //if(old_pattern_flag==1)
+ {
+
+ printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
+
+ /*
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+ flush_dcache_range(start_addr,start_addr + test_size);
+
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ */
+ //if(pattern_flag1==1)
+ {
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ if ((pattern_o[temp_i]) != (des_pattern(temp_i,1,temp_k,temp_i)))
+ {error_count++;
+ // printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
+ printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,1,temp_k,temp_i),pattern_1[temp_k][temp_i]);
+ }
+
+
+ }
+ }
+ }
+
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),des_inv_pattern(temp_i,1,temp_k,temp_i))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",
+ pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_1[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+
+ }
+ }
+ }
+
+ }
+ }
+
+ printf("\Error count==0x%08x", error_count);
+ printf("\n \n");
+ }
+ if (error_count)
+ return 1;
+ else
+ return 0;
+}
+
+#endif
+
+static void ddr_write_pattern4_cross_talk_p(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+ //#define ddr_pattern_loop 32
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ // case 30:
+ *(p+i) = TDATA32F;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // case 22:
+ *(p+i) = 0;
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ // case 30:
+ *(p+i) = TDATA32A;
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ *(p+i) = TDATA325;
+
+
+ break;
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ *(p+i) =0xfe01fe01;
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ *(p+i) =0xfd02fd02;
+ break;
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ *(p+i) =0xfb04fb04;
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ *(p+i) =0xf708f708;
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ *(p+i) =0xef10ef10;
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ *(p+i) =0xdf20df20;
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ *(p+i) =0xbf40bf40;
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ *(p+i) =0x7f807f80;
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ *(p+i) =0x00000100;
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ *(p+i) =0x00000200;
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ *(p+i) =0x00000400;
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ *(p+i) =0x00000800;
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ *(p+i) =0x00001000;
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ *(p+i) =0x00002000;
+ break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ *(p+i) =0x00004000;
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ *(p+i) =0x00008000;
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_write_pattern4_cross_talk_p2(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+ //#define ddr_pattern_loop 32
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+
+ switch (i)
+ {
+
+ case 0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_3+3:
+ *(p+i) = 0xfe01fe01;
+ break;
+ case 4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_3+7:
+ *(p+i) = 0xfd02fd02;
+ break;
+
+ case 8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_3+11:
+ *(p+i) = 0xfb04fb04;
+ break;
+
+ case 12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_3+15:
+ *(p+i) = 0xf708f708;
+ break;
+
+ case 16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_3+19:
+ *(p+i) = 0xef10ef10;
+ break;
+
+ case 20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_3+23:
+ *(p+i) = 0xdf20df20;
+ break;
+
+ case 24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_3+27:
+ *(p+i) = 0xbf40bf40;
+ break;
+
+ case 28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_3+31:
+ *(p+i) = 0x7f807f80;
+ break;
+
+
+ default:
+
+ *(p+i) = 0xff00ff00;
+ break;
+
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+static void ddr_read_pattern4_cross_talk_p(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+
+ switch (i)
+ {
+
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ // case 30:
+ // *(p+i) = TDATA32F;
+ if (*(p+i) != TDATA32F)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32F);
+ break;
+ }
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // case 22:
+ // *(p+i) = 0;
+ if (*(p+i) != 0)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0);
+ break;}
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ // case 30:
+ // *(p+i) = TDATA32A;
+ if (*(p+i) != TDATA32A)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA32A);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ // *(p+i) = TDATA325;
+ if (*(p+i) != TDATA325)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), TDATA325);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ // *(p+i) =0xfe01fe01;
+ if (*(p+i) !=0xfe01fe01)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfe01fe01);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ // *(p+i) =0xfd02fd02;
+ if (*(p+i) != 0xfd02fd02)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfd02fd02);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ // *(p+i) =0xfb04fb04;
+ if (*(p+i) != 0xfb04fb04)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfb04fb04);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ // *(p+i) =0xf7b08f708;
+ if (*(p+i) != 0xf708f708)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xf708f708);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ // *(p+i) =0xef10ef10;
+ if (*(p+i) != 0xef10ef10)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xef10ef10);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ // *(p+i) =0xdf20df20;
+ if (*(p+i) != 0xdf20df20)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xdf20df20);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ // *(p+i) =0xbf40bf40;
+ if (*(p+i) != 0xbf40bf40)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xbf40bf40);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ // *(p+i) =0x7f807f80;
+ if (*(p+i) != 0x7f807f80)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x7f807f80);
+ break;
+
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != 0x00000100)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000100);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != 0x00000200)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000200);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != 0x00000400)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000400);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != 0x00000800)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00000800);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != 0x00001000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00001000);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != 0x00002000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00002000);
+
+ } break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != 0x00004000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00004000);
+ break;
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != 0x00008000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00008000);
+ break;
+ }
+ break;
+
+
+
+ }
+ }
+
+ if (m_len > 128*4)
+ {
+ m_len -= 128*4;
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+//*/
+static void ddr_read_pattern4_cross_talk_p2(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+
+ switch (i)
+ {
+ case 0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_3+3:
+ // *(p+i) = 0xfe01fe01;
+ if (*(p+i) != 0xfe01fe01)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfe01fe01);
+ break;
+ }
+ break;
+ case 4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_3+7:
+ // *(p+i) = 0xfd02fd02;
+ if (*(p+i) != 0xfd02fd02)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfd02fd02);
+ break;
+ }
+ break;
+
+ case 8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_3+11:
+ // *(p+i) = 0xfb04fb04;
+ if (*(p+i) != 0xfb04fb04)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xfb04fb04);
+ break;
+ }
+ break;
+
+ case 12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_3+15:
+ // *(p+i) = 0xf708f708;
+ if (*(p+i) != 0xf708f708)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xf708f708);
+ break;
+ }
+ break;
+
+ case 16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_3+19:
+ // *(p+i) = 0xef10ef10;
+ if (*(p+i) != 0xef10ef10)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xef10ef10);
+ break;
+ }
+ break;
+
+ case 20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_3+23:
+ // *(p+i) = 0xdf20df20;
+ if (*(p+i) != 0xdf20df20)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xdf20df20);
+ break;
+ }
+ break;
+
+ case 24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_3+27:
+ // *(p+i) = 0xbf40bf40;
+ if (*(p+i) != 0xbf40bf40)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xbf40bf40);
+ break;
+ }
+ break;
+ case 28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_3+31:
+ // *(p+i) = 0x7f807f80;
+ if (*(p+i) != 0x7f807f80)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x7f807f80);
+ break;
+ }
+ break;
+
+
+ default:
+
+ // *(p+i) = 0xff00ff00;
+ if (*(p+i) != 0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
+ break;
+ }
+ break;
+
+ break;
+
+
+ }
+ }
+
+ if (m_len > 128*4)
+ {
+ m_len -= 128*4;
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_write_pattern4_cross_talk_n(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+ //#define ddr_pattern_loop 32
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ // case 30:
+ *(p+i) = ~TDATA32F;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // case 22:
+ *(p+i) = ~0;
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ // case 30:
+ *(p+i) = ~TDATA32A;
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ *(p+i) =~TDATA325;
+
+
+ break;
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ *(p+i) =~0xfe01fe01;
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ *(p+i) =~0xfd02fd02;
+ break;
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ *(p+i) =~0xfb04fb04;
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ *(p+i) =~0xf708f708;
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ *(p+i) =~0xef10ef10;
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ *(p+i) =~0xdf20df20;
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ *(p+i) =~0xbf40bf40;
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ *(p+i) =~0x7f807f80;
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ *(p+i) =~0x00000100;
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ *(p+i) =~0x00000200;
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ *(p+i) =~0x00000400;
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ *(p+i) =~0x00000800;
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ *(p+i) =~0x00001000;
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ *(p+i) =~0x00002000;
+ break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ *(p+i) =~0x00004000;
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ *(p+i) =~0x00008000;
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+
+static void ddr_write_pattern4_cross_talk_n2(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+ //#define ddr_pattern_loop 32
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+
+ switch (i)
+ {
+ case 0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_3+3:
+ *(p+i) = ~0xfe01fe01;
+ break;
+ case 4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_3+7:
+ *(p+i) = ~0xfd02fd02;
+ break;
+
+ case 8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_3+11:
+ *(p+i) = ~0xfb04fb04;
+ break;
+
+ case 12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_3+15:
+ *(p+i) = ~0xf708f708;
+ break;
+
+ case 16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_3+19:
+ *(p+i) = ~0xef10ef10;
+ break;
+
+ case 20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_3+23:
+ *(p+i) = ~0xdf20df20;
+ break;
+
+ case 24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_3+27:
+ *(p+i) =~0xbf40bf40;
+ break;
+ case 28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_3+31:
+ *(p+i) = ~0x7f807f80;
+ break;
+
+
+ default:
+
+ *(p+i) = ~0xff00ff00;
+ break;
+
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_read_pattern4_cross_talk_n(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ // case 30:
+ // *(p+i) = TDATA32F;
+ if (*(p+i) !=~TDATA32F)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~TDATA32F);
+ break;
+ }
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // case 22:
+ // *(p+i) = 0;
+ if (*(p+i) !=~0)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ // case 30:
+ // *(p+i) = TDATA32A;
+ if (*(p+i) != ~TDATA32A)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i),~TDATA32A);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ // *(p+i) = TDATA325;
+ if (*(p+i) != ~TDATA325)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~TDATA325);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ // *(p+i) =0xfe01fe01;
+ if (*(p+i) !=~0xfe01fe01)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfe01fe01);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ // *(p+i) =0xfd02fd02;
+ if (*(p+i) != ~0xfd02fd02)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfd02fd02);
+ }
+ break;
+
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ // *(p+i) =0xfb04fb04;
+ if (*(p+i) != ~0xfb04fb04)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfb04fb04);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ // *(p+i) =0xf7b08f708;
+ if (*(p+i) != ~0xf708f708)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xf708f708);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ // *(p+i) =0xef10ef10;
+ if (*(p+i) != ~0xef10ef10)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xef10ef10);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ // *(p+i) =0xdf20df20;
+ if (*(p+i) != ~0xdf20df20)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xdf20df20);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ // *(p+i) =0xbf40bf40;
+ if (*(p+i) != ~0xbf40bf40)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xbf40bf40);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ // *(p+i) =0x7f807f80;
+ if (*(p+i) != ~0x7f807f80)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x7f807f80);
+ }
+ break;
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != ~0x00000100)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000100);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != ~0x00000200)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000200);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != ~0x00000400)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000400);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ // *(p+i) =0x00000100;
+ if (*(p+i) != ~0x00000800)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00000800);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != ~0x00001000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00001000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != ~0x00002000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00002000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != ~0x00004000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00004000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ // *(p+i) =0xfffffeff;
+ if (*(p+i) != ~0x00008000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00008000);
+ }
+ break;
+
+
+
+ }
+ }
+
+ if (m_len > 128*4)
+ {
+ m_len -= 128*4;
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+
+//*/
+static void ddr_read_pattern4_cross_talk_n2(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+
+ switch (i)
+ {
+ case 0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_3+3:
+ // *(p+i) = 0xfe01fe01;
+ if (*(p+i) != ~0xfe01fe01)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfe01fe01);
+ break;
+ }
+ break;
+ case 4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_3+7:
+ // *(p+i) = 0xfd02fd02;
+ if (*(p+i) != ~0xfd02fd02)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfd02fd02);
+ break;
+ }
+ break;
+
+ case 8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_3+11:
+ // *(p+i) = 0xfb04fb04;
+ if (*(p+i) != ~0xfb04fb04)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xfb04fb04);
+ break;
+ }
+ break;
+
+ case 12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_3+15:
+ // *(p+i) = 0xf708f708;
+ if (*(p+i) != ~0xf708f708)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xf708f708);
+ break;
+ }
+ break;
+
+ case 16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_3+19:
+ // *(p+i) = 0xef10ef10;
+ if (*(p+i) != ~0xef10ef10)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xef10ef10);
+ break;
+ }
+ break;
+
+ case 20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_3+23:
+ // *(p+i) = 0xdf20df20;
+ if (*(p+i) != ~0xdf20df20)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xdf20df20);
+ break;
+ }
+ break;
+
+ case 24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_3+27:
+ // *(p+i) = 0xbf40bf40;
+ if (*(p+i) != ~0xbf40bf40)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xbf40bf40);
+ break;
+ }
+ break;
+ case 28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_3+31:
+ // *(p+i) = 0x7f807f80;
+ if (*(p+i) != ~0x7f807f80)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x7f807f80);
+ break;
+ }
+ break;
+
+
+ default:
+
+ // *(p+i) = 0xff00ff00;
+ if (*(p+i) != ~0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
+ break;
+ }
+ break;
+
+ break;
+
+
+ }
+ }
+
+ if (m_len > 128*4)
+ {
+ m_len -= 128*4;
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_write_pattern4_no_cross_talk(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+ //#define ddr_pattern_loop 32
+ p = ( unsigned int *)buff;
+
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ *(p+i) = 0xff00ff00;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ *(p+i) = 0xffff0000;
+ break;
+
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ *(p+i) = 0xff000000;
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ *(p+i) = 0xff00ffff;
+ break;
+
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ *(p+i) = 0xff00ffff;
+ break;
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ *(p+i) = 0xff0000ff;
+ break;
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ *(p+i) = 0xffff0000;
+ break;
+
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ *(p+i) = 0x00ff00ff;
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ *(p+i) =~0xff00ff00;
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ *(p+i) =~0xffff0000;
+ break;
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ *(p+i) =~0xff000000;
+ break;
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ *(p+i) =~0xff00ffff;
+ break;
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ *(p+i) =~0xff00ffff;
+ break;
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ *(p+i) =~0xff00ffff;
+ break;
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ *(p+i) =~0xffff0000;
+ break;
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ *(p+i) =~0x00ff00ff;
+ break;
+
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ *(p+i) =0x00ff0000;
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ *(p+i) =0xff000000;
+ break;
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ *(p+i) =0x0000ffff;
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ *(p+i) =0x000000ff;
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ *(p+i) =0x00ff00ff;
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ *(p+i) =0xff00ff00;
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ *(p+i) =0xff00ffff;
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ *(p+i) =0xff00ff00;
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ *(p+i) =~0x00ff0000;
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ *(p+i) =~0xff000000;
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ *(p+i) =~0x0000ffff;
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ *(p+i) =~0x000000ff;
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ *(p+i) =~0x00ff00ff;
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ *(p+i) =~0xff00ff00;
+ break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ *(p+i) =~0xff00ffff;
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ *(p+i) =~0xff00ff00;
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+static void ddr_read_pattern4_no_cross_talk(void *buff, unsigned int m_length)
+{
+ unsigned int *p;
+ // unsigned int i, j, n;
+ unsigned int i, n;
+ unsigned int m_len = m_length;
+
+ p = ( unsigned int *)buff;
+ while (m_len)
+ {
+ // for(j=0;j<32;j++)
+ {
+ if (m_len >= 128*4)
+ n = 32*4;
+ else
+ n = m_len>>2;
+
+ for (i = 0; i < n; i++)
+ {
+#ifdef DDR_PREFETCH_CACHE
+ ddr_pld_cache(p) ;
+#endif
+ if ((error_outof_count_flag) && (error_count))
+ {
+ printf("Error data out of count");
+ m_len=0;
+ break;
+ }
+ switch (i)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ // if(*(p+i) !=~TDATA32F)
+
+ if ( *(p+i) != 0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
+ }
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ if ( *(p+i) != 0xffff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xffff0000);
+ }
+ break;
+
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ // *(p+i) = 0xff000000;
+ if ( *(p+i) != 0xff000000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff000000);
+ }
+ break;
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ // *(p+i) = 0xff00ffff;
+ if ( *(p+i) != 0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
+ }
+ break;
+
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ // *(p+i) = 0xff00ffff;
+ if ( *(p+i) != 0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
+ }
+ break;
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ // *(p+i) = 0xff0000ff;
+ if ( *(p+i) != 0xff0000ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff0000ff);
+ }
+ break;
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ // *(p+i) = 0xffff0000;
+ if ( *(p+i) != 0xffff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xffff0000);
+ }
+ break;
+
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ // *(p+i) = 0x00ff00ff;
+ if ( *(p+i) != 0x00ff00ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff00ff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+0:
+ case DDR_PATTERN_LOOP_1+1:
+ case DDR_PATTERN_LOOP_1+2:
+ case DDR_PATTERN_LOOP_1+3:
+ // *(p+i) =~0xff00ff00;
+ if ( *(p+i) != ~0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+4:
+ case DDR_PATTERN_LOOP_1+5:
+ case DDR_PATTERN_LOOP_1+6:
+ case DDR_PATTERN_LOOP_1+7:
+ // *(p+i) =~0xffff0000;
+ if ( *(p+i) != ~0xffff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xffff0000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+8:
+ case DDR_PATTERN_LOOP_1+9:
+ case DDR_PATTERN_LOOP_1+10:
+ case DDR_PATTERN_LOOP_1+11:
+ // *(p+i) =~0xff000000;
+ if ( *(p+i) != ~0xff000000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff000000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+12:
+ case DDR_PATTERN_LOOP_1+13:
+ case DDR_PATTERN_LOOP_1+14:
+ case DDR_PATTERN_LOOP_1+15:
+ // *(p+i) =~0xff00ffff;
+ if ( *(p+i) != ~0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+16:
+ case DDR_PATTERN_LOOP_1+17:
+ case DDR_PATTERN_LOOP_1+18:
+ case DDR_PATTERN_LOOP_1+19:
+ // *(p+i) =~0xff00ffff;
+ if ( *(p+i) != ~0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+20:
+ case DDR_PATTERN_LOOP_1+21:
+ case DDR_PATTERN_LOOP_1+22:
+ case DDR_PATTERN_LOOP_1+23:
+ // *(p+i) =~0xff00ffff;
+ if ( *(p+i) != ~0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+24:
+ case DDR_PATTERN_LOOP_1+25:
+ case DDR_PATTERN_LOOP_1+26:
+ case DDR_PATTERN_LOOP_1+27:
+ // *(p+i) =~0xffff0000;
+ if ( *(p+i) != ~0xffff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xffff0000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_1+28:
+ case DDR_PATTERN_LOOP_1+29:
+ case DDR_PATTERN_LOOP_1+30:
+ case DDR_PATTERN_LOOP_1+31:
+ // *(p+i) =~0x00ff00ff;
+ if ( *(p+i) != ~0x00ff00ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff00ff);
+ }
+ break;
+
+ case DDR_PATTERN_LOOP_2+0:
+ case DDR_PATTERN_LOOP_2+1:
+ case DDR_PATTERN_LOOP_2+2:
+ case DDR_PATTERN_LOOP_2+3:
+ // *(p+i) =0x00ff0000;
+ if ( *(p+i) != 0x00ff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff0000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+4:
+ case DDR_PATTERN_LOOP_2+5:
+ case DDR_PATTERN_LOOP_2+6:
+ case DDR_PATTERN_LOOP_2+7:
+ // *(p+i) =0xff000000;
+ if ( *(p+i) != 0xff000000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff000000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+8:
+ case DDR_PATTERN_LOOP_2+9:
+ case DDR_PATTERN_LOOP_2+10:
+ case DDR_PATTERN_LOOP_2+11:
+ // *(p+i) =0x0000ffff;
+ if ( *(p+i) != 0x0000ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x0000ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+12:
+ case DDR_PATTERN_LOOP_2+13:
+ case DDR_PATTERN_LOOP_2+14:
+ case DDR_PATTERN_LOOP_2+15:
+ // *(p+i) =0x000000ff;
+ if ( *(p+i) != 0x000000ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x000000ff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+16:
+ case DDR_PATTERN_LOOP_2+17:
+ case DDR_PATTERN_LOOP_2+18:
+ case DDR_PATTERN_LOOP_2+19:
+ // *(p+i) =0x00ff00ff;
+ if ( *(p+i) != 0x00ff00ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0x00ff00ff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+20:
+ case DDR_PATTERN_LOOP_2+21:
+ case DDR_PATTERN_LOOP_2+22:
+ case DDR_PATTERN_LOOP_2+23:
+ // *(p+i) =0xff00ff00;
+ if ( *(p+i) != 0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+24:
+ case DDR_PATTERN_LOOP_2+25:
+ case DDR_PATTERN_LOOP_2+26:
+ case DDR_PATTERN_LOOP_2+27:
+ // *(p+i) =0xff00ffff;
+ if ( *(p+i) != 0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_2+28:
+ case DDR_PATTERN_LOOP_2+29:
+ case DDR_PATTERN_LOOP_2+30:
+ case DDR_PATTERN_LOOP_2+31:
+ // *(p+i) =0xff00ff00;
+ if ( *(p+i) != 0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), 0xff00ff00);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+0:
+ case DDR_PATTERN_LOOP_3+1:
+ case DDR_PATTERN_LOOP_3+2:
+ case DDR_PATTERN_LOOP_3+3:
+ // *(p+i) =~0x00ff0000;
+ if ( *(p+i) != ~0x00ff0000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff0000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+4:
+ case DDR_PATTERN_LOOP_3+5:
+ case DDR_PATTERN_LOOP_3+6:
+ case DDR_PATTERN_LOOP_3+7:
+ // *(p+i) =~0xff000000;
+ if ( *(p+i) != ~0xff000000)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff000000);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+8:
+ case DDR_PATTERN_LOOP_3+9:
+ case DDR_PATTERN_LOOP_3+10:
+ case DDR_PATTERN_LOOP_3+11:
+ // *(p+i) =~0x0000ffff;
+ if ( *(p+i) != ~0x0000ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x0000ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+12:
+ case DDR_PATTERN_LOOP_3+13:
+ case DDR_PATTERN_LOOP_3+14:
+ case DDR_PATTERN_LOOP_3+15:
+ // *(p+i) =~0x000000ff;
+ if ( *(p+i) != ~0x000000ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x000000ff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+16:
+ case DDR_PATTERN_LOOP_3+17:
+ case DDR_PATTERN_LOOP_3+18:
+ case DDR_PATTERN_LOOP_3+19:
+ // *(p+i) =~0x00ff00ff;
+ if ( *(p+i) != ~0x00ff00ff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0x00ff00ff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+20:
+ case DDR_PATTERN_LOOP_3+21:
+ case DDR_PATTERN_LOOP_3+22:
+ case DDR_PATTERN_LOOP_3+23:
+ // *(p+i) =~0xff00ff00;
+ if ( *(p+i) != ~0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+24:
+ case DDR_PATTERN_LOOP_3+25:
+ case DDR_PATTERN_LOOP_3+26:
+ case DDR_PATTERN_LOOP_3+27:
+ // *(p+i) =~0xff00ffff;
+ if ( *(p+i) != ~0xff00ffff)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ffff);
+ }
+ break;
+ case DDR_PATTERN_LOOP_3+28:
+ case DDR_PATTERN_LOOP_3+29:
+ case DDR_PATTERN_LOOP_3+30:
+ case DDR_PATTERN_LOOP_3+31:
+ // *(p+i) =~0xff00ff00;
+ if ( *(p+i) != ~0xff00ff00)
+ {error_count++;
+ printf("Error data [0x%08x] at offset 0x%08x[0x%08x]\n", *(p+i), p_convter_int(p + i), ~0xff00ff00);
+ }
+ break;
+
+
+ }
+ }
+
+ if (m_len >( 128*4))
+ {
+ m_len -=( 128*4);
+ p += 32*4;
+ }
+ else
+ {
+ p += (m_len>>2);
+ m_len = 0;
+ break;
+ }
+ }
+ }
+}
+
+
+
+int do_ddr_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ unsigned int loop = 1;
+ unsigned int lflag = 0;
+ unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int test_size = DDR_TEST_SIZE;
+ unsigned int simple_pattern_flag = 1;
+ unsigned int cross_talk_pattern_flag = 1;
+ unsigned int old_pattern_flag = 1;
+
+ unsigned int print_flag = 1;
+ // copy_test_flag = 0;
+ print_flag = 1;
+ error_outof_count_flag =0;
+ error_count =0;
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ if (!argc)
+ goto DDR_TEST_START;
+ if (argc > 1) {
+ if (strcmp(argv[1], "l") == 0) {
+ lflag = 1;
+ }
+ else if (strcmp(argv[1], "h") == 0){
+ goto usage;
+ }
+ else{
+ loop = simple_strtoull_ddr(argv[1], &endp, 10);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+ }
+ }
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==1) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ // if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+ loop = 1;
+
+ }
+ if (argc > 2) {
+ start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+
+ }
+ if (argc > 3) {
+ test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ test_size = DDR_TEST_SIZE;
+
+ }
+ if (test_size<0x1000)
+ test_size = DDR_TEST_SIZE;
+
+ old_pattern_flag = 1;
+ simple_pattern_flag = 1;
+ cross_talk_pattern_flag = 1;
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==2) {
+ if ( (strcmp(argv[1], "s") == 0))
+ {
+ simple_pattern_flag = 1;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 0;
+ }
+ else if ((strcmp(argv[1], "c") == 0))
+ {
+ simple_pattern_flag = 0;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 1;
+ }
+ else if ( (strcmp(argv[1], "e") == 0))
+ {
+ error_outof_count_flag=1;
+ }
+ }
+ if (argc >2) {
+ if ( (strcmp(argv[1], "n") == 0) || (strcmp(argv[2], "n") == 0))
+ {
+ print_flag = 0;
+ }
+ if ( (strcmp(argv[1], "p") == 0) || (strcmp(argv[2], "p") == 0))
+ {
+ copy_test_flag = 1;
+ }
+ if ( (strcmp(argv[1], "s") == 0) || (strcmp(argv[2], "s") == 0))
+ {
+ simple_pattern_flag = 1;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 0;
+ }
+ else if ((strcmp(argv[1], "c") == 0)||(strcmp(argv[2], "c") == 0))
+ {
+ simple_pattern_flag = 0;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 1;
+ }
+ else if ( (strcmp(argv[1], "e") == 0)||(strcmp(argv[2], "e") == 0))
+ {
+ error_outof_count_flag=1;
+ }
+ }
+ //printf("\nLINE1== 0x%08x\n", __LINE__);
+ if (argc > 3) {
+ if ( (strcmp(argv[1], "p") == 0) || (strcmp(argv[2], "p") == 0) || (strcmp(argv[3], "p") == 0))
+ {
+ copy_test_flag = 1;
+ }
+ if ( (strcmp(argv[1], "n") == 0) || (strcmp(argv[2], "n") == 0) || (strcmp(argv[3], "n") == 0))
+ {
+ print_flag = 0;
+ }
+ if ( (strcmp(argv[1], "s") == 0) || (strcmp(argv[2], "s") == 0) || (strcmp(argv[3], "s") == 0))
+ {
+ simple_pattern_flag = 1;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 0;
+ }
+ if ((strcmp(argv[1], "c") == 0) || (strcmp(argv[2], "c") == 0) || (strcmp(argv[3], "c") == 0))
+ {
+ simple_pattern_flag = 0;
+ old_pattern_flag=0;
+ cross_talk_pattern_flag = 1;
+ }
+ if ( (strcmp(argv[1], "e") == 0) || (strcmp(argv[2], "e") == 0) || (strcmp(argv[3], "e") == 0))
+ {
+ error_outof_count_flag=1;
+ }
+ }
+
+ // printf("\nLINE2== 0x%08x\n", __LINE__);
+ // printf("\nLINE3== 0x%08x\n", __LINE__);
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+
+DDR_TEST_START:
+
+ ///*
+ do {
+ if (lflag)
+ loop = 888;
+
+ if (old_pattern_flag == 1)
+ {
+ {
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+ if (print_flag)
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
+ ddr_write((void *)(int_convter_p(start_addr)), test_size);
+ // flush_dcache_range(start_addr,start_addr + test_size);
+ if (print_flag) {
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ }
+ ddr_read((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");}
+ ddr_read((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\nEnd 2nd read. ");
+ printf("\nStart 3rd reading... ");}
+ ddr_read((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag)
+ printf("\nEnd 3rd read. \n");
+
+ if (copy_test_flag)
+ {if(print_flag)
+ printf("\n copy_test_flag = 1,start copy test. \n");
+ ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
+ ddr_read((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ ddr_read((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ }
+
+ }
+ {
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+ if (print_flag) {
+ printf("\nStart *4 normal pattern. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
+ }
+ ddr_write4((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");}
+ ddr_read4((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");}
+ ddr_read4((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\nEnd 2nd read. ");
+ printf("\nStart 3rd reading... ");}
+ ddr_read4((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag)
+ printf("\rEnd 3rd read. \n");
+ if (copy_test_flag)
+ {
+
+ ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
+ ddr_read4((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ ddr_read4((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ }
+
+
+ }
+ }
+
+ if (simple_pattern_flag == 1)
+ {
+ if (print_flag) {
+ printf("\nStart *4 no cross talk pattern. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
+ }
+ ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");}
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");}
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 2nd read. ");
+ printf("\rStart 3rd reading... ");}
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag)
+ printf("\rEnd 3rd read. \n");
+
+ if (copy_test_flag)
+ {
+ ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ }
+
+ }
+
+ if (cross_talk_pattern_flag == 1)
+ {if(print_flag){
+ printf("\nStart *4 cross talk pattern p. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);
+ }
+ ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");}
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");}
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 2nd read. ");
+ printf("\rStart 3rd reading... ");}
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
+ ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");}
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");}
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 2nd read. ");
+ printf("\rStart 3rd reading... ");}
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 3rd read. \n");
+
+ ///*
+ printf("\nStart *4 cross talk pattern p2. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
+ ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");}
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");}
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 2nd read. ");
+ printf("\rStart 3rd reading... ");}
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n2. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + test_size);}
+ ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");}
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");}
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag) {
+ printf("\rEnd 2nd read. ");
+ printf("\rStart 3rd reading... ");}
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), test_size);
+ if (print_flag)
+ printf("\rEnd 3rd read. \n");
+
+ if (copy_test_flag)
+ {
+ ddr_test_copy((void *)(int_convter_p(start_addr+test_size/2)),(void *)(int_convter_p(start_addr)), test_size/2 );
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+test_size/2)), test_size/2);
+ }
+ // */
+
+ }
+
+ if (print_flag)
+ printf("\nError count==0x%08x", error_count);
+
+ }while(--loop);
+ //*/
+
+ printf("\rEnd ddr test. \n");
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+}
+
+U_BOOT_CMD(
+ ddrtest, 5, 1, do_ddr_test,
+ "DDR test function",
+ "ddrtest [LOOP] [ADDR].Default address is 0x8d000000\n"
+);
+
+int do_ddr_special_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ unsigned int loop = 1;
+ unsigned int lflag = 0;
+ unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int test_addr = DDR_TEST_START_ADDR;
+ unsigned int test_size = DDR_TEST_SIZE;
+ unsigned int write_times = 1;
+ unsigned int read_times = 3;
+ // unsigned int old_pattern_flag = 1;
+
+ unsigned int print_flag = 1;
+ // copy_test_flag = 0;
+ print_flag = 1;
+ error_outof_count_flag =0;
+ error_count =0;
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ if (strcmp(argv[1], "l") == 0) {
+ lflag = 1;
+ }
+ else if (strcmp(argv[1], "h") == 0){
+ goto usage;
+ }
+ else{
+ loop = simple_strtoull_ddr(argv[1], &endp, 10);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+ }
+
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==1) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ // if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+ loop = 1;
+
+ }
+ if (argc > 2) {
+ start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+
+ }
+ if (argc > 3) {
+ test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ test_size = DDR_TEST_SIZE;
+
+ }
+ if (test_size<0x1000)
+ test_size = DDR_TEST_SIZE;
+ if (argc > 4) {
+ write_times = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ write_times = 0;
+
+ }
+ if (argc > 5) {
+ read_times = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ read_times = 0;
+
+ }
+ unsigned int base_pattern = 1;
+ unsigned int inc_flag = 1;
+ if (argc > 6) {
+ base_pattern = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ base_pattern = 0;
+
+ }
+ if (argc > 7) {
+ inc_flag = simple_strtoull_ddr(argv[7], &endp, 16);
+ if (*argv[7] == 0 || *endp != 0)
+ inc_flag = 0;
+
+ }
+
+
+ //printf("\nLINE== 0x%08x\n", __LINE__);
+
+ //printf("\nLINE1== 0x%08x\n", __LINE__);
+
+
+ // printf("\nLINE2== 0x%08x\n", __LINE__);
+ // printf("\nLINE3== 0x%08x\n", __LINE__);
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+
+
+ unsigned int count = 1;
+ unsigned int test_val = 1;
+
+ ///*
+ do {
+ if (lflag)
+ loop = 888;
+
+ if (1)
+ {
+
+ for (i=0;i<write_times;)
+ {i++;
+
+ printf("\nwrite_times==0x%08x \n",((unsigned int)i));
+ // serial_put_hex(((unsigned long)i),32);
+ // count=count_max;
+ // reg=reg_base;
+ // val=val_base;
+ test_addr=start_addr;
+ test_val=base_pattern;
+ count=(test_size>>2);
+ do
+ {
+ writel(test_val,(unsigned long)test_addr);
+ test_addr=test_addr+4;
+ if (inc_flag)
+ test_val=test_val+1;
+
+ }
+ while (count--) ;
+ }
+
+ for (i=0;i<read_times;)
+ {i++;
+ printf("\nread_times==0x%08x \n",((unsigned int)i));
+ //serial_puts("\nread_times= ");
+ // serial_put_hex(((unsigned long)i),32);
+ test_addr=start_addr;
+ test_val=base_pattern;
+ count=(test_size>>2);
+
+ do
+ {
+
+ //writel(val,(unsigned long)reg);
+ if (test_val != (readl((unsigned long)test_addr))) {
+
+ printf("\nadd==0x%08x,pattern==0x%08x,read==0x%08x \n",((unsigned int)test_addr),((unsigned int)test_val),(readl((unsigned int)test_addr)));
+ }
+ test_addr=test_addr+4;
+ if (inc_flag)
+ test_val=test_val+1;
+ }
+ while (count--) ;
+ }
+ }
+
+
+
+ if (print_flag)
+ printf("\nError count==0x%08x", error_count);
+
+ }while(--loop);
+ //*/
+
+ printf("\rEnd ddr test. \n");
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_spec_test, 8, 1, do_ddr_special_test,
+ "DDR test function",
+ "ddrtest [LOOP] [ADDR] [size] [write_times] [read times] [pattern] [inc].ddr_spec_test 1 0x1080000 0x200000 1 3 1 1 \n"
+);
+/*
+int do_mw_mask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+char *endp;
+unsigned int reg_add=0;
+unsigned int wr_reg_value=0;
+unsigned int rd_reg_value=0;
+unsigned int wr_reg_and_mask_1=0xffffffff;
+if (argc == 1)
+{ printf("\nplease read help\n");
+printf("\nexample only change 0xc8836800 0x8c010226 0x000fffff bit20-bit31,no change pll od oc \n");
+printf("\nmwm 0xc8836800 0x8c010226 0x000fffff\n");
+}
+else{
+if (argc >= 2)
+{
+reg_add = simple_strtoull_ddr(argv[1], &endp, 10);
+}
+if (argc >= 3)
+{
+wr_reg_value = simple_strtoull_ddr(argv[2], &endp, 10);
+}
+if (argc >= 4)
+{
+wr_reg_and_mask_1 = simple_strtoull_ddr(argv[3], &endp, 10);
+
+}
+rd_reg_value= (rd_reg(reg_add));
+wr_reg(reg_add,(rd_reg_value&wr_reg_and_mask_1)|(wr_reg_value&(~wr_reg_and_mask_1)) );
+
+printf("\nmodify ok read==0x%08x\n",(rd_reg(reg_add)));
+
+}
+return 1;
+}
+U_BOOT_CMD(
+ mwm, 30, 1, do_mw_mask,
+ "mw mask function",
+ "mw 0xc8836800 0x8c82022c 0x000fffff\n"
+);
+*/
+
+///*
+
+int ddr_test_s_cross_talk_pattern(int ddr_test_size)
+{
+#define TEST_OFFSET 0//0X40000000
+ // unsigned int start_addr = DDR_TEST_START_ADDR+TEST_OFFSET;
+ unsigned int start_addr=test_start_addr;
+
+ error_outof_count_flag=1;
+
+ error_count=0;
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ training_pattern_flag=0;
+#endif
+ ///*
+ if (training_pattern_flag)
+ {
+#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+ ddr_test_gx_training_pattern(ddr_test_size);
+#endif
+ if (error_count)
+ return 1;
+ else
+ return 0;
+ }
+ else
+ {
+#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+ ddr_test_gx_training_pattern(ddr_test_size);
+#endif
+
+ }
+ // */
+ /*
+ ddr_test_gx_cross_talk_pattern( ddr_test_size);
+ if (error_count)
+ return 1;
+ else
+ return 0;
+ */
+ {
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+ if (error_count)
+ return error_count;
+ printf("\nStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+
+ if (error_count)
+ return error_count;
+ printf("\nStart *4 no cross talk pattern. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ }
+
+ if (error_count)
+ return error_count;
+ //if(cross_talk_pattern_flag==1)
+ {
+ printf("\nStart *4 cross talk pattern p. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+ if (error_count)
+ return error_count;
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+ }
+ if (error_count)
+ return error_count;
+ {
+ printf("\nStart *4 cross talk pattern p2. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+ if (error_count)
+ return error_count;
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+ if (copy_test_flag)
+ {
+ if (error_count)
+ return error_count;
+ printf("\n start copy test ... ");
+ ddr_test_copy((void *)(int_convter_p(start_addr+ddr_test_size/2)),(void *)(int_convter_p(start_addr)), ddr_test_size/2 );
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
+ }
+ }
+
+ if (error_count)
+ return 1;
+ else
+ return 0;
+ }
+
+
+
+int ddr_test_s_cross_talk_pattern_quick_retrun(int ddr_test_size)
+{
+ error_outof_count_flag =1;
+ #define TEST_OFFSET 0//0X40000000
+ // unsigned int start_addr = DDR_TEST_START_ADDR+TEST_OFFSET;
+ unsigned int start_addr=test_start_addr;
+
+ error_outof_count_flag=1;
+
+ error_count=0;
+
+ #if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ training_pattern_flag=0;
+ #endif
+ ///*
+ if (training_pattern_flag)
+ {
+ #if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+ ddr_test_gx_training_pattern(ddr_test_size);
+ #endif
+ if (error_count)
+ return 1;
+ else
+ return 0;
+ }
+ else
+ {
+ #if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+ ddr_test_gx_training_pattern(ddr_test_size);
+ #endif
+ }
+ // */
+ /*
+ ddr_test_gx_cross_talk_pattern( ddr_test_size);
+ if (error_count)
+ return 1;
+ else
+ return 0;
+ */
+
+ {
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+
+ printf("\nStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+
+ printf("\nStart *4 no cross talk pattern. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ }
+ //if(cross_talk_pattern_flag==1)
+ {
+ printf("\nStart *4 cross talk pattern p. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+
+ }
+
+ {
+ printf("\nStart *4 cross talk pattern p2. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)start_addr, ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+ if (copy_test_flag)
+ {
+ printf("\n start copy test ... ");
+ ddr_test_copy((void *)(int_convter_p(start_addr+ddr_test_size/2)),(void *)(int_convter_p(start_addr)), ddr_test_size/2 );
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr+ddr_test_size/2)), ddr_test_size/2);
+ }
+
+ }
+
+ if (error_count)
+ return 1;
+ else
+ return 0;
+}
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+int do_ddr_test_dqs_window_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test ddr dqs window step function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ unsigned int temp_test_error= 0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_lane_step=0;
+ unsigned int testing_lane=0;
+ unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int test_min_max_flag=0;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+
+ unsigned int dq_lcd_bdl_reg_org=0;
+ unsigned int dq_lcd_bdl_reg_left=0;
+ unsigned int dq_lcd_bdl_reg_right=0;
+
+ unsigned int dq_lcd_bdl_reg_left_min=0;
+ unsigned int dq_lcd_bdl_reg_right_min=0;
+
+ unsigned int dq_lcd_bdl_temp_reg_value=0;
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+
+ unsigned int ddr_test_size= DDR_TEST_SIZE;//DDR_CORSS_TALK_TEST_SIZE;
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_TEST_SIZE;
+ }
+ }
+ if (argc >4) {
+ test_lane_step = 0;
+ test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_lane_step = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_lane_step = 0;
+ }
+ }
+ if (test_lane_step >7)
+ test_lane_step = 0;
+ unsigned int test_loop=1;
+ if (argc >5) {
+ test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max_flag = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ unsigned int test_temp_value_use_sticky_register=0;
+ if (argc >6) {
+ test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ test_temp_value_use_sticky_register = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
+ printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
+ printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
+
+ const char *temp_s;
+ char *env_lcdlr_temp_count;
+ char *buf;
+ buf="";
+ unsigned int lcdlr_temp_count=0;
+ env_lcdlr_temp_count="lcdlr_temp_count";
+
+ if(test_temp_value_use_sticky_register)
+ {
+ lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ else
+ {
+ lcdlr_temp_count=0;
+ }
+ }
+
+ //if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ //if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+for (test_times=0;(test_times<test_loop);(test_times++))
+{
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+
+ {
+ printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ if( channel_b_en)
+ {
+ printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
+ writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
+ printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
+ }
+ if (test_lane_step>8)
+ test_lane_step=0;
+ printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
+
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_lane_step>>1);
+ test_lane_step_rdqs_flag=test_lane_step%2;
+ testing_lane=(test_lane_step>>1);
+
+ dq_lcd_bdl_temp_reg_value=readl(reg_add);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
+
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ if (test_lane_step_rdqs_flag)
+ {
+ dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0xff00)>>8);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+ else
+ {
+ dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0x00ff)>>0);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+ #endif
+
+ if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
+ {
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value--;
+
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ }
+
+ printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ if (!test_lane_step_rdqs_flag)
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+ #else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ #endif
+ }
+ else
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
+ #endif
+ }
+ printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\n left edge detect \n");
+ printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+ dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
+ if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
+ }
+ }
+ else
+ {
+ printf("\n left edge skip \n");
+ }
+
+ if (!test_lane_step_rdqs_flag)
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+ #else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+ #endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ }
+ else
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
+ #else
+ #endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
+
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+
+
+ if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
+ {
+ while (dq_lcd_bdl_temp_reg_value<DQLCDLR_MAX)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+
+
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ if (!test_lane_step_rdqs_flag)
+ {
+ //writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+ #else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ #endif
+ }
+ else
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
+ #endif
+ // writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ // writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+ printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect \n");
+ printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+ dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
+ if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
+ }
+ }
+
+ if (!test_lane_step_rdqs_flag)
+ {
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+ #else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+ #endif
+ }
+ else
+ {
+ #if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
+ #endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+ printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ }
+ }
+
+}
+
+ dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
+ if (!test_lane_step_rdqs_flag)
+ {
+ if(channel_a_en)
+ {
+ dq_lcd_bdl_value_wdq_org_a[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_wdq_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_wdq_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ if (channel_b_en)
+ {
+ dq_lcd_bdl_value_wdq_org_b[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_wdq_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_wdq_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ }
+ else
+ {
+ if (channel_a_en) {
+ dq_lcd_bdl_value_rdqs_org_a[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_rdqs_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_rdqs_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ if (channel_b_en) {
+ dq_lcd_bdl_value_rdqs_org_b[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_rdqs_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_rdqs_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ }
+
+ return dq_lcd_bdl_temp_reg_value;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+U_BOOT_CMD(
+ ddr_tune_dqs_step, 7, 1, do_ddr_test_dqs_window_step,
+ "ddr_tune_dqs_step function",
+ "ddr_tune_dqs_step a 0 0x80000 3 or ddr_tune_dqs_step b 0 0x80000 5 \n dcache off ? \n"
+);
+#else
+
+int do_ddr_test_fine_tune_dqs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Tune ddr dqs function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ unsigned int temp_count_i = 1;
+ unsigned int temp_count_j= 1;
+ unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+#define DATX8_DQ_LCD_BDL_REG_WIDTH 12
+
+#define DATX8_DQ_LANE_WIDTH 4
+#define CHANNEL_CHANNEL_WIDTH 2
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+
+#define DATX8_DQ_LANE_LANE00 0
+#define DATX8_DQ_LANE_LANE01 1
+#define DATX8_DQ_LANE_LANE02 2
+#define DATX8_DQ_LANE_LANE03 3
+
+#define DATX8_DQ_BDLR0 0
+#define DATX8_DQ_BDLR1 1
+#define DATX8_DQ_BDLR2 2
+#define DATX8_DQ_BDLR3 3
+#define DATX8_DQ_BDLR4 4
+#define DATX8_DQ_BDLR5 5
+#define DATX8_DQ_BDLR6 6
+#define DATX8_DQ_DXNLCDLR0 7
+#define DATX8_DQ_DXNLCDLR1 8
+#define DATX8_DQ_DXNLCDLR2 9
+#define DATX8_DQ_DXNMDLR 10
+#define DATX8_DQ_DXNGTR 11
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+#define DQ_LCD_BDL_REG_NUM_PER_CHANNEL DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
+#define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
+
+ unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
+
+ unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
+
+ unsigned int dq_lcd_bdl_temp_reg_value;
+ unsigned int dq_lcd_bdl_temp_reg_value_dqs;
+ unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
+ unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
+ unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
+ // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+
+ unsigned int dq_lcd_bdl_temp_reg_lef;
+ unsigned int dq_lcd_bdl_temp_reg_rig;
+ unsigned int dq_lcd_bdl_temp_reg_center;
+ unsigned int dq_lcd_bdl_temp_reg_windows;
+ unsigned int dq_lcd_bdl_temp_reg_center_min;
+ unsigned int dq_lcd_bdl_temp_reg_windows_min;
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+ if (argc >5) {
+ training_pattern_flag = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_pattern_flag = 0;
+ }
+ else if(training_pattern_flag)
+ training_pattern_flag = 1;
+
+
+ }
+
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\training_pattern_flag== 0x%08x\n", training_pattern_flag);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
+
+
+
+ for ((temp_count_j=0);(temp_count_j<DATX8_DQ_LCD_BDL_REG_WIDTH);(temp_count_j++))
+ {
+ dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=readl(reg_add+4*temp_count_j);
+ dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
+ printf("\n org add 0x%08x reg== 0x%08x\n",(reg_add+4*temp_count_j), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]));
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
+ =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
+ =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
+
+ }
+ }
+
+ }
+
+ }
+
+ }////save and print org training dqs value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ { printf("\ntest lane==0x%08x\n ",temp_count_i);
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
+ }
+
+ for ((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
+ {
+
+ if (temp_count_k == 0)
+ {
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ dq_lcd_bdl_temp_reg_value_dqs=(readl(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0));
+ dq_lcd_bdl_temp_reg_value_wdqd=(readl(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0))&DQLCDLR_MAX;
+ dq_lcd_bdl_temp_reg_value_rdqsd=(readl(reg_add+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0BDLR0))&DQLCDLR_MAX;
+ // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
+#else
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+ // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
+#endif
+
+ while (dq_lcd_bdl_temp_reg_value_wdqd>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_wdqd--;
+ printf("\nwdqd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ writel(dq_lcd_bdl_temp_reg_value_wdqd,(reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0));
+#else
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+#endif
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value_wdqd++;
+ break;
+ }
+ }
+ printf("\nwdqd left edge detect \n");
+ printf("\nwdqd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_wdqd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_wdqd>(dq_lcd_bdl_temp_reg_lef_min_value&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_lef_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
+ }
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+
+ while (dq_lcd_bdl_temp_reg_value_wdqd<0xff)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_wdqd++;
+ printf("\nwdqd rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value_wdqd--;
+ break;
+ }
+ }
+ printf("\nwdqd right edge detect \n");
+ printf("\nwdqd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_wdqd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
+
+ dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+ dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_wdqd<(dq_lcd_bdl_temp_reg_rig_min_value&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_rig_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
+ }
+
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+
+ }
+ else if(temp_count_k==1)
+ {
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+ while (dq_lcd_bdl_temp_reg_value_rdqsd>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_rdqsd--;
+ printf("\nrdqsd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nrdqsd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value_rdqsd++;
+ break;
+ }
+ }
+ printf("\nrdqsd left edge detect \n");
+ printf("\nrdqsd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+
+ dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_rdqsd>((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_lef_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
+ }
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+ while (dq_lcd_bdl_temp_reg_value_rdqsd<0xff)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_rdqsd++;
+ printf("\nrdqsd right temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nrdqsd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value_rdqsd--;
+ break;
+ }
+ }
+ printf("\nrdqsd right edge detect \n");
+ printf("\nrdqsd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_rdqsd<((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_rig_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
+ }
+
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+
+
+
+ }
+
+ }
+ }
+
+ }
+ }
+
+ ////tune and save training dqs value
+
+
+
+
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
+
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ // dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
+
+ printf("\n org add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ printf("\n lef add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ printf("\n rig add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
+ printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+ }
+
+ dq_lcd_bdl_temp_reg_lef=(dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+ dq_lcd_bdl_temp_reg_rig=(dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+
+ if (test_times == 0)
+ {
+ (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_lef;
+ (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_rig;
+
+ }
+ dq_lcd_bdl_temp_reg_lef_min_value=(dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+ dq_lcd_bdl_temp_reg_rig_min_value=(dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+
+
+ //dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value&0x0000ff);
+ dq_lcd_bdl_temp_reg_center=( (((dq_lcd_bdl_temp_reg_lef&0xff)+(dq_lcd_bdl_temp_reg_rig&0xff))/2)
+ |(((((dq_lcd_bdl_temp_reg_lef>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<8)
+ |(((((dq_lcd_bdl_temp_reg_lef>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<16) );
+
+ dq_lcd_bdl_temp_reg_windows=( (((dq_lcd_bdl_temp_reg_rig&0xff)-(dq_lcd_bdl_temp_reg_lef&0xff)))
+ |(((((dq_lcd_bdl_temp_reg_rig>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<8)
+ |(((((dq_lcd_bdl_temp_reg_rig>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<16) );
+
+
+ dq_lcd_bdl_temp_reg_center_min=( (((dq_lcd_bdl_temp_reg_lef_min_value&0xff)+(dq_lcd_bdl_temp_reg_rig_min_value&0xff))/2)
+ |(((((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<8)
+ |(((((dq_lcd_bdl_temp_reg_lef_min_value>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<16) );
+
+ dq_lcd_bdl_temp_reg_windows_min=( (((dq_lcd_bdl_temp_reg_rig_min_value&0xff)-(dq_lcd_bdl_temp_reg_lef_min_value&0xff)))
+ |(((((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<8)
+ |(((((dq_lcd_bdl_temp_reg_rig_min_value>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<16) );
+
+ printf("\n add 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ (dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ dq_lcd_bdl_temp_reg_center,dq_lcd_bdl_temp_reg_windows,
+ (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ dq_lcd_bdl_temp_reg_center_min,dq_lcd_bdl_temp_reg_windows_min
+ );
+ }
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+U_BOOT_CMD(
+ ddr_tune_dqs, 6, 1, do_ddr_test_fine_tune_dqs,
+ "DDR tune dqs function",
+ "ddr_tune_dqs a 0 0x80000 3 or ddr_tune_dqs b 0 0x80000 5 or ddr_tune_dqs a b 0x80000 l\n dcache off ? \n"
+);
+
+
+
+int do_ddr_test_dqs_window_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test ddr dqs window step function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_lane_step=0;
+ unsigned int testing_lane=0;
+ unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int test_min_max_flag=0;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+
+
+ unsigned int dq_lcd_bdl_reg_org=0;
+ unsigned int dq_lcd_bdl_reg_left=0;
+ unsigned int dq_lcd_bdl_reg_right=0;
+
+
+ unsigned int dq_lcd_bdl_reg_left_min=0;
+ unsigned int dq_lcd_bdl_reg_right_min=0;
+
+ unsigned int dq_lcd_bdl_temp_reg_value=0;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_lane_step = 0;
+ test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_lane_step = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_lane_step = 0;
+ }
+ }
+ if (test_lane_step >7)
+ test_lane_step = 0;
+ unsigned int test_loop=1;
+ if (argc >5) {
+
+ test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max_flag = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ unsigned int test_temp_value_use_sticky_register=0;
+ if (argc >6) {
+
+ test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ test_temp_value_use_sticky_register = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
+ printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
+ printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
+
+ const char *temp_s;
+ char *env_lcdlr_temp_count;
+ char *buf;
+ buf="";
+ unsigned int lcdlr_temp_count=0;
+ env_lcdlr_temp_count="lcdlr_temp_count";
+
+ if(test_temp_value_use_sticky_register)
+ {lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ else
+ {lcdlr_temp_count=0;
+ }
+ }
+
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ }////save and print org training dqs value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+
+
+
+ {
+ printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ if( channel_b_en)
+ { printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
+ writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
+ printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
+ }
+ if (test_lane_step>8)
+ test_lane_step=0;
+ printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
+
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_lane_step>>1);
+ test_lane_step_rdqs_flag=test_lane_step%2;
+ testing_lane=(test_lane_step>>1);
+ if (!test_lane_step_rdqs_flag)
+ {reg_add=reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0;
+ }
+ else
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ reg_add=reg_add+DDR0_PUB_DX0LCDLR1-DDR0_PUB_DX0BDLR0;
+#else
+ reg_add=reg_add+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0BDLR0;
+#endif
+
+ }
+
+ dq_lcd_bdl_temp_reg_value=readl(reg_add);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ if (test_lane_step_rdqs_flag)
+ {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0xff00)>>8);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+ else
+ {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&0x00ff)>>0);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+#endif
+
+ if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
+ {
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value--;
+
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ }
+
+
+
+ printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ if (!test_lane_step_rdqs_flag)
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+#else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+#endif
+ }
+ else
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
+#else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+#endif
+ }
+ printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\n left edge detect \n");
+ printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+
+ dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
+ if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
+ }
+ } else
+ {
+ printf("\n left edge skip \n");
+ }
+
+ if (!test_lane_step_rdqs_flag)
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+#else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+#endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ }
+ else
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
+#else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+ writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+#endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
+
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+
+
+ if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
+ {
+ while (dq_lcd_bdl_temp_reg_value<DQLCDLR_MAX)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+
+
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ }
+
+ printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ if (!test_lane_step_rdqs_flag)
+ {
+ //writel(dq_lcd_bdl_temp_reg_value,reg_add);
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+#else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+#endif
+ }
+ else
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_temp_reg_value<<8)|(dq_lcd_bdl_temp_reg_value<<16)|(((readl(reg_add))&0xff)),reg_add);
+#else
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+#endif
+ // writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ // writel(dq_lcd_bdl_temp_reg_value,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+ printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect \n");
+ printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+ dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
+ if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
+ }
+ }
+
+ if (!test_lane_step_rdqs_flag)
+ {
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<0)|(((readl(reg_add))&0xffff00)),reg_add);
+#else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+#endif
+ }
+ else
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ writel((dq_lcd_bdl_reg_org<<8)|(dq_lcd_bdl_reg_org<<16)|(((readl(reg_add))&0xff)),reg_add);
+#else
+ writel(dq_lcd_bdl_reg_org,reg_add);
+ writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+#endif
+ // writel(dq_lcd_bdl_reg_org,reg_add);
+ // writel(dq_lcd_bdl_reg_org,reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3);
+ }
+
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+ printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ }
+
+
+
+ }
+ }
+
+ }
+
+ dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
+ if (!test_lane_step_rdqs_flag)
+ {if(channel_a_en){
+ dq_lcd_bdl_value_wdq_org_a[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_wdq_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_wdq_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ if (channel_b_en)
+ {
+ dq_lcd_bdl_value_wdq_org_b[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_wdq_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_wdq_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ }
+ else
+ {
+ if (channel_a_en) {
+ dq_lcd_bdl_value_rdqs_org_a[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_rdqs_min_a[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_rdqs_max_a[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ if (channel_b_en) {
+ dq_lcd_bdl_value_rdqs_org_b[testing_lane]=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_rdqs_min_b[testing_lane]=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_rdqs_max_b[testing_lane]=dq_lcd_bdl_reg_right_min;
+ }
+ }
+
+ return dq_lcd_bdl_temp_reg_value;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+///*
+U_BOOT_CMD(
+ ddr_tune_dqs_step, 7, 1, do_ddr_test_dqs_window_step,
+ "ddr_tune_dqs_step function",
+ "ddr_tune_dqs_step a 0 0x80000 3 or ddr_tune_dqs_step b 0 0x80000 5 \n dcache off ? \n"
+);
+
+
+
+extern int ddr_test_s_add_cross_talk_pattern(int ddr_test_size);
+
+
+int do_ddr_test_lcdlr_clk_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test ddr lcdlr clk step function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_lane_step=0;
+ // unsigned int testing_lane=0;
+ // unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int test_min_max_flag=0;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+
+
+ unsigned int dq_lcd_bdl_reg_org=0;
+ unsigned int dq_lcd_bdl_reg_left=0;
+ unsigned int dq_lcd_bdl_reg_right=0;
+
+
+ unsigned int dq_lcd_bdl_reg_left_min=0;
+ unsigned int dq_lcd_bdl_reg_right_min=0;
+
+ unsigned int dq_lcd_bdl_temp_reg_value=0;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_lane_step = 0;
+ test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_lane_step = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_lane_step = 0;
+ }
+ }
+ if (test_lane_step >7)
+ test_lane_step = 0;
+ unsigned int test_loop=1;
+ if (argc >5) {
+
+ test_min_max_flag = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max_flag = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ unsigned int test_temp_value_use_sticky_register=0;
+ if (argc >6) {
+
+ test_temp_value_use_sticky_register = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ test_temp_value_use_sticky_register = 0;
+ }
+ else
+ {
+ //test_min_max_flag =1;
+ }
+ }
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
+ printf("\ntest_min_max_flag== 0x%08x\n", test_min_max_flag);
+ printf("\ntest_temp_value_use_sticky_register== 0x%08x\n", test_temp_value_use_sticky_register);
+ const char *temp_s;
+ char *env_lcdlr_temp_count;
+ char *buf;
+ buf="";
+ unsigned int lcdlr_temp_count=0;
+ env_lcdlr_temp_count="lcdlr_temp_count_a";
+ unsigned int lcdlr_max=0;
+ if(test_temp_value_use_sticky_register)
+ {lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ else
+ {lcdlr_temp_count=0;
+ }
+ }
+
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ }////save and print org training dqs value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+
+
+
+ {
+ printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ if( channel_b_en)
+ { printf("\nddr1 should pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR1_PUB_REG_BASE+4));
+ writel((readl(DDR1_PUB_REG_BASE+4))|(1<<29),(DDR1_PUB_REG_BASE+4));
+ printf("\n ddr1 pause ddl pir== 0x%08x\n", readl(DDR1_PUB_REG_BASE+4));
+ }
+ if (test_lane_step>2)
+ test_lane_step=0;
+ printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
+ if(test_lane_step==0)
+ {reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
+ lcdlr_max=ACLCDLR_MAX;
+ }
+ if(test_lane_step==1)
+ {reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
+ lcdlr_max=ACBDLR_MAX;
+ }
+
+
+ dq_lcd_bdl_temp_reg_value=readl(reg_add);
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ printf("\nreg_add_0x%08x==0x%08x\n ",reg_add,dq_lcd_bdl_temp_reg_value);
+
+ if(test_lane_step==0)
+ {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&ACLCDLR_MAX));
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+ if(test_lane_step==1)
+ {dq_lcd_bdl_temp_reg_value=(((readl(reg_add))&ACBDLR_MAX));
+ dq_lcd_bdl_reg_org=dq_lcd_bdl_temp_reg_value;
+ }
+
+
+ if ((test_min_max_flag == 0)||( (test_min_max_flag == 2)))
+ {
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value--;
+
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ }
+
+
+
+ printf("\n left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+ {
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ }
+
+ printf("\n rmin read reg==0x%08x\n ",(readl(reg_add)));
+ //temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ //#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ // #else
+ // temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ // temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ // #endif
+
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\n left edge detect \n");
+ printf("\nleft edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+
+ dq_lcd_bdl_reg_left=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left;
+ if (dq_lcd_bdl_reg_left>dq_lcd_bdl_reg_left_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min=dq_lcd_bdl_reg_left ;
+ }
+ }
+ else
+ {
+ printf("\n left edge skip \n");
+ }
+
+
+ {
+
+ writel(dq_lcd_bdl_reg_org,reg_add);
+
+ }
+
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_org;
+
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+
+
+ if ((test_min_max_flag == 0)|| (test_min_max_flag == 1))
+ {
+ //if(test_lane_step==0)
+ while (dq_lcd_bdl_temp_reg_value<lcdlr_max)
+ {
+ ddr_test_watchdog_clear();
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s\n", buf);
+ if(test_temp_value_use_sticky_register)
+ {
+ writel(lcdlr_temp_count,(sticky_reg_base_add+(6<<2)));
+ }
+ else
+ {
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ }
+
+ printf("\n rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ {
+ writel(dq_lcd_bdl_temp_reg_value,reg_add);
+ }
+
+ printf("\n r max read reg==0x%08x\n ",(readl(reg_add)));
+ // temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect \n");
+ printf("\n right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+
+ dq_lcd_bdl_reg_right=dq_lcd_bdl_temp_reg_value;
+ if (test_times == 0)
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right;
+ if (dq_lcd_bdl_reg_right<dq_lcd_bdl_reg_right_min) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min=dq_lcd_bdl_reg_right ;
+ }
+ }
+
+ {
+ writel(dq_lcd_bdl_reg_org,reg_add);
+ }
+
+ printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+ printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ }
+
+
+
+ }
+ }
+
+ }
+
+ dq_lcd_bdl_temp_reg_value=(dq_lcd_bdl_reg_right_min<<16)|dq_lcd_bdl_reg_left_min;
+
+ {if(channel_a_en){
+ if(test_lane_step==0)
+ {
+ dq_lcd_bdl_value_aclcdlr_org_a=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_aclcdlr_min_a=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_aclcdlr_max_a=dq_lcd_bdl_reg_right_min;
+ }
+ if(test_lane_step==1)
+ {
+ dq_lcd_bdl_value_bdlr0_org_a=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_bdlr0_min_a=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_bdlr0_max_a=dq_lcd_bdl_reg_right_min;
+ }
+ }
+ if (channel_b_en)
+ {
+ if(test_lane_step==0)
+ {
+ dq_lcd_bdl_value_aclcdlr_org_b=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_aclcdlr_min_b=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_aclcdlr_max_b=dq_lcd_bdl_reg_right_min;
+ }
+ if(test_lane_step==1)
+ {
+ dq_lcd_bdl_value_bdlr0_org_b=dq_lcd_bdl_reg_org;
+ if (test_min_max_flag != 1)
+ dq_lcd_bdl_value_bdlr0_min_b=dq_lcd_bdl_reg_left_min;
+ if (test_min_max_flag != 2)
+ dq_lcd_bdl_value_bdlr0_max_b=dq_lcd_bdl_reg_right_min;
+ }
+ }
+ }
+
+
+
+ return dq_lcd_bdl_temp_reg_value;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+U_BOOT_CMD(
+ ddr_tune_aclcdlr_step, 7, 1, do_ddr_test_lcdlr_clk_step,
+ "ddr_tune_aclcdlr_step function",
+ "ddr_tune_aclcdlr_step a 0 0x80000 3 or ddr_tune_aclcdlr_step b 0 0x80000 5 \n dcache off ? \n"
+);
+
+int do_ddr_test_dqs_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_dqs_window function\n");
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+
+ unsigned int lane_step= 0;
+ unsigned int reg_value= 0;
+ //int argc2;
+ //char * argv2[30];
+ char *endp;
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+
+
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+ //argc2=5;
+ //for(i = 1;i<(argc);i++)
+ {
+ //argv2[i-1]=argv[i];
+ }
+
+ //argv2[0]=argv[1];
+ //argv2[1]=argv[2];
+ //argv2[2]=argv[3];
+ //#include <stdio.h>
+ // unsigned int wr_adj_per[24] ;
+ if(1)
+ {
+ printf("\ntest use uboot env\n");
+ {
+ //char str[24];
+ const char *s;
+ unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+
+ unsigned int *num_arry;
+ num_arry = (unsigned int *)(&str_to_numarry);
+ int i;
+ // char *varname;
+ // int value=0;
+
+ ///varname="env_ddrtest";
+ s = getenv("env_wr_lcdlr_pr");
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ env_to_num("env_wr_lcdlr_pr",num_arry);//unsigned int *num_arry
+
+
+ for (i = 0; i < 48; i++) {
+
+ printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+ // printf("%s,lenth=%d",s,(strlen(s)));
+ //sscanf(s,"d%,",wr_adj_per);
+ //sprintf(str,"d%",s);
+ //getc
+ // if (strlen(s) > 16)
+ {
+ // sscanf(s, "%08x, %08x, %08x, \n",
+ // &wr_adj_per[0], &wr_adj_per[1], &wr_adj_per[2]);
+ }
+ }
+ }
+ }
+ }
+ // unsigned int = 0, max = 0xff, min = 0x00;
+ /*
+ if(0)
+ {
+ {printf("\ntest use uboot env\n");
+ {
+ //char str[24];
+ const char *s;
+
+ // char *varname;
+ int value=0;
+
+ ///varname="env_ddrtest";
+ s = getenv("env_wr_lcdlr_pr");
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",wr_adj_per);
+ //sprintf(str,"d%",s);
+ //getc
+ if (strlen(s) > 16) {
+ sscanf(s, "%08x, %08x, %08x, %08x, %08x\n",
+ &wr_adj_per[i-2], &max, &min, &type_h, &type_l);
+ } else {
+ sscanf(buf, "%08x, %08x, %08x\n",
+ &reg, &max, &min);
+ }
+
+ }
+ value = simple_strtoull_ddr(s, &endp, 16);
+ printf("%d",value);
+ }
+ s = getenv("env_rd_lcdlr_pr");
+
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",rd_adj_per);
+
+ }
+ //value = simple_strtoull_ddr(s, &endp, 16);
+ }
+
+ //sprintf(str, "%lx", value);
+ // setenv("env_ddrtest", str);
+
+
+ //run_command("save",0);
+ }
+
+ if (argc>24+2)
+ argc=24+2;
+ for(i = 2;i<argc;i++)
+ {
+ if(i<(2+12)){
+ wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
+ }
+ else
+ {
+ rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
+ }
+ }
+
+
+ }
+ printf(" int wr_adj_per[12]={\n");
+ for(i = 0;i<12;i++)
+ {
+ printf("%04d ,\n",wr_adj_per[i]);
+}
+printf("};\n");
+printf(" int rd_adj_per[12]={\n");
+for(i = 0;i<12;i++)
+{
+ printf("%04d ,\n",rd_adj_per[i]);
+}
+printf("};\n");
+
+}
+*/
+
+char str[100];
+
+if (channel_a_en)
+{
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane a\n");
+ for ((lane_step=0);(lane_step<8);(lane_step++))
+ {
+ //sprintf(argv2[3],"d%",( lane_step));
+ //itoa_ddr_test(lane_step,(argv2[3]),10);
+ //printf("\nargv2[%d]=%s\n",0,argv2[0]);
+ // printf("\nargv2[%d]=%s\n",3,argv2[3]);
+ // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d",ddr_test_size,( lane_step));
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ }
+}
+
+
+if (channel_b_en)
+{//*(char *)(argv2[0])="b";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane b\n");
+ for ((lane_step=0);(lane_step<8);(lane_step++))
+ {
+ //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d",ddr_test_size,( lane_step));
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ }
+}
+
+if (channel_a_en)
+{
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_a[lane_step],
+ dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
+ dq_lcd_bdl_value_rdqs_org_a[lane_step],
+ dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
+ }}
+if (channel_b_en)
+{
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n b_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_b[lane_step],
+ dq_lcd_bdl_value_wdq_min_b[lane_step],dq_lcd_bdl_value_wdq_max_b[lane_step],
+ dq_lcd_bdl_value_rdqs_org_b[lane_step],
+ dq_lcd_bdl_value_rdqs_min_b[lane_step],dq_lcd_bdl_value_rdqs_max_b[lane_step]);
+ }}
+
+return reg_value;
+}
+
+/*
+U_BOOT_CMD(
+ ddr_tune_dqs_step, 5, 1, do_ddr_test_fine_tune_dqs_step,
+ "ddr_tune_dqs_step function",
+ "ddr_tune_dqs_step a 0 0x800000 3 or ddr_tune_dqs_step b 0 0x800000 5 or ddr_tune_dqs_step a b 0x800000 l\n dcache off ? \n"
+);
+*/
+
+int do_ddr_test_fine_tune_dqs_step(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Tune ddr dqs step function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ unsigned int temp_count_i = 1;
+ unsigned int temp_count_j= 1;
+ unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_lane_step=0;
+ unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+#define DATX8_DQ_LCD_BDL_REG_WIDTH 12
+
+#define DATX8_DQ_LANE_WIDTH 4
+#define CHANNEL_CHANNEL_WIDTH 2
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+
+#define DATX8_DQ_LANE_LANE00 0
+#define DATX8_DQ_LANE_LANE01 1
+#define DATX8_DQ_LANE_LANE02 2
+#define DATX8_DQ_LANE_LANE03 3
+
+#define DATX8_DQ_BDLR0 0
+#define DATX8_DQ_BDLR1 1
+#define DATX8_DQ_BDLR2 2
+#define DATX8_DQ_BDLR3 3
+#define DATX8_DQ_BDLR4 4
+#define DATX8_DQ_BDLR5 5
+#define DATX8_DQ_BDLR6 6
+#define DATX8_DQ_DXNLCDLR0 7
+#define DATX8_DQ_DXNLCDLR1 8
+#define DATX8_DQ_DXNLCDLR2 9
+#define DATX8_DQ_DXNMDLR 10
+#define DATX8_DQ_DXNGTR 11
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+#define DQ_LCD_BDL_REG_NUM_PER_CHANNEL DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
+#define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
+
+ unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
+
+ unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
+ unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
+
+ unsigned int dq_lcd_bdl_temp_reg_value;
+ unsigned int dq_lcd_bdl_temp_reg_value_dqs;
+ unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
+ unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
+ unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
+ // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+
+ unsigned int dq_lcd_bdl_temp_reg_lef;
+ unsigned int dq_lcd_bdl_temp_reg_rig;
+ unsigned int dq_lcd_bdl_temp_reg_center;
+ unsigned int dq_lcd_bdl_temp_reg_windows;
+ unsigned int dq_lcd_bdl_temp_reg_center_min;
+ unsigned int dq_lcd_bdl_temp_reg_windows_min;
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_lane_step = 0;
+ test_lane_step = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_lane_step = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_lane_step = 0;
+ }
+ }
+ test_loop=1;
+
+ unsigned int test_min_max=0;
+ if (argc >5) {
+
+ test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max = 0;
+ }
+ else
+ test_min_max=1;
+
+ }
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_lane_step== 0x%08x\n", test_lane_step);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\ntest_min_max== 0x%08x\n", test_min_max);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
+
+
+
+ for ((temp_count_j=0);(temp_count_j<DATX8_DQ_LCD_BDL_REG_WIDTH);(temp_count_j++))
+ {
+ dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=readl(reg_add+4*temp_count_j);
+ dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
+ printf("\n org add 0x%08x reg== 0x%08x\n",(reg_add+4*temp_count_j), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]));
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
+ =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]
+ =dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j];
+
+ }
+ }
+
+ }
+
+ }
+
+ }////save and print org training dqs value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ if (test_lane_step>8)
+ test_lane_step=0;
+ if (test_lane_step)
+ {
+ printf("\ntest_lane_step==0x%08x\n ",test_lane_step);
+ temp_count_i=(test_lane_step>>1);
+ test_lane_step_rdqs_flag=test_lane_step-(temp_count_i<<1);
+ test_lane_step=0;
+ }
+ {
+ printf("\ntest lane==0x%08x\n ",temp_count_i);
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj;}
+ }
+
+ for ((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
+ {
+ if (test_lane_step_rdqs_flag)
+ {
+ temp_count_k=1;
+ test_lane_step_rdqs_flag=0;
+ }
+ if (temp_count_k == 0)
+ {
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+ // dq_lcd_bdl_temp_reg_value_rdqsnd=((dq_lcd_bdl_temp_reg_value_dqs&0xff0000))>>16;
+
+ while (dq_lcd_bdl_temp_reg_value_wdqd>0)
+ {
+ if(test_min_max)
+ {break;
+ }
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_wdqd--;
+ printf("\nwdqd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value_wdqd++;
+ break;
+ }
+ }
+ printf("\nwdqd left edge detect \n");
+ printf("\nwdqd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_wdqd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_wdqd>(dq_lcd_bdl_temp_reg_lef_min_value&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_lef_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
+ }
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+
+ while (dq_lcd_bdl_temp_reg_value_wdqd<0xff)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_wdqd++;
+ printf("\nwdqd rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nwdqd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value_wdqd--;
+ break;
+ }
+ }
+ printf("\nwdqd right edge detect \n");
+ printf("\nwdqd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_wdqd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_wdqd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x00)|dq_lcd_bdl_temp_reg_value_wdqd);
+
+ dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+ dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_wdqd<(dq_lcd_bdl_temp_reg_rig_min_value&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_rig_min_value&0xffff00)|dq_lcd_bdl_temp_reg_value_wdqd) ;
+ }
+
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+
+ }
+ else if(temp_count_k==1)
+ {
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+ while (dq_lcd_bdl_temp_reg_value_rdqsd>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_rdqsd--;
+ printf("\nrdqsd left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nrdqsd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value_rdqsd++;
+ break;
+ }
+ }
+ printf("\nrdqsd left edge detect \n");
+ printf("\nrdqsd left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+
+ dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_lef_min_value=dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_rdqsd>((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_lef_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
+ }
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+ dq_lcd_bdl_temp_reg_value_dqs=readl(reg_add+4*DATX8_DQ_DXNLCDLR1);
+ dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value_dqs&0xff);
+ dq_lcd_bdl_temp_reg_value_rdqsd=((dq_lcd_bdl_temp_reg_value_dqs&0xff00))>>8;
+
+ while (dq_lcd_bdl_temp_reg_value_rdqsd<0xff)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value_rdqsd++;
+ printf("\nrdqsd right temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ writel(dq_lcd_bdl_temp_reg_value_dqs,(reg_add+4*DATX8_DQ_DXNLCDLR1));
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ //printf("\nrdqsd right edge detect \n");
+ dq_lcd_bdl_temp_reg_value_rdqsd--;
+ break;
+ }
+ }
+ printf("\nrdqsd right edge detect \n");
+ printf("\nrdqsd right edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value_rdqsd);
+ dq_lcd_bdl_temp_reg_value_dqs=(dq_lcd_bdl_temp_reg_value_wdqd|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ //only update dq_lcd_bdl_temp_reg_value_rdqsd rdqsnd
+ dq_lcd_bdl_temp_reg_value=dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ dq_lcd_bdl_temp_reg_value_dqs=((dq_lcd_bdl_temp_reg_value&0x0000ff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16));
+ dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]=dq_lcd_bdl_temp_reg_value_dqs;
+
+
+ dq_lcd_bdl_temp_reg_rig_min_value=dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1];
+ if (dq_lcd_bdl_temp_reg_value_rdqsd<((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)) //update wdqd min value
+ {
+ dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]
+ =((dq_lcd_bdl_temp_reg_rig_min_value&0xff)|(dq_lcd_bdl_temp_reg_value_rdqsd<<8)|(dq_lcd_bdl_temp_reg_value_rdqsd<<16)) ;
+ }
+
+
+
+ writel(dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1],(reg_add+4*DATX8_DQ_DXNLCDLR1));
+
+
+
+
+ }
+
+ }
+ }
+
+ }
+ }
+
+ ////tune and save training dqs value
+
+
+
+
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
+
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ // dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+temp_count_j]=reg_add+4*temp_count_j;
+
+ printf("\n org add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ printf("\n lef add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ for ((temp_count_j=0);(temp_count_j<DQ_LCD_BDL_REG_NUM_PER_CHANNEL);(temp_count_j++))
+ {
+ printf("\n rig add 0x%08x reg== 0x%08x\n",(dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]), (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_j]));
+ }
+
+ printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
+ printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3BDLR0+reg_base_adj+DATX8_DQ_DXNLCDLR1*4;}
+ }
+
+ dq_lcd_bdl_temp_reg_lef=(dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+ dq_lcd_bdl_temp_reg_rig=(dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+
+ if (test_times == 0)
+ {
+ (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_lef;
+ (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1])=dq_lcd_bdl_temp_reg_rig;
+
+ }
+ dq_lcd_bdl_temp_reg_lef_min_value=(dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+ dq_lcd_bdl_temp_reg_rig_min_value=(dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]);
+
+
+ //dq_lcd_bdl_temp_reg_value_wdqd=(dq_lcd_bdl_temp_reg_value&0x0000ff);
+ dq_lcd_bdl_temp_reg_center=( (((dq_lcd_bdl_temp_reg_lef&0xff)+(dq_lcd_bdl_temp_reg_rig&0xff))/2)
+ |(((((dq_lcd_bdl_temp_reg_lef>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<8)
+ |(((((dq_lcd_bdl_temp_reg_lef>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig>>8)&0xff))/2)<<16) );
+
+ dq_lcd_bdl_temp_reg_windows=( (((dq_lcd_bdl_temp_reg_rig&0xff)-(dq_lcd_bdl_temp_reg_lef&0xff)))
+ |(((((dq_lcd_bdl_temp_reg_rig>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<8)
+ |(((((dq_lcd_bdl_temp_reg_rig>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef>>8)&0xff)))<<16) );
+
+
+ dq_lcd_bdl_temp_reg_center_min=( (((dq_lcd_bdl_temp_reg_lef_min_value&0xff)+(dq_lcd_bdl_temp_reg_rig_min_value&0xff))/2)
+ |(((((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<8)
+ |(((((dq_lcd_bdl_temp_reg_lef_min_value>>16)&0xff)+((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff))/2)<<16) );
+
+ dq_lcd_bdl_temp_reg_windows_min=( (((dq_lcd_bdl_temp_reg_rig_min_value&0xff)-(dq_lcd_bdl_temp_reg_lef_min_value&0xff)))
+ |(((((dq_lcd_bdl_temp_reg_rig_min_value>>8)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<8)
+ |(((((dq_lcd_bdl_temp_reg_rig_min_value>>16)&0xff)-((dq_lcd_bdl_temp_reg_lef_min_value>>8)&0xff)))<<16) );
+
+ printf("\n add 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ (dq_lcd_bdl_reg_index[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_org[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_left[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_right[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ dq_lcd_bdl_temp_reg_center,dq_lcd_bdl_temp_reg_windows,
+ (dq_lcd_bdl_reg_left_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ (dq_lcd_bdl_reg_right_min[testing_channel*DQ_LCD_BDL_REG_NUM_PER_CHANNEL+temp_count_i*DATX8_DQ_LCD_BDL_REG_WIDTH+DATX8_DQ_DXNLCDLR1]),
+ dq_lcd_bdl_temp_reg_center_min,dq_lcd_bdl_temp_reg_windows_min
+ );
+ }
+
+
+ }
+
+ }
+
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+
+
+int do_ddr_test_dqs_window_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_dqs_window function\n");
+ printf("\nddr_test_cmd 0x22 a 0 0x80000 ns lane_disable add_test_size --- watchdog should >15s\n");
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+
+ unsigned int lane_step= 0;
+ unsigned int reg_value= 0;
+ //int argc2;
+ //char * argv2[30];
+ char *endp;
+ char *buf;
+ buf="";
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+
+
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+
+
+
+ if (argc >4) {
+ watchdog_time_s = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 20;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+
+ unsigned int lane_disable= 0;
+
+ if (argc >5) {
+ lane_disable = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ unsigned int add_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ if (argc >6) {
+ add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ add_test_size= ddr_test_size;
+ }
+ }
+ printf("add_test_size==0x%08x\n",add_test_size);
+ //argc2=5;
+ //for(i = 1;i<(argc);i++)
+ {
+ //argv2[i-1]=argv[i];
+ }
+
+ //argv2[0]=argv[1];
+ //argv2[1]=argv[2];
+ //argv2[2]=argv[3];
+ //#include <stdio.h>
+ // unsigned int wr_adj_per[24] ;
+ //if(1)
+
+ printf("\ntest use uboot env\n");
+
+ char str[1024]="";
+ char str_temp1[1024]="";
+ char str_temp2[1024]="";
+ const char *s;
+ unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+
+ unsigned int *num_arry;
+ //unsigned int *num_arry_temp;
+ unsigned int *num_arry_lane0=NULL;
+ unsigned int *num_arry_lane1=NULL;
+ unsigned int *num_arry_lane2=NULL;
+ unsigned int *num_arry_lane3=NULL;
+ char *name_lane0;
+ char *name_lane1;
+ char *name_lane2;
+ char *name_lane3;
+ num_arry = (unsigned int *)(&str_to_numarry);
+ int i;
+ char *varname; char *env_lcdlr_temp_count;
+ unsigned int lcdlr_temp_count=0;
+ const char *temp_s;const char *temp_s1;
+ // int value=0;
+
+ varname="env_ddrtest_data_lane";
+ name_lane0="ddr_test_data_lane0";
+ name_lane1="ddr_test_data_lane1";
+ name_lane2="ddr_test_data_lane2";
+ name_lane3="ddr_test_data_lane3";
+ env_lcdlr_temp_count="lcdlr_temp_count";
+ s = getenv(varname);
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ env_to_num(varname,num_arry);//unsigned int *num_arry
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ else
+ {lcdlr_temp_count=0;
+ }
+
+ if(0){
+ env_to_num(name_lane0,num_arry_lane0);//unsigned int *num_arry
+ env_to_num(name_lane1,num_arry_lane1);//unsigned int *num_arry
+ env_to_num(name_lane2,num_arry_lane2);//unsigned int *num_arry
+ env_to_num(name_lane3,num_arry_lane3);//unsigned int *num_arry
+ }
+
+ for (i = 0; i < 48; i++) {
+
+ printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+ //for (lane_step = 0;lane_step< 4;lane_step++)
+ if(0)
+ {
+ for (i = 0; i < 8; i++) {
+
+ printf("lane_0 str_to_numarry[%d]==%d\n",i,num_arry_lane0[i]);
+ }
+ for (i = 0; i < 8; i++) {
+
+ printf("lane_1 str_to_numarry[%d]==%d\n",i,num_arry_lane1[i]);
+ }
+ for (i = 0; i < 8; i++) {
+
+ printf("lane_2 str_to_numarry[%d]==%d\n",i,num_arry_lane2[i]);
+ }
+ for (i = 0; i < 8; i++) {
+
+ printf("lane_3 str_to_numarry[%d]==%d\n",i,num_arry_lane3[i]);
+ }
+ }
+ // printf("%s,lenth=%d",s,(strlen(s)));
+ //sscanf(s,"d%,",wr_adj_per);
+ //sprintf(str,"d%",s);
+ //getc
+ // if (strlen(s) > 16)
+ {
+ // sscanf(s, "%08x, %08x, %08x, \n",
+ // &wr_adj_per[0], &wr_adj_per[1], &wr_adj_per[2]);
+ }
+ }
+ }
+ else
+ {
+ printf("no env set,exit\n");
+ return 0;}
+ s = getenv(varname);//for debug display env should add
+
+
+ ///*
+ //if(1)
+
+ unsigned int test_arg_0_cmd0 =0; //master cmd
+ unsigned int test_arg_1_cmd1 =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ // unsigned int lane_step= 0;
+ //char str[24];
+
+
+ test_arg_0_cmd0=num_arry[0];
+ test_arg_1_cmd1=num_arry[1];
+ test_arg_2_step=num_arry[2];
+ test_arg_3_freq=num_arry[3];
+ test_arg_4_step_status=num_arry[4];
+ printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
+ printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk)
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+ test_arg_0_cmd0=0x22;
+ test_arg_1_cmd1=0;
+ test_arg_2_step=1;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ num_arry[0]=test_arg_0_cmd0;
+ num_arry[1]=test_arg_1_cmd1;
+ num_arry[2]=test_arg_2_step;
+ num_arry[3]=test_arg_3_freq;
+ num_arry[4]=test_arg_4_step_status;
+ num_arry[5]=0;
+ num_arry[6]=0;
+ num_arry[7]=0;
+ for (i = 8; i < 48; i++) {
+ num_arry[i]=0;
+ }
+
+ for (lane_step = 0; lane_step < 4; lane_step++)
+ {
+ //if(lane_step%2)
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0xff);
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))>>8)&0xff);
+#else
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0x1ff);
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff);
+
+ printf("lcdlr1 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1),
+ ((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0x1ff),dq_lcd_bdl_value_wdq_org_a[lane_step]);
+ printf("lcdlr3 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3),
+ (((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff),dq_lcd_bdl_value_rdqs_org_a[lane_step]);
+#endif
+
+ //printf("lcdlr1 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ //DDR0_PUB_DX0LCDLR1)
+ //+DDR0_PUB_DX0LCDLR1));
+ //printf("lcdlr3 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ //DDR0_PUB_DX0LCDLR3)
+ //+DDR0_PUB_DX0LCDLR3));
+ //dq_lcd_bdl_value_rdqs_org_a[lane_step]=0;
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ }
+ //else
+ {
+ //dq_lcd_bdl_value_wdq_org_a[lane_step]=0;
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ }
+ }
+
+ {
+ dq_lcd_bdl_value_aclcdlr_org_a=((readl(DDR0_PUB_ACLCDLR))&ACLCDLR_MAX);
+ dq_lcd_bdl_value_aclcdlr_min_a=0xffff;
+ dq_lcd_bdl_value_aclcdlr_max_a=0xffff;
+ dq_lcd_bdl_value_aclcdlr_status_a=0;
+ dq_lcd_bdl_value_bdlr0_org_a=((readl(DDR0_PUB_ACBDLR0))&ACBDLR_MAX);
+ dq_lcd_bdl_value_bdlr0_min_a=0xffff;
+ dq_lcd_bdl_value_bdlr0_max_a=0xffff;
+ dq_lcd_bdl_value_bdlr0_status_a=0;
+ }
+
+
+
+#if 1 //( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ dq_lcd_bdl_value_wdq_status_a[0]=4;
+ dq_lcd_bdl_value_rdqs_status_a[0]=4;
+ }
+ if(lane_disable&0x2){
+ dq_lcd_bdl_value_wdq_status_a[1]=4;
+ dq_lcd_bdl_value_rdqs_status_a[1]=4;
+ }
+ if(lane_disable&0x4){
+ dq_lcd_bdl_value_wdq_status_a[2]=4;
+ dq_lcd_bdl_value_rdqs_status_a[2]=4;
+ }
+ if(lane_disable&0x8){
+ dq_lcd_bdl_value_wdq_status_a[3]=4;
+ dq_lcd_bdl_value_rdqs_status_a[3]=4;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+ printf("dq_lcd_bdl_value_aclcdlr_status_a==%x\n",dq_lcd_bdl_value_aclcdlr_status_a);
+ }
+ if(lane_disable&0x20){
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+ printf("dq_lcd_bdl_value_bdlr0_status_a==%x\n",dq_lcd_bdl_value_bdlr0_status_a);
+
+ }
+ }
+
+ {
+ for (lane_step = 0; lane_step < 4; lane_step++)
+
+
+ {
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ }
+
+
+
+
+ lane_step=4;
+ {
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ }
+ }
+
+ if(0){
+ for (i = 0; i < 8; i++) {
+ num_arry_lane0[i]=num_arry[8+i];
+ }
+ for (i = 0; i < 8; i++) {
+ num_arry_lane1[i]=num_arry[8+8+i];
+ }
+ for (i = 0; i < 8; i++) {
+ num_arry_lane2[i]=num_arry[8+8+8+i];
+ }
+ for (i = 0; i < 8; i++) {
+ num_arry_lane3[i]=num_arry[8+8+8+8+i];
+ }
+ num_to_env(name_lane0,num_arry_lane0);
+ num_to_env(name_lane1,num_arry_lane1);
+ num_to_env(name_lane2,num_arry_lane2);
+ num_to_env(name_lane3,num_arry_lane3);
+ run_command("save",0);
+ }
+
+ }
+
+
+
+
+ for (i = 0; i < 48; i++) {
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+
+
+ }
+
+ test_arg_2_step++;
+ num_arry[2]=test_arg_2_step;
+ sprintf(str, "0x%08x", num_arry[0]);
+ printf("%d %d\n", 0,num_arry[0]);
+ for (i = 1; i < 48; i++) {
+ //num_arry[i]=0;
+ sprintf(str, "%s;0x%08x", str,num_arry[i]);
+ printf("%d %d\n", i,num_arry[i]);
+
+ }
+ //sprintf(str, "%lx", value);
+ printf("%s", str);
+ setenv(varname, str);
+ run_command("save",0);
+
+
+ i=2;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+
+ for (i = 8; i < 48; i++) {
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ temp_s1= getenv(str_temp1);
+ if(temp_s1)
+ {
+ num_arry[i]= simple_strtoull_ddr(temp_s1, &endp, 0);
+ }
+ else
+ {num_arry[i]=0;
+ }
+ printf("ddr_test_data_num_%04d==%d\n",i,num_arry[i]);
+ }
+
+ ///*
+ {
+ for (lane_step = 0; lane_step < 4; lane_step++)
+ {
+ {
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=num_arry[8+lane_step*4*2+0];
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=num_arry[8+lane_step*4*2+1];
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=num_arry[8+lane_step*4*2+2];
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=num_arry[8+lane_step*4*2+3];
+ }
+ {
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=num_arry[8+lane_step*4*2+4];
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=num_arry[8+lane_step*4*2+5];
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=num_arry[8+lane_step*4*2+6];
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=num_arry[8+lane_step*4*2+7];
+ }
+
+
+ }
+ lane_step=4;
+ {
+ dq_lcd_bdl_value_aclcdlr_org_a=num_arry[8+lane_step*4*2+0];
+ dq_lcd_bdl_value_aclcdlr_min_a=num_arry[8+lane_step*4*2+1];
+ dq_lcd_bdl_value_aclcdlr_max_a=num_arry[8+lane_step*4*2+2];
+ dq_lcd_bdl_value_aclcdlr_status_a=num_arry[8+lane_step*4*2+3];
+ dq_lcd_bdl_value_bdlr0_org_a=num_arry[8+lane_step*4*2+4];
+ dq_lcd_bdl_value_bdlr0_min_a=num_arry[8+lane_step*4*2+5];
+ dq_lcd_bdl_value_bdlr0_max_a=num_arry[8+lane_step*4*2+6];
+ dq_lcd_bdl_value_bdlr0_status_a=num_arry[8+lane_step*4*2+7];
+ }
+ }
+ //*/
+
+
+
+
+ if (channel_a_en)
+ {
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane a\n");
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ ddr_test_watchdog_enable(watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",watchdog_time_s);
+
+ /*
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ */
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
+ )
+ {
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0))
+ { dq_lcd_bdl_value_wdq_status_a[lane_step]=1;
+ {
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+0),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
+
+ }
+ else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+1;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==2)||
+ (dq_lcd_bdl_value_wdq_status_a[lane_step]==3))
+ {
+ // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
+ // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ // num_to_env(varname,num_arry);
+ // run_command("reset",0);
+ // }
+
+ {
+ if(dq_lcd_bdl_value_wdq_status_a[lane_step]==2)
+ { dq_lcd_bdl_value_wdq_status_a[lane_step]=3;
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+0),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
+
+ }
+ else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==3)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+2;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ run_command("reset",0);
+ }
+
+ }
+
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
+ )
+ {
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ { dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+
+ }
+ else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+5;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3))
+ {
+
+ {
+ if(dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)
+ {
+
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
+
+ }
+ else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ //ddr_udelay(1000000);
+ // num_to_env(varname,num_arry);
+
+ {
+ i=8+lane_step*8+6;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ run_command("reset",0);
+ }
+
+ }
+
+ /*
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+ */
+
+
+ ddr_test_watchdog_disable(); //s
+ {printf("close watchdog\n");
+ }
+
+
+ }
+
+
+
+ }
+
+ if (channel_a_en)
+ {
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest lcdlr ac bdlr window lane a...\n");
+
+ {
+ ddr_test_watchdog_enable(watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",watchdog_time_s);
+ printf("\ndq_lcd_bdl_value_aclcdlr_status_a %d \n",dq_lcd_bdl_value_aclcdlr_status_a);
+ lane_step=4;
+ env_lcdlr_temp_count="lcdlr_temp_count_a";
+ if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==0)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==1)
+ )
+ {
+ if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==0))
+ { dq_lcd_bdl_value_aclcdlr_status_a=1;
+ {
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ i=8+lane_step*8+3;
+ printf("aclcdlr_status_a==0x%08x\n",num_arry[i]);
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ printf("\n222test lcdlr ac bdlr window lane a...\n");
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ printf("\n333test lcdlr ac bdlr window lane a...\n");
+ //ddr_tune_aclcdlr_step
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 0),2);
+ printf("\nstr=%s\n",str);
+ printf("aclcdlr_status_a1==0x%08x\n",num_arry[i]);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_aclcdlr_status_a=2;
+
+ }
+ else if (dq_lcd_bdl_value_aclcdlr_status_a==1)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_aclcdlr_min_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_aclcdlr_status_a=2;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+1;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_aclcdlr_status_a==2)||
+ (dq_lcd_bdl_value_aclcdlr_status_a==3))
+ {
+ // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
+ // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ // num_to_env(varname,num_arry);
+ // run_command("reset",0);
+ // }
+
+ {
+ if(dq_lcd_bdl_value_aclcdlr_status_a==2)
+ { dq_lcd_bdl_value_aclcdlr_status_a=3;
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 0),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+
+ }
+ else if (dq_lcd_bdl_value_aclcdlr_status_a==3)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_aclcdlr_max_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+2;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ run_command("reset",0);
+ }
+
+ }
+
+
+ if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==0)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==1)
+ )
+ {
+ if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==0))
+ { dq_lcd_bdl_value_bdlr0_status_a=1;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_bdlr0_status_a=2;
+
+ }
+ else if (dq_lcd_bdl_value_bdlr0_status_a==1)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_bdlr0_min_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_bdlr0_status_a=2;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
+ //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+5;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_bdlr0_status_a==2)||
+ (dq_lcd_bdl_value_bdlr0_status_a==3))
+ {
+
+ {
+ if(dq_lcd_bdl_value_bdlr0_status_a==2)
+ {
+
+ dq_lcd_bdl_value_bdlr0_status_a=3;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d",add_test_size,( 1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+
+ }
+ else if (dq_lcd_bdl_value_bdlr0_status_a==3)
+ {
+ temp_s= getenv(env_lcdlr_temp_count);
+ if(temp_s)
+ {
+ lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ }
+ dq_lcd_bdl_value_bdlr0_max_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ //ddr_udelay(1000000);
+ // num_to_env(varname,num_arry);
+
+ {
+ i=8+lane_step*8+6;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ run_command("reset",0);
+ }
+
+ }
+
+ /*
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+ */
+
+
+ ddr_test_watchdog_disable(); //s
+ {printf("close watchdog\n");
+ }
+
+
+ }
+
+
+
+ }
+
+ if (channel_b_en)
+ {//*(char *)(argv2[0])="b";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane b\n");
+ for ((lane_step=0);(lane_step<8);(lane_step++))
+ {
+ //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d",ddr_test_size,( lane_step));
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ }
+ }
+
+ unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+ if (channel_a_en)
+ {
+ acmdlr=((readl((DDR0_PUB_ACMDLR)))&ACLCDLR_MAX);
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_a[lane_step],
+ dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
+ dq_lcd_bdl_value_rdqs_org_a[lane_step],
+ dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
+ }
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ dq_lcd_bdl_value_aclcdlr_org_a,
+ dq_lcd_bdl_value_aclcdlr_min_a,dq_lcd_bdl_value_aclcdlr_max_a,
+ dq_lcd_bdl_value_bdlr0_org_a,
+ dq_lcd_bdl_value_bdlr0_min_a,dq_lcd_bdl_value_bdlr0_max_a);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ dq_lcd_bdl_value_aclcdlr_org_a,
+ (((dq_lcd_bdl_value_aclcdlr_max_a-dq_lcd_bdl_value_aclcdlr_org_a)*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_aclcdlr_org_a-dq_lcd_bdl_value_aclcdlr_min_a)*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
+ 2*dq_lcd_bdl_value_aclcdlr_org_a));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ dq_lcd_bdl_value_bdlr0_org_a,
+ 0,
+ 0,
+ (((dq_lcd_bdl_value_bdlr0_org_a-dq_lcd_bdl_value_bdlr0_min_a)*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_bdlr0_max_a-dq_lcd_bdl_value_bdlr0_org_a)*delay_step_x100
+ )/100),
+
+ 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
+ 2*dq_lcd_bdl_value_bdlr0_org_a));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_a[lane_step],
+ (((dq_lcd_bdl_value_wdq_max_a[lane_step]-dq_lcd_bdl_value_wdq_org_a[lane_step])*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_wdq_org_a[lane_step]-dq_lcd_bdl_value_wdq_min_a[lane_step])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(dq_lcd_bdl_value_wdq_max_a[lane_step]+dq_lcd_bdl_value_wdq_min_a[lane_step])/(
+ 2*dq_lcd_bdl_value_wdq_org_a[lane_step]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ dq_lcd_bdl_value_rdqs_org_a[lane_step],
+ 0,
+ 0,
+
+ (((dq_lcd_bdl_value_rdqs_org_a[lane_step]-dq_lcd_bdl_value_rdqs_min_a[lane_step])*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_rdqs_max_a[lane_step]-dq_lcd_bdl_value_rdqs_org_a[lane_step])*delay_step_x100
+ )/100),
+ 100*(dq_lcd_bdl_value_rdqs_max_a[lane_step]+dq_lcd_bdl_value_rdqs_min_a[lane_step])/(
+ 2*dq_lcd_bdl_value_rdqs_org_a[lane_step]));
+
+
+
+ }
+ }
+
+
+
+ if (channel_b_en)
+ {
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {;
+ }
+ }
+
+ return reg_value;
+}
+
+
+U_BOOT_CMD(
+ ddr_dqs_window_step, 6, 1, do_ddr_test_dqs_window_step,
+ "DDR tune dqs function",
+ "ddr_dqs_window_step a 0 0x800000 1 or ddr_dqs_window_step b 0 0x800000 5\n dcache off ? \n"
+);
+
+///*
+
+#endif
+
+int do_ddr2pll_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ extern int do_ddr2pll_g12_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
+ do_ddr2pll_g12_cmd(cmdtp,flag,argc, argv);
+ return 1;
+#endif
+
+#define DDR_TEST_CMD_TEST_ZQ 0
+#define DDR_TEST_CMD_TEST_AC_BIT_SETUP 1
+#define DDR_TEST_CMD_TEST_AC_BIT_HOLD 2
+#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_SETUP 3
+#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_HOLD 4
+#define DDR_TEST_CMD_TEST_DATA_READ_BIT_SETUP 5
+#define DDR_TEST_CMD_TEST_DATA_READ_BIT_HOLD 6
+#define DDR_TEST_CMD_TEST_DATA_VREF 7
+#define DDR_TEST_CMD_TEST_CLK_INVETER 8
+
+#define DDR_TEST_CMD_TEST_FULLTEST 0xffffffff
+ char *endp;
+ unsigned int pll, zqcr;
+ unsigned int zqpr_soc_dram=0;
+ unsigned int ddr_test_cmd_soc_vref=0;
+ unsigned int ddr_test_cmd_dram_vref=0;//0x3f;
+ unsigned int ddr_test_cmd_zq_vref=0;//0x3f;
+
+
+ unsigned int ddr_full_test_enable=0;
+ /*
+#define DDR3_DRV_40OHM 0
+#define DDR3_DRV_34OHM 1
+#define DDR3_ODT_0OHM 0
+#define DDR3_ODT_60OHM 1
+#define DDR3_ODT_120OHM 2
+#define DDR3_ODT_40OHM 3
+#define DDR3_ODT_20OHM 4
+#define DDR3_ODT_30OHM 5
+
+ // lpddr2 drv odt
+#define LPDDR2_DRV_34OHM 1
+#define LPDDR2_DRV_40OHM 2
+#define LPDDR2_DRV_48OHM 3
+#define LPDDR2_DRV_60OHM 4
+#define LPDDR2_DRV_80OHM 6
+#define LPDDR2_DRV_120OHM 7
+#define LPDDR2_ODT_0OHM 0
+
+ // lpddr3 drv odt
+#define LPDDR3_DRV_34OHM 1
+#define LPDDR3_DRV_40OHM 2
+#define LPDDR3_DRV_48OHM 3
+#define LPDDR3_DRV_60OHM 4
+#define LPDDR3_DRV_80OHM 6
+#define LPDDR3_DRV_34_40OHM 9
+#define LPDDR3_DRV_40_48OHM 10
+#define LPDDR3_DRV_34_48OHM 11
+#define LPDDR3_ODT_0OHM 0
+#define LPDDR3_ODT_60OHM 1
+#define LPDDR3_ODT_12OHM 2
+#define LPDDR3_ODT_240HM 3
+
+#define DDR4_DRV_34OHM 0
+#define DDR4_DRV_48OHM 1
+#define DDR4_ODT_0OHM 0
+#define DDR4_ODT_60OHM 1
+#define DDR4_ODT_120OHM 2
+#define DDR4_ODT_40OHM 3
+#define DDR4_ODT_240OHM 4
+#define DDR4_ODT_48OHM 5
+#define DDR4_ODT_80OHM 6
+#define DDR4_ODT_34OHM 7
+*/
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ unsigned int soc_data_drv_odt = 0;
+ //unsigned int dram_drv = 0;
+ //unsigned int dram_odt = 0;
+ /* need at least two arguments */
+ if (argc < 2)
+ goto usage;
+
+ pll = simple_strtoull_ddr(argv[1], &endp,0);
+ if (*argv[1] == 0 || *endp != 0) {
+ printf ("Error: Wrong format parament!\n");
+ return 1;
+ }
+ if (argc >2)
+ {
+ zqcr = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0) {
+ zqcr = 0;
+ }
+ }
+ else
+ {
+ zqcr = 0;
+ }
+
+ if(zqcr==0xffffffff)
+ {
+ ddr_full_test_enable=1;
+ zqcr=0;}
+
+ if (argc >3)
+ {
+ // soc_data_drv_odt=zqpr_soc_dram&0xfffff;
+ // dram_drv=(zqpr_soc_dram>>20)&0xf;
+ // dram_odt=(zqpr_soc_dram>>24)&0xf;
+ //bit28 enable soc_zqpr ,bit 29 enabe dram_drv bit 30 enabel dram_odt
+ zqpr_soc_dram = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0) {
+ zqpr_soc_dram = 0;
+ }
+ }
+ else
+ {
+ zqpr_soc_dram = 0;
+ }
+
+ if (argc >4)
+ {
+ ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ }
+ else
+ {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ if (argc >5)
+ {
+ ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ ddr_test_cmd_dram_vref = 0;
+ }
+ }
+ unsigned int soc_dram_hex_dec=0;
+ if (argc >6)
+ {
+ soc_dram_hex_dec = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0) {
+ soc_dram_hex_dec = 0;
+ }
+ }
+ if (argc >7)
+ {
+ ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0) {
+ ddr_test_cmd_zq_vref = 0;
+ }
+ }
+
+
+
+ unsigned int soc_dram_drv_odt_use_vlaue=0;
+ unsigned int soc_ac_drv=0;
+ unsigned int soc_ac_odt=0;
+ unsigned int soc_data_drv=0;
+ unsigned int soc_data_odt=0;
+ unsigned int dram_drv=0;
+ unsigned int dram_odt=0;
+ unsigned int soc_data_drv_odt_adj_enable=0;
+ unsigned int dram_data_drv_adj_enable=0;
+ unsigned int dram_data_odt_adj_enable=0;
+
+ unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
+ unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
+ unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
+#define DDR_TYPE_LPDDR2 0
+#define DDR_TYPE_LPDDR3 1
+#define DDR_TYPE_DDR3 3
+#define DDR_TYPE_DDR4 4
+ unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
+ // unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
+ if (argc >8)
+ {
+ soc_dram_drv_odt_use_vlaue = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0) {
+ soc_dram_drv_odt_use_vlaue = 0;
+ }
+ }
+ if(soc_dram_drv_odt_use_vlaue)
+ {if(zqcr)
+ {printf("zqcr[0x%08x],\n", zqcr);
+ {
+ soc_ac_drv=zqcr%100;
+ if(soc_ac_drv>100)
+ {soc_ac_drv=0;}
+ if(soc_ac_drv==0)
+ {soc_ac_drv=1;}
+ soc_ac_drv=(480/soc_ac_drv)-1;
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(soc_ac_drv>0xf)
+ {soc_ac_drv=zq0pr_org&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(soc_ac_drv>0xf)
+ {soc_ac_drv=(zq0pr_org>>8)&0xf;}
+ }
+ }
+
+
+ {
+ soc_ac_odt=zqcr/100;
+ if(soc_ac_odt>240)
+ {soc_ac_odt=480;}
+ if(soc_ac_odt==0)
+ {soc_ac_odt=1;}
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ soc_ac_odt=(360/soc_ac_odt)-1;
+ if(soc_ac_odt>0xf)
+ {soc_ac_odt=(zq0pr_org>>4)&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ soc_ac_odt=(480/soc_ac_odt)-1;
+ if(soc_ac_odt>0xf)
+ {soc_ac_odt=(zq0pr_org>>16)&0xf;}
+ }
+ }
+
+ zqcr=(soc_ac_odt<<16)|(soc_ac_drv<<12)|(soc_ac_drv<<8)|(soc_ac_odt<<4)|(soc_ac_drv);
+ printf("zqcr[0x%08x],soc_ac_odt [0x%08x],soc_ac_drv [0x%08x]\n", zqcr,soc_ac_odt,soc_ac_drv);
+ }
+ if(zqpr_soc_dram)
+ {printf("zqpr_soc_dram[0x%08x],\n", zqpr_soc_dram);
+ {
+ soc_data_drv=zqpr_soc_dram%100;
+ printf("soc_data_drv[%d],\n", soc_data_drv);
+ if(soc_data_drv>100)
+ {soc_data_drv=0;
+
+ }
+ if(soc_data_drv==0)
+ {soc_data_drv=1;
+ //soc_data_drv_odt_adj_enable=0;
+ }
+ else
+ {//soc_data_drv_odt_adj_enable=1;
+ }
+ soc_data_drv=(480/soc_data_drv)-1;
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(soc_data_drv>0xf)
+ {soc_data_drv=zq1pr_org&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(soc_data_drv>0xf)
+ {soc_data_drv=(zq1pr_org>>8)&0xf;}
+ }
+ }
+
+
+ {
+ soc_data_odt=(zqpr_soc_dram/100)%1000;
+ printf("soc_data_odt[%d],\n", soc_data_odt);
+ if(soc_data_odt>240)
+ {soc_data_odt=360;}
+ if(soc_data_odt==0)
+ {soc_data_odt=1;}
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ soc_data_odt=(360/soc_data_odt)-1;
+ if(soc_data_odt>0xf)
+ {soc_data_odt=(zq1pr_org>>4)&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ soc_data_odt=(480/soc_data_odt)-1;
+ if(soc_data_odt>0xf)
+ {soc_data_odt=(zq1pr_org>>16)&0xf;}
+ }
+
+ }
+
+ soc_data_drv_odt_adj_enable=1;
+
+ {
+ dram_drv=(zqpr_soc_dram/100000)%100;
+ printf("dram_drv[%d],\n", dram_drv);
+
+ if(dram_drv>100)
+ {dram_drv=0;}
+ if(dram_drv==0)
+ {
+ dram_data_drv_adj_enable=0;}
+ else
+ {dram_data_drv_adj_enable=1;
+ }
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(dram_drv>=40)
+ {dram_drv=0;}
+
+ else
+ {dram_drv=1;
+ }
+ }
+
+
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(dram_drv<48)
+ {dram_drv=0;}
+
+ else
+ {dram_drv=1;
+ }
+ }
+ }
+
+
+ {
+ dram_odt=(zqpr_soc_dram/100000)/100;
+ printf("dram_odt[%d],\n", dram_odt);
+ if(dram_odt>240)
+ {dram_odt=480;}
+ if(dram_odt==0)
+ {
+ dram_data_odt_adj_enable=0;
+ }
+ else
+ {dram_data_odt_adj_enable=1;
+ }
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(dram_odt>160)
+ {dram_odt=0;}
+ else if (dram_odt>90)
+ {dram_odt=2;}
+ else if (dram_odt>50)
+ {dram_odt=1;}
+ else if (dram_odt>35)
+ {dram_odt=3;}
+ else if (dram_odt>25)
+ {dram_odt=5;}
+ else if (dram_odt<=25)
+ {dram_odt=4;}
+
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(dram_odt>280)
+ {dram_odt=0;}
+ else if (dram_odt>180)
+ {dram_odt=4;}
+ else if (dram_odt>100)
+ {dram_odt=2;}
+ else if (dram_odt>70)
+ {dram_odt=6;}
+ else if (dram_odt>54)
+ {dram_odt=1;}
+ else if (dram_odt>44)
+ {dram_odt=5;}
+ else if (dram_odt>37)
+ {dram_odt=3;}
+ else if (dram_odt<=34)
+ {dram_odt=7;}
+
+ }
+
+
+
+ }
+
+ zqpr_soc_dram=(dram_data_odt_adj_enable<<30)|(dram_data_drv_adj_enable<<29)|(soc_data_drv_odt_adj_enable<<28)|
+ (dram_odt<<24)|(dram_drv<<20)|(soc_data_odt<<16)|(soc_data_drv<<12)|(soc_data_drv<<8)|(soc_data_odt<<4)|(soc_data_drv);
+ }
+ }
+
+
+ if (soc_dram_hex_dec)
+ {
+ if (argc >4)
+ {
+ ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ }
+ else
+ {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ if (argc >5)
+ {
+ ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ ddr_test_cmd_dram_vref = 0;
+ }
+ }
+ if (argc >7)
+ {
+ ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0) {
+ ddr_test_cmd_zq_vref = 0;
+ }
+ }
+ if (ddr_test_cmd_soc_vref)
+ {
+ if (ddr_test_cmd_soc_vref<45)
+ ddr_test_cmd_soc_vref=45;
+ if (ddr_test_cmd_soc_vref>88)
+ ddr_test_cmd_soc_vref=88;
+ ddr_test_cmd_soc_vref=(ddr_test_cmd_soc_vref*100-4407)/70;
+ }
+
+ if (ddr_test_cmd_dram_vref)
+ {
+ if (ddr_test_cmd_dram_vref<45)
+ ddr_test_cmd_dram_vref=45;
+ if (ddr_test_cmd_dram_vref>92)
+ ddr_test_cmd_dram_vref=92;
+ if (ddr_test_cmd_dram_vref>60) {
+ ddr_test_cmd_dram_vref=(ddr_test_cmd_dram_vref*100-6000)/65;
+ }
+ else{
+ ddr_test_cmd_dram_vref=((ddr_test_cmd_dram_vref*100-4500)/65)|(1<<6);
+ }
+ }
+
+
+ printf("\nSet ddr_test_cmd_dram_vref [0x%08x]\n",ddr_test_cmd_dram_vref);
+ if (ddr_test_cmd_zq_vref == 0)
+ ddr_test_cmd_zq_vref=0;
+ if (ddr_test_cmd_zq_vref) {
+ if (ddr_test_cmd_zq_vref<45)
+ ddr_test_cmd_zq_vref=45;
+ if (ddr_test_cmd_zq_vref>88)
+ ddr_test_cmd_zq_vref=88;
+ ddr_test_cmd_zq_vref=(ddr_test_cmd_zq_vref*100-4407)/70;
+ }
+ }
+
+ //if(ddr_test_cmd_type==DDR_TEST_CMD_TEST_AC_BIT_HOLD)
+ //{if (ddr_test_cmd_clk_seed ==0)
+ //ddr_test_cmd_clk_seed = 0x3f;
+ //if (ddr_test_cmd_acbdl_x_seed ==0)
+ //ddr_test_cmd_acbdl_x_seed = 0x3f;
+ //}
+
+#if defined(CONFIG_M6TV) || defined(CONFIG_M6TVD)
+ writel(zqcr | (0x3c << 24), PREG_STICKY_REG0);
+#else
+ writel(zqcr | (0xf13 << 20), PREG_STICKY_REG0);
+#endif
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ writel((ddr_test_cmd_zq_vref<<24)|(ddr_test_cmd_soc_vref<<8)|ddr_test_cmd_dram_vref , PREG_STICKY_REG9);
+ writel((zqpr_soc_dram<<0) , PREG_STICKY_REG8);
+ soc_data_drv_odt=zqpr_soc_dram&0xfffff;
+ dram_drv=(zqpr_soc_dram>>20)&0xf;
+ dram_odt=(zqpr_soc_dram>>24)&0xf;
+ printf("setting zqpr_soc_dram [0x%08x],..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n", zqpr_soc_dram);
+ printf("soc_data_drv_odt [0x%08x],dram_drv [0x%08x],dram_odt [0x%08x]\n", soc_data_drv_odt,dram_drv,dram_odt);
+ if(ddr_full_test_enable)
+ {
+ pll=(ddr_full_test_enable<<21)|pll;
+ printf("ddr_full_test_enable %08x,set sticky reg1 bit 21 1\n", ddr_full_test_enable);
+ }
+
+#endif
+
+
+ writel(pll, PREG_STICKY_REG1);
+
+ printf("Set pll done [0x%08x]\n", readl(PREG_STICKY_REG1));
+ printf("Set STICKY_REG0 [0x%08x]\n", readl(PREG_STICKY_REG0));
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ printf("Set STICKY_REG9 [0x%08x]\n", readl(PREG_STICKY_REG9));
+ printf("Set STICKY_REG8 [0x%08x]\n", readl(PREG_STICKY_REG8));
+
+#endif
+ printf("\nbegin reset 111...........\n");
+ printf("\nbegin reset 2...........\n");
+ printf("\nbegin reset 3...........\n");
+
+#ifdef CONFIG_M8B
+ printf(" t1 \n");
+ writel(0xf080000 | 2000, WATCHDOG_TC);
+#else
+ printf(" t2 \n");
+ // writel(WATCHDOG_TC, 0xf400000 | 2000);
+ // *P_WATCHDOG_RESET = 0;
+ ddr_test_watchdog_reset_system();
+#endif
+ while(1);
+ return 0;
+
+usage:
+
+ printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
+ printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
+ printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
+ printf("or ddr_test_cmd 0x17 1200 6034 0603406034 0 0 0 0 1 \n");
+ printf("setting zqpr_soc_dram ,..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n");
+ printf("setting zqpr_soc_dram ,bit0-bit19 soc_data_drv_odt,bit20-bit24 dram_drv , bit24-bit28 dram_odt\n");
+ printf("setting zqpr_soc_dram ,bit0-bit19 bit 0-7 use for ddr3,bit8-19 use for ddr4,odt_down_up\n");
+ printf("setting zqpr_soc_dram ,soc_drv=(480/((setting)+1));ddr4---soc_odt=(480/(setting)+1));ddr3---soc_odt=(360/(setting)+1));\n");
+
+ printf(" DDR3_DRV_40OHM 0\n");
+ printf(" DDR3_DRV_34OHM 1\n\n");
+
+ printf(" DDR3_ODT_0OHM 0\n");
+ printf(" DDR3_ODT_60OHM 1\n");
+ printf(" DDR3_ODT_120OHM 2\n");
+ printf(" DDR3_ODT_40OHM 3\n");
+ printf(" DDR3_ODT_20OHM 4\n");
+ printf(" DDR3_ODT_30OHM 5\n\n\n");
+
+ printf(" LPDDR2_DRV_34OHM 1\n");
+ printf(" LPDDR2_DRV_40OHM 2\n");
+ printf(" LPDDR2_DRV_48OHM 3\n");
+ printf(" LPDDR2_DRV_60OHM 4\n");
+ printf(" LPDDR2_DRV_80OHM 6\n");
+ printf(" LPDDR2_DRV_120OHM 7\n\n");
+
+ printf(" LPDDR2_ODT_0OHM 0\n\n\n");
+
+
+ printf(" LPDDR3_DRV_34OHM 1\n");
+ printf(" LPDDR3_DRV_40OHM 2\n");
+ printf(" LPDDR3_DRV_48OHM 3\n");
+ printf(" LPDDR3_DRV_60OHM 4\n");
+ printf(" LPDDR3_DRV_80OHM 6\n");
+ printf(" LPDDR3_DRV_34_40OHM 9\n");
+ printf(" LPDDR3_DRV_40_48OHM 10\n");
+ printf(" LPDDR3_DRV_34_48OHM 11\n\n");
+
+ printf(" LPDDR3_ODT_0OHM 0\n");
+ printf(" LPDDR3_ODT_60OHM 1\n");
+ printf(" LPDDR3_ODT_12OHM 2\n");
+ printf(" LPDDR3_ODT_240HM 3\n\n\n");
+
+ printf(" DDR4_DRV_34OHM 0\n");
+ printf(" DDR4_DRV_48OHM 1\n\n");
+
+ printf(" DDR4_ODT_0OHM 0\n");
+ printf(" DDR4_ODT_60OHM 1\n");
+ printf(" DDR4_ODT_120OHM 2\n");
+ printf(" DDR4_ODT_40OHM 3\n");
+ printf(" DDR4_ODT_240OHM 4\n");
+ printf(" DDR4_ODT_48OHM 5\n");
+ printf(" DDR4_ODT_80OHM 6\n");
+ printf(" DDR4_ODT_34OHM 7\n\n\n\n");
+
+
+ cmd_usage(cmdtp);
+ return 1;
+}
+
+int do_ddr_uboot_new_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ //ddr_test_cmd 0x36 0x20180030 0x1 cmd_offset cmd_value value_size reset_enable
+#if 1
+ //#define DDR_USE_DEFINE_TEMPLATE_CONFIG 1
+ //#define DDR_STICKY_MAGIC_NUMBER 0x20180000
+ //#define DDR_CHIP_ID 0x30
+ //#define DDR_STICKY_SOURCE_DMC_STICKY 0x1
+ //#define DDR_STICKY_SOURCE_SRAM 0x2
+ //dmc sticky reg default not 0. need use common sticky reg as identity
+
+#if 0
+ unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL0);
+ extern int pll_convert_to_ddr_clk_g12a(unsigned int);
+ global_ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
+#endif
#define DDR_STICKY_OVERRIDE_CONFIG_MESSAGE_CMD 0x1 //override config
-#define DDR_STICKY_SPECIAL_FUNCTION_CMD 0x2 //special test such as shift some bdlr or parameter or interleave test
-
-#define G12_DMC_STICKY_0 ((0x0000 << 2) + 0xff638800)
- uint32_t magic_chipid= 0;//rd_reg(P_PREG_STICKY_REG0);
- uint32_t sticky_cmd = 0;//rd_reg(P_PREG_STICKY_REG1);
- uint32_t cmd_offset = 0;
- uint32_t cmd_value = 0;
- uint32_t reset_enable = 0;
- uint32_t value_size = 4;
- char *endp;
- //bit 0 trigger effect reset.
- if ((magic_chipid) != ((DDR_STICKY_MAGIC_NUMBER+DDR_CHIP_ID)&0xffff0000)) {
- //magic number not match
- // magic_chipid=DDR_STICKY_MAGIC_NUMBER+DDR_CHIP_ID;
- // sticky_cmd=DDR_STICKY_OVERRIDE_CONFIG_MESSAGE_CMD;
- printf("sticky0 magic not match\n");
-
- }
-
-
- // wr_reg(P_PREG_STICKY_REG0, 0);
- // wr_reg(P_PREG_STICKY_REG1, 0);
-
-
-
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
-
-
- if (argc < 2)
- goto usage;
-
- magic_chipid = simple_strtoull_ddr(argv[1], &endp,0);
- if (*argv[1] == 0 || *endp != 0) {
- printf ("Error: Wrong format parament!\n");
- return 1;
- }
- if (argc >2)
- {
- sticky_cmd = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0) {
- sticky_cmd = 0;
- }
- }
-
- if (argc >3)
- {
- cmd_offset = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0) {
- cmd_offset = 0;
- }
- }
- if (argc >4)
- {
- cmd_value= simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- cmd_value = 0;
- }
- }
- if (argc >5)
- {
- value_size= simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- value_size = 4;
- }
- }
- if (argc >6)
- {
- reset_enable= simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0) {
- reset_enable = 0;
- }
- }
- printf("cmd_offset[0x%08x}==cmd_value [0x%08x]\n", cmd_offset,cmd_value);
- writel((magic_chipid&0xffff0000)|(rd_reg(PREG_STICKY_REG0)), PREG_STICKY_REG0);
- writel(sticky_cmd, PREG_STICKY_REG1);
-
- uint32_t read_value = 0;
- if(value_size)
- {
- read_value=rd_reg(G12_DMC_STICKY_0+((cmd_offset/4)<<2));
- if(value_size==1){
- wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xff<<((cmd_offset%4)*8))))));
- }
- if(value_size==2){
- wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xffff<<((cmd_offset%4)*8))))));
- }
- if(value_size==4){
- // wr_reg((G12_DMC_STICKY_0+cmd_offset/4), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xffff<<((cmd_offset%4)*8))))));
- wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), cmd_value);
- }
-
-
-
-
- printf("DMC_STICKY_0_ offset[0x%08x}== [0x%08x]\n", cmd_offset,readl((G12_DMC_STICKY_0+((cmd_offset/4)<<2))));
- }
-
-
- printf("PREG_STICKY_REG0== [0x%08x]\n", readl(PREG_STICKY_REG0));
-
- if(reset_enable)
- {
- ddr_test_watchdog_reset_system();
-
- while(1);
- }
- return 0;
-
-usage:
-
-
-
-
-
- cmd_usage(cmdtp);
-
-#endif
- return 1;
-}
-
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
-int do_ddr_test_ac_bit_setup_hold_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test ddr ac bit window function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- unsigned int ddl_100step_ps= 0;
-
- unsigned int temp_test_error= 0;
- unsigned int temp_count= 0;
- unsigned int temp_reg_value[40];
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_ac_setup_hold=0;
- //unsigned int testing_seed=0;
- // unsigned int test_lane_step_rdqs_flag=0;
- unsigned int test_acbdl=0;
- // unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
-
-
- unsigned int acbdlr0_reg_org=0;
- unsigned int acbdlr_x_reg_org=0;
- unsigned int acbdlr_x_reg_hold_min=0;
- // unsigned int acbdlr_x_reg_hold_min=0;
- unsigned int acbdlr_x_reg_setup_max=0;
- // unsigned int acbdlr_x_reg_setup_max=0;
- // unsigned int dq_lcd_bdl_reg_left=0;
- // unsigned int dq_lcd_bdl_reg_right=0;
-
-
- // unsigned int dq_lcd_bdl_reg_left_min=0;
- // unsigned int dq_lcd_bdl_reg_right_min=0;
-
- unsigned int dq_lcd_bdl_temp_reg_value=0;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
- {
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_ac_setup_hold = 0;
- test_ac_setup_hold = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_ac_setup_hold = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_ac_setup_hold = 0;
- }
- }
- if (test_ac_setup_hold >1)
- test_ac_setup_hold = 2;
- if (argc >5) {
-
- test_acbdl= simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_acbdl = 0;
- }
- if (test_acbdl>39)
- test_acbdl =12;//default test cs0 pin
- }
- }
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_ac_setup_hold== 0x%08x\n", test_ac_setup_hold);
- printf("\ntest_acbdl== 0x%08x\n", test_acbdl);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- }////save and print org training dqs value
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
-
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- printf("\nshould pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
-
-
- for ((temp_count=0);(temp_count<10);(temp_count++))
- {
- acbdlr0_9_reg_org[temp_count]=(readl(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
-
- };
-
-
- {
- ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
- printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
- ((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff));
-
- reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
- acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
- acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
- printf("\nacbdlr0_reg_0x%08x_org==0x%08x | acbdlr_x_reg_0x%08x_org==0x%08x\n ",(DDR0_PUB_ACBDLR0+reg_base_adj),
- acbdlr0_reg_org,(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj),acbdlr_x_reg_org);
- if (test_ac_setup_hold == 0)
- {
- printf("\ntest_ac_setup\n ");
-
-
- //writel(0,(DDR0_PUB_ACBDLR0+reg_base_adj));
- dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
-
-
- //{writel((dq_lcd_bdl_temp_reg_value&(~(0xff<<(8*(test_acbdl%4))))),((test_acbdl/4)*4+DDR0_PUB_ACBDLR0+reg_base_adj));
- //}
-
-
-
- reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- dq_lcd_bdl_temp_reg_value=((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff);
- while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
- ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
-
- {
- writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
-
- }
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
- printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff),dq_lcd_bdl_temp_reg_value,
- ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
-
- {acbdlr_x_reg_setup_max=dq_lcd_bdl_temp_reg_value;}
-
- dq_lcd_bdl_temp_reg_value=0;
- //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
- writel(((acbdlr_x_reg_org)),reg_add);
- //test_ac_setup_hold=1;
- {
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
- readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
- printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
- printf("acbdlr_x_reg_setup_max 0x%08x \
- setup time==0x%08x, %08d ps \n ",
- acbdlr_x_reg_setup_max,(acbdlr_x_reg_setup_max-
- ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)),((acbdlr_x_reg_setup_max-
- ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)) *ddl_100step_ps)/100
- );
- acbdlr0_9_reg_setup_max[test_acbdl]=(acbdlr_x_reg_setup_max-
- ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff));
- acbdlr0_9_reg_setup_time[test_acbdl]=((acbdlr_x_reg_setup_max-
- ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)) *ddl_100step_ps)/100;
- for ((temp_count=0);(temp_count<10);(temp_count++))
- {
- writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
-
- };
-
- }
-
- }
-
- if (test_ac_setup_hold == 1)
- {
- printf("\ntest_ac_hold 1\n ");
- acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
- acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
- printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
-
-
- printf("\nacbdlr0_reg==0x%08x | acbdlr_x_reg==0x%08x\n ",
- readl(DDR0_PUB_ACBDLR0+reg_base_adj),readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
-
- reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- dq_lcd_bdl_temp_reg_value=((dq_lcd_bdl_temp_reg_value>>(8*(test_acbdl%4)))&0xff);
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value--;
- printf("\n reg==0x%08x, left temp==0x%08x\n ,value==0x%08x ",reg_add,dq_lcd_bdl_temp_reg_value,
- ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
-
- {
- writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
-
- }
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\n left edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
- printf("\n org==0x%08x,left edge==0x%08x\n ",((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff),dq_lcd_bdl_temp_reg_value);
-
- {acbdlr_x_reg_hold_min=dq_lcd_bdl_temp_reg_value;}
-
-
- //test_ac_setup_hold=1;
- //writel(acbdlr0_reg_org,(DDR0_PUB_ACBDLR0+reg_base_adj));
- writel(acbdlr_x_reg_org,(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
- //dq_lcd_bdl_temp_reg_value=0;
- // writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
- {
-
-
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
- readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
- printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
- printf("acbdlr_x_reg_hold_min==0x%08x \
- holdup time==0x%08x, %08d ps\n ",
- acbdlr_x_reg_hold_min,
- (((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min),
- ((((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min)*ddl_100step_ps)/100);
-
- }
- acbdlr0_9_reg_hold_max[test_acbdl]=(((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min);
- acbdlr0_9_reg_hold_time[test_acbdl]=((((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min)*ddl_100step_ps)/100;
-
- for ((temp_count=0);(temp_count<10);(temp_count++))
- {
- writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
-
- };
-
- }
-
- if (test_ac_setup_hold == 2)
- {
- printf("\ntest_ac_hold 2 method\n ");
- acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
- acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
- printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
-
-
- printf("\nacbdlr0_reg==0x%08x | acbdlr_x_reg==0x%08x\n ",
- readl(DDR0_PUB_ACBDLR0+reg_base_adj),readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
-
- reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- //dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
- //dq_lcd_bdl_temp_reg_value=((dq_lcd_bdl_temp_reg_value>>(8*(test_acbdl%4)))&0xff);
- dq_lcd_bdl_temp_reg_value=(readl(DDR0_PUB_ACBDLR0+reg_base_adj)&0xff);
- while (dq_lcd_bdl_temp_reg_value<0x3f)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- printf("\n reg==0x%08x, right temp==0x%08x,value==0x%08x\n ",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj),dq_lcd_bdl_temp_reg_value,
- ((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
- |(dq_lcd_bdl_temp_reg_value<<(24)))&(~(0xff<<(8*(test_acbdl%4)))))|(acbdlr_x_reg_org&((0xff<<(8*(test_acbdl%4))))));
- /*
- {
- for ((temp_count=0);(temp_count<10);(temp_count++))
- {
- writel((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
- |(dq_lcd_bdl_temp_reg_value<<(24))),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
- };
-
- writel(((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
- |(dq_lcd_bdl_temp_reg_value<<(24)))&(~(0xff<<(8*(test_acbdl%4)))))|(acbdlr_x_reg_org&((0xff<<(8*(test_acbdl%4))))),
- (((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
-
- }
- */
-
- {
- for ((temp_count=0);(temp_count<40);(temp_count++))
- {if(temp_count==(test_acbdl))
- {
- temp_reg_value[temp_count]=((readl(DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
- reg_base_adj))>>(8*(temp_count%4)))&0xff;
- }else
- {
- temp_reg_value[temp_count]=(((readl(DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
- reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
- }
- temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
-
- };
- for ((temp_count=0);(temp_count<40);(temp_count++))
- {
- writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
- |((temp_reg_value[temp_count+3])<<(24)))),
- (DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
- reg_base_adj));
- temp_count=temp_count+3;
- };
- printf("\n reg_bdlr_ck==0x%08x,right temp==0x%08x\n,ck_value==0x%08x",(DDR0_PUB_ACBDLR0+
- reg_base_adj),(dq_lcd_bdl_temp_reg_value),
- (readl(DDR0_PUB_ACBDLR0+
- reg_base_adj)));
- printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",(DDR0_PUB_ACBDLR0+(((test_acbdl)>>2)<<2)+
- reg_base_adj),(dq_lcd_bdl_temp_reg_value),
- (readl(DDR0_PUB_ACBDLR0+(((test_acbdl)>>2)<<2)+
- reg_base_adj)));
-
- }
-
-
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
- printf("\norg==0x%08x, right edge==0x%08x\n ",acbdlr0_reg_org&0xff,dq_lcd_bdl_temp_reg_value);
-
- {acbdlr_x_reg_hold_min=dq_lcd_bdl_temp_reg_value;}
-
-
- //test_ac_setup_hold=1;
- dq_lcd_bdl_temp_reg_value=0;
-
- {
-
-
- printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
- readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
- printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
- printf("acbdlr_x_reg_hold_max==0x%08x \
- holdup time==0x%08x, %08d ps\n ",
- acbdlr_x_reg_hold_min,
- ((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))),((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))*ddl_100step_ps)/100);
-
- }
- acbdlr0_9_reg_hold_max[test_acbdl]=((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff)));
- acbdlr0_9_reg_hold_time[test_acbdl]=((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))*ddl_100step_ps)/100;
- for ((temp_count=0);(temp_count<10);(temp_count++))
- {
- writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
-
- };
-
- }
- }
- }
-
- }
-
- // ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
-
-
-
- printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)));
-
- printf("\nresume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29)),(DDR0_PUB_REG_BASE+4));
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
-
- return dq_lcd_bdl_temp_reg_value;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
- }
-}
-
-U_BOOT_CMD(
- ddr_test_ac_bit_setup_hold_window, 6, 1, do_ddr_test_ac_bit_setup_hold_window,
- "DDR test ac bit margin function",
- "do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c or do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 2 c \n dcache off ? \n"
- //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 setup/hold pin_id //c --- cs ,,8 --- ba0
-);
-
-int do_ddr_test_data_bit_setup_hold_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- printf("\nEnter test ddr data bit window function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- unsigned int ddl_100step_ps= 0;
-
- unsigned int temp_test_error= 0;
- unsigned int temp_count= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_data_setup_hold=0;
- //unsigned int testing_seed=0;
- // unsigned int test_lane_step_rdqs_flag=0;
- unsigned int open_vt=0;
- unsigned int test_bdl=0;
- // unsigned int test_times=1;
- // unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int reg_bdlrck=0;
- unsigned int reg_bdlr_x=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
-
-
- unsigned int bdlrck_reg_org=0;
- unsigned int bdlr_x_reg_org=0;
- // unsigned int bdlr_x_reg_hold_min=0;
- // unsigned int acbdlr_x_reg_hold_min=0;
- unsigned int bdlr_x_reg_setup_max=0;
- unsigned int bdlr_x_reg_hold_max=0;
- // unsigned int acbdlr_x_reg_setup_max=0;
- // unsigned int dq_lcd_bdl_reg_left=0;
- // unsigned int dq_lcd_bdl_reg_right=0;
-
-
- // unsigned int dq_lcd_bdl_reg_left_min=0;
- // unsigned int dq_lcd_bdl_reg_right_min=0;
-
- unsigned int dq_lcd_bdl_temp_reg_value=0;
- unsigned int temp_reg_value[24];
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
-
-
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
- {
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_data_setup_hold = 0;
- test_data_setup_hold = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_data_setup_hold = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_data_setup_hold = 0;
- }
- }
- if (test_data_setup_hold >1)
- test_data_setup_hold = 1;
- if (argc >5) {
-
- test_bdl= simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_bdl = 0;
- }
- if (test_bdl>96)
- test_bdl =0;
- }
- if (argc >6) {
-
- open_vt= simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- open_vt = 0;
- }
- //if(open_vt)
- // open_vt =1;
- }
- }
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_data_setup_hold== 0x%08x\n", test_data_setup_hold);
- printf("\ntest_bdl== 0x%08x\n", test_bdl);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- }////save and print org training dqs value
-
-
-
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
-
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
-
- printf("\nshould pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- for ((temp_count=0);(temp_count<28);(temp_count++))
- {
- //data_bdlr0_5_reg_org[temp_count]=(((readl(((temp_count>>2)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/6)+reg_base_adj))
- // >>(8*(test_bdl%4)))&0xff);
- data_bdlr0_5_reg_org[temp_count]=((readl(((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj))
- );
- };
-
-
- {
- ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_DX0MDLR0+reg_base_adj)))>>16)&0xff);
- printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
- ((((readl(DDR0_PUB_DX0MDLR0+reg_base_adj)))>>16)&0xff));
-
- //reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
- reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- if ((test_bdl%24)>11)
- {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
- }
- bdlrck_reg_org=readl(reg_bdlrck) ;
- bdlr_x_reg_org=readl(reg_bdlr_x);
- printf("\ntest_bdl %08x | data_setup_hold==0x%08x\n ",test_bdl,test_data_setup_hold);
- printf("\nbdlr0_reg_0x%08x_org==0x%08x | bdlr_x_reg_0x%08x_org==0x%08x\n ",reg_bdlrck,
- bdlrck_reg_org,reg_bdlr_x,bdlr_x_reg_org);
- if (test_data_setup_hold == 0)
- {
- printf("\ntest_data_setup\n ");
-
-
-
- reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- if ((test_bdl%24)>11)
- {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
- }
- bdlrck_reg_org=readl(reg_bdlrck) ;
- bdlr_x_reg_org=readl(reg_bdlr_x);
-
- dq_lcd_bdl_temp_reg_value=((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff);
- while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
- ((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))));
-
- {
- writel(((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))),reg_bdlr_x);
-
- }
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
- printf("\n right edge detect ,reg==0x%08x\n",(reg_bdlr_x));
- printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff),dq_lcd_bdl_temp_reg_value,
- ((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))));
-
- {bdlr_x_reg_setup_max=dq_lcd_bdl_temp_reg_value;}
-
- dq_lcd_bdl_temp_reg_value=0;
- //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
- writel(((bdlr_x_reg_org)),reg_bdlr_x);
- //test_ac_setup_hold=1;
- {
- printf("\ntest_bdl %08x | data_setup_hold==0x%08x mdlr==0x%08x ddl_100step_ps==%08d\n",test_bdl,test_data_setup_hold,
- readl(DDR0_PUB_DX0MDLR0+reg_base_adj),ddl_100step_ps);
- printf("\nbdlr_ck_reg_org==0x%08x | bdlr_x_reg_org==0x%08x\n ",bdlrck_reg_org,bdlr_x_reg_org);
- printf("acbdlr_x_reg_setup_max 0x%08x \
- setup time==0x%08x, %08d ps \n ",
- bdlr_x_reg_setup_max,(bdlr_x_reg_setup_max-
- ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)),((bdlr_x_reg_setup_max-
- ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)) *ddl_100step_ps)/100
- );
- bdlr0_9_reg_setup_max[test_bdl]=(bdlr_x_reg_setup_max-
- ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff));
- bdlr0_9_reg_setup_time[test_bdl]=((bdlr_x_reg_setup_max-
- ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)) *ddl_100step_ps)/100;
- for ((temp_count=0);(temp_count<28);(temp_count++))
- {
- writel(((data_bdlr0_5_reg_org[temp_count])),
- (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj));
-
- };
-
- }
-
- }
-
-
-
-
- if (test_data_setup_hold)
- {
- printf("\ntest_data_hold\n ");
-
-
-
- reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
- if ((test_bdl%24)>11)
- {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
- }
- bdlrck_reg_org=readl(reg_bdlrck) ;
- bdlr_x_reg_org=readl(reg_bdlr_x);
-
- dq_lcd_bdl_temp_reg_value=((bdlrck_reg_org>>(8*(1)))&0xff);
- while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- printf("\n reg_bdlr_ck==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_bdlrck,dq_lcd_bdl_temp_reg_value,
- (((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))));
-
- {
- // writel((((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))),reg_bdlrck);
-
- }
-
-
-
- if (((test_bdl%24)<12))
- {
- for ((temp_count=0);(temp_count<12);(temp_count++))
- {if(temp_count==(test_bdl%24))
- {
- temp_reg_value[temp_count]=((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff;
- }else
- {
- temp_reg_value[temp_count]=(((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
- }
- temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
-
- };
- for ((temp_count=0);(temp_count<12);(temp_count++))
- {
- writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
- |((temp_reg_value[temp_count+3])<<(24)))),
- (DDR0_PUB_DX0BDLR0+(((temp_count%24)>>2)<<2)+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj));
- temp_count=temp_count+3;
- };
- printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
- (readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj)));
-
- }
-
-
- if (((test_bdl%24) >= 12))
- {
- for ((temp_count=12);(temp_count<24);(temp_count++))
- {if(temp_count==(test_bdl%24))
- {
- temp_reg_value[temp_count]=((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff;
- }else
- {
- temp_reg_value[temp_count]=(((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
- }
- temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
-
- };
- for ((temp_count=12);(temp_count<24);(temp_count++))
- {
- writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
- |((temp_reg_value[temp_count+3])<<(24)))),
- (DDR0_PUB_DX0BDLR0+(((temp_count%24)>>2)<<2)+4+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj));
- temp_count=temp_count+3;
- };
- printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
- (readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
- (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj)));
- }
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- dq_lcd_bdl_temp_reg_value--;
- break;
- }
- }
-
- printf("\n right edge detect ,reg==0x%08x\n",(reg_bdlrck));
- printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((bdlrck_reg_org>>(8*(1)))&0xff),dq_lcd_bdl_temp_reg_value,
- (((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))));
-
- {bdlr_x_reg_hold_max=dq_lcd_bdl_temp_reg_value;}
-
- dq_lcd_bdl_temp_reg_value=0;
- //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
- writel(((bdlrck_reg_org)),reg_bdlrck);
- //test_ac_setup_hold=1;
- {
- printf("\ntest_bdl %08x | data_setup_hold==0x%08x mdlr==0x%08x ddl_100step_ps==%08d\n",test_bdl,test_data_setup_hold,
- readl(DDR0_PUB_DX0MDLR0+reg_base_adj),ddl_100step_ps);
- printf("\nbdlr_ck_reg_org==0x%08x | bdlr_x_reg_org==0x%08x\n ",bdlrck_reg_org,bdlr_x_reg_org);
- printf("acbdlr_x_reg_hold_max 0x%08x \
- hold time==0x%08x, %08d ps \n ",
- bdlr_x_reg_hold_max,(bdlr_x_reg_hold_max-
- ((bdlrck_reg_org>>(8*(1)))&0xff)),((bdlr_x_reg_hold_max-
- ((bdlrck_reg_org>>(8*(1)))&0xff)) *ddl_100step_ps)/100
- );
- bdlr0_9_reg_hold_max[test_bdl]=(bdlr_x_reg_hold_max-
- ((bdlrck_reg_org>>(8*(1)))&0xff));
- bdlr0_9_reg_hold_time[test_bdl]=((bdlr_x_reg_hold_max-
- ((bdlrck_reg_org>>(8*(1)))&0xff)) *ddl_100step_ps)/100;
- for ((temp_count=0);(temp_count<28);(temp_count++))
- {
- writel(((data_bdlr0_5_reg_org[temp_count])),
- (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj));
-
- };
-
- }
-
- }
-
-
-
-
-
- }
- }
-
- }
-
- // ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
-
-
-
- printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)));
-
- printf("\nresume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- if (open_vt)
- {
- writel((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29)),(DDR0_PUB_REG_BASE+4));
- }
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
-
- return dq_lcd_bdl_temp_reg_value;
-
-
-
- }
-
-usage:
- cmd_usage(cmdtp);
- //*/
- return 1;
-}
-U_BOOT_CMD(
- ddr_test_data_bit_setup_hold_window, 6, 1, do_ddr_test_data_bit_setup_hold_window,
- "DDR test data bit margin function",
- "ddr_test_data_bit_setup_hold_window a 0 0x8000000 0 3 or ddr_test_data_bit_setup_hold_window a 0 0x8000000 1 3 \n dcache off ? \n"
-);
-#endif
-
-unsigned int
-do_test_address_bus(volatile unsigned int * baseAddress, unsigned int nBytes)
-{
- unsigned int addressMask = (nBytes/sizeof(unsigned int) - 1);
- unsigned int offset;
- unsigned int testOffset;
-
- unsigned int pattern = (unsigned int) 0xAAAAAAAA;
- unsigned int antipattern = (unsigned int) 0x55555555;
-
- unsigned int data1, data2;
-
- unsigned int ret = 0;
-
- /*
- * Write the default pattern at each of the power-of-two offsets.
- */
- for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
- {
- baseAddress[offset] = pattern;
- }
-
- /*
- * Check for address bits stuck high.
- */
- testOffset = 0;
- baseAddress[testOffset] = antipattern;
-
- for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
- {
- data1 = baseAddress[offset];
- data2 = baseAddress[offset];
- if (data1 != data2)
- {
- printf(" memTestAddressBus - read twice different[offset]: 0x%8x-0x%8x\n", data1, data2);
- ret = 1;
- }
- if (data1 != pattern)
- {
- printf(" memTestAddressBus - write[0x%8x]: 0x%8x, read[0x%8x]: 0x%8x\n", \
- offset, pattern, offset, data1);
- ret = 1;
- //return ((unsigned int) &baseAddress[offset]);
- }
- }
-
- baseAddress[testOffset] = pattern;
-
- /*
- * Check for address bits stuck low or shorted.
- */
- for (testOffset = 1; (testOffset & addressMask) != 0; testOffset <<= 1)
- {
- baseAddress[testOffset] = antipattern;
-
- if (baseAddress[0] != pattern)
- {
- printf(" memTestAddressBus2 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0]: 0x%8x\n", \
- testOffset, antipattern, baseAddress[0]);
- ret = 1;
- //return ((unsigned int) &baseAddress[testOffset]);
- }
-
- for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
- {
- data1 = baseAddress[offset];
- if ((data1 != pattern) && (offset != testOffset))
- {
- printf(" memTestAddressBus3 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
- testOffset, antipattern, testOffset, data1);
- ret = 1;
- //return ((unsigned int) &baseAddress[testOffset]);
- }
- }
-
- baseAddress[testOffset] = pattern;
- }
-
-
- for (offset = 0x1; (offset <=addressMask) ; offset++)
- {
- if (((~offset) <= addressMask) )
- {
- baseAddress[offset] = pattern;
- baseAddress[(~offset)] = antipattern;
- }
- }
-
- for (offset = 0x1; (offset <=addressMask); offset++)
- {
- if (((~offset) <= addressMask) )
- {
- if (baseAddress[offset] != pattern)
- {
- printf(" memTestAddressBus4 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
- offset, pattern, offset, baseAddress[offset]);
-
- ret = 1;
- break;
- }
-
- if (baseAddress[(~offset)] != antipattern)
- {
- printf(" memTestAddressBus5 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
- ((~offset)), antipattern, ((~offset)), baseAddress[((~offset))]);
- ret = 1;
- break;
- }
- }
- }
-
- if (ret)
- {return (ret);
- }
- //unsigned int suq_value;
- for (offset = 0x1; (offset <=addressMask) ; offset++)
- {
-
- {
- pattern=((offset<<2)-offset);
- baseAddress[offset] = pattern;
- //baseAddress[(~offset)] = antipattern;
- }
- }
-
- for (offset = 0x1; (offset <=addressMask); offset++)
- {
-
- {
- pattern=((offset<<2)-offset);
- if (baseAddress[offset] != pattern)
- {
- printf(" memTestAddressBus6 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
- offset,pattern, offset, baseAddress[offset]);
- ret = 1;
- break;
- }
-
-
- }
- }
- if (ret)
- {return (ret);
- }
- for (offset = 0x1; (offset <=addressMask) ; offset++)
- {
-
- {
- pattern=~((offset<<2)-offset);
- baseAddress[offset] = pattern;
- //baseAddress[(~offset)] = antipattern;
- }
- }
-
- for (offset = 0x1; (offset <=addressMask); offset++)
- {
-
- {
- pattern=~((offset<<2)-offset);
- if (baseAddress[offset] != pattern)
- {
- printf(" memTestAddressBus7 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
- offset,pattern, offset, baseAddress[offset]);
- ret = 1;
- break;
- }
-
-
- }
- }
-
-
- return (ret);
-} /* memTestAddressBus() */
-
-int ddr_test_s_add_cross_talk_pattern(int ddr_test_size)
-{
- // unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int start_addr=test_start_addr;
- error_outof_count_flag=1;
- error_count=0;
- ///*
- printf("\rStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
- //*/
- /*
- printf("\rStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
- */
- ddr_write_full((void *)(int_convter_p(start_addr)), ddr_test_size,0x0,0x3);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_full((void *)(int_convter_p(start_addr)), ddr_test_size,0,3);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_full((void *)(int_convter_p(start_addr)), ddr_test_size,0,3);
-
-
- printf("\rStart writing add pattern ");
- if (do_test_address_bus((void *)(int_convter_p(start_addr)), ddr_test_size))
- error_count++;
-
-
- /*
- printf("\nStart *4 no cross talk pattern. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd write. ");
- printf("\nStart 1st reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\nEnd 1st read. ");
- printf("\nStart 2nd reading... ");
- ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
-
- //if(cross_talk_pattern_flag==1)
- {
- printf("\nStart *4 cross talk pattern p. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
-
- }
-
- {
- printf("\nStart *4 cross talk pattern p2. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
-
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
- printf("\nStart *4 cross talk pattern n. ");
- printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
- ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd write. ");
- printf("\rStart 1st reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 1st read. ");
- printf("\rStart 2nd reading... ");
- ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
- printf("\rEnd 2nd read. ");
- // printf("\rStart 3rd reading... ");
- // ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
- // printf("\rEnd 3rd read. \n");
-
-
-}
- */
-if (error_count)
- return 1;
- else
- return 0;
- }
-
-int do_ddr_test_ac_windows_aclcdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr ac windows function\n");
- printf("\nset ddr test test_start_addr==0x%08x \n",test_start_addr);
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- //unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-
-
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ac_mdlr_a_org=0;
- unsigned int ac_mdlr_b_org=0;
-
- unsigned int ac_lcdlr_a_org=0;
- unsigned int ac_bdlr0_a_org=0;
- unsigned int ac_lcdlr_b_org=0;
- unsigned int ac_bdlr0_b_org=0;
- unsigned int ac_lcdlr_a_rig=0;
- unsigned int ac_bdlr0_a_rig=0;
- unsigned int ac_lcdlr_b_rig=0;
- unsigned int ac_bdlr0_b_rig=0;
- unsigned int ac_lcdlr_a_lef=0;
- unsigned int ac_bdlr0_a_lef=0;
- unsigned int ac_lcdlr_b_lef=0;
- unsigned int ac_bdlr0_b_lef=0;
-
- unsigned int ac_lcdlr_a_rig_min=0;
- unsigned int ac_bdlr0_a_rig_min=0;
- unsigned int ac_lcdlr_b_rig_min=0;
- unsigned int ac_bdlr0_b_rig_min=0;
- unsigned int ac_lcdlr_a_lef_min=0;
- unsigned int ac_bdlr0_a_lef_min=0;
- unsigned int ac_lcdlr_b_lef_min=0;
- unsigned int ac_bdlr0_b_lef_min=0;
- unsigned int ac_lcdlr_temp=0;
- unsigned int ac_bdlr0_temp=0;
-
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
- unsigned int test_min_max=0;
- if (argc >5) {
-
- test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max = 0;
- }
- else
- test_min_max=1;
-
- }
-
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\ntest_min_max== 0x%08x\n", test_min_max);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- }
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
- printf("\ntest A channel AC110\n");
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel 0x%08x\n",reg_add);
- ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
- ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
- ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
- printf("\ntest A channel AC113\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
- }
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
- printf("\ntest A channel AC112\n");
- ac_mdlr_b_org=readl(reg_add);
- ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
- ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
- }
-
-
- }
-
- }
-
- }////save and print org training value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel AC\n");
- }
- else
- {
- printf("\ntest B channel AC\n");
- }
-
- {
- {
- //#ifdef DDR_TEST_ACLCDLR
-
- reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
-
- ac_lcdlr_temp=readl(reg_add);
-
- while (ac_lcdlr_temp>0)
- {
- if(test_min_max)
- {break;
- }
- temp_test_error=0;
- ac_lcdlr_temp--;
-
- printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
- writel(ac_lcdlr_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- ac_lcdlr_temp++;
- break;
- }
- }
-
- printf("\nlcdlr left edge detect \n");
- printf("\nlcdlr left edge==0x%08x\n ",ac_lcdlr_temp);
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_lcdlr_a_lef=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_a_org;
- }
- else
- {
- ac_lcdlr_b_lef=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_b_org;
-
- }
- writel(ac_lcdlr_temp,(reg_add));
-
- while (ac_lcdlr_temp<ACLCDLR_MAX)
- {
- temp_test_error=0;
- ac_lcdlr_temp++;
- printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
- writel(ac_lcdlr_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nlcdlr right edge detect \n");
- ac_lcdlr_temp--;
- break;
- }
- }
- printf("\nlcdlrright edge detect \n");
- printf("\nlcdlr right edge==0x%08x\n ",ac_lcdlr_temp);
-
-
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_lcdlr_a_rig=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_a_org;
- }
- else
- {
- ac_lcdlr_b_rig=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_b_org;
-
- }
- writel(ac_lcdlr_temp,(reg_add));
-
-
-
- //#endif
-
- {
- reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
-
- ac_bdlr0_temp=readl(reg_add);
- while (ac_bdlr0_temp>0)
- {
- if(test_min_max)
- {break;
- }
- temp_test_error=0;
- ac_bdlr0_temp--;
- printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
- writel(ac_bdlr0_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- ac_bdlr0_temp++;
- break;
- }
- }
- printf("\nacbdlr0 left edge detect \n");
- printf("\nacbdlr0 left edge==0x%08x\n ",ac_bdlr0_temp);
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_bdlr0_a_lef=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_a_org;
- }
- else
- {
- ac_bdlr0_b_lef=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_b_org;
-
- }
-
- writel(ac_bdlr0_temp,(reg_add));
-
- while (ac_bdlr0_temp<ACBDLR_MAX)
- {
- temp_test_error=0;
- ac_bdlr0_temp++;
- printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
- writel(ac_bdlr0_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nacbdlr0 right edge detect \n");
- ac_bdlr0_temp--;
- break;
- }
- }
- printf("\nacbdlr0 right edge detect \n");
- printf("\nacbdlr0 right edge==0x%08x\n ",ac_bdlr0_temp);
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_bdlr0_a_rig=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_a_org;
- }
- else
- {
- ac_bdlr0_b_rig=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_b_org;
-
- }
-
- writel(ac_bdlr0_temp,(reg_add));
-
- }
- }
-
- }
- }
-
- ////tune and save training dqs value
-
-
-
-
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
-
- if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
-
- if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
-
- if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- else
- {
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- printf("\ntest A channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
-
-
-
- }
-
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
-
- if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
-
- if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
-
- if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- else
- {
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- printf("\ntest B channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
-
-
-
- }
-
-
-
- }
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-
-
-
-U_BOOT_CMD(
- ddr_tune_ddr_ac_aclcdlr, 6, 1, do_ddr_test_ac_windows_aclcdlr,
- "DDR tune dqs function",
- "ddr_tune_ddr_ac_aclcdlr a 0 0x8000000 3 or ddr_tune_ddr_ac_aclcdlr b 0 0x80000 5 or ddr_tune_ddr_ac_aclcdlr a b 0x80000 l\n dcache off ? \n"
-);
-
-
-int do_ddr_test_ac_windows_acbdlr_ck(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr ac windows function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
-
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-
-
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ac_mdlr_a_org=0;
- unsigned int ac_mdlr_b_org=0;
-
- unsigned int ac_lcdlr_a_org=0;
- unsigned int ac_bdlr0_a_org=0;
- unsigned int ac_lcdlr_b_org=0;
- unsigned int ac_bdlr0_b_org=0;
- unsigned int ac_lcdlr_a_rig=0;
- unsigned int ac_bdlr0_a_rig=0;
- unsigned int ac_lcdlr_b_rig=0;
- unsigned int ac_bdlr0_b_rig=0;
- unsigned int ac_lcdlr_a_lef=0;
- unsigned int ac_bdlr0_a_lef=0;
- unsigned int ac_lcdlr_b_lef=0;
- unsigned int ac_bdlr0_b_lef=0;
-
- unsigned int ac_lcdlr_a_rig_min=0;
- unsigned int ac_bdlr0_a_rig_min=0;
- unsigned int ac_lcdlr_b_rig_min=0;
- unsigned int ac_bdlr0_b_rig_min=0;
- unsigned int ac_lcdlr_a_lef_min=0;
- unsigned int ac_bdlr0_a_lef_min=0;
- unsigned int ac_lcdlr_b_lef_min=0;
- unsigned int ac_bdlr0_b_lef_min=0;
- // unsigned int ac_lcdlr_temp;
- unsigned int ac_bdlr0_temp=0;
-
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
-
- unsigned int test_min_max=0;
- if (argc >5) {
-
- test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_min_max = 0;
- }
- else
- test_min_max=1;
-
- }
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\ntest_min_max== 0x%08x\n", test_min_max);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- }
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel 0x%08x\n",reg_add);
- ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
- ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
- ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
-
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
- }
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
-
- ac_mdlr_b_org=readl(reg_add);
- ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
- ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
- }
-
-
- }
-
- }
-
- }////save and print org training value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel AC\n");
- }
- else
- {
- printf("\ntest B channel AC\n");
- }
-
- {
- {
-#ifdef DDR_TEST_ACLCDLR
-
- reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
-
- ac_lcdlr_temp=readl(reg_add);
-
- while (ac_lcdlr_temp>0)
- {
- if(test_min_max)
- {break;
- }
- temp_test_error=0;
- ac_lcdlr_temp--;
-
- printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
- writel(ac_lcdlr_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- ac_lcdlr_temp++;
- break;
- }
- }
-
- printf("\nlcdlr left edge detect \n");
- printf("\nlcdlr left edge==0x%08x\n ",ac_lcdlr_temp);
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_lcdlr_a_lef=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_a_org;
- }
- else
- {
- ac_lcdlr_b_lef=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_b_org;
-
- }
- writel(ac_lcdlr_temp,(reg_add));
-
- while (ac_lcdlr_temp<ACLCDLR_MAX)
- {
- temp_test_error=0;
- ac_lcdlr_temp++;
- printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
- writel(ac_lcdlr_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nlcdlr right edge detect \n");
- ac_lcdlr_temp--;
- break;
- }
- }
- printf("\nlcdlrright edge detect \n");
- printf("\nlcdlr right edge==0x%08x\n ",ac_lcdlr_temp);
-
-
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_lcdlr_a_rig=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_a_org;
- }
- else
- {
- ac_lcdlr_b_rig=ac_lcdlr_temp;
- ac_lcdlr_temp=ac_lcdlr_b_org;
-
- }
- writel(ac_lcdlr_temp,(reg_add));
-
-
-
-#endif
-
- {
- reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
-
- ac_bdlr0_temp=readl(reg_add);
- while (ac_bdlr0_temp>0)
- {
- temp_test_error=0;
- ac_bdlr0_temp--;
- printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
- writel(ac_bdlr0_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nwdqd left edge detect \n");
- ac_bdlr0_temp++;
- break;
- }
- }
- printf("\nacbdlr0 left edge detect \n");
- printf("\nacbdlr0 left edge==0x%08x\n ",ac_bdlr0_temp);
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_bdlr0_a_lef=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_a_org;
- }
- else
- {
- ac_bdlr0_b_lef=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_b_org;
-
- }
-
- writel(ac_bdlr0_temp,(reg_add));
-
- while (ac_bdlr0_temp<ACBDLR_MAX)
- {
- temp_test_error=0;
- ac_bdlr0_temp++;
- printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
- writel(ac_bdlr0_temp,(reg_add));
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- //printf("\nacbdlr0 right edge detect \n");
- ac_bdlr0_temp--;
- break;
- }
- }
- printf("\nacbdlr0 right edge detect \n");
- printf("\nacbdlr0 right edge==0x%08x\n ",ac_bdlr0_temp);
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- ac_bdlr0_a_rig=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_a_org;
- }
- else
- {
- ac_bdlr0_b_rig=ac_bdlr0_temp;
- ac_bdlr0_temp=ac_bdlr0_b_org;
-
- }
-
- writel(ac_bdlr0_temp,(reg_add));
-
- }
- }
-
- }
- }
-
- ////tune and save training dqs value
-
-
-
-
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
-
- if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
-
- if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
-
- if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- else
- {
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- printf("\ntest A channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
-
-
-
- }
-
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
-
- if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
-
- if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
-
- if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- else
- {
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- printf("\ntest B channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
-
-
-
-
- }
-
-
-
- }
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-
-
-
-U_BOOT_CMD(
- ddr_tune_ddr_ac_acbdlr_ck, 6, 1, do_ddr_test_ac_windows_acbdlr_ck,
- "DDR tune dqs function",
- "ddr_tune_ddr_ac_acbdlr_ck a 0 0x8000000 3 or ddr_tune_ddr_ac_acbdlr_ck b 0 0x80000 5 or ddr_tune_ddr_ac_acbdlr_ck a b 0x80000 l\n dcache off ? \n"
-);
-
-
-int do_ddr_test_ac_bit_margin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_ac_window function\n");
- unsigned int channel_a_en = 0;
- // unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
-
- unsigned int lane_step= 0;
- unsigned int reg_value= 0;
- unsigned int test_ac_setup_hold= 0;
- //int argc2;
- //char * argv2[30];
- // unsigned int acbdlr0_9_reg_org[10];
- // unsigned int acbdlr0_9_reg_setup_max[40];
- // unsigned int acbdlr0_9_reg_hold_max[40];
- // unsigned int acbdlr0_9_reg_setup_time[40];
- // unsigned int acbdlr0_9_reg_hold_time[40];
-
- char *endp;
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- {
- channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {//channel_b_en = 1;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {//channel_b_en = 1;
- }
- }
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
- //argc2=5;
- //for(i = 1;i<(argc);i++)
- {
- //argv2[i-1]=argv[i];
- }
-
- //argv2[0]=argv[1];
- //argv2[1]=argv[2];
- //argv2[2]=argv[3];
- char str[100];
- test_ac_setup_hold=0;
- if (channel_a_en)
- {
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest ac window a\n");
- for ((lane_step=4);(lane_step<40);(lane_step++))
- {
- if (lane_step == 7)
- {lane_step=8;
- }
- if (lane_step == 12)
- {lane_step=16;
- }
- if (lane_step == 14)
- {lane_step=16;
- }
- if (lane_step == 18)
- {lane_step=20;
- }
- if (lane_step == 22)
- {lane_step=24;
- }
- //sprintf(argv2[3],"d%",( lane_step));
- //itoa_ddr_test(lane_step,(argv2[3]),10);
- //printf("\nargv2[%d]=%s\n",0,argv2[0]);
- // printf("\nargv2[%d]=%s\n",3,argv2[3]);//a 0 0x8000000 0 c
- // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- run_command(str,0);
-
- test_ac_setup_hold=2;
- sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- run_command(str,0);
- test_ac_setup_hold=0;
-
- }
- }
- if (channel_a_en)
- {
- for ((lane_step=0);(lane_step<10);(lane_step++))
- {
- printf("acbdlr0_9_reg_org[%d]0x%08x==0x%08x\n", lane_step,(DDR0_PUB_ACBDLR0+(lane_step<<2)),acbdlr0_9_reg_org[lane_step]);
-
- };
-
- for ((lane_step=0);(lane_step<40);(lane_step++))
- {
- printf("\n a_ac_lane_0x%08x|setup_max 0x%08x |hold_max 0x%08x |setup_time %08d ps ::|hold_time %08d ps \n",
- lane_step,
- acbdlr0_9_reg_setup_max[lane_step],
- acbdlr0_9_reg_hold_max[lane_step],
- acbdlr0_9_reg_setup_time[lane_step],
- acbdlr0_9_reg_hold_time[lane_step]);
-
- }
- }
- return reg_value;
-}
-
-int do_ddr_test_data_bit_margin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_data_window function\n");
- unsigned int channel_a_en = 0;
- // unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
-
- unsigned int lane_step= 0;
- unsigned int reg_value= 0;
- unsigned int test_ac_setup_hold= 0;
- //int argc2;
- //char * argv2[30];
- // unsigned int acbdlr0_9_reg_org[10];
- // unsigned int acbdlr0_9_reg_setup_max[40];
- // unsigned int acbdlr0_9_reg_hold_max[40];
- // unsigned int acbdlr0_9_reg_setup_time[40];
- // unsigned int acbdlr0_9_reg_hold_time[40];
-
- char *endp;
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {//channel_b_en = 1;
- }
-
-
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {//channel_b_en = 1;
- }
- }
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
- unsigned int ddr_test_type=0;
- unsigned int ddr_test_type_para1=0;
- unsigned int ddr_test_type_para2=0;
- if (argc >4) {
- ddr_test_type = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- ddr_test_type = 0;
- }
- }
- if (ddr_test_type) {
- if (argc >5) {
- ddr_test_type_para1 = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_test_type_para1 = 0;
- }
- }
- if (argc >6) {
- ddr_test_type_para2 = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_test_type_para2 = 96;
- }
- }
- }else
- { ddr_test_type_para1 = 0;
- ddr_test_type_para2 = 96;
- }
- //argc2=5;
- //for(i = 1;i<(argc);i++)
- {
- //argv2[i-1]=argv[i];
- }
-
- //argv2[0]=argv[1];
- //argv2[1]=argv[2];
- //argv2[2]=argv[3];
- printf("\ntest data window ddr_test_type==0x%08x, ddr_test_type_para1==0x%08x,ddr_test_type_para2==0x%08x\n",
- ddr_test_type,ddr_test_type_para1,ddr_test_type_para2);
- char str[100];
- unsigned int temp_count=0;
- test_ac_setup_hold=0;
- if (channel_a_en)
- {
- for ((temp_count=0);(temp_count<28);(temp_count++))
- {
- //data_bdlr0_5_reg_org[temp_count]=(((readl(((temp_count>>2)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/6)+reg_base_adj))
- // >>(8*(test_bdl%4)))&0xff);
- data_bdlr0_5_reg_org[temp_count]=((readl(((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)))
- );
- };
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest data window a\n");
- for ((lane_step=ddr_test_type_para1);(lane_step<ddr_test_type_para2);(lane_step++))
- {
- if (lane_step == 9)
- {lane_step=12;
- }
- if (lane_step == 21)
- {lane_step=24;
- }
- if (lane_step == 33)
- {lane_step=36;
- }
- if (lane_step == 45)
- {lane_step=48;
- }
- if (lane_step == 33+24)
- {lane_step=36+24;
- }
- if (lane_step == 45+24)
- {lane_step=48+24;
- }
- if (lane_step == 33+48)
- {lane_step=36+48;
- }
- if (lane_step == 44+48)
- {lane_step=48+48;
- }
-
- //sprintf(argv2[3],"d%",( lane_step));
- //itoa_ddr_test(lane_step,(argv2[3]),10);
- //printf("\nargv2[%d]=%s\n",0,argv2[0]);
- // printf("\nargv2[%d]=%s\n",3,argv2[3]);//a 0 0x8000000 0 c
- // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- sprintf(str,"ddr_test_data_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- run_command(str,0);
-
- test_ac_setup_hold=1;
- sprintf(str,"ddr_test_data_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- run_command(str,0);
- test_ac_setup_hold=0;
- for ((temp_count=0);(temp_count<28);(temp_count++))
- {
- writel(((data_bdlr0_5_reg_org[temp_count])),
- (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)));
-
- };
-
-
- }
- }
-
-
-
-
-
- if (channel_a_en)
- {
- for ((lane_step=0);(lane_step<28);(lane_step++))
- {
- printf("data_bdlr0_5_reg_org[%d]0x%08x==0x%08x\n", lane_step,
- (((lane_step%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(lane_step/7)),
- data_bdlr0_5_reg_org[lane_step]);
-
- };
-
- for ((lane_step=0);(lane_step<96);(lane_step++))
- {
- printf("\n a_ac_lane_0x%08x|setup_max 0x%08x |hold_max 0x%08x |setup_time %08d ps ::|hold_time %08d ps \n",
- lane_step,
- bdlr0_9_reg_setup_max[lane_step],
- bdlr0_9_reg_hold_max[lane_step],
- bdlr0_9_reg_setup_time[lane_step],
- bdlr0_9_reg_hold_time[lane_step]);
-
- }}
-
-
-
- return reg_value;
-}
-
-//#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
-int do_ddr_gx_crosstalk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- unsigned int des[8] ;
- unsigned int pattern_1[4][8] ;
- unsigned int pattern_2[4][8] ;
- unsigned int pattern_3[4][8] ;
- unsigned int pattern_4[4][8] ;
- unsigned int pattern_5[4][8] ;
- unsigned int pattern_6[4][8] ;
-
-
- des[0] = 0xaec83f49;
- des[1] = 0xd243a62c;
- des[2] = 0xf8774a0b;
- des[3] = 0x63d214e5;
- des[4] = 0x3f4166d5;
- des[5] = 0x239672c0;
- des[6] = 0x47ba7533;
- des[7] = 0xcae4cd7f;
- pattern_1[0][0] = 0xff00ff00;
- pattern_1[0][1] = 0xff00ff00;
- pattern_1[0][2] = 0xff00ff00;
- pattern_1[0][3] = 0xff00ff00;
- pattern_1[0][4] = 0xff00ff00;
- pattern_1[0][5] = 0xff00ff00;
- pattern_1[0][6] = 0xff00ff00;
- pattern_1[0][7] = 0xff00ff00;
-
- pattern_1[1][0] = 0x00ffff00;
- pattern_1[1][1] = 0x00ffff00;
- pattern_1[1][2] = 0x00ffff00;
- pattern_1[1][3] = 0x00ffff00;
- pattern_1[1][4] = 0x00ffff00;
- pattern_1[1][5] = 0x00ffff00;
- pattern_1[1][6] = 0x00ffff00;
- pattern_1[1][7] = 0x00ffff00;
-
- pattern_1[2][0] = 0xffff0000;
- pattern_1[2][1] = 0xffff0000;
- pattern_1[2][2] = 0xffff0000;
- pattern_1[2][3] = 0xffff0000;
- pattern_1[2][4] = 0xffff0000;
- pattern_1[2][5] = 0xffff0000;
- pattern_1[2][6] = 0xffff0000;
- pattern_1[2][7] = 0xffff0000;
-
- pattern_1[3][0] = 0xff00ff00;
- pattern_1[3][1] = 0xff00ff00;
- pattern_1[3][2] = 0xff00ff00;
- pattern_1[3][3] = 0xff00ff00;
- pattern_1[3][4] = 0xff00ff00;
- pattern_1[3][5] = 0xff00ff00;
- pattern_1[3][6] = 0xff00ff00;
- pattern_1[3][7] = 0xff00ff00;
-
- pattern_2[0][0] = 0x0001fe00;
- pattern_2[0][1] = 0x0000ff00;
- pattern_2[0][2] = 0x0000ff00;
- pattern_2[0][3] = 0x0000ff00;
- pattern_2[0][4] = 0x0002fd00;
- pattern_2[0][5] = 0x0000ff00;
- pattern_2[0][6] = 0x0000ff00;
- pattern_2[0][7] = 0x0000ff00;
-
- pattern_2[1][0] = 0x0004fb00;
- pattern_2[1][1] = 0x0000ff00;
- pattern_2[1][2] = 0x0000ff00;
- pattern_2[1][3] = 0x0000ff00;
- pattern_2[1][4] = 0x0008f700;
- pattern_2[1][5] = 0x0000ff00;
- pattern_2[1][6] = 0x0000ff00;
- pattern_2[1][7] = 0x0000ff00;
-
- pattern_2[2][0] = 0x0010ef00;
- pattern_2[2][1] = 0x0000ff00;
- pattern_2[2][2] = 0x0000ff00;
- pattern_2[2][3] = 0x0000ff00;
- pattern_2[2][4] = 0x0020df00;
- pattern_2[2][5] = 0x0000ff00;
- pattern_2[2][6] = 0x0000ff00;
- pattern_2[2][7] = 0x0000ff00;
-
- pattern_2[3][0] = 0x0040bf00;
- pattern_2[3][1] = 0x0000ff00;
- pattern_2[3][2] = 0x0000ff00;
- pattern_2[3][3] = 0x0000ff00;
- pattern_2[3][4] = 0x00807f00;
- pattern_2[3][5] = 0x0000ff00;
- pattern_2[3][6] = 0x0000ff00;
- pattern_2[3][7] = 0x0000ff00;
-
- pattern_3[0][0] = 0x00010000;
- pattern_3[0][1] = 0x00000000;
- pattern_3[0][2] = 0x00000000;
- pattern_3[0][3] = 0x00000000;
- pattern_3[0][4] = 0x00020000;
- pattern_3[0][5] = 0x00000000;
- pattern_3[0][6] = 0x00000000;
- pattern_3[0][7] = 0x00000000;
-
- pattern_3[1][0] = 0x00040000;
- pattern_3[1][1] = 0x00000000;
- pattern_3[1][2] = 0x00000000;
- pattern_3[1][3] = 0x00000000;
- pattern_3[1][4] = 0x00080000;
- pattern_3[1][5] = 0x00000000;
- pattern_3[1][6] = 0x00000000;
- pattern_3[1][7] = 0x00000000;
-
- pattern_3[2][0] = 0x00100000;
- pattern_3[2][1] = 0x00000000;
- pattern_3[2][2] = 0x00000000;
- pattern_3[2][3] = 0x00000000;
- pattern_3[2][4] = 0x00200000;
- pattern_3[2][5] = 0x00000000;
- pattern_3[2][6] = 0x00000000;
- pattern_3[2][7] = 0x00000000;
-
- pattern_3[3][0] = 0x00400000;
- pattern_3[3][1] = 0x00000000;
- pattern_3[3][2] = 0x00000000;
- pattern_3[3][3] = 0x00000000;
- pattern_3[3][4] = 0x00800000;
- pattern_3[3][5] = 0x00000000;
- pattern_3[3][6] = 0x00000000;
- pattern_3[3][7] = 0x00000000;
-
- ///*
- pattern_4[0][0] = 0x51c8c049 ;
- pattern_4[0][1] = 0x2d43592c ;
- pattern_4[0][2] = 0x0777b50b ;
- pattern_4[0][3] = 0x9cd2ebe5 ;
- pattern_4[0][4] = 0xc04199d5 ;
- pattern_4[0][5] = 0xdc968dc0 ;
- pattern_4[0][6] = 0xb8ba8a33 ;
- pattern_4[0][7] = 0x35e4327f ;
-
- pattern_4[1][0] = 0xae37c049 ;
- pattern_4[1][1] = 0xd2bc592c ;
- pattern_4[1][2] = 0xf888b50b ;
- pattern_4[1][3] = 0x632debe5 ;
- pattern_4[1][4] = 0x3fbe99d5 ;
- pattern_4[1][5] = 0x23698dc0 ;
- pattern_4[1][6] = 0x47458a33 ;
- pattern_4[1][7] = 0xca1b327f ;
-
- pattern_4[2][0] = 0x51373f49 ;
- pattern_4[2][1] = 0x2dbca62c ;
- pattern_4[2][2] = 0x07884a0b ;
- pattern_4[2][3] = 0x9c2d14e5 ;
- pattern_4[2][4] = 0xc0be66d5 ;
- pattern_4[2][5] = 0xdc6972c0 ;
- pattern_4[2][6] = 0xb8457533 ;
- pattern_4[2][7] = 0x351bcd7f ;
-
-
- pattern_4[3][0] = 0x51c8c049 ;
- pattern_4[3][1] = 0x2d43592c ;
- pattern_4[3][2] = 0x0777b50b ;
- pattern_4[3][3] = 0x9cd2ebe5 ;
- pattern_4[3][4] = 0xc04199d5 ;
- pattern_4[3][5] = 0xdc968dc0 ;
- pattern_4[3][6] = 0xb8ba8a33 ;
- pattern_4[3][7] = 0x35e4327f ;
-
- pattern_5[0][0] = 0xaec9c149 ;
- pattern_5[0][1] = 0xd243592c ;
- pattern_5[0][2] = 0xf877b50b ;
- pattern_5[0][3] = 0x63d2ebe5 ;
- pattern_5[0][4] = 0x3f439bd5 ;
- pattern_5[0][5] = 0x23968dc0 ;
- pattern_5[0][6] = 0x47ba8a33 ;
- pattern_5[0][7] = 0xcae4327f ;
- pattern_5[1][0] = 0xaeccc449 ;
- pattern_5[1][1] = 0xd243592c ;
- pattern_5[1][2] = 0xf877b50b ;
- pattern_5[1][3] = 0x63d2ebe5 ;
- pattern_5[1][4] = 0x3f4991d5 ;
- pattern_5[1][5] = 0x23968dc0 ;
- pattern_5[1][6] = 0x47ba8a33 ;
- pattern_5[1][7] = 0xcae4327f ;
- pattern_5[2][0] = 0xaed8d049 ;
- pattern_5[2][1] = 0xd243592c ;
- pattern_5[2][2] = 0xf877b50b ;
- pattern_5[2][3] = 0x63d2ebe5 ;
- pattern_5[2][4] = 0x3f61b9d5 ;
- pattern_5[2][5] = 0x23968dc0 ;
- pattern_5[2][6] = 0x47ba8a33 ;
- pattern_5[2][7] = 0xcae4327f ;
- pattern_5[3][0] = 0xae888049 ;
- pattern_5[3][1] = 0xd243592c ;
- pattern_5[3][2] = 0xf877b50b ;
- pattern_5[3][3] = 0x63d2ebe5 ;
- pattern_5[3][4] = 0x3fc119d5 ;
- pattern_5[3][5] = 0x23968dc0 ;
- pattern_5[3][6] = 0x47ba8a33 ;
- pattern_5[3][7] = 0xcae4327f ;
-
- pattern_6[0][0] = 0xaec93f49 ;
- pattern_6[0][1] = 0xd243a62c ;
- pattern_6[0][2] = 0xf8774a0b ;
- pattern_6[0][3] = 0x63d214e5 ;
- pattern_6[0][4] = 0x3f4366d5 ;
- pattern_6[0][5] = 0x239672c0 ;
- pattern_6[0][6] = 0x47ba7533 ;
- pattern_6[0][7] = 0xcae4cd7f ;
- pattern_6[1][0] = 0xaecc3f49 ;
- pattern_6[1][1] = 0xd243a62c ;
- pattern_6[1][2] = 0xf8774a0b ;
- pattern_6[1][3] = 0x63d214e5 ;
- pattern_6[1][4] = 0x3f4966d5 ;
- pattern_6[1][5] = 0x239672c0 ;
- pattern_6[1][6] = 0x47ba7533 ;
- pattern_6[1][7] = 0xcae4cd7f ;
- pattern_6[2][0] = 0xaed83f49 ;
- pattern_6[2][1] = 0xd243a62c ;
- pattern_6[2][2] = 0xf8774a0b ;
- pattern_6[2][3] = 0x63d214e5 ;
- pattern_6[2][4] = 0x3f6166d5 ;
- pattern_6[2][5] = 0x239672c0 ;
- pattern_6[2][6] = 0x47ba7533 ;
- pattern_6[2][7] = 0xcae4cd7f ;
- pattern_6[3][0] = 0xae883f49 ;
- pattern_6[3][1] = 0xd243a62c ;
- pattern_6[3][2] = 0xf8774a0b ;
- pattern_6[3][3] = 0x63d214e5 ;
- pattern_6[3][4] = 0x3fc166d5 ;
- pattern_6[3][5] = 0x239672c0 ;
- pattern_6[3][6] = 0x47ba7533 ;
- pattern_6[3][7] = 0xcae4cd7f ;
- //*/
- //*/
-
- char *endp;
- unsigned int loop = 1;
- unsigned int lflag = 0;
- unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int test_size = DDR_TEST_SIZE;
- unsigned int test_addr;
-
- error_outof_count_flag =0;
- error_count =0;
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- if (argc == 1)
- goto usage;
- if (argc>1)
- {
- if (strcmp(argv[1], "l") == 0) {
- lflag = 1;
- }
-
- else{
- loop = simple_strtoull_ddr(argv[1], &endp, 10);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
- }
-
- // printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==1) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- // if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
- loop = 1;
-
- }
- }
-
-
-
- if (argc >= 2) {
- loop = simple_strtoull_ddr(argv[1], &endp, 16);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
-
- }
- unsigned int pattern_flag1=1;
- unsigned int pattern_flag2=1;
- unsigned int pattern_flag3=1;
- pattern_flag1 = 1;
- pattern_flag2=1;
- pattern_flag3 = 1;
-
-
- if (argc >= 3 ) {
- if ( (strcmp(argv[2], "s") == 0))
- {
- pattern_flag1 = 1;
- pattern_flag2=0;
- pattern_flag3 = 0;
- }
- else if ((strcmp(argv[2], "c") == 0))
- {
- pattern_flag1 = 0;
- pattern_flag2=1;
- pattern_flag3 = 0;
- }
- else if ( (strcmp(argv[2], "d") == 0))
- {
- pattern_flag1 = 0;
- pattern_flag2=0;
- pattern_flag3 = 1;
- }
- }
-
- // if(test_size<0x20)
- start_addr=0x10000000;
- test_size = 0x20;
- unsigned int temp_i=0;
- unsigned int temp_k=0;
- unsigned int pattern_o[8];
- unsigned int pattern_d[8];
-
-
- //DDR_TEST_START:
-
- ///*
- error_count=0;
- do {
- if (lflag)
- loop = 888;
-
- //if(old_pattern_flag==1)
- {
-
- printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
-
- /*
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
-
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
- flush_dcache_range(start_addr,start_addr + test_size);
-
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- */
- if (pattern_flag1 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_4[temp_k][temp_i])
- {error_count++;
- printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
- }
-
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
- }
-
- }
- }
- }
- }
- if (pattern_flag2 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
- }
- }
- }
- }
-
- }
-
- if (pattern_flag3 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_6[temp_k][temp_i])
- {error_count++;
- printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
- }
- }
- }
- }
- }
-
-
-
- }
-
- printf("\Error count==0x%08x", error_count);
- printf("\n \n");
- }while(--loop);
- //*/
-
- printf("\rEnd ddr test. \n");
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-}
-
-
-U_BOOT_CMD(
- ddrtest_gx_crosstalk, 5, 1, do_ddr_gx_crosstalk,
- "DDR test function",
- "ddrtest [LOOP] [ADDR].Default address is 0x10000000\n"
-);
-
-
-
-//#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_TV_BABY)
-int do_ddr_gxtvbb_crosstalk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- unsigned int a_des[8],b_des[8],des[8] ;
- unsigned int pattern_1[4][8] ;
- unsigned int pattern_2[4][8] ;
- unsigned int pattern_3[4][8] ;
- // unsigned int pattern_4[4][8] ;
- // unsigned int pattern_5[4][8] ;
- // unsigned int pattern_6[4][8] ;
-
-
- a_des[0] = 0x7ea09b52;
- a_des[1] = 0xbc57bb23;
- a_des[2] = 0x8d2b6e65;
- a_des[3] = 0x15fdcdc4;
- a_des[4] = 0xbc1df453;
- a_des[5] = 0x21bcbcdf;
- a_des[6] = 0x267b7ac1;
- a_des[7] = 0x6af03d72;
-
-
- b_des[0] = 0xdfc2ee12;
- b_des[1] = 0x4f58da43;
- b_des[2] = 0x87809557;
- b_des[3] = 0xb87ddbf4;
- b_des[4] = 0x667fb021;
- b_des[5] = 0x64593586;
- b_des[6] = 0xee73d8d5;
- b_des[7] = 0xe65f972d;
- pattern_1[0][0] = 0xff00ff00;
- pattern_1[0][1] = 0xff00ff00;
- pattern_1[0][2] = 0xff00ff00;
- pattern_1[0][3] = 0xff00ff00;
- pattern_1[0][4] = 0xff00ff00;
- pattern_1[0][5] = 0xff00ff00;
- pattern_1[0][6] = 0xff00ff00;
- pattern_1[0][7] = 0xff00ff00;
-
- pattern_1[1][0] = 0x00ffff00;
- pattern_1[1][1] = 0x00ffff00;
- pattern_1[1][2] = 0x00ffff00;
- pattern_1[1][3] = 0x00ffff00;
- pattern_1[1][4] = 0x00ffff00;
- pattern_1[1][5] = 0x00ffff00;
- pattern_1[1][6] = 0x00ffff00;
- pattern_1[1][7] = 0x00ffff00;
-
- pattern_1[2][0] = 0xffff0000;
- pattern_1[2][1] = 0xffff0000;
- pattern_1[2][2] = 0xffff0000;
- pattern_1[2][3] = 0xffff0000;
- pattern_1[2][4] = 0xffff0000;
- pattern_1[2][5] = 0xffff0000;
- pattern_1[2][6] = 0xffff0000;
- pattern_1[2][7] = 0xffff0000;
-
- pattern_1[3][0] = 0xff00ff00;
- pattern_1[3][1] = 0xff00ff00;
- pattern_1[3][2] = 0xff00ff00;
- pattern_1[3][3] = 0xff00ff00;
- pattern_1[3][4] = 0xff00ff00;
- pattern_1[3][5] = 0xff00ff00;
- pattern_1[3][6] = 0xff00ff00;
- pattern_1[3][7] = 0xff00ff00;
-
- pattern_2[0][0] = 0x0001fe00;
- pattern_2[0][1] = 0x0000ff00;
- pattern_2[0][2] = 0x0000ff00;
- pattern_2[0][3] = 0x0000ff00;
- pattern_2[0][4] = 0x0002fd00;
- pattern_2[0][5] = 0x0000ff00;
- pattern_2[0][6] = 0x0000ff00;
- pattern_2[0][7] = 0x0000ff00;
-
- pattern_2[1][0] = 0x0004fb00;
- pattern_2[1][1] = 0x0000ff00;
- pattern_2[1][2] = 0x0000ff00;
- pattern_2[1][3] = 0x0000ff00;
- pattern_2[1][4] = 0x0008f700;
- pattern_2[1][5] = 0x0000ff00;
- pattern_2[1][6] = 0x0000ff00;
- pattern_2[1][7] = 0x0000ff00;
-
- pattern_2[2][0] = 0x0010ef00;
- pattern_2[2][1] = 0x0000ff00;
- pattern_2[2][2] = 0x0000ff00;
- pattern_2[2][3] = 0x0000ff00;
- pattern_2[2][4] = 0x0020df00;
- pattern_2[2][5] = 0x0000ff00;
- pattern_2[2][6] = 0x0000ff00;
- pattern_2[2][7] = 0x0000ff00;
-
- pattern_2[3][0] = 0x0040bf00;
- pattern_2[3][1] = 0x0000ff00;
- pattern_2[3][2] = 0x0000ff00;
- pattern_2[3][3] = 0x0000ff00;
- pattern_2[3][4] = 0x00807f00;
- pattern_2[3][5] = 0x0000ff00;
- pattern_2[3][6] = 0x0000ff00;
- pattern_2[3][7] = 0x0000ff00;
-
- pattern_3[0][0] = 0x00010000;
- pattern_3[0][1] = 0x00000000;
- pattern_3[0][2] = 0x00000000;
- pattern_3[0][3] = 0x00000000;
- pattern_3[0][4] = 0x00020000;
- pattern_3[0][5] = 0x00000000;
- pattern_3[0][6] = 0x00000000;
- pattern_3[0][7] = 0x00000000;
-
- pattern_3[1][0] = 0x00040000;
- pattern_3[1][1] = 0x00000000;
- pattern_3[1][2] = 0x00000000;
- pattern_3[1][3] = 0x00000000;
- pattern_3[1][4] = 0x00080000;
- pattern_3[1][5] = 0x00000000;
- pattern_3[1][6] = 0x00000000;
- pattern_3[1][7] = 0x00000000;
-
- pattern_3[2][0] = 0x00100000;
- pattern_3[2][1] = 0x00000000;
- pattern_3[2][2] = 0x00000000;
- pattern_3[2][3] = 0x00000000;
- pattern_3[2][4] = 0x00200000;
- pattern_3[2][5] = 0x00000000;
- pattern_3[2][6] = 0x00000000;
- pattern_3[2][7] = 0x00000000;
-
- pattern_3[3][0] = 0x00400000;
- pattern_3[3][1] = 0x00000000;
- pattern_3[3][2] = 0x00000000;
- pattern_3[3][3] = 0x00000000;
- pattern_3[3][4] = 0x00800000;
- pattern_3[3][5] = 0x00000000;
- pattern_3[3][6] = 0x00000000;
- pattern_3[3][7] = 0x00000000;
-
- /*
- pattern_4[0][0] = 0x51c8c049 ;
- pattern_4[0][1] = 0x2d43592c ;
- pattern_4[0][2] = 0x0777b50b ;
- pattern_4[0][3] = 0x9cd2ebe5 ;
- pattern_4[0][4] = 0xc04199d5 ;
- pattern_4[0][5] = 0xdc968dc0 ;
- pattern_4[0][6] = 0xb8ba8a33 ;
- pattern_4[0][7] = 0x35e4327f ;
-
- pattern_4[1][0] = 0xae37c049 ;
- pattern_4[1][1] = 0xd2bc592c ;
- pattern_4[1][2] = 0xf888b50b ;
- pattern_4[1][3] = 0x632debe5 ;
- pattern_4[1][4] = 0x3fbe99d5 ;
- pattern_4[1][5] = 0x23698dc0 ;
- pattern_4[1][6] = 0x47458a33 ;
- pattern_4[1][7] = 0xca1b327f ;
-
- pattern_4[2][0] = 0x51373f49 ;
- pattern_4[2][1] = 0x2dbca62c ;
- pattern_4[2][2] = 0x07884a0b ;
- pattern_4[2][3] = 0x9c2d14e5 ;
- pattern_4[2][4] = 0xc0be66d5 ;
- pattern_4[2][5] = 0xdc6972c0 ;
- pattern_4[2][6] = 0xb8457533 ;
- pattern_4[2][7] = 0x351bcd7f ;
-
-
- pattern_4[3][0] = 0x51c8c049 ;
- pattern_4[3][1] = 0x2d43592c ;
- pattern_4[3][2] = 0x0777b50b ;
- pattern_4[3][3] = 0x9cd2ebe5 ;
- pattern_4[3][4] = 0xc04199d5 ;
- pattern_4[3][5] = 0xdc968dc0 ;
- pattern_4[3][6] = 0xb8ba8a33 ;
- pattern_4[3][7] = 0x35e4327f ;
-
- pattern_5[0][0] = 0xaec9c149 ;
- pattern_5[0][1] = 0xd243592c ;
- pattern_5[0][2] = 0xf877b50b ;
- pattern_5[0][3] = 0x63d2ebe5 ;
- pattern_5[0][4] = 0x3f439bd5 ;
- pattern_5[0][5] = 0x23968dc0 ;
- pattern_5[0][6] = 0x47ba8a33 ;
- pattern_5[0][7] = 0xcae4327f ;
- pattern_5[1][0] = 0xaeccc449 ;
- pattern_5[1][1] = 0xd243592c ;
- pattern_5[1][2] = 0xf877b50b ;
- pattern_5[1][3] = 0x63d2ebe5 ;
- pattern_5[1][4] = 0x3f4991d5 ;
- pattern_5[1][5] = 0x23968dc0 ;
- pattern_5[1][6] = 0x47ba8a33 ;
- pattern_5[1][7] = 0xcae4327f ;
- pattern_5[2][0] = 0xaed8d049 ;
- pattern_5[2][1] = 0xd243592c ;
- pattern_5[2][2] = 0xf877b50b ;
- pattern_5[2][3] = 0x63d2ebe5 ;
- pattern_5[2][4] = 0x3f61b9d5 ;
- pattern_5[2][5] = 0x23968dc0 ;
- pattern_5[2][6] = 0x47ba8a33 ;
- pattern_5[2][7] = 0xcae4327f ;
- pattern_5[3][0] = 0xae888049 ;
- pattern_5[3][1] = 0xd243592c ;
- pattern_5[3][2] = 0xf877b50b ;
- pattern_5[3][3] = 0x63d2ebe5 ;
- pattern_5[3][4] = 0x3fc119d5 ;
- pattern_5[3][5] = 0x23968dc0 ;
- pattern_5[3][6] = 0x47ba8a33 ;
- pattern_5[3][7] = 0xcae4327f ;
-
- pattern_6[0][0] = 0xaec93f49 ;
- pattern_6[0][1] = 0xd243a62c ;
- pattern_6[0][2] = 0xf8774a0b ;
- pattern_6[0][3] = 0x63d214e5 ;
- pattern_6[0][4] = 0x3f4366d5 ;
- pattern_6[0][5] = 0x239672c0 ;
- pattern_6[0][6] = 0x47ba7533 ;
- pattern_6[0][7] = 0xcae4cd7f ;
- pattern_6[1][0] = 0xaecc3f49 ;
- pattern_6[1][1] = 0xd243a62c ;
- pattern_6[1][2] = 0xf8774a0b ;
- pattern_6[1][3] = 0x63d214e5 ;
- pattern_6[1][4] = 0x3f4966d5 ;
- pattern_6[1][5] = 0x239672c0 ;
- pattern_6[1][6] = 0x47ba7533 ;
- pattern_6[1][7] = 0xcae4cd7f ;
- pattern_6[2][0] = 0xaed83f49 ;
- pattern_6[2][1] = 0xd243a62c ;
- pattern_6[2][2] = 0xf8774a0b ;
- pattern_6[2][3] = 0x63d214e5 ;
- pattern_6[2][4] = 0x3f6166d5 ;
- pattern_6[2][5] = 0x239672c0 ;
- pattern_6[2][6] = 0x47ba7533 ;
- pattern_6[2][7] = 0xcae4cd7f ;
- pattern_6[3][0] = 0xae883f49 ;
- pattern_6[3][1] = 0xd243a62c ;
- pattern_6[3][2] = 0xf8774a0b ;
- pattern_6[3][3] = 0x63d214e5 ;
- pattern_6[3][4] = 0x3fc166d5 ;
- pattern_6[3][5] = 0x239672c0 ;
- pattern_6[3][6] = 0x47ba7533 ;
- pattern_6[3][7] = 0xcae4cd7f ;
- */
- //*/
-
- char *endp;
- unsigned int loop = 1;
- unsigned int lflag = 0;
- unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int test_size = DDR_TEST_SIZE;
- unsigned int test_addr;
-
- error_outof_count_flag =0;
- error_count =0;
-
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- if (argc == 1)
- goto usage;
- if (argc>1)
- {
- if (strcmp(argv[1], "l") == 0) {
- lflag = 1;
- }
-
- else{
- loop = simple_strtoull_ddr(argv[1], &endp, 10);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
- }
-
- // printf("\nLINE== 0x%08x\n", __LINE__);
- if (argc ==1) {
- // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
- // if (*argv[2] == 0 || *endp != 0)
- start_addr = DDR_TEST_START_ADDR;
- loop = 1;
- }
- }
-
- if (argc >= 2) {
- loop = simple_strtoull_ddr(argv[1], &endp, 16);
- if (*argv[1] == 0 || *endp != 0)
- loop = 1;
-
- }
- unsigned int pattern_flag1=1;
- unsigned int pattern_flag2=1;
- unsigned int pattern_flag3=1;
- pattern_flag1 = 1;
- pattern_flag2=1;
- pattern_flag3 = 1;
-
-
- if (argc >= 3 ) {
- if ( (strcmp(argv[2], "s") == 0))
- {
- pattern_flag1 = 1;
- pattern_flag2=0;
- pattern_flag3 = 0;
- }
- else if ((strcmp(argv[2], "c") == 0))
- {
- pattern_flag1 = 0;
- pattern_flag2=1;
- pattern_flag3 = 0;
- }
- else if ( (strcmp(argv[2], "d") == 0))
- {
- pattern_flag1 = 0;
- pattern_flag2=0;
- pattern_flag3 = 1;
- }
- }
-
- // if(test_size<0x20)
- start_addr=0x10000000;
- test_size = 0x20;
- unsigned int temp_i=0;
- unsigned int temp_k=0;
- unsigned int pattern_o[8];
- unsigned int pattern_d[8];
- //unsigned int i=0;
-
- printf("\nloop should >2 and now loop== 0x%08x\n", loop);
- //DDR_TEST_START:
-
- ///*
-
- error_count=0;
- do {
- if (lflag)
- loop = 888;
- if (loop%2)
- {
- start_addr=0x10000000;
- test_size = 0x20;
- for ((i=0);(i<8);(i++))
- {
- des[i]= a_des[i];
- }
- }
- else
- {
- start_addr=0x10000400;
- test_size = 0x20;
- for ((i=0);(i<8);(i++))
- {
- des[i]= b_des[i];
- }
- }
- //if(old_pattern_flag==1)
- {
-
- printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
-
- /*
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
-
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
- flush_dcache_range(start_addr,start_addr + test_size);
-
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
- {error_count++;
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- */
- if (pattern_flag1 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- // if(pattern_o[temp_i]!=pattern_4[temp_k][temp_i])
- if ((pattern_o[temp_i]) != (des_pattern(temp_i,1,temp_k,temp_i)))
- {error_count++;
- // printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
- printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,1,temp_k,temp_i),pattern_1[temp_k][temp_i]);
- }
-
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
- // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- // printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
- printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_pattern(temp_i,1,temp_k,temp_i)),pattern_d[temp_i]);
- }
-
- }
- }
- }
- }
- if (pattern_flag2 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- // if(pattern_o[temp_i]!=pattern_5[temp_k][temp_i])
- if ((pattern_o[temp_i]) != (des_pattern(temp_i,2,temp_k,temp_i)))
- {error_count++;
- // printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
- printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,2,temp_k,temp_i),pattern_2[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- // printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
- printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_inv_pattern(temp_i,2,temp_k,temp_i)),pattern_d[temp_i]);
- }
- }
- }
- }
-
- }
-
- if (pattern_flag3 == 1) {
- for ((temp_k=0);(temp_k<4);(temp_k++)) {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- //if(pattern_o[temp_i]!=pattern_6[temp_k][temp_i])
- if ((pattern_o[temp_i]) != (des_pattern(temp_i,3,temp_k,temp_i)))
- {error_count++;
- // printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
- printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,3,temp_k,temp_i),pattern_3[temp_k][temp_i]);
- }
- }
- }
- }
- for ((temp_k=0);(temp_k<4);(temp_k++))
- {
- {
- ddr_udelay(10000);
- for ((temp_i=0);(temp_i<8);(temp_i++))
- {
- test_addr=start_addr+(temp_i<<2);
- *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
- // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
- //des[temp_i]^pattern_2[temp_k][temp_i]
- }
- // _clean_dcache_addr(0x10000000);
-#ifdef DDR_PREFETCH_CACHE
- flush_dcache_range(start_addr,start_addr + test_size);
-#endif
- for ((temp_i=0);(temp_i<8);(temp_i++)) {
- test_addr=start_addr+(temp_i<<2);
- pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
- // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
- //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
- // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
- pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
- if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
- {error_count++;
- // printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
- printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_inv_pattern(temp_i,3,temp_k,temp_i)),pattern_d[temp_i]);
- }
- }
- }
- }
- }
-
-
-
- }
-
- printf("\Error count==0x%08x", error_count);
- printf("\n \n");
- }while(--loop);
- //*/
-
- printf("\rEnd ddr test. \n");
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-}
-
-
-U_BOOT_CMD(
- ddrtest_gxtvbb_crosstalk, 5, 1, do_ddr_gxtvbb_crosstalk,
- "DDR test function",
- "ddrtest [LOOP] [ADDR].Default address is 0x10000000\n"
-);
-
-#if 1
-int do_ddrtest_find_gate_wind(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Tune ddr dqs function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
- // /*
- // #define DATX8_DQ_LCD_BDL_REG_WIDTH 12
-
-#define DATX8_DQ_LANE_WIDTH 4
-#define CHANNEL_CHANNEL_WIDTH 2
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-
-#define DATX8_DQ_LANE_LANE00 0
-#define DATX8_DQ_LANE_LANE01 1
-#define DATX8_DQ_LANE_LANE02 2
-#define DATX8_DQ_LANE_LANE03 3
-
-#define DATX8_DQ_BDLR0 0
-#define DATX8_DQ_BDLR1 1
-#define DATX8_DQ_BDLR2 2
-#define DATX8_DQ_BDLR3 3
-#define DATX8_DQ_BDLR4 4
-#define DATX8_DQ_BDLR5 5
-#define DATX8_DQ_BDLR6 6
-#define DATX8_DQ_DXNLCDLR0 7
-#define DATX8_DQ_DXNLCDLR1 8
-#define DATX8_DQ_DXNLCDLR2 9
-#define DATX8_DQ_DXNMDLR 10
-#define DATX8_DQ_DXNGTR 11
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- // #define DQ_LCD_BDL_REG_NUM_PER_CHANNEL 5//DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
- // #define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
- //*/
-
-
- // unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
- // unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
- // unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
- // unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
-
- // unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
- // unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
-
- unsigned int dq_lcd_bdl_temp_reg_value;
- // unsigned int dq_lcd_bdl_temp_reg_value_min;
- // unsigned int dq_lcd_bdl_temp_reg_value_max;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
- // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
- // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
- // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
- // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
-
- // unsigned int dq_lcd_bdl_temp_reg_lef;
- // unsigned int dq_lcd_bdl_temp_reg_rig;
- // unsigned int dq_lcd_bdl_temp_reg_center;
- // unsigned int dq_lcd_bdl_temp_reg_windows;
- // unsigned int dq_lcd_bdl_temp_reg_center_min;
- // unsigned int dq_lcd_bdl_temp_reg_windows_min;
-
- unsigned int dqgtr_org[4],dqlcdlr2_org[4],dqgtr_l[4],dqlcdlr2_l[4],dqgtr_r[4],dqlcdlr2_r[4],dqmdlr[4];
- unsigned int dqgtr_temp;
- unsigned int dqlcdlr2_temp;
- unsigned int dqqsgate_org[4],dqqsgate_l[4], dqqsgate_r[4];
- unsigned int ddr_gate_up_down=0;
- unsigned int ddr_gate_init_lane=0;
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- {
- channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {
- channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
- {
- channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
-
-
- if (argc >5) {
- ddr_gate_up_down = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_gate_up_down = 0;
- }
- if ((strcmp(argv[5], "l") == 0) || (strcmp(argv[5], "L") == 0))
- {
- ddr_gate_up_down = 00000;
- }
- }
- if (argc >6) {
- ddr_gate_init_lane = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_gate_init_lane = 0;
- }
- if ((strcmp(argv[6], "l") == 0) || (strcmp(argv[6], "L") == 0))
- {
- ddr_gate_init_lane = 00000;
- }
- }
-
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\nddr_gate_up_down== 0x%08x\n", ddr_gate_up_down);
- printf("\nddr_gate_init_lane== 0x%08x\n", ddr_gate_init_lane);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
- }
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj;
- }
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj;
- } else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj;
- }
- }
- }
- }////save and print org training dqs value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- printf("\ntest lane==0x%08x\n ",temp_count_i);
- if (ddr_gate_init_lane)
- {
- temp_count_i=ddr_gate_init_lane;
- printf("\ntest lane change==0x%08x\n ",temp_count_i);
- }
-
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
- }
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj;
- }
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj;
- }
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj;
- }
-
- // for((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
- {
- //if(temp_count_k==0)
- {
- dqlcdlr2_org[temp_count_i]=readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0);
- dqgtr_org[temp_count_i]=readl(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0);
- dqmdlr[temp_count_i]=readl(reg_add+DDR0_PUB_ACMDLR-DDR0_PUB_DX0LCDLR0);
- dq_lcd_bdl_temp_reg_value=(((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2*((dqgtr_org[temp_count_i])&(DXNGTR_MAX))+(((dqlcdlr2_org[temp_count_i]))&ACLCDLR_MAX);
- dqqsgate_org[temp_count_i]=dq_lcd_bdl_temp_reg_value;
-
- printf("\ngate org==0x%08x 0x%08x 0x%08x 0x%08x\n ",dqqsgate_org[temp_count_i],dqgtr_org[temp_count_i],dqlcdlr2_org[temp_count_i], dqmdlr[temp_count_i]);
-
- if (ddr_gate_up_down == 0)
- {
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value--;
- printf("\ngate left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- dqgtr_temp=dq_lcd_bdl_temp_reg_value/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- dqlcdlr2_temp=dq_lcd_bdl_temp_reg_value-dqgtr_temp*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
-
- writel((dqlcdlr2_temp),(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- writel((((readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0)))&0xfffff000)|(dqgtr_temp)),(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
- printf("\n (reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0) 0x%08x gtr==0x%08x\n ",(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0),(readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0))));
- printf("\nlcdlr2==0x%08x\n ",readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- printf("\ndqgtr_temp==0x%08x\n ",dqgtr_temp);
- printf("\ngatedqlcdlr2_temp==0x%08x\n ",dqlcdlr2_temp);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- printf("\ngateleft edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\ngate left edge detect \n");
- printf("\ngate left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- //dq_lcd_bdl_temp_reg_value_min=dq_lcd_bdl_temp_reg_value;
- dqqsgate_l[temp_count_i]=dq_lcd_bdl_temp_reg_value;
- writel(dqlcdlr2_org[temp_count_i],(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- writel( dqgtr_org[temp_count_i],(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
-
- dq_lcd_bdl_temp_reg_value=(((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2*((dqgtr_org[temp_count_i])&DXNGTR_MAX)+(((dqlcdlr2_org[temp_count_i]))&ACLCDLR_MAX);
- }
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- temp_test_error=0;
- dq_lcd_bdl_temp_reg_value++;
- printf("\ngate rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- dqgtr_temp=dq_lcd_bdl_temp_reg_value/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- dqlcdlr2_temp=dq_lcd_bdl_temp_reg_value-dqgtr_temp*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
-
- writel((dqlcdlr2_temp),(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- writel(((readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0)))&0xfffff000)|(dqgtr_temp),(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
- printf("\n (reg_addDDR0_PUB_DX0GTR) 0x%08x gtr==0x%08x\n ",(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0),(readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0))));
- printf("\nlcdlr2==0x%08x\n ",readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- printf("\ndqgtr_temp==0x%08x\n ",dqgtr_temp);
- printf("\ngatedqlcdlr2_temp==0x%08x\n ",dqlcdlr2_temp);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- printf("\ngaterig edge detect \n");
- dq_lcd_bdl_temp_reg_value++;
- break;
- }
- }
- printf("\ngate rig edge detect \n");
- printf("\ngate rig edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
- //dq_lcd_bdl_temp_reg_value_max=dq_lcd_bdl_temp_reg_value;
- dqqsgate_r[temp_count_i]=dq_lcd_bdl_temp_reg_value;
- writel(dqlcdlr2_org[temp_count_i],(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
- writel( dqgtr_org[temp_count_i],(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
-
-
-
-
-
-
- }
-
-
-
- }
- }
-
- }
- }
-
- ////tune and save training dqs value
-
-
-
-
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
-
-
-
-
- printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
- printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
-
- for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
- {
- {
-
- if (temp_count_i == DATX8_DQ_LANE_LANE00)
- {
- reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj+0*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE01)
- {
- reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj+0*4;}
-
- else if(temp_count_i==DATX8_DQ_LANE_LANE02)
- {
- reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj+0*4;}
- else if(temp_count_i==DATX8_DQ_LANE_LANE03)
- {
- reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj+0*4;}
- }
-
- //unsigned int dqgtr_org[4],dqlcdlr2_org[4],dqgtr_l[4],dqlcdlr2_l[4],dqgtr_r[4],dqlcdlr2_r[4],dqmdlr[4];
- // unsigned int dqgtr_temp;
- // unsigned int dqlcdlr2_temp;
- // unsigned int dqqsgate_l[4], dqqsgate_r[4];
- (dqgtr_l[temp_count_i])=(dqqsgate_l[temp_count_i])/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- (dqlcdlr2_l[temp_count_i])=(dqqsgate_l[temp_count_i])-(dqgtr_l[temp_count_i])*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- (dqgtr_r[temp_count_i])=(dqqsgate_r[temp_count_i])/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- (dqlcdlr2_r[temp_count_i])=(dqqsgate_r[temp_count_i])-(dqgtr_r[temp_count_i])*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
- printf("\n add reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
- (dqqsgate_org[temp_count_i]),
- (dqqsgate_l[temp_count_i]),
- (dqqsgate_r[temp_count_i]),
- (dqgtr_org[temp_count_i]),
- (dqlcdlr2_org[temp_count_i]),
- (dqgtr_l[temp_count_i]),
- (dqgtr_r[temp_count_i]),
- (dqlcdlr2_l[temp_count_i]),
- (dqlcdlr2_r[temp_count_i])
- );
-
-
- }
-
-
-
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-
-U_BOOT_CMD(
- ddrtest_gate, 7, 1, do_ddrtest_find_gate_wind,
- "DDR test function should dcache off ddrtest_gate a 0 0x80000 1 0 3",
- "ddrtest_gate [LOOP] [ADDR].Default address is 0x10000000\n"
-);
-
-
-#endif
-
-///*
-int do_ddr_test_ac_windows_bdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr ac bdlr windows function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
- static unsigned int soft_ca_training_seed=0;
- static unsigned int soft_ca_training_step=0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ac_mdlr_a_org=0;
- unsigned int ac_mdlr_b_org=0;
-
- unsigned int ac_lcdlr_a_org=0;
- unsigned int ac_bdlr0_a_org=0;
- unsigned int ac_lcdlr_b_org=0;
- unsigned int ac_bdlr0_b_org=0;
- unsigned int ac_lcdlr_a_rig=0;
- unsigned int ac_bdlr0_a_rig=0;
- unsigned int ac_lcdlr_b_rig=0;
- unsigned int ac_bdlr0_b_rig=0;
- unsigned int ac_lcdlr_a_lef=0;
- unsigned int ac_bdlr0_a_lef=0;
- unsigned int ac_lcdlr_b_lef=0;
- unsigned int ac_bdlr0_b_lef=0;
-
- unsigned int ac_lcdlr_a_rig_min=0;
- unsigned int ac_bdlr0_a_rig_min=0;
- unsigned int ac_lcdlr_b_rig_min=0;
- unsigned int ac_bdlr0_b_rig_min=0;
- unsigned int ac_lcdlr_a_lef_min=0;
- unsigned int ac_bdlr0_a_lef_min=0;
- unsigned int ac_lcdlr_b_lef_min=0;
- unsigned int ac_bdlr0_b_lef_min=0;
- // unsigned int ac_lcdlr_temp;
- // unsigned int ac_bdlr0_temp=0;
-
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- unsigned int ac_bdlr_lef[10];
- unsigned int ac_bdlr_rig[10];
- unsigned int ac_bdlr_temp_value;
- unsigned int ac_bdlr_reg_seed_value;
- unsigned int ac_bdlr_temp_reg_value;
- // unsigned int temp_test_error;
- unsigned int temp_i=0;
- unsigned int temp_j=0;
- //unsigned int reg_add=0;
- // static unsigned int soft_ca_training_enabled=1;
-
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
-
- if (argc >5) {
- soft_ca_training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- soft_ca_training_seed = 0x1f;
- }
-
-
- }
- if (argc >6) {
- soft_ca_training_step = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- soft_ca_training_step = 0;
- }
-
-
- }
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- printf("\nsoft_ca_training_seed== 0x%08x\n", soft_ca_training_seed);
- printf("\nsoft_ca_training_step== 0x%08x\n", soft_ca_training_step);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
-
-
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
-
- }
- }
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel 0x%08x\n",reg_add);
- ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
- ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
- ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
-
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
- }
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
-
- ac_mdlr_b_org=readl(reg_add);
- ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
- ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
- }
-
-
- }
-
- }
-
- }////save and print org training value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel AC\n");
- }
- else
- {
- printf("\ntest B channel AC\n");
- }
-
-
-#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
- //wr_reg(DDR0_PUB_ACBDLR3, 0x0808); //cs0 cs1
- //wr_reg(DDR0_PUB_ACBDLR0, 0x1f); //ck0
- // wr_reg(DDR0_PUB_ACBDLR4, 0x0808); //odt0 odt1
- //wr_reg(DDR0_PUB_ACBDLR5, 0x0808); //cke0 cke1
-
-
- //wr_reg(DDR0_PUB_ACBDLR1, 0x181818); //ras cas we
- //wr_reg(DDR0_PUB_ACBDLR2, 0x181818); //ba0 ba1 ba2
- //wr_reg(DDR0_PUB_ACBDLR6, 0x12121212); //a0 a1 a2 a3
- //wr_reg(DDR0_PUB_ACBDLR7, 0x0d0d0d0d); //a4 a5 a6 a7
- //wr_reg(DDR0_PUB_ACBDLR8, 0x10101010); //a8 a9 a10 a11
- //wr_reg(DDR0_PUB_ACBDLR9, 0x18181818); //a12 a13 a14 a15
- reg_add=DDR0_PUB_ACBDLR0;
- ac_bdlr_reg_seed_value=(soft_ca_training_seed|(soft_ca_training_seed<<8)|(soft_ca_training_seed<<16)|(soft_ca_training_seed<<24));
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
- //wr_reg((DDR0_PUB_ACBDLR0+temp_i*4),
- //ac_bdlr_reg_seed_value); //cs0 cs1
- //reg_add=reg_add+temp_i*4;
-
- //reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- wrr_reg((reg_add),
- ac_bdlr_reg_seed_value); //cs0 cs1
- ac_bdlr_lef[temp_i]=ac_bdlr_reg_seed_value;
- ac_bdlr_rig[temp_i]=ac_bdlr_reg_seed_value;
- }
-
- printf("\nbdl soft_ca_training_step==0x%08x\n ",soft_ca_training_step);
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
- //ac_bdlr_temp_value=rdr_reg((unsigned int )reg_add);
- if (temp_i == 1)
- {
- //temp_i=3;
- }
-
- for (( temp_j=0);(temp_j<4);( temp_j++))
- {
- if (soft_ca_training_step)
- {
- temp_i=(soft_ca_training_step>>2);
- temp_j=soft_ca_training_step-((soft_ca_training_step>>2)<<2);
- soft_ca_training_step=0;
- }
- if ((temp_i*4+temp_j) == 1)
- {
- temp_i=1;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 7)
- {
- temp_i=2;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 14)
- {
- temp_i=4;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 18)
- {
- temp_i=5;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 22)
- {
- temp_i=6;
- temp_j=0;
- }
- //printf("\nbdl temp_i==0x%08x\n ",temp_i);
- printf("\nbdl temp_ij==0x%08x\n ",(temp_i*4+temp_j));
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- ac_bdlr_temp_reg_value=rdr_reg((unsigned int )reg_add);
- ac_bdlr_temp_value=((ac_bdlr_temp_reg_value>>(temp_j<<3))&ACBDLR_MAX);
- while (ac_bdlr_temp_value>0)
- {
- temp_test_error=0;
- ac_bdlr_temp_value--;
-
- printf("\nbdl temp_ij==0x%08x lef temp==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
-
- ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_reg_seed_value)|((ac_bdlr_temp_value)<<(temp_j<<3)));
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- wrr_reg((unsigned int )reg_add,
- ac_bdlr_temp_reg_value);
- printf("\nbdl reg_add 0x%08x== 0x%08x\n ",reg_add,ac_bdlr_temp_reg_value);
-
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- printf("\nbdl left edge detect \n");
- ac_bdlr_temp_value++;
- break;
- }
- }
-
- printf("\nbdl left edge detect \n");
- printf("\n\nbdl temp_ij==0x%08x bdl left edge==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- wrr_reg((unsigned int )reg_add,
- ac_bdlr_reg_seed_value);
-
- ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_lef[temp_i])|((ac_bdlr_temp_value)<<(temp_j<<3)));
- ac_bdlr_lef[temp_i]=ac_bdlr_temp_reg_value;
-
- ac_bdlr_temp_value=((ac_bdlr_reg_seed_value>>(temp_j<<3))&ACBDLR_MAX);
- while (ac_bdlr_temp_value<ACBDLR_MAX)
- {
- temp_test_error=0;
- ac_bdlr_temp_value++;
- printf("\ntemp_ij==0x%08x rig temp==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
-
- ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_reg_seed_value)|((ac_bdlr_temp_value)<<(temp_j<<3)));
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- wrr_reg((unsigned int )reg_add,
- ac_bdlr_temp_reg_value);
- printf("\nbdl reg_add 0x%08x== 0x%08x\n ",reg_add,ac_bdlr_temp_reg_value);
-#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
- temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-#else
- temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-#endif
- if (temp_test_error)
- {
- printf("\nbdl rig edge detect \n");
- ac_bdlr_temp_value--;
- break;
- }
- }
-
-
-
- printf("\nbdl rig edge detect \n");
- //printf("\n\nbdl rig edge==0x%08x\n ",ac_bdlr_temp_value);
- printf("\n\nbdl temp_ij==0x%08x bdl righ edge==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
- reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- wrr_reg((unsigned int )reg_add,
- ac_bdlr_reg_seed_value);
-
- ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_rig[temp_i])|((ac_bdlr_temp_value)<<(temp_j<<3)));
- ac_bdlr_rig[temp_i]=ac_bdlr_temp_reg_value;
- }
- }
-
- printf("\nbdl lef edge==bdlr0 bdlr1 bdlr2 bdlr3 bdlr4 bdlr5 bdlr6 bdlr7 bdlr8 bdlr9 \n ");
- printf("\nbdl lef edge==\n");
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
-
- printf("0x%08x\n ",ac_bdlr_lef[temp_i]);
-
- }
-
- printf("\n ");
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
- printf("0x%08x\n ",ac_bdlr_rig[temp_i]);
- }
- printf("\nbdl rig edge===========\n");
- printf("\n===================\n");
-
- printf("\nbdl lef edge==\n");
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
- for (( temp_j=0);(temp_j<4);( temp_j++))
- {
- if ((temp_i*4+temp_j) == 1)
- {
- temp_i=1;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 7)
- {
- temp_i=2;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 14)
- {
- temp_i=4;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 18)
- {
- temp_i=5;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 22)
- {
- temp_i=6;
- temp_j=0;
- }
- ac_bdlr_temp_reg_value=((((0xff<<(temp_j<<3)))&ac_bdlr_lef[temp_i])>>(temp_j<<3));
- printf("\ntempi_j0x%08x==0x%08x",((temp_i<<2)+temp_j),ac_bdlr_temp_reg_value);
- }
- }
-
- printf("\n ");
- printf("\nbdl rig edge==\n");
- for (( temp_i=0);(temp_i<10);( temp_i++))
- {
- for (( temp_j=0);(temp_j<4);( temp_j++))
- {
- if ((temp_i*4+temp_j) == 1)
- {
- temp_i=1;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 7)
- {
- temp_i=2;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 14)
- {
- temp_i=4;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 18)
- {
- temp_i=5;
- temp_j=0;
- }
- if ((temp_i*4+temp_j) == 22)
- {
- temp_i=6;
- temp_j=0;
- }
- ac_bdlr_temp_reg_value=((((0xff<<(temp_j<<3)))&ac_bdlr_rig[temp_i])>>(temp_j<<3));
- printf("\ntempi_j0x%08x==0x%08x",((temp_i<<2)+temp_j),ac_bdlr_temp_reg_value);
- }
- }
- }
-
- ////tune and save training dqs value
- ////calculate and print dqs value
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
-
- if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
-
- if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
-
- if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- else
- {
- ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
- ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
- ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
- ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
- }
- printf("\ntest A channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
- }
-
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
- if (test_times)
- {
- if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
-
- if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
-
- if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
-
- if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- else
- {
- ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
- ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
- ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
- ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
- }
- printf("\ntest B channel AC result\n");
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
-
- printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
- printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
- }
- }
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-
-
-U_BOOT_CMD(
- ddr_tune_ddr_ac_bdlr, 7, 1, do_ddr_test_ac_windows_bdlr,
- "DDR tune ac bdl function",
- "ddr_tune_ddr_ac_bdlr a 0 0x8000000 1 seed step or ddr_tune_ddr_ac_bdlr b 0 0x800000 1 seed step or ddr_tune_ddr_ac_acbdlr_ck a b 0x80000 l\n dcache off ? \n"
-);
-
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
-int do_ddr_test_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr vref function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
-
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
- static unsigned int training_seed=0;
- static unsigned int training_step=0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
-
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ac_mdlr_a_org=0;
- unsigned int ac_mdlr_b_org=0;
-
- unsigned int ac_lcdlr_a_org=0;
- unsigned int ac_bdlr0_a_org=0;
- unsigned int ac_lcdlr_b_org=0;
- unsigned int ac_bdlr0_b_org=0;
- // unsigned int ac_lcdlr_a_rig=0;
- // unsigned int ac_bdlr0_a_rig=0;
- // unsigned int ac_lcdlr_b_rig=0;
- // unsigned int ac_bdlr0_b_rig=0;
- // unsigned int ac_lcdlr_a_lef=0;
- // unsigned int ac_bdlr0_a_lef=0;
- // unsigned int ac_lcdlr_b_lef=0;
- // unsigned int ac_bdlr0_b_lef=0;
-
- // unsigned int ac_lcdlr_a_rig_min=0;
- // unsigned int ac_bdlr0_a_rig_min=0;
- // unsigned int ac_lcdlr_b_rig_min=0;
- // unsigned int ac_bdlr0_b_rig_min=0;
- // unsigned int ac_lcdlr_a_lef_min=0;
- // unsigned int ac_bdlr0_a_lef_min=0;
- // unsigned int ac_lcdlr_b_lef_min=0;
- // unsigned int ac_bdlr0_b_lef_min=0;
- // unsigned int ac_lcdlr_temp;
- // unsigned int ac_bdlr0_temp=0;
-
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- // unsigned int ac_bdlr_lef[10];
- // unsigned int ac_bdlr_rig[10];
- unsigned int iovref_temp_value;
- unsigned int iovref_temp_reg_value;
- unsigned int reg_seed_value;
- // unsigned int temp_reg_value;
- unsigned int iovref_lef;
- unsigned int iovref_rig;
- // unsigned int temp_test_error;
- // unsigned int temp_i=0;
- // unsigned int temp_j=0;
- //unsigned int reg_add=0;
- // static unsigned int training_enabled=1;
-
- // iovref_lef=0x49;
- // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- {
- channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {
- channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {
- channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_loop = 1;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_loop = 100000;
- }
- }
- training_seed = 0x49;
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed = 0x49;
- }
-
-
- }
-
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*7)+440)*3)/2)+1);
-
- training_step = 0;
- if (argc >6) {
- training_step = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- training_step = 0;
- }
- }
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_loop== 0x%08x\n", test_loop);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
-
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
- }
- }
-
- reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel 0x%08x\n",reg_add);
- ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
- ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
- ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
-
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
- }
- if (reg_base_adj == CHANNEL_B_REG_BASE)
- {
-
- ac_mdlr_b_org=readl(reg_add);
- ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
- ac_bdlr0_b_org=readl(reg_add+8);
- printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
- printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
- printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
- }
-
-
- }
-
-
- }////save and print org training value
-
-
- for (test_times=0;(test_times<test_loop);(test_times++))
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel AC\n");
- }
- else
- {
- printf("\ntest B channel AC\n");
- }
-
-
-#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
- //wr_reg(DDR0_PUB_ACBDLR3, 0x0808); //cs0 cs1
- //wr_reg(DDR0_PUB_ACBDLR0, 0x1f); //ck0
- // wr_reg(DDR0_PUB_ACBDLR4, 0x0808); //odt0 odt1
- //wr_reg(DDR0_PUB_ACBDLR5, 0x0808); //cke0 cke1
-
-
- //wr_reg(DDR0_PUB_ACBDLR1, 0x181818); //ras cas we
- //wr_reg(DDR0_PUB_ACBDLR2, 0x181818); //ba0 ba1 ba2
- //wr_reg(DDR0_PUB_ACBDLR6, 0x12121212); //a0 a1 a2 a3
- //wr_reg(DDR0_PUB_ACBDLR7, 0x0d0d0d0d); //a4 a5 a6 a7
- //wr_reg(DDR0_PUB_ACBDLR8, 0x10101010); //a8 a9 a10 a11
- //wr_reg(DDR0_PUB_ACBDLR9, 0x18181818); //a12 a13 a14 a15
- reg_add=DDR0_PUB_IOVCR0;
- reg_seed_value=(training_seed|(training_seed<<8)|(training_seed<<16)|(training_seed<<24));
- //for(( temp_i=0);(temp_i<10);( temp_i++))
- //wr_reg((DDR0_PUB_ACBDLR0+temp_i*4),
- //ac_bdlr_reg_seed_value); //cs0 cs1
- //reg_add=reg_add+temp_i*4;
-
- //reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
- //reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
- reg_add=reg_add+reg_base_adj;
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
- // iovref_lef=0x49;
- if (iovref_temp_value)
- {
- printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_temp_value,(((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1);
- }
- else
- {
- printf("\nio vref power down ,use external resister \n ");
- }
-
- wrr_reg((reg_add),
- reg_seed_value); //
-
- wrr_reg((reg_add+4),
- reg_seed_value); //
- iovref_lef=training_seed;
- iovref_rig=training_seed;
-
- printf("\ntraining_step==0x%08x\n ",training_step);
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
- while (iovref_temp_value>0x40)
- {
- temp_test_error=0;
- iovref_temp_value--;
-
- printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
-
- iovref_temp_reg_value=(iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)|(iovref_temp_value<<24));;
- wrr_reg((reg_add),
- iovref_temp_reg_value); //
-
- wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
- iovref_temp_reg_value); //
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- printf("\nvref down edge detect \n");
- iovref_temp_value++;
- break;
- }
- }
-
- printf("\n down edge detect \n");
- printf("\n\n iovref down edge==0x%08x\n ",iovref_temp_value);
- iovref_lef=iovref_temp_value;
-
- wrr_reg((reg_add),
- reg_seed_value); //
-
- wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
- reg_seed_value); //
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
-
-
- while (iovref_temp_value<0x7f)
- {
- temp_test_error=0;
- iovref_temp_value++;
-
- printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
-
- iovref_temp_reg_value=(iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)|(iovref_temp_value<<24));;
- wrr_reg((reg_add),
- iovref_temp_reg_value); //
-
- wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
- iovref_temp_reg_value); //
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- printf("\nvref up edge detect \n");
- iovref_temp_value--;
- break;
- }
- }
-
- printf("\n up edge detect \n");
- printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
- iovref_rig=iovref_temp_value;
-
- //reg_seed_value=0x49494949
- wrr_reg((reg_add),
- 0x49494949); //
-
- wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
- 0x49494949); //
-
- printf("\n\n iovref down edge==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
- printf("\n\n iovref up edge==0x%08x %08dmV\n",iovref_rig,(((((iovref_rig&0X3F)*7)+440)*3)/2)+1);
- printf("\n\n iovref mid ==0x%08x %08dmV\n",
- (iovref_lef+iovref_rig)/2,(((((((iovref_lef+iovref_rig)/2)&0X3F)*7)+440)*3)/2)+1);
- if (iovref_lef == 0x40)
- printf("\n\n iovref down edge reach reg limited\n");
- }
- }
- }
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-U_BOOT_CMD(
- ddr_tune_ddr_vref, 7, 1, do_ddr_test_vref,
- "DDR tune vref function ddr_tune_ddr_vref a 0 0x8000000 1 48 1",
- "ddr_tune_ddr_vref a 0 0x8000000 1 seed step \n dcache off ? \n"
-);
-
-
-int do_ddr4_test_phy_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- if(watchdog_time_s==0)
- {
- watchdog_time_s=50;
- printf("test soc_vref re set watchdog_time_s==%d\n",watchdog_time_s);
- }
-
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- // unsigned int start_addr=test_start_addr;
- printf("\nEnter Test ddr4 phy vref function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
- int training_seed=0;
- int training_step=0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_soc_dram=0;
- // unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
- unsigned int dxnlcdlr3[4];
- unsigned int dxnlcdlr4[4];
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
- // #define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
-#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
-#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
-#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
-#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
-#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
-#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
-#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- // unsigned int ac_bdlr_lef[10];
- // unsigned int ac_bdlr_rig[10];
- int iovref_temp_value;
- int ddr_soc_iovref_org=0;
- int iovref_temp_reg_value;
- // unsigned int reg_seed_value;
- // unsigned int temp_reg_value;
- int iovref_org[4];
- int iovref_lef[4];
- int iovref_rig[4];
- // unsigned int temp_test_error;
- // unsigned int temp_i=0;
- // unsigned int temp_j=0;
- //unsigned int reg_add=0;
- // static unsigned int training_enabled=1;
-
- // iovref_lef=0x49;
- // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
- //#define DDR_TEST_ACLCDLR
-
- char str_temp1[1024]="";
- char str_temp2[1024]="";
- char str[512]="";
- unsigned int soc_iovref_test_ddr_clk=0;
- sprintf(str_temp1,"ddr_soc_iovref_test_ddr_clk");
- soc_iovref_test_ddr_clk=env_to_a_num(str_temp1);
- if(soc_iovref_test_ddr_clk==0)
- {
- soc_iovref_test_ddr_clk=global_ddr_clk;
- {
- sprintf(str_temp1,"ddr_soc_iovref_test_ddr_clk");
- sprintf(str_temp2,"0x%08x",soc_iovref_test_ddr_clk);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- }
- if(soc_iovref_test_ddr_clk!=global_ddr_clk)
- {
- printf("running ddr freq==%d,but test freq is %d,will reboot use d2pll \n",global_ddr_clk,soc_iovref_test_ddr_clk);
- sprintf(str,"d2pll %d",soc_iovref_test_ddr_clk);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- unsigned int soc_iovref_test_step=0;
- sprintf(str_temp1,"soc_iovref_test_step");
- soc_iovref_test_step=env_to_a_num(str_temp1);
- if(soc_iovref_test_step==0)
- iovref_temp_value=0;
- {
- sprintf(str_temp1,"soc_iovref_test_step");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- unsigned int soc_iovref_lef=0;
- unsigned int soc_iovref_rig=0;
- //char *p_str=NULL;
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {
- channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
- {
- channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_soc_dram = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_soc_dram = 0;
- }
- if (test_soc_dram)
- test_soc_dram = 1;
-
- }
- training_seed = 0;
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
- }
-
- if (training_seed>0x3f)
- training_seed=0x3f;
-
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,((((((training_seed&0X3F)*7)+440)*3)/2)+1)*12/15);
-
- training_step = 0;
- if (argc >6) {
- training_step = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- training_step = 0;
- }
- }
- int vref_all=1;
- if (argc >7) {
- vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
- if (*argv[7] == 0 || *endp != 0)
- {
- vref_all =0;//
- }
- }
- vref_all =1;//
- int vref_lcdlr_offset=0;
- if (argc >8) {
- vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
- if (*argv[8] == 0 || *endp != 0)
- {
- vref_lcdlr_offset =0;
- }
- }
- int vref_set_test_step=0;
- if (argc >9) {
- vref_set_test_step = simple_strtoull_ddr(argv[9], &endp, 16);
- if (*argv[9] == 0 || *endp != 0)
- {
- vref_set_test_step =0;
- }
- }
-
- unsigned int soc_dram_hex_dec=0;
- if (argc >10)
- {
- soc_dram_hex_dec = simple_strtoull_ddr(argv[10], &endp, 0);
- if (*argv[10] == 0 || *endp != 0) {
- soc_dram_hex_dec = 0;
- }
- }
- if (soc_dram_hex_dec)
- {
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
- printf("\ntraining_seed== 0x%08x\n", training_seed);
-
- }
- if (training_seed<45)
- training_seed=45;
- if (training_seed>88)
- training_seed=88;
- training_seed =(((training_seed*1000-44070)/698));
-
-
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,((((((training_seed&0X3F)*7)+440)*3)/2)+1)*12/15);
- }
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_soc_dram== 0x%08x\n", test_soc_dram);
- printf("\nvref_all== 0x%08x\n", vref_all);
- printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
- printf("\nsoc_dram_hex_dec== 0x%08x\n", soc_dram_hex_dec);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
- }////save and print org training value
-
-
-
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel data lane\n");
- }
- else
- {
- printf("\ntest B channel data lane\n");
- }
-
-
-
-
-#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
- unsigned int dxnmdlr=0;
- reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
- dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
- // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
- wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
- printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
- printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
- printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
-
- printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
- unsigned int temp_i=0;
- unsigned int temp_i_max=4;
- for (( temp_i=0);(temp_i<4);( temp_i++))
- {
- dxnlcdlr3[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))));
- dxnlcdlr4[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))));
- reg_add=DDR0_PUB_DX0GCR5+reg_base_adj+temp_i*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5);
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_org[temp_i]=iovref_temp_value;
- iovref_temp_value=((iovref_temp_value)&0xff);
- printf("\ndxnlcdlr3[%08x]==0x%08x,dxnlcdlr4[%08x]==0x%08x\n ",temp_i,dxnlcdlr3[temp_i],temp_i,dxnlcdlr4[temp_i]);
- // iovref_lef=0x49;
- if (iovref_temp_value)
- {
- printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",reg_add,
- iovref_org[temp_i],iovref_temp_value,((((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1)*12/15);
- }
- else
- {
- printf("\nio vref power down ,use external resister \n ");
- }
-
- wrr_reg((reg_add),
- iovref_org[temp_i]); //
- iovref_lef[temp_i]=(iovref_org[temp_i])&0xff;
- iovref_rig[temp_i]=(iovref_org[temp_i])&0xff;
- if (training_seed)
- {iovref_lef[temp_i]=training_seed;
- iovref_rig[temp_i]=training_seed;
-
- }
- }
-
- printf("\ntraining_step==0x%08x\n ",training_step);
- if (vref_all)
- {temp_i_max=1;
- }
- for (( temp_i=0);(temp_i<temp_i_max);( temp_i++))
- {
- reg_add=DDR0_PUB_DX0GCR5+reg_base_adj+temp_i*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5);
-
-
- if (training_seed)
- {
- wrr_reg((reg_add),
- (training_seed|((iovref_org[temp_i])&0xffffff00)));
- if (vref_all) {
- wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+1])&0xffffff00))); //
- wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+2])&0xffffff00))); //
- wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+3])&0xffffff00))); //
- }
- }
-
- {
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
-
- sprintf(str_temp1,"ddr_soc_iovref_org");
- ddr_soc_iovref_org=env_to_a_num(str_temp1);
- if(ddr_soc_iovref_org==0)
- {
- sprintf(str_temp1,"ddr_soc_iovref_org");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
-
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
-
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- soc_iovref_lef=env_to_a_num(str_temp1);
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- soc_iovref_rig=env_to_a_num(str_temp1);
-
-
- if(soc_iovref_lef)
- {;
- }
-
- ddr_test_watchdog_enable(watchdog_time_s);
-
- if (vref_set_test_step)
- {
- printf("\nvref_set_test_step==0x%08x,skip test left edge\n ",vref_set_test_step);
- soc_iovref_test_step=1;
- {
- sprintf(str_temp1,"soc_iovref_test_step");
- sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- //break;
- }
-
- if(soc_iovref_test_step==0)
- {//int temp=0;
- if(soc_iovref_lef)
- {iovref_temp_value=soc_iovref_lef;
- }
- while (iovref_temp_value>0x0)
- {
-
- temp_test_error=0;
- iovref_temp_value=iovref_temp_value-training_step;
- if (iovref_temp_value<training_step)
- iovref_temp_value=0;
- printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
-
- {
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- iovref_temp_reg_value=(iovref_temp_value|((iovref_org[temp_i])&0xffffff00));
- wrr_reg((reg_add),
- iovref_temp_reg_value); //
- if (vref_all) {
- wrr_reg((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- wrr_reg((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- wrr_reg((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- }
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- ddr_test_watchdog_clear();
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR3+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR4+reg_base_adj)))+vref_lcdlr_offset)); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- }
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
-
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
-
- }
-
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),(dxnlcdlr3[0]-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),(dxnlcdlr4[0]-vref_lcdlr_offset)); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[1]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[2]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[3]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[1]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[2]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[3]-vref_lcdlr_offset)); //
- }
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
-
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
-
- }
-
- }
- if (temp_test_error)
- {
- printf("\nvref down edge detect \n");
- iovref_temp_value=iovref_temp_value+training_step;
- break;
- }
- }
- printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
-
- {
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- {
- soc_iovref_test_step=1;
- sprintf(str_temp1,"soc_iovref_test_step");
- sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- run_command("reset",0);
- }
-
- }
-
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- soc_iovref_lef=env_to_a_num(str_temp1);
- iovref_temp_value=soc_iovref_lef;
- printf("\n down edge detect \n");
- printf("\n\n iovref down edge==0x%08x\n ",soc_iovref_lef);
- iovref_lef[temp_i]=iovref_temp_value;
- //if(soc_iovref_lef)
- //{iovref_temp_value=soc_iovref_lef;
- //iovref_lef[temp_i]=iovref_temp_value;
- //}
- wrr_reg((reg_add),
- iovref_org[temp_i]); //
- if (vref_all) {
- wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+1]); //
- wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+2]); //
- wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+3]); //
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
- }
-
-
- {
- if (training_seed)
- {
- wrr_reg((reg_add),
- (training_seed|((iovref_org[temp_i])&0xffffff00)));
- if (vref_all) {
- wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+1])&0xffffff00))); //
- wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+2])&0xffffff00))); //
- wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- (training_seed|((iovref_org[temp_i+3])&0xffffff00))); //
- }
- }
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
-
- //if(soc_iovref_rig==0)
- if(soc_iovref_test_step==1)
- {
- if(soc_iovref_rig)
- {iovref_temp_value=soc_iovref_rig;
- }
- while (iovref_temp_value<0x3f)
- {
- temp_test_error=0;
- iovref_temp_value=iovref_temp_value+training_step;
- if (iovref_temp_value>0x3f)
- iovref_temp_value=0x3f;
- printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
-
- {
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- iovref_temp_reg_value=(iovref_temp_value|((iovref_org[temp_i])&0xffffff00));
- wrr_reg((reg_add),
- iovref_temp_reg_value); //
- if (vref_all) {
- wrr_reg((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- wrr_reg((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- wrr_reg((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
- iovref_temp_reg_value); //
- }
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
- ddr_test_watchdog_clear();
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR3+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR4+reg_base_adj)))+vref_lcdlr_offset)); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
- }
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
-
- }
-
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),(dxnlcdlr3[0]-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),(dxnlcdlr4[0]-vref_lcdlr_offset)); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[1]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[2]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (dxnlcdlr3[3]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[1]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[2]-vref_lcdlr_offset)); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (dxnlcdlr4[3]-vref_lcdlr_offset)); //
- }
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
-
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
-
- }
-
- }
-
- if (temp_test_error)
- {
- printf("\nvref up edge detect \n");
- iovref_temp_value=iovref_temp_value-training_step;
- break;
- }
- }
- }
-
- printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
-
- {
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- sprintf(str_temp2,"0x%08x",iovref_temp_value);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- {
- soc_iovref_test_step=2;
- sprintf(str_temp1,"soc_iovref_test_step");
- sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- //run_command("reset",0);
- }
-
- }
-
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- soc_iovref_rig=env_to_a_num(str_temp1);
- iovref_temp_value=soc_iovref_rig;
-
- printf("\n up edge detect \n");
- printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
- iovref_rig[temp_i]=iovref_temp_value;
- //if(soc_iovref_rig)
- //{iovref_temp_value=soc_iovref_rig;
- //iovref_rig[temp_i]=iovref_temp_value;
- //}
- wrr_reg((reg_add),
- iovref_org[temp_i]); //
- if (vref_all) {
- wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+1]); //
- wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+2]); //
- wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
- iovref_org[temp_i+3]); //
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
- wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
- if (vref_all) {
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
- dxnlcdlr3[3]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[1]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[2]); //
- wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
- dxnlcdlr4[3]); //
- }
-
- }
- }
-
-
- }
- // vddq=1.5v
- ddr_test_watchdog_disable();
- printf("\n\nsoc iovref test clk==%d\n",soc_iovref_test_ddr_clk);
- printf("\n\n iovref vddq=1.2v,if use other vddq ,please recount\n");
- for (( temp_i=0);(temp_i<4);( temp_i++))
- {
- printf("\n\n iovref lane_x=0x%08x, org==0x%08x %08dmV\n",temp_i,iovref_org[temp_i],((((((iovref_org[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
- printf("\n\n iovref lane_x=0x%08x, down edge==0x%08x %08dmV\n",temp_i,iovref_lef[temp_i],((((((iovref_lef[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
- printf("\n\n iovref lane_x=0x%08x, up edge==0x%08x %08dmV\n",temp_i,iovref_rig[temp_i],((((((iovref_rig[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
- printf("\n\n iovref lane_x=0x%08x, mid ==0x%08x %08dmV\n",temp_i,
- (iovref_lef[temp_i]+iovref_rig[temp_i])/2,((((((((iovref_lef[temp_i]+iovref_rig[temp_i])/2)&0X3F)*7)+440)*3)/2)+1)*12/15);
- if (iovref_lef[temp_i] == 0x0)
- {
- printf("\n\n iovref down edge reach reg limited\n");
- }
- if (iovref_rig[temp_i] == 0x3f)
- {
- printf("\n\n iovref up edge reach reg limited\n");
- }
- }
- {
- sprintf(str_temp1,"ddr_soc_iovref_org");
- sprintf(str_temp2,"0x%08x",iovref_org[0]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- {
- sprintf(str_temp1,"ddr_soc_iovref_lef");
- sprintf(str_temp2,"0x%08x",iovref_lef[0]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- sprintf(str_temp1,"ddr_soc_iovref_rig");
- sprintf(str_temp2,"0x%08x",iovref_rig[0]);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
-
- printf("\n\n printf soc vref from env ,if remeasure should clear ddr_soc_iovref_org env ddr_soc_iovref_lef \
- ddr_soc_iovref_rig ddr_soc_vref_range,ddr_soc_iovref_test_ddr_clk \n");
- }
- }
- return 0;
-
-usage:
- cmd_usage(cmdtp);
-#endif
- return 1;
-
-}
-//*/
-
-int do_ddr4_test_dram_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
-
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- if(watchdog_time_s==0)
- {
- watchdog_time_s=50;
- printf("test dram_vref re set watchdog_time_s==%d\n",watchdog_time_s);
- }
-
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- // unsigned int start_addr=test_start_addr;
- printf("\nEnter Test ddr4 dram vref function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
-
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
- int training_seed=0;
- int training_step=0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_clear=0;
- // unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
- unsigned int dxnlcdlr1[4];
- // unsigned int dxnlcdlr4[4];
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
- // #define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
-#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
-#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
-#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
-#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
-#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
-#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
-#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
-
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- // unsigned int ac_bdlr_lef[10];
- // unsigned int ac_bdlr_rig[10];
- int iovref_temp_value;
- // int iovref_temp_reg_value;
- // unsigned int reg_seed_value;
- // unsigned int temp_reg_value;
- int iovref_org=0;
- int iovref_lef=0;
- int iovref_rig=0;
- int iovref_mid;
- int iovref_test_read;
- int iovref_test_step;
- // unsigned int temp_test_error;
- // unsigned int temp_i=0;
- // unsigned int temp_j=0;
- //unsigned int reg_add=0;
- // static unsigned int training_enabled=1;
-
- // iovref_lef=0x49;
- // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- {
- channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- {
- channel_b_en = 1;
- }
- else
- {
- goto usage;
- }
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- {
- channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
- {
- channel_b_en = 1;
- }
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_clear = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_clear = 0;
- }
- if ( test_clear )
- test_clear = 1;
-
- }
- training_seed = 0;
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
-
-
- }
-
-
-
-
-
- training_step = 0;
- if (argc >6) {
- training_step = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- training_step = 0;
- }
-
- }
- if (!training_step)
- training_step=1;
- int vref_all=0;
- if (argc >7) {
- vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
- if (*argv[7] == 0 || *endp != 0)
- {
- vref_all =0;// 0x2e;
- }}
- int vref_lcdlr_offset=0;
- if (argc >8) {
- vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
- if (*argv[8] == 0 || *endp != 0)
- {
- vref_lcdlr_offset =0;
- }}
- int vref_set_test_step=0;
- if (argc >9) {
- vref_set_test_step = simple_strtoull_ddr(argv[9], &endp, 16);
- if (*argv[9] == 0 || *endp != 0)
- {
- vref_set_test_step =0;
- }}
- int vref_dram_range=0;
- if (argc >10) {
- vref_dram_range = simple_strtoull_ddr(argv[10], &endp, 16);
- if (*argv[10] == 0 || *endp != 0)
- {
- vref_dram_range =0;
- }}
-
-
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_clear== 0x%08x\n", test_clear);
- printf("\nvref_all== 0x%08x\n", vref_all);
- printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
- printf("\nvref_dram_range== 0x%08x\n", vref_dram_range);
-
- unsigned int soc_dram_hex_dec=0;
- if (argc >11)
- {
- soc_dram_hex_dec = simple_strtoull_ddr(argv[11], &endp, 16);
- if (*argv[11] == 0 || *endp != 0) {
- soc_dram_hex_dec = 0;
- }
- }
- if (soc_dram_hex_dec)
- {
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
-
-
- }
-
- }
- if (training_seed)
- {
- if (soc_dram_hex_dec)
- {
- if (vref_dram_range)
- {
- if (training_seed<45)
- training_seed=45;
- if (training_seed>77)
- training_seed=77;
- training_seed =(((((training_seed*1000-45000)/650)>0X32)?(0X32):(((training_seed*1000-45000)/650))));
- }
- if (vref_dram_range == 0)
- {
- if (training_seed<60)
- training_seed=60;
- if (training_seed>92)
- training_seed=92;
- training_seed =(((((training_seed*1000-60000)/650)>0X32)?(0X32):(((training_seed*1000-60000)/650))));
- }
- }
- if (vref_dram_range == 0)
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+6000)*1200)/10000));
- else
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+4500)*1200)/10000));
- }
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
- char str_temp1[1024]="";
- char str_temp2[1024]="";
- char *p_str=NULL;
-
-
- char str[512]="";
- unsigned int dram_iovref_test_ddr_clk=0;
- sprintf(str_temp1,"ddr_dram_iovref_test_ddr_clk");
- dram_iovref_test_ddr_clk=env_to_a_num(str_temp1);
- if(dram_iovref_test_ddr_clk==0)
- {dram_iovref_test_ddr_clk=global_ddr_clk;
- {
- sprintf(str_temp1,"ddr_dram_iovref_test_ddr_clk");
- sprintf(str_temp2,"0x%08x",dram_iovref_test_ddr_clk);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- }
- if(dram_iovref_test_ddr_clk!=global_ddr_clk)
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,dram_iovref_test_ddr_clk);
- sprintf(str,"d2pll %d",dram_iovref_test_ddr_clk);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
-
-
- {
- {
- sprintf(str_temp1,"ddr_dram_iovref_org");
- // sprintf(str_temp2,"0x%08x",iovref_org);
- p_str=getenv(str_temp1);
-
- if(p_str)
- {
- iovref_org= simple_strtoull_ddr(p_str, &endp, 0);
- }
-
-
- sprintf(str_temp1,"ddr_dram_iovref_lef");
- //sprintf(str_temp2,"0x%08x",iovref_lef);
- p_str=getenv(str_temp1);
-
- if(p_str)
- {
- iovref_lef= simple_strtoull_ddr(p_str, &endp, 0);
- }
-
-
- sprintf(str_temp1,"ddr_dram_iovref_rig");
- //sprintf(str_temp2,"0x%08x",iovref_rig);
- p_str=getenv(str_temp1);
-
- if(p_str)
- {
- iovref_rig= simple_strtoull_ddr(p_str, &endp, 0);
- }
-
- sprintf(str_temp1,"ddr_dram_vref_range");
- //sprintf(str_temp2,"0x%08x",vref_dram_range);
- p_str=getenv(str_temp1);
-
-
- if(p_str)
- {
- vref_dram_range= simple_strtoull_ddr(p_str, &endp, 0);
- }
-
- }
-
- if(vref_dram_range|iovref_rig|iovref_org|iovref_lef)
- {
- printf("\n\ndram iovref test clk==%d\n",dram_iovref_test_ddr_clk);
- iovref_mid=(iovref_lef+iovref_rig)/2;
- if (vref_dram_range == 0)
- {
- printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
- iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+6000)*1200)/10000)),
- iovref_rig,((((((iovref_rig&0X3F)*65)+6000)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+6000)*1200)/10000)));
- }
- if (vref_dram_range)
- {
- printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
- iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+4500)*1200)/10000)),
- iovref_rig,((((((iovref_rig&0X3F)*65)+4500)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+4500)*1200)/10000)));
- }
- if (iovref_rig == 0x32)
- {
- printf("\n\n iovref rig reach reg max\n");
- }
- if (iovref_rig == 0x0)
- {
- printf("\n\n iovref lef reach reg min\n");
- }
- printf("\n\n printf dram vref from env ,if remeasure should clear ddr_dram_iovref_org env ddr_dram_iovref_lef \
- ddr_dram_iovref_rig ddr_dram_vref_range,ddr_dram_iovref_test_ddr_clk \n");
- return 1;
- }
-
- }
-
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
- }////save and print org training value
-
-
-
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel data lane\n");
- }
- else
- {
- printf("\ntest B channel data lane\n");
- }
-
-
-
-
- }
-
- {
-
-
-#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
- unsigned int dxnmdlr=0;
- reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
- dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
- // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
- printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
- //turn off ddr4 phy read vref gate,only output ac lane vref
- wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_IOVCR0))),0x00090909|(0x0f<<24));
- wrr_reg((((DDR0_PUB_IOVCR1))),0x109);
- printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
- printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
- printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
- printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
- printf("\nDDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
- printf("\nDDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
- unsigned int temp_i=0;
- //unsigned int temp_i_max=4;//DDR0_PUB_MR6
- for (( temp_i=0);(temp_i<4);( temp_i++))
- {
- dxnlcdlr1[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))));
-
- printf("\nreg==0x%08x,dxnlcdlr1[%08x]==0x%08x\n ",
- ((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)),
- temp_i,dxnlcdlr1[temp_i]);
-
- }
-
- iovref_test_read=(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0x3f;
- iovref_temp_value=rdr_reg((unsigned int )(DDR0_PUB_DX0GCR6));
- if ((iovref_temp_value&0x3f) == 0x09)
- {
- iovref_temp_value=(rdr_reg((unsigned int )(DDR0_PUB_MR6)))&0x3f;;
- iovref_test_read=iovref_temp_value;
- }
- iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0xff;
-
-
- printf("PREG_STICKY_REG7==0x%08x\n ",(rdr_reg((unsigned int )((PREG_STICKY_REG7)))));
- printf("DDR0_PUB_MR6==0x%08x\n ",(rdr_reg((unsigned int )((DDR0_PUB_MR6)))));
- printf("DDR0_PUB_DX0GCR6==0x%08x\n ",(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))));
- if (((iovref_org) == 0) || (test_clear))
- {
-
-
-
- iovref_org=iovref_temp_value&0x3f;
- iovref_lef=iovref_org;
- iovref_rig=iovref_org;
- iovref_test_step=0;
-
- if (training_seed)
- {
- iovref_org=training_seed&0x3f;
- iovref_lef=iovref_org;
- iovref_rig=iovref_org;
- iovref_test_step=0;
-
- }
- if (vref_dram_range == 0)
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+6000)*1200)/10000));
- else
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+4500)*1200)/10000));
- wrr_reg((PREG_STICKY_REG7),iovref_org|(iovref_lef<<8)|((iovref_rig<<16))|(iovref_test_step<<24));
- }
-
- printf("PREG_STICKY_REG7==0x%08x\n ",(rdr_reg((unsigned int )((PREG_STICKY_REG7)))));
- {
- if ((((rdr_reg((unsigned int )((DDR0_PUB_MR6))))>>6)&1) == 0)
- {
- printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",DDR0_PUB_MR6,
- iovref_temp_value,iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)));
- printf("reg_add==0x%08x,value==0x%08x, iovref_dx0gcr6 ==0x%08x %08dmV\n",DDR0_PUB_DX0GCR6,
- (rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),
- (((((((rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0X3F)*65)+6000)*1200)/10000)));
-
- }
- if (((rdr_reg((unsigned int )((DDR0_PUB_MR6))))>>6)&1)
- {
- printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",DDR0_PUB_MR6,
- iovref_temp_value,iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)));
- printf("reg_add==0x%08x,value==0x%08x, iovref_dx0gcr6 ==0x%08x %08dmV\n",DDR0_PUB_DX0GCR6,
- (rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),
- (((((((rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0X3F)*65)+4500)*1200)/10000)));
-
- }
-
- }
-
- iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0x3f; //
- iovref_lef=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>8)&0x3f;
- iovref_rig=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>16)&0x3f;
- iovref_test_step=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>24)&0x3f;
-
-
-
- printf("\ntraining_step==0x%08x\n ",training_step);
- printf("\niovref_test_step==0x%08x\n ",iovref_test_step);
- printf("\niovref_lef==0x%08x\n ",iovref_lef);
- printf("\niovref_rig==0x%08x\n ",iovref_rig);
- if (vref_set_test_step)
- {if(iovref_test_step==0)
- iovref_test_step=vref_set_test_step;
- }
- if (iovref_test_step<2)
- {
- if (iovref_test_step == 0)
- {
- iovref_temp_value=iovref_lef;
-
- }
- if (iovref_test_step == 1)
- {
- iovref_temp_value=iovref_rig;
- }
- //iovref_temp_value=iovref_lef-training_step;
- printf("\niovref temp==0x%08x\n ",iovref_temp_value);
- printf("\niovref_test_read==0x%08x\n ",iovref_test_read);
- temp_test_error=0;
- if ((iovref_org == iovref_lef) && (iovref_org == iovref_rig)) {
- printf("\nfirst test");
- }
- else if(iovref_test_read!=iovref_temp_value)
- {temp_test_error=1;
- }
-
- ddr_test_watchdog_enable(watchdog_time_s);
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
- }
-
- // /*
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- ddr_test_watchdog_clear();
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
- }
-
-
- }
- //*/
- }
-
-
- if (temp_test_error)
- {
- printf("\nvref edge detect \n");
- if (iovref_test_step == 0)
- {
-
- iovref_lef=((iovref_temp_value+training_step)<0x32)?((iovref_temp_value+training_step)):(0x32);
- iovref_temp_value=iovref_org;
- }
- if (iovref_test_step == 1)
- {
-
- iovref_rig=(iovref_temp_value>training_step)?((iovref_temp_value-training_step)):(0);
- iovref_temp_value=iovref_org;
- }
- iovref_test_step++;
- // break;
- }
- else
- {
- printf("\niovref_lef1=%x\n",iovref_lef);
- printf("\niovref_test_step=%x\n",iovref_test_step);
- if (iovref_test_step == 0)
- {
- printf("\niovref_lef1_2=%x\n",(iovref_temp_value-training_step));
- iovref_lef=(iovref_temp_value>training_step)?((iovref_temp_value-training_step)):(0);
- iovref_temp_value=iovref_lef;
- if (iovref_lef == 0)
- {
- iovref_test_step++;
- iovref_temp_value=iovref_org;
- }
- }
- if (iovref_test_step == 1)
- {
- iovref_rig=((iovref_temp_value+training_step)<0x32)?(iovref_temp_value+training_step):(0x32);
- iovref_temp_value=iovref_rig;
- if (iovref_rig == 0x32)
- iovref_test_step++;
- }
- printf("\niovref_lef2=%x\n",iovref_lef);
- }
- {
-
-
- wrr_reg((PREG_STICKY_REG7),iovref_org|(iovref_lef<<8)|((iovref_rig<<16))|(iovref_test_step<<24));
- printf("\nddr4ram vref test will reboot use new dram vref setting==0x%08x\n ",(rdr_reg((unsigned int )(PREG_STICKY_REG7))));
- char str[100];
- sprintf(str,"ddr_test_cmd 0x17 %d 0 0 0 0x%x",dram_iovref_test_ddr_clk,iovref_temp_value|((vref_dram_range&1)<<6));
- printf("\nstr=%s\n",str);
- run_command(str,0);
- //run_command("ddr_test_cmd 0x17 1100 0 0 0xsoc 0xdram ",0);//
- }
- }
-
- ddr_test_watchdog_disable();
- if (iovref_test_step >= 2)
- {
- printf("\n\ndram iovref test clk==%d\n",dram_iovref_test_ddr_clk);
- printf("\n\n iovref vddq=1.2v,if use other vddq ,please recount\n");
- printf("\nddr4ram vref test finish iovref_test_step==0x%08x\n ",iovref_test_step);
- iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0x3f; //
- iovref_lef=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>8)&0x3f;
- iovref_rig=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>16)&0x3f;
- iovref_test_step=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>24)&0x3f;
- iovref_mid=(iovref_lef+iovref_rig)/2;
- if (vref_dram_range == 0)
- {
- printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
- iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+6000)*1200)/10000)),
- iovref_rig,((((((iovref_rig&0X3F)*65)+6000)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+6000)*1200)/10000)));
- }
- if (vref_dram_range)
- {
- printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
- iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+4500)*1200)/10000)),
- iovref_rig,((((((iovref_rig&0X3F)*65)+4500)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+4500)*1200)/10000)));
- }
- if (iovref_rig == 0x32)
- {
- printf("\n\n iovref rig reach reg max\n");
- }
- if (iovref_rig == 0x0)
- {
- printf("\n\n iovref lef reach reg min\n");
- }
- //char str2[100];
- //sprintf(str2,"ddr_test_cmd 0x17 %d 0 0 0 0x%x",global_ddr_clk,iovref_org);
- //printf("\nstr2=%s\n",str2);
- //run_command(str2,0);
- {
- {
- sprintf(str_temp1,"ddr_dram_iovref_org");
- sprintf(str_temp2,"0x%08x",iovref_org);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- sprintf(str_temp1,"ddr_dram_iovref_lef");
- sprintf(str_temp2,"0x%08x",iovref_lef);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- sprintf(str_temp1,"ddr_dram_iovref_rig");
- sprintf(str_temp2,"0x%08x",iovref_rig);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- {
- sprintf(str_temp1,"ddr_dram_vref_range");
- sprintf(str_temp2,"0x%08x",vref_dram_range);
- setenv(str_temp1, str_temp2);
- run_command("save",0);
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-
-
- }
-
-
-
-
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
-#endif
- return 1;
-
-}
-
-#endif
-int do_ddr4_test_dram_ac_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- ///*
- // unsigned int start_addr=test_start_addr;
- printf("\nEnter Test ddr4 phy_ac or ddr3 dram data vref function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- // unsigned int loop = 1;
- // unsigned int temp_count_i = 1;
- // unsigned int temp_count_j= 1;
- // unsigned int temp_count_k= 1;
- unsigned int temp_test_error= 0;
- int training_seed=0;
- int training_step=0;
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_dram_ac_data=0;
- // unsigned int test_times=1;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- unsigned int testing_channel = 0;
- unsigned int dxnlcdlr1[4];
- // unsigned int dxnlcdlr4[4];
-
-
-#define CHANNEL_A 0
-#define CHANNEL_B 1
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
- // #define DDR0_PUB_REG_BASE 0xc8836000
-#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
-#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
-#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
-#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
-#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
-#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
-#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
-#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
-
- //#define DDR0_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 ) ) // R/W - IO VREF Control Register 0
- //#define DDR0_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 ) ) // R/W - IO VREF Control Register 1
-
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- // unsigned int ac_bdlr_lef[10];
- // unsigned int ac_bdlr_rig[10];
- int iovref_temp_value;
- // int iovref_temp_reg_value;
- // unsigned int reg_seed_value;
- // unsigned int temp_reg_value;
- int iovref_org;
- int iovref_lef;
- int iovref_rig;
- // unsigned int temp_test_error;
- // unsigned int temp_i=0;
- // unsigned int temp_j=0;
- //unsigned int reg_add=0;
- // static unsigned int training_enabled=1;
-
- // iovref_lef=0x49;
- // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
- //#define DDR_TEST_ACLCDLR
-
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
- channel_a_en = 1;
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
- channel_b_en = 1;
- else
- goto usage;
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
- channel_a_en = 1;
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
- channel_b_en = 1;
- }
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
-
- }
- if (argc >4) {
- test_dram_ac_data = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- test_dram_ac_data = 0;
- }
- if ( test_dram_ac_data )
- test_dram_ac_data = 1;
-
- }
- training_seed = 0;
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
-
-
- }
-
-
- training_step = 0;
- if (argc >6) {
- training_step = simple_strtoull_ddr(argv[6], &endp, 16);
- if (*argv[6] == 0 || *endp != 0)
- {
- training_step = 0;
- }
-
-
-
- }
- int vref_all=0;
- if (argc >7) {
- vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
- if (*argv[7] == 0 || *endp != 0)
- {
- vref_all =0;// 0x2e;
- }}
- int vref_lcdlr_offset=0;
- if (argc >8) {
- vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
- if (*argv[8] == 0 || *endp != 0)
- {
- vref_lcdlr_offset =0;
- }}
- int soc_dram_hex_dec=0;
- if (argc >9)
- {
- soc_dram_hex_dec = simple_strtoull_ddr(argv[9], &endp, 16);
- if (*argv[9] == 0 || *endp != 0) {
- soc_dram_hex_dec = 0;
- }
- }
- if (training_seed ==0) // 0x2e;
- {training_seed=0x9;
- }
- if (soc_dram_hex_dec)
- {
- if (argc >5) {
- training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- training_seed =0;// 0x2e;
- }
-
-
- }
- if (training_seed ==0) // 0x2e;
- {training_seed=50;
- }
- if (training_seed<45)
- training_seed=45;
- if (training_seed>88)
- training_seed=88;
- training_seed =(((training_seed*1000-44070)/698));
-
- }
-
-
-
- printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*7)+440)*3)/2)+1);
- printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
- printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
- printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
- printf("\ntest_dram_ac_data== 0x%08x\n", test_dram_ac_data);
- printf("\nvref_all== 0x%08x\n", vref_all);
- printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
- if ( channel_a_en)
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
- if ( channel_b_en)
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
- //save and print org training dqs value
- if (channel_a_en || channel_b_en)
- {
- //dcache_disable();
- //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
- }////save and print org training value
-
-
-
- {
- ////tune and save training dqs value
- if (channel_a_en || channel_b_en)
-
- {
- for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
- {
-
- if (( channel_a_en) && ( channel_b_en == 0))
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if(( channel_b_en)&&( channel_a_en==0))
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- else if ((channel_a_en+channel_b_en)==2)
- {
- if ( testing_channel == CHANNEL_A)
- {
- reg_base_adj=CHANNEL_A_REG_BASE;
- }
- else if( testing_channel==CHANNEL_B)
- {
- reg_base_adj=CHANNEL_B_REG_BASE;
- }
- }
-
- if (reg_base_adj == CHANNEL_A_REG_BASE)
- {
- printf("\ntest A channel data lane\n");
- }
- else
- {
- printf("\ntest B channel data lane\n");
- }
-
-
- {
-
-
-#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
-#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
- unsigned int dxnmdlr=0;
- reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
- dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
- // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
- printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
- //turn off ddr4 phy read vref gate,only output ac lane vref
- wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
- printf("\norg DDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
- printf("\norg DDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
- wrr_reg((((DDR0_PUB_IOVCR0))),training_seed|(training_seed<<8)|(training_seed<<16)|(0x1f<<24));
- wrr_reg((((DDR0_PUB_IOVCR1))),0x109);
- printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
- printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
- printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
- printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
- printf("\nDDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
- printf("\nDDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
- unsigned int temp_i=0;
-
- for (( temp_i=0);(temp_i<4);( temp_i++))
- {
- {
- dxnlcdlr1[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))));
-
- printf("\ndxnlcdlr1[%08x]==0x%08x,dxnlcdlr1[%08x]==0x%08x\n ",temp_i,dxnlcdlr1[temp_i],temp_i,dxnlcdlr1[temp_i]);
-
- }
- }
- reg_add=DDR0_PUB_IOVCR0+reg_base_adj;
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_org=((iovref_temp_value)&0xff);
- // iovref_lef=0x49;
-
- {
- printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",reg_add,
- iovref_temp_value,iovref_org,((((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1)*15/15);
- }
-
-
- wrr_reg((reg_add),iovref_temp_value); //
- iovref_lef=(iovref_org)&0xff;
- iovref_rig=(iovref_org)&0xff;
-
- }
-
- printf("\ntraining_step==0x%08x\n ",training_step);
-
-
- {
-
-
-
-
-
-
- {
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
-
- while (iovref_temp_value>0x0)
- {
- temp_test_error=0;
- iovref_temp_value=iovref_temp_value-training_step;
- if (iovref_temp_value<training_step)
- iovref_temp_value=0;
- printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
-
-
- wrr_reg((reg_add),(0x1f000000|iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)));
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,rdr_reg((unsigned int )reg_add));
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
-
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
-
- }
-
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
-
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
-
- }
-
- }
- if (temp_test_error)
- {
- printf("\nvref down edge detect \n");
- iovref_temp_value=iovref_temp_value+training_step;
- break;
- }
- }
-
- printf("\n down edge detect \n");
- printf("\n\n iovref down edge==0x%08x\n ",iovref_temp_value);
- iovref_lef=iovref_temp_value;
-
- wrr_reg((reg_add),iovref_org); //
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
-
-
- }
-
- {
-
- iovref_temp_value=rdr_reg((unsigned int )reg_add);
- iovref_temp_value=((iovref_temp_value)&0xff);
-
- while (iovref_temp_value<0x3f)
- {
- temp_test_error=0;
- iovref_temp_value=iovref_temp_value+training_step;
- if (iovref_temp_value>0x3f)
- iovref_temp_value=0x3f;
- printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
-
- wrr_reg((reg_add),(0x1f000000|iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)));
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,rdr_reg((unsigned int )reg_add));
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
-
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
-
- }
-
- }
-
- if (vref_lcdlr_offset)
- {
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
-
-
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
- printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
- (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
-
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
-
-
- {
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
- }
-
- }
-
- }
- if (temp_test_error)
- {
- printf("\nvref up edge detect \n");
- iovref_temp_value=iovref_temp_value-training_step;
- break;
- }
- }
-
- printf("\n up edge detect \n");
- printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
- iovref_rig=iovref_temp_value;
-
- wrr_reg((reg_add),iovref_org); //
- wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
- wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
- wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
- wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
-
-
-
- }
-
-
-
- {
- printf("\n\n iovref vddq=1.5v,if use other vddq ,please recount\n");
- printf("\n vddq=1.5v iovref ac+dram_data org==0x%08x %08dmV||down edge==0x%08x %08dmV||up edge==0x%08x %08dmV||mid==0x%08x %08dmV\n",
- iovref_org,(((((((iovref_org&0X3F)*7)+440)*3)/2)+1)*15/15),iovref_lef,(((((((iovref_lef&0X3F)*7)+440)*3)/2)+1)*15/15),
- iovref_rig,(((((((iovref_rig&0X3F)*7)+440)*3)/2)+1)*15/15),((iovref_lef+iovref_rig)/2),
- (((((((((iovref_lef+iovref_rig)/2)&0X3F)*7)+440)*3)/2)+1)*15/15)
- );
-
- if (iovref_lef == 0x0)
- {
- printf("\n\n iovref down edge reach reg limited\n");
- }
- if (iovref_rig == 0x3f)
- {
- printf("\n\n iovref up edge reach reg limited\n");
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-
-
- }
-
-
-
-
-
-
- }
-
- }
-
-
-
-
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- //*/
-#endif
- return 1;
-
-}
-//
-
-int pll_convert_to_ddr_clk_g12a(unsigned int ddr_pll)
-{
- unsigned int ddr_clk=0;
- unsigned int od_div=0xfff;
- ddr_pll=ddr_pll&0xfffff;
-#if 1// (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- //unsigned int ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))/(((ddr_pll>>2)&0x3)+1)); //od1 od
- if(((ddr_pll>>16)&7)==0)
- od_div=2;
- if(((ddr_pll>>16)&7)==1)
- od_div=3;
-
- if(((ddr_pll>>16)&7)==2)
- od_div=4;
-
- if(((ddr_pll>>16)&7)==3)
- od_div=6;
-
- if(((ddr_pll>>16)&7)==4)
- od_div=8;
-
- if(((ddr_pll>>10)&0x1f))
- ddr_clk = 2*((((24 * ((ddr_pll>>0)&0x1ff))/((ddr_pll>>10)&0x1f))>>((((ddr_pll>>19)&0x1)==1)?(2):(1))))/od_div;
-
-#else
- ddr_clk = 2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
-
-#endif
-
-
- return ddr_clk;
-}
-
-
-int ddr_clk_convert_to_pll_g12a(unsigned int ddr_clk, unsigned char pll_bypass_en)
-{
+#define DDR_STICKY_SPECIAL_FUNCTION_CMD 0x2 //special test such as shift some bdlr or parameter or interleave test
+
+#define G12_DMC_STICKY_0 ((0x0000 << 2) + 0xff638800)
+ uint32_t magic_chipid= 0;//rd_reg(P_PREG_STICKY_REG0);
+ uint32_t sticky_cmd = 0;//rd_reg(P_PREG_STICKY_REG1);
+ uint32_t cmd_offset = 0;
+ uint32_t cmd_value = 0;
+ uint32_t reset_enable = 0;
+ uint32_t value_size = 4;
+ char *endp;
+ //bit 0 trigger effect reset.
+ if ((magic_chipid) != ((DDR_STICKY_MAGIC_NUMBER+DDR_CHIP_ID)&0xffff0000)) {
+ //magic number not match
+ // magic_chipid=DDR_STICKY_MAGIC_NUMBER+DDR_CHIP_ID;
+ // sticky_cmd=DDR_STICKY_OVERRIDE_CONFIG_MESSAGE_CMD;
+ printf("sticky0 magic not match\n");
+
+ }
+
+
+ // wr_reg(P_PREG_STICKY_REG0, 0);
+ // wr_reg(P_PREG_STICKY_REG1, 0);
+
+
+
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+
+
+ if (argc < 2)
+ goto usage;
+
+ magic_chipid = simple_strtoull_ddr(argv[1], &endp,0);
+ if (*argv[1] == 0 || *endp != 0) {
+ printf ("Error: Wrong format parament!\n");
+ return 1;
+ }
+ if (argc >2)
+ {
+ sticky_cmd = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0) {
+ sticky_cmd = 0;
+ }
+ }
+
+ if (argc >3)
+ {
+ cmd_offset = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0) {
+ cmd_offset = 0;
+ }
+ }
+ if (argc >4)
+ {
+ cmd_value= simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ cmd_value = 0;
+ }
+ }
+ if (argc >5)
+ {
+ value_size= simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ value_size = 4;
+ }
+ }
+ if (argc >6)
+ {
+ reset_enable= simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0) {
+ reset_enable = 0;
+ }
+ }
+ printf("cmd_offset[0x%08x}==cmd_value [0x%08x]\n", cmd_offset,cmd_value);
+ writel((magic_chipid&0xffff0000)|(rd_reg(PREG_STICKY_REG0)), PREG_STICKY_REG0);
+ writel(sticky_cmd, PREG_STICKY_REG1);
+
+ uint32_t read_value = 0;
+ if(value_size)
+ {
+ read_value=rd_reg(G12_DMC_STICKY_0+((cmd_offset/4)<<2));
+ if(value_size==1){
+ wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xff<<((cmd_offset%4)*8))))));
+ }
+ if(value_size==2){
+ wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xffff<<((cmd_offset%4)*8))))));
+ }
+ if(value_size==4){
+ // wr_reg((G12_DMC_STICKY_0+cmd_offset/4), ((cmd_value<<((cmd_offset%4)*8))|(read_value&(~(0xffff<<((cmd_offset%4)*8))))));
+ wr_reg((G12_DMC_STICKY_0+((cmd_offset/4)<<2)), cmd_value);
+ }
+
+
+
+
+ printf("DMC_STICKY_0_ offset[0x%08x}== [0x%08x]\n", cmd_offset,readl((G12_DMC_STICKY_0+((cmd_offset/4)<<2))));
+ }
+
+
+ printf("PREG_STICKY_REG0== [0x%08x]\n", readl(PREG_STICKY_REG0));
+
+ if(reset_enable)
+ {
+ ddr_test_watchdog_reset_system();
+
+ while(1);
+ }
+ return 0;
+
+usage:
+
+
+
+
+
+ cmd_usage(cmdtp);
+
+#endif
+ return 1;
+}
+
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+int do_ddr_test_ac_bit_setup_hold_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test ddr ac bit window function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ unsigned int ddl_100step_ps= 0;
+
+ unsigned int temp_test_error= 0;
+ unsigned int temp_count= 0;
+ unsigned int temp_reg_value[40];
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_ac_setup_hold=0;
+ //unsigned int testing_seed=0;
+ // unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int test_acbdl=0;
+ // unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+
+
+ unsigned int acbdlr0_reg_org=0;
+ unsigned int acbdlr_x_reg_org=0;
+ unsigned int acbdlr_x_reg_hold_min=0;
+ // unsigned int acbdlr_x_reg_hold_min=0;
+ unsigned int acbdlr_x_reg_setup_max=0;
+ // unsigned int acbdlr_x_reg_setup_max=0;
+ // unsigned int dq_lcd_bdl_reg_left=0;
+ // unsigned int dq_lcd_bdl_reg_right=0;
+
+
+ // unsigned int dq_lcd_bdl_reg_left_min=0;
+ // unsigned int dq_lcd_bdl_reg_right_min=0;
+
+ unsigned int dq_lcd_bdl_temp_reg_value=0;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+ {
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_ac_setup_hold = 0;
+ test_ac_setup_hold = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_ac_setup_hold = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_ac_setup_hold = 0;
+ }
+ }
+ if (test_ac_setup_hold >1)
+ test_ac_setup_hold = 2;
+ if (argc >5) {
+
+ test_acbdl= simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_acbdl = 0;
+ }
+ if (test_acbdl>39)
+ test_acbdl =12;//default test cs0 pin
+ }
+ }
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_ac_setup_hold== 0x%08x\n", test_ac_setup_hold);
+ printf("\ntest_acbdl== 0x%08x\n", test_acbdl);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ }////save and print org training dqs value
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ printf("\nshould pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+
+
+ for ((temp_count=0);(temp_count<10);(temp_count++))
+ {
+ acbdlr0_9_reg_org[temp_count]=(readl(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
+
+ };
+
+
+ {
+ ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
+ printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
+ ((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff));
+
+ reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
+ acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
+ acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
+ printf("\nacbdlr0_reg_0x%08x_org==0x%08x | acbdlr_x_reg_0x%08x_org==0x%08x\n ",(DDR0_PUB_ACBDLR0+reg_base_adj),
+ acbdlr0_reg_org,(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj),acbdlr_x_reg_org);
+ if (test_ac_setup_hold == 0)
+ {
+ printf("\ntest_ac_setup\n ");
+
+
+ //writel(0,(DDR0_PUB_ACBDLR0+reg_base_adj));
+ dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+
+
+ //{writel((dq_lcd_bdl_temp_reg_value&(~(0xff<<(8*(test_acbdl%4))))),((test_acbdl/4)*4+DDR0_PUB_ACBDLR0+reg_base_adj));
+ //}
+
+
+
+ reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ dq_lcd_bdl_temp_reg_value=((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff);
+ while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
+ ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
+
+ {
+ writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+
+ }
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+ printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff),dq_lcd_bdl_temp_reg_value,
+ ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
+
+ {acbdlr_x_reg_setup_max=dq_lcd_bdl_temp_reg_value;}
+
+ dq_lcd_bdl_temp_reg_value=0;
+ //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+ writel(((acbdlr_x_reg_org)),reg_add);
+ //test_ac_setup_hold=1;
+ {
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
+ readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
+ printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
+ printf("acbdlr_x_reg_setup_max 0x%08x \
+ setup time==0x%08x, %08d ps \n ",
+ acbdlr_x_reg_setup_max,(acbdlr_x_reg_setup_max-
+ ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)),((acbdlr_x_reg_setup_max-
+ ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)) *ddl_100step_ps)/100
+ );
+ acbdlr0_9_reg_setup_max[test_acbdl]=(acbdlr_x_reg_setup_max-
+ ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff));
+ acbdlr0_9_reg_setup_time[test_acbdl]=((acbdlr_x_reg_setup_max-
+ ((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)) *ddl_100step_ps)/100;
+ for ((temp_count=0);(temp_count<10);(temp_count++))
+ {
+ writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
+
+ };
+
+ }
+
+ }
+
+ if (test_ac_setup_hold == 1)
+ {
+ printf("\ntest_ac_hold 1\n ");
+ acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
+ acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
+ printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
+
+
+ printf("\nacbdlr0_reg==0x%08x | acbdlr_x_reg==0x%08x\n ",
+ readl(DDR0_PUB_ACBDLR0+reg_base_adj),readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+
+ reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ dq_lcd_bdl_temp_reg_value=((dq_lcd_bdl_temp_reg_value>>(8*(test_acbdl%4)))&0xff);
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value--;
+ printf("\n reg==0x%08x, left temp==0x%08x\n ,value==0x%08x ",reg_add,dq_lcd_bdl_temp_reg_value,
+ ((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))));
+
+ {
+ writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+
+ }
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\n left edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+ printf("\n org==0x%08x,left edge==0x%08x\n ",((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff),dq_lcd_bdl_temp_reg_value);
+
+ {acbdlr_x_reg_hold_min=dq_lcd_bdl_temp_reg_value;}
+
+
+ //test_ac_setup_hold=1;
+ //writel(acbdlr0_reg_org,(DDR0_PUB_ACBDLR0+reg_base_adj));
+ writel(acbdlr_x_reg_org,(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+ //dq_lcd_bdl_temp_reg_value=0;
+ // writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+ {
+
+
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
+ readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
+ printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
+ printf("acbdlr_x_reg_hold_min==0x%08x \
+ holdup time==0x%08x, %08d ps\n ",
+ acbdlr_x_reg_hold_min,
+ (((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min),
+ ((((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min)*ddl_100step_ps)/100);
+
+ }
+ acbdlr0_9_reg_hold_max[test_acbdl]=(((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min);
+ acbdlr0_9_reg_hold_time[test_acbdl]=((((acbdlr_x_reg_org>>(8*(test_acbdl%4)))&0xff)-acbdlr_x_reg_hold_min)*ddl_100step_ps)/100;
+
+ for ((temp_count=0);(temp_count<10);(temp_count++))
+ {
+ writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
+
+ };
+
+ }
+
+ if (test_ac_setup_hold == 2)
+ {
+ printf("\ntest_ac_hold 2 method\n ");
+ acbdlr0_reg_org=readl(DDR0_PUB_ACBDLR0+reg_base_adj);
+ acbdlr_x_reg_org=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x\n ",test_acbdl,test_ac_setup_hold);
+ printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
+
+
+ printf("\nacbdlr0_reg==0x%08x | acbdlr_x_reg==0x%08x\n ",
+ readl(DDR0_PUB_ACBDLR0+reg_base_adj),readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+
+ reg_add=(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ //dq_lcd_bdl_temp_reg_value=readl(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj);
+ //dq_lcd_bdl_temp_reg_value=((dq_lcd_bdl_temp_reg_value>>(8*(test_acbdl%4)))&0xff);
+ dq_lcd_bdl_temp_reg_value=(readl(DDR0_PUB_ACBDLR0+reg_base_adj)&0xff);
+ while (dq_lcd_bdl_temp_reg_value<0x3f)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ printf("\n reg==0x%08x, right temp==0x%08x,value==0x%08x\n ",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj),dq_lcd_bdl_temp_reg_value,
+ ((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
+ |(dq_lcd_bdl_temp_reg_value<<(24)))&(~(0xff<<(8*(test_acbdl%4)))))|(acbdlr_x_reg_org&((0xff<<(8*(test_acbdl%4))))));
+ /*
+ {
+ for ((temp_count=0);(temp_count<10);(temp_count++))
+ {
+ writel((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
+ |(dq_lcd_bdl_temp_reg_value<<(24))),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
+ };
+
+ writel(((dq_lcd_bdl_temp_reg_value|(dq_lcd_bdl_temp_reg_value<<(8))|(dq_lcd_bdl_temp_reg_value<<(16))
+ |(dq_lcd_bdl_temp_reg_value<<(24)))&(~(0xff<<(8*(test_acbdl%4)))))|(acbdlr_x_reg_org&((0xff<<(8*(test_acbdl%4))))),
+ (((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+
+ }
+ */
+
+ {
+ for ((temp_count=0);(temp_count<40);(temp_count++))
+ {if(temp_count==(test_acbdl))
+ {
+ temp_reg_value[temp_count]=((readl(DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
+ reg_base_adj))>>(8*(temp_count%4)))&0xff;
+ }else
+ {
+ temp_reg_value[temp_count]=(((readl(DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
+ reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
+ }
+ temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
+
+ };
+ for ((temp_count=0);(temp_count<40);(temp_count++))
+ {
+ writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
+ |((temp_reg_value[temp_count+3])<<(24)))),
+ (DDR0_PUB_ACBDLR0+(((temp_count)>>2)<<2)+
+ reg_base_adj));
+ temp_count=temp_count+3;
+ };
+ printf("\n reg_bdlr_ck==0x%08x,right temp==0x%08x\n,ck_value==0x%08x",(DDR0_PUB_ACBDLR0+
+ reg_base_adj),(dq_lcd_bdl_temp_reg_value),
+ (readl(DDR0_PUB_ACBDLR0+
+ reg_base_adj)));
+ printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",(DDR0_PUB_ACBDLR0+(((test_acbdl)>>2)<<2)+
+ reg_base_adj),(dq_lcd_bdl_temp_reg_value),
+ (readl(DDR0_PUB_ACBDLR0+(((test_acbdl)>>2)<<2)+
+ reg_base_adj)));
+
+ }
+
+
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect ,reg==0x%08x\n",(((test_acbdl>>2)<<2)+DDR0_PUB_ACBDLR0+reg_base_adj));
+ printf("\norg==0x%08x, right edge==0x%08x\n ",acbdlr0_reg_org&0xff,dq_lcd_bdl_temp_reg_value);
+
+ {acbdlr_x_reg_hold_min=dq_lcd_bdl_temp_reg_value;}
+
+
+ //test_ac_setup_hold=1;
+ dq_lcd_bdl_temp_reg_value=0;
+
+ {
+
+
+ printf("\ntest_acbdl %08x | ac_setup_hold==0x%08x acmdlr==0x%08x ddl_100step_ps==%08d\n",test_acbdl,test_ac_setup_hold,
+ readl(DDR0_PUB_ACMDLR0+reg_base_adj),ddl_100step_ps);
+ printf("\nacbdlr0_reg_org==0x%08x | acbdlr_x_reg_org==0x%08x\n ",acbdlr0_reg_org,acbdlr_x_reg_org);
+ printf("acbdlr_x_reg_hold_max==0x%08x \
+ holdup time==0x%08x, %08d ps\n ",
+ acbdlr_x_reg_hold_min,
+ ((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))),((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))*ddl_100step_ps)/100);
+
+ }
+ acbdlr0_9_reg_hold_max[test_acbdl]=((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff)));
+ acbdlr0_9_reg_hold_time[test_acbdl]=((acbdlr_x_reg_hold_min-(acbdlr0_reg_org&0xff))*ddl_100step_ps)/100;
+ for ((temp_count=0);(temp_count<10);(temp_count++))
+ {
+ writel(((acbdlr0_9_reg_org[temp_count])),(DDR0_PUB_ACBDLR0+(temp_count<<2)+reg_base_adj));
+
+ };
+
+ }
+ }
+ }
+
+ }
+
+ // ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
+
+
+
+ printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)));
+
+ printf("\nresume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29)),(DDR0_PUB_REG_BASE+4));
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+
+ return dq_lcd_bdl_temp_reg_value;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+ }
+}
+
+U_BOOT_CMD(
+ ddr_test_ac_bit_setup_hold_window, 6, 1, do_ddr_test_ac_bit_setup_hold_window,
+ "DDR test ac bit margin function",
+ "do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c or do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 2 c \n dcache off ? \n"
+ //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 setup/hold pin_id //c --- cs ,,8 --- ba0
+);
+
+int do_ddr_test_data_bit_setup_hold_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ printf("\nEnter test ddr data bit window function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ unsigned int ddl_100step_ps= 0;
+
+ unsigned int temp_test_error= 0;
+ unsigned int temp_count= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_data_setup_hold=0;
+ //unsigned int testing_seed=0;
+ // unsigned int test_lane_step_rdqs_flag=0;
+ unsigned int open_vt=0;
+ unsigned int test_bdl=0;
+ // unsigned int test_times=1;
+ // unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int reg_bdlrck=0;
+ unsigned int reg_bdlr_x=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+
+
+ unsigned int bdlrck_reg_org=0;
+ unsigned int bdlr_x_reg_org=0;
+ // unsigned int bdlr_x_reg_hold_min=0;
+ // unsigned int acbdlr_x_reg_hold_min=0;
+ unsigned int bdlr_x_reg_setup_max=0;
+ unsigned int bdlr_x_reg_hold_max=0;
+ // unsigned int acbdlr_x_reg_setup_max=0;
+ // unsigned int dq_lcd_bdl_reg_left=0;
+ // unsigned int dq_lcd_bdl_reg_right=0;
+
+
+ // unsigned int dq_lcd_bdl_reg_left_min=0;
+ // unsigned int dq_lcd_bdl_reg_right_min=0;
+
+ unsigned int dq_lcd_bdl_temp_reg_value=0;
+ unsigned int temp_reg_value[24];
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+ {
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_data_setup_hold = 0;
+ test_data_setup_hold = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_data_setup_hold = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_data_setup_hold = 0;
+ }
+ }
+ if (test_data_setup_hold >1)
+ test_data_setup_hold = 1;
+ if (argc >5) {
+
+ test_bdl= simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_bdl = 0;
+ }
+ if (test_bdl>96)
+ test_bdl =0;
+ }
+ if (argc >6) {
+
+ open_vt= simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ open_vt = 0;
+ }
+ //if(open_vt)
+ // open_vt =1;
+ }
+ }
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_data_setup_hold== 0x%08x\n", test_data_setup_hold);
+ printf("\ntest_bdl== 0x%08x\n", test_bdl);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ }////save and print org training dqs value
+
+
+
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+
+ printf("\nshould pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ for ((temp_count=0);(temp_count<28);(temp_count++))
+ {
+ //data_bdlr0_5_reg_org[temp_count]=(((readl(((temp_count>>2)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/6)+reg_base_adj))
+ // >>(8*(test_bdl%4)))&0xff);
+ data_bdlr0_5_reg_org[temp_count]=((readl(((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj))
+ );
+ };
+
+
+ {
+ ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_DX0MDLR0+reg_base_adj)))>>16)&0xff);
+ printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
+ ((((readl(DDR0_PUB_DX0MDLR0+reg_base_adj)))>>16)&0xff));
+
+ //reg_add=DDR0_PUB_DX0BDLR0+reg_base_adj;
+ reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ if ((test_bdl%24)>11)
+ {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
+ }
+ bdlrck_reg_org=readl(reg_bdlrck) ;
+ bdlr_x_reg_org=readl(reg_bdlr_x);
+ printf("\ntest_bdl %08x | data_setup_hold==0x%08x\n ",test_bdl,test_data_setup_hold);
+ printf("\nbdlr0_reg_0x%08x_org==0x%08x | bdlr_x_reg_0x%08x_org==0x%08x\n ",reg_bdlrck,
+ bdlrck_reg_org,reg_bdlr_x,bdlr_x_reg_org);
+ if (test_data_setup_hold == 0)
+ {
+ printf("\ntest_data_setup\n ");
+
+
+
+ reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ if ((test_bdl%24)>11)
+ {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
+ }
+ bdlrck_reg_org=readl(reg_bdlrck) ;
+ bdlr_x_reg_org=readl(reg_bdlr_x);
+
+ dq_lcd_bdl_temp_reg_value=((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff);
+ while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
+ ((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))));
+
+ {
+ writel(((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))),reg_bdlr_x);
+
+ }
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+ printf("\n right edge detect ,reg==0x%08x\n",(reg_bdlr_x));
+ printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff),dq_lcd_bdl_temp_reg_value,
+ ((bdlr_x_reg_org)&(~(0xff<<(8*(test_bdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_bdl%4))));
+
+ {bdlr_x_reg_setup_max=dq_lcd_bdl_temp_reg_value;}
+
+ dq_lcd_bdl_temp_reg_value=0;
+ //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+ writel(((bdlr_x_reg_org)),reg_bdlr_x);
+ //test_ac_setup_hold=1;
+ {
+ printf("\ntest_bdl %08x | data_setup_hold==0x%08x mdlr==0x%08x ddl_100step_ps==%08d\n",test_bdl,test_data_setup_hold,
+ readl(DDR0_PUB_DX0MDLR0+reg_base_adj),ddl_100step_ps);
+ printf("\nbdlr_ck_reg_org==0x%08x | bdlr_x_reg_org==0x%08x\n ",bdlrck_reg_org,bdlr_x_reg_org);
+ printf("acbdlr_x_reg_setup_max 0x%08x \
+ setup time==0x%08x, %08d ps \n ",
+ bdlr_x_reg_setup_max,(bdlr_x_reg_setup_max-
+ ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)),((bdlr_x_reg_setup_max-
+ ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)) *ddl_100step_ps)/100
+ );
+ bdlr0_9_reg_setup_max[test_bdl]=(bdlr_x_reg_setup_max-
+ ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff));
+ bdlr0_9_reg_setup_time[test_bdl]=((bdlr_x_reg_setup_max-
+ ((bdlr_x_reg_org>>(8*(test_bdl%4)))&0xff)) *ddl_100step_ps)/100;
+ for ((temp_count=0);(temp_count<28);(temp_count++))
+ {
+ writel(((data_bdlr0_5_reg_org[temp_count])),
+ (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj));
+
+ };
+
+ }
+
+ }
+
+
+
+
+ if (test_data_setup_hold)
+ {
+ printf("\ntest_data_hold\n ");
+
+
+
+ reg_bdlrck=((((test_bdl%24)>11)?(DDR0_PUB_DX0BDLR5):(DDR0_PUB_DX0BDLR2))+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ reg_bdlr_x= (DDR0_PUB_DX0BDLR0+((((test_bdl%24)>>2)<<2))+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj);
+ if ((test_bdl%24)>11)
+ {reg_bdlr_x=reg_bdlr_x+4;//dxnbdlr345 register add have a gap with dxnbdlr012
+ }
+ bdlrck_reg_org=readl(reg_bdlrck) ;
+ bdlr_x_reg_org=readl(reg_bdlr_x);
+
+ dq_lcd_bdl_temp_reg_value=((bdlrck_reg_org>>(8*(1)))&0xff);
+ while (dq_lcd_bdl_temp_reg_value<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ printf("\n reg_bdlr_ck==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_bdlrck,dq_lcd_bdl_temp_reg_value,
+ (((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))));
+
+ {
+ // writel((((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))),reg_bdlrck);
+
+ }
+
+
+
+ if (((test_bdl%24)<12))
+ {
+ for ((temp_count=0);(temp_count<12);(temp_count++))
+ {if(temp_count==(test_bdl%24))
+ {
+ temp_reg_value[temp_count]=((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff;
+ }else
+ {
+ temp_reg_value[temp_count]=(((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
+ }
+ temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
+
+ };
+ for ((temp_count=0);(temp_count<12);(temp_count++))
+ {
+ writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
+ |((temp_reg_value[temp_count+3])<<(24)))),
+ (DDR0_PUB_DX0BDLR0+(((temp_count%24)>>2)<<2)+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj));
+ temp_count=temp_count+3;
+ };
+ printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
+ (readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj)));
+
+ }
+
+
+ if (((test_bdl%24) >= 12))
+ {
+ for ((temp_count=12);(temp_count<24);(temp_count++))
+ {if(temp_count==(test_bdl%24))
+ {
+ temp_reg_value[temp_count]=((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff;
+ }else
+ {
+ temp_reg_value[temp_count]=(((readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj))>>(8*(temp_count%4)))&0xff)+1;
+ }
+ temp_reg_value[temp_count]=((temp_reg_value[temp_count]>ACBDLR_MAX)?(ACBDLR_MAX):(temp_reg_value[temp_count]));
+
+ };
+ for ((temp_count=12);(temp_count<24);(temp_count++))
+ {
+ writel((((temp_reg_value[(temp_count)])|((temp_reg_value[temp_count+1])<<(8))|(((temp_reg_value[temp_count+2])<<(16)))
+ |((temp_reg_value[temp_count+3])<<(24)))),
+ (DDR0_PUB_DX0BDLR0+(((temp_count%24)>>2)<<2)+4+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj));
+ temp_count=temp_count+3;
+ };
+ printf("\n reg_bdlr_x==0x%08x,right temp==0x%08x\n,x_value==0x%08x",reg_bdlr_x,dq_lcd_bdl_temp_reg_value,
+ (readl(DDR0_PUB_DX0BDLR0+(((test_bdl%24)>>2)<<2)+4+
+ (DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(test_bdl/24)+reg_base_adj)));
+ }
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ dq_lcd_bdl_temp_reg_value--;
+ break;
+ }
+ }
+
+ printf("\n right edge detect ,reg==0x%08x\n",(reg_bdlrck));
+ printf("\n org==0x%08x,right edge==0x%08x,value==0x%08x\n ",((bdlrck_reg_org>>(8*(1)))&0xff),dq_lcd_bdl_temp_reg_value,
+ (((bdlrck_reg_org)&(~(0xffff<<(8*(1)))))|(dq_lcd_bdl_temp_reg_value<<(8*(1)))|(dq_lcd_bdl_temp_reg_value<<(8*(2)))));
+
+ {bdlr_x_reg_hold_max=dq_lcd_bdl_temp_reg_value;}
+
+ dq_lcd_bdl_temp_reg_value=0;
+ //writel(((acbdlr_x_reg_org)&(~(0xff<<(8*(test_acbdl%4)))))|(dq_lcd_bdl_temp_reg_value<<(8*(test_acbdl%4))),reg_add);
+ writel(((bdlrck_reg_org)),reg_bdlrck);
+ //test_ac_setup_hold=1;
+ {
+ printf("\ntest_bdl %08x | data_setup_hold==0x%08x mdlr==0x%08x ddl_100step_ps==%08d\n",test_bdl,test_data_setup_hold,
+ readl(DDR0_PUB_DX0MDLR0+reg_base_adj),ddl_100step_ps);
+ printf("\nbdlr_ck_reg_org==0x%08x | bdlr_x_reg_org==0x%08x\n ",bdlrck_reg_org,bdlr_x_reg_org);
+ printf("acbdlr_x_reg_hold_max 0x%08x \
+ hold time==0x%08x, %08d ps \n ",
+ bdlr_x_reg_hold_max,(bdlr_x_reg_hold_max-
+ ((bdlrck_reg_org>>(8*(1)))&0xff)),((bdlr_x_reg_hold_max-
+ ((bdlrck_reg_org>>(8*(1)))&0xff)) *ddl_100step_ps)/100
+ );
+ bdlr0_9_reg_hold_max[test_bdl]=(bdlr_x_reg_hold_max-
+ ((bdlrck_reg_org>>(8*(1)))&0xff));
+ bdlr0_9_reg_hold_time[test_bdl]=((bdlr_x_reg_hold_max-
+ ((bdlrck_reg_org>>(8*(1)))&0xff)) *ddl_100step_ps)/100;
+ for ((temp_count=0);(temp_count<28);(temp_count++))
+ {
+ writel(((data_bdlr0_5_reg_org[temp_count])),
+ (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)+reg_base_adj));
+
+ };
+
+ }
+
+ }
+
+
+
+
+
+ }
+ }
+
+ }
+
+ // ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0+reg_base_adj)))>>16)&0xff);
+
+
+
+ printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)));
+
+ printf("\nresume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ if (open_vt)
+ {
+ writel((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29)),(DDR0_PUB_REG_BASE+4));
+ }
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+
+ return dq_lcd_bdl_temp_reg_value;
+
+
+
+ }
+
+usage:
+ cmd_usage(cmdtp);
+ //*/
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_test_data_bit_setup_hold_window, 6, 1, do_ddr_test_data_bit_setup_hold_window,
+ "DDR test data bit margin function",
+ "ddr_test_data_bit_setup_hold_window a 0 0x8000000 0 3 or ddr_test_data_bit_setup_hold_window a 0 0x8000000 1 3 \n dcache off ? \n"
+);
+#endif
+
+unsigned int
+do_test_address_bus(volatile unsigned int * baseAddress, unsigned int nBytes)
+{
+ unsigned int addressMask = (nBytes/sizeof(unsigned int) - 1);
+ unsigned int offset;
+ unsigned int testOffset;
+
+ unsigned int pattern = (unsigned int) 0xAAAAAAAA;
+ unsigned int antipattern = (unsigned int) 0x55555555;
+
+ unsigned int data1, data2;
+
+ unsigned int ret = 0;
+
+ /*
+ * Write the default pattern at each of the power-of-two offsets.
+ */
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ baseAddress[offset] = pattern;
+ }
+
+ /*
+ * Check for address bits stuck high.
+ */
+ testOffset = 0;
+ baseAddress[testOffset] = antipattern;
+
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ data1 = baseAddress[offset];
+ data2 = baseAddress[offset];
+ if (data1 != data2)
+ {
+ printf(" memTestAddressBus - read twice different[offset]: 0x%8x-0x%8x\n", data1, data2);
+ ret = 1;
+ }
+ if (data1 != pattern)
+ {
+ printf(" memTestAddressBus - write[0x%8x]: 0x%8x, read[0x%8x]: 0x%8x\n", \
+ offset, pattern, offset, data1);
+ ret = 1;
+ //return ((unsigned int) &baseAddress[offset]);
+ }
+ }
+
+ baseAddress[testOffset] = pattern;
+
+ /*
+ * Check for address bits stuck low or shorted.
+ */
+ for (testOffset = 1; (testOffset & addressMask) != 0; testOffset <<= 1)
+ {
+ baseAddress[testOffset] = antipattern;
+
+ if (baseAddress[0] != pattern)
+ {
+ printf(" memTestAddressBus2 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0]: 0x%8x\n", \
+ testOffset, antipattern, baseAddress[0]);
+ ret = 1;
+ //return ((unsigned int) &baseAddress[testOffset]);
+ }
+
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ data1 = baseAddress[offset];
+ if ((data1 != pattern) && (offset != testOffset))
+ {
+ printf(" memTestAddressBus3 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
+ testOffset, antipattern, testOffset, data1);
+ ret = 1;
+ //return ((unsigned int) &baseAddress[testOffset]);
+ }
+ }
+
+ baseAddress[testOffset] = pattern;
+ }
+
+
+ for (offset = 0x1; (offset <=addressMask) ; offset++)
+ {
+ if (((~offset) <= addressMask) )
+ {
+ baseAddress[offset] = pattern;
+ baseAddress[(~offset)] = antipattern;
+ }
+ }
+
+ for (offset = 0x1; (offset <=addressMask); offset++)
+ {
+ if (((~offset) <= addressMask) )
+ {
+ if (baseAddress[offset] != pattern)
+ {
+ printf(" memTestAddressBus4 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
+ offset, pattern, offset, baseAddress[offset]);
+
+ ret = 1;
+ break;
+ }
+
+ if (baseAddress[(~offset)] != antipattern)
+ {
+ printf(" memTestAddressBus5 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
+ ((~offset)), antipattern, ((~offset)), baseAddress[((~offset))]);
+ ret = 1;
+ break;
+ }
+ }
+ }
+
+ if (ret)
+ {return (ret);
+ }
+ //unsigned int suq_value;
+ for (offset = 0x1; (offset <=addressMask) ; offset++)
+ {
+
+ {
+ pattern=((offset<<2)-offset);
+ baseAddress[offset] = pattern;
+ //baseAddress[(~offset)] = antipattern;
+ }
+ }
+
+ for (offset = 0x1; (offset <=addressMask); offset++)
+ {
+
+ {
+ pattern=((offset<<2)-offset);
+ if (baseAddress[offset] != pattern)
+ {
+ printf(" memTestAddressBus6 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
+ offset,pattern, offset, baseAddress[offset]);
+ ret = 1;
+ break;
+ }
+
+
+ }
+ }
+ if (ret)
+ {return (ret);
+ }
+ for (offset = 0x1; (offset <=addressMask) ; offset++)
+ {
+
+ {
+ pattern=~((offset<<2)-offset);
+ baseAddress[offset] = pattern;
+ //baseAddress[(~offset)] = antipattern;
+ }
+ }
+
+ for (offset = 0x1; (offset <=addressMask); offset++)
+ {
+
+ {
+ pattern=~((offset<<2)-offset);
+ if (baseAddress[offset] != pattern)
+ {
+ printf(" memTestAddressBus7 - write baseAddress[0x%8x]: 0x%8x, read baseAddress[0x%8x]: 0x%8x\n", \
+ offset,pattern, offset, baseAddress[offset]);
+ ret = 1;
+ break;
+ }
+
+
+ }
+ }
+
+
+ return (ret);
+} /* memTestAddressBus() */
+
+int ddr_test_s_add_cross_talk_pattern(int ddr_test_size)
+{
+ // unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int start_addr=test_start_addr;
+ error_outof_count_flag=1;
+ error_count=0;
+ ///*
+ printf("\rStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read((void *)(int_convter_p(start_addr)), ddr_test_size);
+ //*/
+ /*
+ printf("\rStart writing pattern4 at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read4((void *)(int_convter_p(start_addr)), ddr_test_size);
+ */
+ ddr_write_full((void *)(int_convter_p(start_addr)), ddr_test_size,0x0,0x3);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_full((void *)(int_convter_p(start_addr)), ddr_test_size,0,3);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_full((void *)(int_convter_p(start_addr)), ddr_test_size,0,3);
+
+
+ printf("\rStart writing add pattern ");
+ if (do_test_address_bus((void *)(int_convter_p(start_addr)), ddr_test_size))
+ error_count++;
+
+
+ /*
+ printf("\nStart *4 no cross talk pattern. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd write. ");
+ printf("\nStart 1st reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\nEnd 1st read. ");
+ printf("\nStart 2nd reading... ");
+ ddr_read_pattern4_no_cross_talk((void *)(int_convter_p(start_addr)), ddr_test_size);
+
+ //if(cross_talk_pattern_flag==1)
+ {
+ printf("\nStart *4 cross talk pattern p. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+
+ }
+
+ {
+ printf("\nStart *4 cross talk pattern p2. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_p2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_p((void *)(int_convter_p(start_addr)), ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+ printf("\nStart *4 cross talk pattern n. ");
+ printf("\nStart writing at 0x%08x - 0x%08x...", start_addr, start_addr + ddr_test_size);
+ ddr_write_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd write. ");
+ printf("\rStart 1st reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 1st read. ");
+ printf("\rStart 2nd reading... ");
+ ddr_read_pattern4_cross_talk_n2((void *)(int_convter_p(start_addr)), ddr_test_size);
+ printf("\rEnd 2nd read. ");
+ // printf("\rStart 3rd reading... ");
+ // ddr_read_pattern4_cross_talk_n((void *)(int_convter_p(start_addr)), ddr_test_size);
+ // printf("\rEnd 3rd read. \n");
+
+
+}
+ */
+if (error_count)
+ return 1;
+ else
+ return 0;
+ }
+
+int do_ddr_test_ac_windows_aclcdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr ac windows function\n");
+ printf("\nset ddr test test_start_addr==0x%08x \n",test_start_addr);
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ //unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+
+
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ac_mdlr_a_org=0;
+ unsigned int ac_mdlr_b_org=0;
+
+ unsigned int ac_lcdlr_a_org=0;
+ unsigned int ac_bdlr0_a_org=0;
+ unsigned int ac_lcdlr_b_org=0;
+ unsigned int ac_bdlr0_b_org=0;
+ unsigned int ac_lcdlr_a_rig=0;
+ unsigned int ac_bdlr0_a_rig=0;
+ unsigned int ac_lcdlr_b_rig=0;
+ unsigned int ac_bdlr0_b_rig=0;
+ unsigned int ac_lcdlr_a_lef=0;
+ unsigned int ac_bdlr0_a_lef=0;
+ unsigned int ac_lcdlr_b_lef=0;
+ unsigned int ac_bdlr0_b_lef=0;
+
+ unsigned int ac_lcdlr_a_rig_min=0;
+ unsigned int ac_bdlr0_a_rig_min=0;
+ unsigned int ac_lcdlr_b_rig_min=0;
+ unsigned int ac_bdlr0_b_rig_min=0;
+ unsigned int ac_lcdlr_a_lef_min=0;
+ unsigned int ac_bdlr0_a_lef_min=0;
+ unsigned int ac_lcdlr_b_lef_min=0;
+ unsigned int ac_bdlr0_b_lef_min=0;
+ unsigned int ac_lcdlr_temp=0;
+ unsigned int ac_bdlr0_temp=0;
+
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+ unsigned int test_min_max=0;
+ if (argc >5) {
+
+ test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max = 0;
+ }
+ else
+ test_min_max=1;
+
+ }
+
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\ntest_min_max== 0x%08x\n", test_min_max);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ }
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+ printf("\ntest A channel AC110\n");
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel 0x%08x\n",reg_add);
+ ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
+ ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
+ ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
+ printf("\ntest A channel AC113\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+ }
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+ printf("\ntest A channel AC112\n");
+ ac_mdlr_b_org=readl(reg_add);
+ ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
+ ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+ }
+
+
+ }
+
+ }
+
+ }////save and print org training value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel AC\n");
+ }
+ else
+ {
+ printf("\ntest B channel AC\n");
+ }
+
+ {
+ {
+ //#ifdef DDR_TEST_ACLCDLR
+
+ reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
+
+ ac_lcdlr_temp=readl(reg_add);
+
+ while (ac_lcdlr_temp>0)
+ {
+ if(test_min_max)
+ {break;
+ }
+ temp_test_error=0;
+ ac_lcdlr_temp--;
+
+ printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
+ writel(ac_lcdlr_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ ac_lcdlr_temp++;
+ break;
+ }
+ }
+
+ printf("\nlcdlr left edge detect \n");
+ printf("\nlcdlr left edge==0x%08x\n ",ac_lcdlr_temp);
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_lcdlr_a_lef=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_a_org;
+ }
+ else
+ {
+ ac_lcdlr_b_lef=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_b_org;
+
+ }
+ writel(ac_lcdlr_temp,(reg_add));
+
+ while (ac_lcdlr_temp<ACLCDLR_MAX)
+ {
+ temp_test_error=0;
+ ac_lcdlr_temp++;
+ printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
+ writel(ac_lcdlr_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nlcdlr right edge detect \n");
+ ac_lcdlr_temp--;
+ break;
+ }
+ }
+ printf("\nlcdlrright edge detect \n");
+ printf("\nlcdlr right edge==0x%08x\n ",ac_lcdlr_temp);
+
+
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_lcdlr_a_rig=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_a_org;
+ }
+ else
+ {
+ ac_lcdlr_b_rig=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_b_org;
+
+ }
+ writel(ac_lcdlr_temp,(reg_add));
+
+
+
+ //#endif
+
+ {
+ reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
+
+ ac_bdlr0_temp=readl(reg_add);
+ while (ac_bdlr0_temp>0)
+ {
+ if(test_min_max)
+ {break;
+ }
+ temp_test_error=0;
+ ac_bdlr0_temp--;
+ printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
+ writel(ac_bdlr0_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ ac_bdlr0_temp++;
+ break;
+ }
+ }
+ printf("\nacbdlr0 left edge detect \n");
+ printf("\nacbdlr0 left edge==0x%08x\n ",ac_bdlr0_temp);
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_bdlr0_a_lef=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_a_org;
+ }
+ else
+ {
+ ac_bdlr0_b_lef=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_b_org;
+
+ }
+
+ writel(ac_bdlr0_temp,(reg_add));
+
+ while (ac_bdlr0_temp<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ ac_bdlr0_temp++;
+ printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
+ writel(ac_bdlr0_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nacbdlr0 right edge detect \n");
+ ac_bdlr0_temp--;
+ break;
+ }
+ }
+ printf("\nacbdlr0 right edge detect \n");
+ printf("\nacbdlr0 right edge==0x%08x\n ",ac_bdlr0_temp);
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_bdlr0_a_rig=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_a_org;
+ }
+ else
+ {
+ ac_bdlr0_b_rig=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_b_org;
+
+ }
+
+ writel(ac_bdlr0_temp,(reg_add));
+
+ }
+ }
+
+ }
+ }
+
+ ////tune and save training dqs value
+
+
+
+
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+
+ if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+
+ if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+
+ if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ else
+ {
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ printf("\ntest A channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
+
+
+
+ }
+
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+
+ if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+
+ if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+
+ if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ else
+ {
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ printf("\ntest B channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
+
+
+
+ }
+
+
+
+ }
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+
+
+
+U_BOOT_CMD(
+ ddr_tune_ddr_ac_aclcdlr, 6, 1, do_ddr_test_ac_windows_aclcdlr,
+ "DDR tune dqs function",
+ "ddr_tune_ddr_ac_aclcdlr a 0 0x8000000 3 or ddr_tune_ddr_ac_aclcdlr b 0 0x80000 5 or ddr_tune_ddr_ac_aclcdlr a b 0x80000 l\n dcache off ? \n"
+);
+
+
+int do_ddr_test_ac_windows_acbdlr_ck(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr ac windows function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+
+
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ac_mdlr_a_org=0;
+ unsigned int ac_mdlr_b_org=0;
+
+ unsigned int ac_lcdlr_a_org=0;
+ unsigned int ac_bdlr0_a_org=0;
+ unsigned int ac_lcdlr_b_org=0;
+ unsigned int ac_bdlr0_b_org=0;
+ unsigned int ac_lcdlr_a_rig=0;
+ unsigned int ac_bdlr0_a_rig=0;
+ unsigned int ac_lcdlr_b_rig=0;
+ unsigned int ac_bdlr0_b_rig=0;
+ unsigned int ac_lcdlr_a_lef=0;
+ unsigned int ac_bdlr0_a_lef=0;
+ unsigned int ac_lcdlr_b_lef=0;
+ unsigned int ac_bdlr0_b_lef=0;
+
+ unsigned int ac_lcdlr_a_rig_min=0;
+ unsigned int ac_bdlr0_a_rig_min=0;
+ unsigned int ac_lcdlr_b_rig_min=0;
+ unsigned int ac_bdlr0_b_rig_min=0;
+ unsigned int ac_lcdlr_a_lef_min=0;
+ unsigned int ac_bdlr0_a_lef_min=0;
+ unsigned int ac_lcdlr_b_lef_min=0;
+ unsigned int ac_bdlr0_b_lef_min=0;
+ // unsigned int ac_lcdlr_temp;
+ unsigned int ac_bdlr0_temp=0;
+
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+
+ unsigned int test_min_max=0;
+ if (argc >5) {
+
+ test_min_max = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_min_max = 0;
+ }
+ else
+ test_min_max=1;
+
+ }
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\ntest_min_max== 0x%08x\n", test_min_max);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ }
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel 0x%08x\n",reg_add);
+ ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
+ ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
+ ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
+
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+ }
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+
+ ac_mdlr_b_org=readl(reg_add);
+ ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
+ ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+ }
+
+
+ }
+
+ }
+
+ }////save and print org training value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel AC\n");
+ }
+ else
+ {
+ printf("\ntest B channel AC\n");
+ }
+
+ {
+ {
+#ifdef DDR_TEST_ACLCDLR
+
+ reg_add=DDR0_PUB_ACLCDLR+reg_base_adj;
+
+ ac_lcdlr_temp=readl(reg_add);
+
+ while (ac_lcdlr_temp>0)
+ {
+ if(test_min_max)
+ {break;
+ }
+ temp_test_error=0;
+ ac_lcdlr_temp--;
+
+ printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
+ writel(ac_lcdlr_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ ac_lcdlr_temp++;
+ break;
+ }
+ }
+
+ printf("\nlcdlr left edge detect \n");
+ printf("\nlcdlr left edge==0x%08x\n ",ac_lcdlr_temp);
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_lcdlr_a_lef=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_a_org;
+ }
+ else
+ {
+ ac_lcdlr_b_lef=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_b_org;
+
+ }
+ writel(ac_lcdlr_temp,(reg_add));
+
+ while (ac_lcdlr_temp<ACLCDLR_MAX)
+ {
+ temp_test_error=0;
+ ac_lcdlr_temp++;
+ printf("\nlcdlr test value==0x%08x\n ",ac_lcdlr_temp);
+ writel(ac_lcdlr_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nlcdlr right edge detect \n");
+ ac_lcdlr_temp--;
+ break;
+ }
+ }
+ printf("\nlcdlrright edge detect \n");
+ printf("\nlcdlr right edge==0x%08x\n ",ac_lcdlr_temp);
+
+
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_lcdlr_a_rig=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_a_org;
+ }
+ else
+ {
+ ac_lcdlr_b_rig=ac_lcdlr_temp;
+ ac_lcdlr_temp=ac_lcdlr_b_org;
+
+ }
+ writel(ac_lcdlr_temp,(reg_add));
+
+
+
+#endif
+
+ {
+ reg_add=DDR0_PUB_ACBDLR0+reg_base_adj;
+
+ ac_bdlr0_temp=readl(reg_add);
+ while (ac_bdlr0_temp>0)
+ {
+ temp_test_error=0;
+ ac_bdlr0_temp--;
+ printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
+ writel(ac_bdlr0_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nwdqd left edge detect \n");
+ ac_bdlr0_temp++;
+ break;
+ }
+ }
+ printf("\nacbdlr0 left edge detect \n");
+ printf("\nacbdlr0 left edge==0x%08x\n ",ac_bdlr0_temp);
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_bdlr0_a_lef=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_a_org;
+ }
+ else
+ {
+ ac_bdlr0_b_lef=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_b_org;
+
+ }
+
+ writel(ac_bdlr0_temp,(reg_add));
+
+ while (ac_bdlr0_temp<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ ac_bdlr0_temp++;
+ printf("\nbdlr0 test value==0x%08x\n ",ac_bdlr0_temp);
+ writel(ac_bdlr0_temp,(reg_add));
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ //printf("\nacbdlr0 right edge detect \n");
+ ac_bdlr0_temp--;
+ break;
+ }
+ }
+ printf("\nacbdlr0 right edge detect \n");
+ printf("\nacbdlr0 right edge==0x%08x\n ",ac_bdlr0_temp);
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ ac_bdlr0_a_rig=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_a_org;
+ }
+ else
+ {
+ ac_bdlr0_b_rig=ac_bdlr0_temp;
+ ac_bdlr0_temp=ac_bdlr0_b_org;
+
+ }
+
+ writel(ac_bdlr0_temp,(reg_add));
+
+ }
+ }
+
+ }
+ }
+
+ ////tune and save training dqs value
+
+
+
+
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+
+ if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+
+ if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+
+ if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ else
+ {
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ printf("\ntest A channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
+
+
+
+ }
+
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+
+ if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+
+ if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+
+ if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ else
+ {
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ printf("\ntest B channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
+
+
+
+
+ }
+
+
+
+ }
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+
+
+
+U_BOOT_CMD(
+ ddr_tune_ddr_ac_acbdlr_ck, 6, 1, do_ddr_test_ac_windows_acbdlr_ck,
+ "DDR tune dqs function",
+ "ddr_tune_ddr_ac_acbdlr_ck a 0 0x8000000 3 or ddr_tune_ddr_ac_acbdlr_ck b 0 0x80000 5 or ddr_tune_ddr_ac_acbdlr_ck a b 0x80000 l\n dcache off ? \n"
+);
+
+
+int do_ddr_test_ac_bit_margin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_ac_window function\n");
+ unsigned int channel_a_en = 0;
+ // unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+
+ unsigned int lane_step= 0;
+ unsigned int reg_value= 0;
+ unsigned int test_ac_setup_hold= 0;
+ //int argc2;
+ //char * argv2[30];
+ // unsigned int acbdlr0_9_reg_org[10];
+ // unsigned int acbdlr0_9_reg_setup_max[40];
+ // unsigned int acbdlr0_9_reg_hold_max[40];
+ // unsigned int acbdlr0_9_reg_setup_time[40];
+ // unsigned int acbdlr0_9_reg_hold_time[40];
+
+ char *endp;
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {//channel_b_en = 1;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {//channel_b_en = 1;
+ }
+ }
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+ //argc2=5;
+ //for(i = 1;i<(argc);i++)
+ {
+ //argv2[i-1]=argv[i];
+ }
+
+ //argv2[0]=argv[1];
+ //argv2[1]=argv[2];
+ //argv2[2]=argv[3];
+ char str[100];
+ test_ac_setup_hold=0;
+ if (channel_a_en)
+ {
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest ac window a\n");
+ for ((lane_step=4);(lane_step<40);(lane_step++))
+ {
+ if (lane_step == 7)
+ {lane_step=8;
+ }
+ if (lane_step == 12)
+ {lane_step=16;
+ }
+ if (lane_step == 14)
+ {lane_step=16;
+ }
+ if (lane_step == 18)
+ {lane_step=20;
+ }
+ if (lane_step == 22)
+ {lane_step=24;
+ }
+ //sprintf(argv2[3],"d%",( lane_step));
+ //itoa_ddr_test(lane_step,(argv2[3]),10);
+ //printf("\nargv2[%d]=%s\n",0,argv2[0]);
+ // printf("\nargv2[%d]=%s\n",3,argv2[3]);//a 0 0x8000000 0 c
+ // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ test_ac_setup_hold=2;
+ sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ run_command(str,0);
+ test_ac_setup_hold=0;
+
+ }
+ }
+ if (channel_a_en)
+ {
+ for ((lane_step=0);(lane_step<10);(lane_step++))
+ {
+ printf("acbdlr0_9_reg_org[%d]0x%08x==0x%08x\n", lane_step,(DDR0_PUB_ACBDLR0+(lane_step<<2)),acbdlr0_9_reg_org[lane_step]);
+
+ };
+
+ for ((lane_step=0);(lane_step<40);(lane_step++))
+ {
+ printf("\n a_ac_lane_0x%08x|setup_max 0x%08x |hold_max 0x%08x |setup_time %08d ps ::|hold_time %08d ps \n",
+ lane_step,
+ acbdlr0_9_reg_setup_max[lane_step],
+ acbdlr0_9_reg_hold_max[lane_step],
+ acbdlr0_9_reg_setup_time[lane_step],
+ acbdlr0_9_reg_hold_time[lane_step]);
+
+ }
+ }
+ return reg_value;
+}
+
+int do_ddr_test_data_bit_margin(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_data_window function\n");
+ unsigned int channel_a_en = 0;
+ // unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+
+ unsigned int lane_step= 0;
+ unsigned int reg_value= 0;
+ unsigned int test_ac_setup_hold= 0;
+ //int argc2;
+ //char * argv2[30];
+ // unsigned int acbdlr0_9_reg_org[10];
+ // unsigned int acbdlr0_9_reg_setup_max[40];
+ // unsigned int acbdlr0_9_reg_hold_max[40];
+ // unsigned int acbdlr0_9_reg_setup_time[40];
+ // unsigned int acbdlr0_9_reg_hold_time[40];
+
+ char *endp;
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {//channel_b_en = 1;
+ }
+
+
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {//channel_b_en = 1;
+ }
+ }
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+ unsigned int ddr_test_type=0;
+ unsigned int ddr_test_type_para1=0;
+ unsigned int ddr_test_type_para2=0;
+ if (argc >4) {
+ ddr_test_type = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ ddr_test_type = 0;
+ }
+ }
+ if (ddr_test_type) {
+ if (argc >5) {
+ ddr_test_type_para1 = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_test_type_para1 = 0;
+ }
+ }
+ if (argc >6) {
+ ddr_test_type_para2 = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_test_type_para2 = 96;
+ }
+ }
+ }else
+ { ddr_test_type_para1 = 0;
+ ddr_test_type_para2 = 96;
+ }
+ //argc2=5;
+ //for(i = 1;i<(argc);i++)
+ {
+ //argv2[i-1]=argv[i];
+ }
+
+ //argv2[0]=argv[1];
+ //argv2[1]=argv[2];
+ //argv2[2]=argv[3];
+ printf("\ntest data window ddr_test_type==0x%08x, ddr_test_type_para1==0x%08x,ddr_test_type_para2==0x%08x\n",
+ ddr_test_type,ddr_test_type_para1,ddr_test_type_para2);
+ char str[100];
+ unsigned int temp_count=0;
+ test_ac_setup_hold=0;
+ if (channel_a_en)
+ {
+ for ((temp_count=0);(temp_count<28);(temp_count++))
+ {
+ //data_bdlr0_5_reg_org[temp_count]=(((readl(((temp_count>>2)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/6)+reg_base_adj))
+ // >>(8*(test_bdl%4)))&0xff);
+ data_bdlr0_5_reg_org[temp_count]=((readl(((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)))
+ );
+ };
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest data window a\n");
+ for ((lane_step=ddr_test_type_para1);(lane_step<ddr_test_type_para2);(lane_step++))
+ {
+ if (lane_step == 9)
+ {lane_step=12;
+ }
+ if (lane_step == 21)
+ {lane_step=24;
+ }
+ if (lane_step == 33)
+ {lane_step=36;
+ }
+ if (lane_step == 45)
+ {lane_step=48;
+ }
+ if (lane_step == 33+24)
+ {lane_step=36+24;
+ }
+ if (lane_step == 45+24)
+ {lane_step=48+24;
+ }
+ if (lane_step == 33+48)
+ {lane_step=36+48;
+ }
+ if (lane_step == 44+48)
+ {lane_step=48+48;
+ }
+
+ //sprintf(argv2[3],"d%",( lane_step));
+ //itoa_ddr_test(lane_step,(argv2[3]),10);
+ //printf("\nargv2[%d]=%s\n",0,argv2[0]);
+ // printf("\nargv2[%d]=%s\n",3,argv2[3]);//a 0 0x8000000 0 c
+ // reg_value=do_ddr_test_dqs_window_step((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ sprintf(str,"ddr_test_data_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ test_ac_setup_hold=1;
+ sprintf(str,"ddr_test_data_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ run_command(str,0);
+ test_ac_setup_hold=0;
+ for ((temp_count=0);(temp_count<28);(temp_count++))
+ {
+ writel(((data_bdlr0_5_reg_org[temp_count])),
+ (((temp_count%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(temp_count/7)));
+
+ };
+
+
+ }
+ }
+
+
+
+
+
+ if (channel_a_en)
+ {
+ for ((lane_step=0);(lane_step<28);(lane_step++))
+ {
+ printf("data_bdlr0_5_reg_org[%d]0x%08x==0x%08x\n", lane_step,
+ (((lane_step%7)<<2)+DDR0_PUB_DX0BDLR0+(DDR0_PUB_DX1BDLR0-DDR0_PUB_DX0BDLR0)*(lane_step/7)),
+ data_bdlr0_5_reg_org[lane_step]);
+
+ };
+
+ for ((lane_step=0);(lane_step<96);(lane_step++))
+ {
+ printf("\n a_ac_lane_0x%08x|setup_max 0x%08x |hold_max 0x%08x |setup_time %08d ps ::|hold_time %08d ps \n",
+ lane_step,
+ bdlr0_9_reg_setup_max[lane_step],
+ bdlr0_9_reg_hold_max[lane_step],
+ bdlr0_9_reg_setup_time[lane_step],
+ bdlr0_9_reg_hold_time[lane_step]);
+
+ }}
+
+
+
+ return reg_value;
+}
+
+//#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_BABY)
+int do_ddr_gx_crosstalk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ unsigned int des[8] ;
+ unsigned int pattern_1[4][8] ;
+ unsigned int pattern_2[4][8] ;
+ unsigned int pattern_3[4][8] ;
+ unsigned int pattern_4[4][8] ;
+ unsigned int pattern_5[4][8] ;
+ unsigned int pattern_6[4][8] ;
+
+
+ des[0] = 0xaec83f49;
+ des[1] = 0xd243a62c;
+ des[2] = 0xf8774a0b;
+ des[3] = 0x63d214e5;
+ des[4] = 0x3f4166d5;
+ des[5] = 0x239672c0;
+ des[6] = 0x47ba7533;
+ des[7] = 0xcae4cd7f;
+ pattern_1[0][0] = 0xff00ff00;
+ pattern_1[0][1] = 0xff00ff00;
+ pattern_1[0][2] = 0xff00ff00;
+ pattern_1[0][3] = 0xff00ff00;
+ pattern_1[0][4] = 0xff00ff00;
+ pattern_1[0][5] = 0xff00ff00;
+ pattern_1[0][6] = 0xff00ff00;
+ pattern_1[0][7] = 0xff00ff00;
+
+ pattern_1[1][0] = 0x00ffff00;
+ pattern_1[1][1] = 0x00ffff00;
+ pattern_1[1][2] = 0x00ffff00;
+ pattern_1[1][3] = 0x00ffff00;
+ pattern_1[1][4] = 0x00ffff00;
+ pattern_1[1][5] = 0x00ffff00;
+ pattern_1[1][6] = 0x00ffff00;
+ pattern_1[1][7] = 0x00ffff00;
+
+ pattern_1[2][0] = 0xffff0000;
+ pattern_1[2][1] = 0xffff0000;
+ pattern_1[2][2] = 0xffff0000;
+ pattern_1[2][3] = 0xffff0000;
+ pattern_1[2][4] = 0xffff0000;
+ pattern_1[2][5] = 0xffff0000;
+ pattern_1[2][6] = 0xffff0000;
+ pattern_1[2][7] = 0xffff0000;
+
+ pattern_1[3][0] = 0xff00ff00;
+ pattern_1[3][1] = 0xff00ff00;
+ pattern_1[3][2] = 0xff00ff00;
+ pattern_1[3][3] = 0xff00ff00;
+ pattern_1[3][4] = 0xff00ff00;
+ pattern_1[3][5] = 0xff00ff00;
+ pattern_1[3][6] = 0xff00ff00;
+ pattern_1[3][7] = 0xff00ff00;
+
+ pattern_2[0][0] = 0x0001fe00;
+ pattern_2[0][1] = 0x0000ff00;
+ pattern_2[0][2] = 0x0000ff00;
+ pattern_2[0][3] = 0x0000ff00;
+ pattern_2[0][4] = 0x0002fd00;
+ pattern_2[0][5] = 0x0000ff00;
+ pattern_2[0][6] = 0x0000ff00;
+ pattern_2[0][7] = 0x0000ff00;
+
+ pattern_2[1][0] = 0x0004fb00;
+ pattern_2[1][1] = 0x0000ff00;
+ pattern_2[1][2] = 0x0000ff00;
+ pattern_2[1][3] = 0x0000ff00;
+ pattern_2[1][4] = 0x0008f700;
+ pattern_2[1][5] = 0x0000ff00;
+ pattern_2[1][6] = 0x0000ff00;
+ pattern_2[1][7] = 0x0000ff00;
+
+ pattern_2[2][0] = 0x0010ef00;
+ pattern_2[2][1] = 0x0000ff00;
+ pattern_2[2][2] = 0x0000ff00;
+ pattern_2[2][3] = 0x0000ff00;
+ pattern_2[2][4] = 0x0020df00;
+ pattern_2[2][5] = 0x0000ff00;
+ pattern_2[2][6] = 0x0000ff00;
+ pattern_2[2][7] = 0x0000ff00;
+
+ pattern_2[3][0] = 0x0040bf00;
+ pattern_2[3][1] = 0x0000ff00;
+ pattern_2[3][2] = 0x0000ff00;
+ pattern_2[3][3] = 0x0000ff00;
+ pattern_2[3][4] = 0x00807f00;
+ pattern_2[3][5] = 0x0000ff00;
+ pattern_2[3][6] = 0x0000ff00;
+ pattern_2[3][7] = 0x0000ff00;
+
+ pattern_3[0][0] = 0x00010000;
+ pattern_3[0][1] = 0x00000000;
+ pattern_3[0][2] = 0x00000000;
+ pattern_3[0][3] = 0x00000000;
+ pattern_3[0][4] = 0x00020000;
+ pattern_3[0][5] = 0x00000000;
+ pattern_3[0][6] = 0x00000000;
+ pattern_3[0][7] = 0x00000000;
+
+ pattern_3[1][0] = 0x00040000;
+ pattern_3[1][1] = 0x00000000;
+ pattern_3[1][2] = 0x00000000;
+ pattern_3[1][3] = 0x00000000;
+ pattern_3[1][4] = 0x00080000;
+ pattern_3[1][5] = 0x00000000;
+ pattern_3[1][6] = 0x00000000;
+ pattern_3[1][7] = 0x00000000;
+
+ pattern_3[2][0] = 0x00100000;
+ pattern_3[2][1] = 0x00000000;
+ pattern_3[2][2] = 0x00000000;
+ pattern_3[2][3] = 0x00000000;
+ pattern_3[2][4] = 0x00200000;
+ pattern_3[2][5] = 0x00000000;
+ pattern_3[2][6] = 0x00000000;
+ pattern_3[2][7] = 0x00000000;
+
+ pattern_3[3][0] = 0x00400000;
+ pattern_3[3][1] = 0x00000000;
+ pattern_3[3][2] = 0x00000000;
+ pattern_3[3][3] = 0x00000000;
+ pattern_3[3][4] = 0x00800000;
+ pattern_3[3][5] = 0x00000000;
+ pattern_3[3][6] = 0x00000000;
+ pattern_3[3][7] = 0x00000000;
+
+ ///*
+ pattern_4[0][0] = 0x51c8c049 ;
+ pattern_4[0][1] = 0x2d43592c ;
+ pattern_4[0][2] = 0x0777b50b ;
+ pattern_4[0][3] = 0x9cd2ebe5 ;
+ pattern_4[0][4] = 0xc04199d5 ;
+ pattern_4[0][5] = 0xdc968dc0 ;
+ pattern_4[0][6] = 0xb8ba8a33 ;
+ pattern_4[0][7] = 0x35e4327f ;
+
+ pattern_4[1][0] = 0xae37c049 ;
+ pattern_4[1][1] = 0xd2bc592c ;
+ pattern_4[1][2] = 0xf888b50b ;
+ pattern_4[1][3] = 0x632debe5 ;
+ pattern_4[1][4] = 0x3fbe99d5 ;
+ pattern_4[1][5] = 0x23698dc0 ;
+ pattern_4[1][6] = 0x47458a33 ;
+ pattern_4[1][7] = 0xca1b327f ;
+
+ pattern_4[2][0] = 0x51373f49 ;
+ pattern_4[2][1] = 0x2dbca62c ;
+ pattern_4[2][2] = 0x07884a0b ;
+ pattern_4[2][3] = 0x9c2d14e5 ;
+ pattern_4[2][4] = 0xc0be66d5 ;
+ pattern_4[2][5] = 0xdc6972c0 ;
+ pattern_4[2][6] = 0xb8457533 ;
+ pattern_4[2][7] = 0x351bcd7f ;
+
+
+ pattern_4[3][0] = 0x51c8c049 ;
+ pattern_4[3][1] = 0x2d43592c ;
+ pattern_4[3][2] = 0x0777b50b ;
+ pattern_4[3][3] = 0x9cd2ebe5 ;
+ pattern_4[3][4] = 0xc04199d5 ;
+ pattern_4[3][5] = 0xdc968dc0 ;
+ pattern_4[3][6] = 0xb8ba8a33 ;
+ pattern_4[3][7] = 0x35e4327f ;
+
+ pattern_5[0][0] = 0xaec9c149 ;
+ pattern_5[0][1] = 0xd243592c ;
+ pattern_5[0][2] = 0xf877b50b ;
+ pattern_5[0][3] = 0x63d2ebe5 ;
+ pattern_5[0][4] = 0x3f439bd5 ;
+ pattern_5[0][5] = 0x23968dc0 ;
+ pattern_5[0][6] = 0x47ba8a33 ;
+ pattern_5[0][7] = 0xcae4327f ;
+ pattern_5[1][0] = 0xaeccc449 ;
+ pattern_5[1][1] = 0xd243592c ;
+ pattern_5[1][2] = 0xf877b50b ;
+ pattern_5[1][3] = 0x63d2ebe5 ;
+ pattern_5[1][4] = 0x3f4991d5 ;
+ pattern_5[1][5] = 0x23968dc0 ;
+ pattern_5[1][6] = 0x47ba8a33 ;
+ pattern_5[1][7] = 0xcae4327f ;
+ pattern_5[2][0] = 0xaed8d049 ;
+ pattern_5[2][1] = 0xd243592c ;
+ pattern_5[2][2] = 0xf877b50b ;
+ pattern_5[2][3] = 0x63d2ebe5 ;
+ pattern_5[2][4] = 0x3f61b9d5 ;
+ pattern_5[2][5] = 0x23968dc0 ;
+ pattern_5[2][6] = 0x47ba8a33 ;
+ pattern_5[2][7] = 0xcae4327f ;
+ pattern_5[3][0] = 0xae888049 ;
+ pattern_5[3][1] = 0xd243592c ;
+ pattern_5[3][2] = 0xf877b50b ;
+ pattern_5[3][3] = 0x63d2ebe5 ;
+ pattern_5[3][4] = 0x3fc119d5 ;
+ pattern_5[3][5] = 0x23968dc0 ;
+ pattern_5[3][6] = 0x47ba8a33 ;
+ pattern_5[3][7] = 0xcae4327f ;
+
+ pattern_6[0][0] = 0xaec93f49 ;
+ pattern_6[0][1] = 0xd243a62c ;
+ pattern_6[0][2] = 0xf8774a0b ;
+ pattern_6[0][3] = 0x63d214e5 ;
+ pattern_6[0][4] = 0x3f4366d5 ;
+ pattern_6[0][5] = 0x239672c0 ;
+ pattern_6[0][6] = 0x47ba7533 ;
+ pattern_6[0][7] = 0xcae4cd7f ;
+ pattern_6[1][0] = 0xaecc3f49 ;
+ pattern_6[1][1] = 0xd243a62c ;
+ pattern_6[1][2] = 0xf8774a0b ;
+ pattern_6[1][3] = 0x63d214e5 ;
+ pattern_6[1][4] = 0x3f4966d5 ;
+ pattern_6[1][5] = 0x239672c0 ;
+ pattern_6[1][6] = 0x47ba7533 ;
+ pattern_6[1][7] = 0xcae4cd7f ;
+ pattern_6[2][0] = 0xaed83f49 ;
+ pattern_6[2][1] = 0xd243a62c ;
+ pattern_6[2][2] = 0xf8774a0b ;
+ pattern_6[2][3] = 0x63d214e5 ;
+ pattern_6[2][4] = 0x3f6166d5 ;
+ pattern_6[2][5] = 0x239672c0 ;
+ pattern_6[2][6] = 0x47ba7533 ;
+ pattern_6[2][7] = 0xcae4cd7f ;
+ pattern_6[3][0] = 0xae883f49 ;
+ pattern_6[3][1] = 0xd243a62c ;
+ pattern_6[3][2] = 0xf8774a0b ;
+ pattern_6[3][3] = 0x63d214e5 ;
+ pattern_6[3][4] = 0x3fc166d5 ;
+ pattern_6[3][5] = 0x239672c0 ;
+ pattern_6[3][6] = 0x47ba7533 ;
+ pattern_6[3][7] = 0xcae4cd7f ;
+ //*/
+ //*/
+
+ char *endp;
+ unsigned int loop = 1;
+ unsigned int lflag = 0;
+ unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int test_size = DDR_TEST_SIZE;
+ unsigned int test_addr;
+
+ error_outof_count_flag =0;
+ error_count =0;
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ if (argc == 1)
+ goto usage;
+ if (argc>1)
+ {
+ if (strcmp(argv[1], "l") == 0) {
+ lflag = 1;
+ }
+
+ else{
+ loop = simple_strtoull_ddr(argv[1], &endp, 10);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+ }
+
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==1) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ // if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+ loop = 1;
+
+ }
+ }
+
+
+
+ if (argc >= 2) {
+ loop = simple_strtoull_ddr(argv[1], &endp, 16);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+
+ }
+ unsigned int pattern_flag1=1;
+ unsigned int pattern_flag2=1;
+ unsigned int pattern_flag3=1;
+ pattern_flag1 = 1;
+ pattern_flag2=1;
+ pattern_flag3 = 1;
+
+
+ if (argc >= 3 ) {
+ if ( (strcmp(argv[2], "s") == 0))
+ {
+ pattern_flag1 = 1;
+ pattern_flag2=0;
+ pattern_flag3 = 0;
+ }
+ else if ((strcmp(argv[2], "c") == 0))
+ {
+ pattern_flag1 = 0;
+ pattern_flag2=1;
+ pattern_flag3 = 0;
+ }
+ else if ( (strcmp(argv[2], "d") == 0))
+ {
+ pattern_flag1 = 0;
+ pattern_flag2=0;
+ pattern_flag3 = 1;
+ }
+ }
+
+ // if(test_size<0x20)
+ start_addr=0x10000000;
+ test_size = 0x20;
+ unsigned int temp_i=0;
+ unsigned int temp_k=0;
+ unsigned int pattern_o[8];
+ unsigned int pattern_d[8];
+
+
+ //DDR_TEST_START:
+
+ ///*
+ error_count=0;
+ do {
+ if (lflag)
+ loop = 888;
+
+ //if(old_pattern_flag==1)
+ {
+
+ printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
+
+ /*
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+ flush_dcache_range(start_addr,start_addr + test_size);
+
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ */
+ if (pattern_flag1 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_4[temp_k][temp_i])
+ {error_count++;
+ printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
+ }
+
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+
+ }
+ }
+ }
+ }
+ if (pattern_flag2 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+
+ }
+
+ if (pattern_flag3 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_6[temp_k][temp_i])
+ {error_count++;
+ printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ printf("\Error count==0x%08x", error_count);
+ printf("\n \n");
+ }while(--loop);
+ //*/
+
+ printf("\rEnd ddr test. \n");
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+}
+
+
+U_BOOT_CMD(
+ ddrtest_gx_crosstalk, 5, 1, do_ddr_gx_crosstalk,
+ "DDR test function",
+ "ddrtest [LOOP] [ADDR].Default address is 0x10000000\n"
+);
+
+
+
+//#if (CONFIG_DDR_PHY == P_DDR_PHY_GX_TV_BABY)
+int do_ddr_gxtvbb_crosstalk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ unsigned int a_des[8],b_des[8],des[8] ;
+ unsigned int pattern_1[4][8] ;
+ unsigned int pattern_2[4][8] ;
+ unsigned int pattern_3[4][8] ;
+ // unsigned int pattern_4[4][8] ;
+ // unsigned int pattern_5[4][8] ;
+ // unsigned int pattern_6[4][8] ;
+
+
+ a_des[0] = 0x7ea09b52;
+ a_des[1] = 0xbc57bb23;
+ a_des[2] = 0x8d2b6e65;
+ a_des[3] = 0x15fdcdc4;
+ a_des[4] = 0xbc1df453;
+ a_des[5] = 0x21bcbcdf;
+ a_des[6] = 0x267b7ac1;
+ a_des[7] = 0x6af03d72;
+
+
+ b_des[0] = 0xdfc2ee12;
+ b_des[1] = 0x4f58da43;
+ b_des[2] = 0x87809557;
+ b_des[3] = 0xb87ddbf4;
+ b_des[4] = 0x667fb021;
+ b_des[5] = 0x64593586;
+ b_des[6] = 0xee73d8d5;
+ b_des[7] = 0xe65f972d;
+ pattern_1[0][0] = 0xff00ff00;
+ pattern_1[0][1] = 0xff00ff00;
+ pattern_1[0][2] = 0xff00ff00;
+ pattern_1[0][3] = 0xff00ff00;
+ pattern_1[0][4] = 0xff00ff00;
+ pattern_1[0][5] = 0xff00ff00;
+ pattern_1[0][6] = 0xff00ff00;
+ pattern_1[0][7] = 0xff00ff00;
+
+ pattern_1[1][0] = 0x00ffff00;
+ pattern_1[1][1] = 0x00ffff00;
+ pattern_1[1][2] = 0x00ffff00;
+ pattern_1[1][3] = 0x00ffff00;
+ pattern_1[1][4] = 0x00ffff00;
+ pattern_1[1][5] = 0x00ffff00;
+ pattern_1[1][6] = 0x00ffff00;
+ pattern_1[1][7] = 0x00ffff00;
+
+ pattern_1[2][0] = 0xffff0000;
+ pattern_1[2][1] = 0xffff0000;
+ pattern_1[2][2] = 0xffff0000;
+ pattern_1[2][3] = 0xffff0000;
+ pattern_1[2][4] = 0xffff0000;
+ pattern_1[2][5] = 0xffff0000;
+ pattern_1[2][6] = 0xffff0000;
+ pattern_1[2][7] = 0xffff0000;
+
+ pattern_1[3][0] = 0xff00ff00;
+ pattern_1[3][1] = 0xff00ff00;
+ pattern_1[3][2] = 0xff00ff00;
+ pattern_1[3][3] = 0xff00ff00;
+ pattern_1[3][4] = 0xff00ff00;
+ pattern_1[3][5] = 0xff00ff00;
+ pattern_1[3][6] = 0xff00ff00;
+ pattern_1[3][7] = 0xff00ff00;
+
+ pattern_2[0][0] = 0x0001fe00;
+ pattern_2[0][1] = 0x0000ff00;
+ pattern_2[0][2] = 0x0000ff00;
+ pattern_2[0][3] = 0x0000ff00;
+ pattern_2[0][4] = 0x0002fd00;
+ pattern_2[0][5] = 0x0000ff00;
+ pattern_2[0][6] = 0x0000ff00;
+ pattern_2[0][7] = 0x0000ff00;
+
+ pattern_2[1][0] = 0x0004fb00;
+ pattern_2[1][1] = 0x0000ff00;
+ pattern_2[1][2] = 0x0000ff00;
+ pattern_2[1][3] = 0x0000ff00;
+ pattern_2[1][4] = 0x0008f700;
+ pattern_2[1][5] = 0x0000ff00;
+ pattern_2[1][6] = 0x0000ff00;
+ pattern_2[1][7] = 0x0000ff00;
+
+ pattern_2[2][0] = 0x0010ef00;
+ pattern_2[2][1] = 0x0000ff00;
+ pattern_2[2][2] = 0x0000ff00;
+ pattern_2[2][3] = 0x0000ff00;
+ pattern_2[2][4] = 0x0020df00;
+ pattern_2[2][5] = 0x0000ff00;
+ pattern_2[2][6] = 0x0000ff00;
+ pattern_2[2][7] = 0x0000ff00;
+
+ pattern_2[3][0] = 0x0040bf00;
+ pattern_2[3][1] = 0x0000ff00;
+ pattern_2[3][2] = 0x0000ff00;
+ pattern_2[3][3] = 0x0000ff00;
+ pattern_2[3][4] = 0x00807f00;
+ pattern_2[3][5] = 0x0000ff00;
+ pattern_2[3][6] = 0x0000ff00;
+ pattern_2[3][7] = 0x0000ff00;
+
+ pattern_3[0][0] = 0x00010000;
+ pattern_3[0][1] = 0x00000000;
+ pattern_3[0][2] = 0x00000000;
+ pattern_3[0][3] = 0x00000000;
+ pattern_3[0][4] = 0x00020000;
+ pattern_3[0][5] = 0x00000000;
+ pattern_3[0][6] = 0x00000000;
+ pattern_3[0][7] = 0x00000000;
+
+ pattern_3[1][0] = 0x00040000;
+ pattern_3[1][1] = 0x00000000;
+ pattern_3[1][2] = 0x00000000;
+ pattern_3[1][3] = 0x00000000;
+ pattern_3[1][4] = 0x00080000;
+ pattern_3[1][5] = 0x00000000;
+ pattern_3[1][6] = 0x00000000;
+ pattern_3[1][7] = 0x00000000;
+
+ pattern_3[2][0] = 0x00100000;
+ pattern_3[2][1] = 0x00000000;
+ pattern_3[2][2] = 0x00000000;
+ pattern_3[2][3] = 0x00000000;
+ pattern_3[2][4] = 0x00200000;
+ pattern_3[2][5] = 0x00000000;
+ pattern_3[2][6] = 0x00000000;
+ pattern_3[2][7] = 0x00000000;
+
+ pattern_3[3][0] = 0x00400000;
+ pattern_3[3][1] = 0x00000000;
+ pattern_3[3][2] = 0x00000000;
+ pattern_3[3][3] = 0x00000000;
+ pattern_3[3][4] = 0x00800000;
+ pattern_3[3][5] = 0x00000000;
+ pattern_3[3][6] = 0x00000000;
+ pattern_3[3][7] = 0x00000000;
+
+ /*
+ pattern_4[0][0] = 0x51c8c049 ;
+ pattern_4[0][1] = 0x2d43592c ;
+ pattern_4[0][2] = 0x0777b50b ;
+ pattern_4[0][3] = 0x9cd2ebe5 ;
+ pattern_4[0][4] = 0xc04199d5 ;
+ pattern_4[0][5] = 0xdc968dc0 ;
+ pattern_4[0][6] = 0xb8ba8a33 ;
+ pattern_4[0][7] = 0x35e4327f ;
+
+ pattern_4[1][0] = 0xae37c049 ;
+ pattern_4[1][1] = 0xd2bc592c ;
+ pattern_4[1][2] = 0xf888b50b ;
+ pattern_4[1][3] = 0x632debe5 ;
+ pattern_4[1][4] = 0x3fbe99d5 ;
+ pattern_4[1][5] = 0x23698dc0 ;
+ pattern_4[1][6] = 0x47458a33 ;
+ pattern_4[1][7] = 0xca1b327f ;
+
+ pattern_4[2][0] = 0x51373f49 ;
+ pattern_4[2][1] = 0x2dbca62c ;
+ pattern_4[2][2] = 0x07884a0b ;
+ pattern_4[2][3] = 0x9c2d14e5 ;
+ pattern_4[2][4] = 0xc0be66d5 ;
+ pattern_4[2][5] = 0xdc6972c0 ;
+ pattern_4[2][6] = 0xb8457533 ;
+ pattern_4[2][7] = 0x351bcd7f ;
+
+
+ pattern_4[3][0] = 0x51c8c049 ;
+ pattern_4[3][1] = 0x2d43592c ;
+ pattern_4[3][2] = 0x0777b50b ;
+ pattern_4[3][3] = 0x9cd2ebe5 ;
+ pattern_4[3][4] = 0xc04199d5 ;
+ pattern_4[3][5] = 0xdc968dc0 ;
+ pattern_4[3][6] = 0xb8ba8a33 ;
+ pattern_4[3][7] = 0x35e4327f ;
+
+ pattern_5[0][0] = 0xaec9c149 ;
+ pattern_5[0][1] = 0xd243592c ;
+ pattern_5[0][2] = 0xf877b50b ;
+ pattern_5[0][3] = 0x63d2ebe5 ;
+ pattern_5[0][4] = 0x3f439bd5 ;
+ pattern_5[0][5] = 0x23968dc0 ;
+ pattern_5[0][6] = 0x47ba8a33 ;
+ pattern_5[0][7] = 0xcae4327f ;
+ pattern_5[1][0] = 0xaeccc449 ;
+ pattern_5[1][1] = 0xd243592c ;
+ pattern_5[1][2] = 0xf877b50b ;
+ pattern_5[1][3] = 0x63d2ebe5 ;
+ pattern_5[1][4] = 0x3f4991d5 ;
+ pattern_5[1][5] = 0x23968dc0 ;
+ pattern_5[1][6] = 0x47ba8a33 ;
+ pattern_5[1][7] = 0xcae4327f ;
+ pattern_5[2][0] = 0xaed8d049 ;
+ pattern_5[2][1] = 0xd243592c ;
+ pattern_5[2][2] = 0xf877b50b ;
+ pattern_5[2][3] = 0x63d2ebe5 ;
+ pattern_5[2][4] = 0x3f61b9d5 ;
+ pattern_5[2][5] = 0x23968dc0 ;
+ pattern_5[2][6] = 0x47ba8a33 ;
+ pattern_5[2][7] = 0xcae4327f ;
+ pattern_5[3][0] = 0xae888049 ;
+ pattern_5[3][1] = 0xd243592c ;
+ pattern_5[3][2] = 0xf877b50b ;
+ pattern_5[3][3] = 0x63d2ebe5 ;
+ pattern_5[3][4] = 0x3fc119d5 ;
+ pattern_5[3][5] = 0x23968dc0 ;
+ pattern_5[3][6] = 0x47ba8a33 ;
+ pattern_5[3][7] = 0xcae4327f ;
+
+ pattern_6[0][0] = 0xaec93f49 ;
+ pattern_6[0][1] = 0xd243a62c ;
+ pattern_6[0][2] = 0xf8774a0b ;
+ pattern_6[0][3] = 0x63d214e5 ;
+ pattern_6[0][4] = 0x3f4366d5 ;
+ pattern_6[0][5] = 0x239672c0 ;
+ pattern_6[0][6] = 0x47ba7533 ;
+ pattern_6[0][7] = 0xcae4cd7f ;
+ pattern_6[1][0] = 0xaecc3f49 ;
+ pattern_6[1][1] = 0xd243a62c ;
+ pattern_6[1][2] = 0xf8774a0b ;
+ pattern_6[1][3] = 0x63d214e5 ;
+ pattern_6[1][4] = 0x3f4966d5 ;
+ pattern_6[1][5] = 0x239672c0 ;
+ pattern_6[1][6] = 0x47ba7533 ;
+ pattern_6[1][7] = 0xcae4cd7f ;
+ pattern_6[2][0] = 0xaed83f49 ;
+ pattern_6[2][1] = 0xd243a62c ;
+ pattern_6[2][2] = 0xf8774a0b ;
+ pattern_6[2][3] = 0x63d214e5 ;
+ pattern_6[2][4] = 0x3f6166d5 ;
+ pattern_6[2][5] = 0x239672c0 ;
+ pattern_6[2][6] = 0x47ba7533 ;
+ pattern_6[2][7] = 0xcae4cd7f ;
+ pattern_6[3][0] = 0xae883f49 ;
+ pattern_6[3][1] = 0xd243a62c ;
+ pattern_6[3][2] = 0xf8774a0b ;
+ pattern_6[3][3] = 0x63d214e5 ;
+ pattern_6[3][4] = 0x3fc166d5 ;
+ pattern_6[3][5] = 0x239672c0 ;
+ pattern_6[3][6] = 0x47ba7533 ;
+ pattern_6[3][7] = 0xcae4cd7f ;
+ */
+ //*/
+
+ char *endp;
+ unsigned int loop = 1;
+ unsigned int lflag = 0;
+ unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int test_size = DDR_TEST_SIZE;
+ unsigned int test_addr;
+
+ error_outof_count_flag =0;
+ error_count =0;
+
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ if (argc == 1)
+ goto usage;
+ if (argc>1)
+ {
+ if (strcmp(argv[1], "l") == 0) {
+ lflag = 1;
+ }
+
+ else{
+ loop = simple_strtoull_ddr(argv[1], &endp, 10);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+ }
+
+ // printf("\nLINE== 0x%08x\n", __LINE__);
+ if (argc ==1) {
+ // start_addr = simple_strtoull_ddr(argv[2], &endp, 16);
+ // if (*argv[2] == 0 || *endp != 0)
+ start_addr = DDR_TEST_START_ADDR;
+ loop = 1;
+ }
+ }
+
+ if (argc >= 2) {
+ loop = simple_strtoull_ddr(argv[1], &endp, 16);
+ if (*argv[1] == 0 || *endp != 0)
+ loop = 1;
+
+ }
+ unsigned int pattern_flag1=1;
+ unsigned int pattern_flag2=1;
+ unsigned int pattern_flag3=1;
+ pattern_flag1 = 1;
+ pattern_flag2=1;
+ pattern_flag3 = 1;
+
+
+ if (argc >= 3 ) {
+ if ( (strcmp(argv[2], "s") == 0))
+ {
+ pattern_flag1 = 1;
+ pattern_flag2=0;
+ pattern_flag3 = 0;
+ }
+ else if ((strcmp(argv[2], "c") == 0))
+ {
+ pattern_flag1 = 0;
+ pattern_flag2=1;
+ pattern_flag3 = 0;
+ }
+ else if ( (strcmp(argv[2], "d") == 0))
+ {
+ pattern_flag1 = 0;
+ pattern_flag2=0;
+ pattern_flag3 = 1;
+ }
+ }
+
+ // if(test_size<0x20)
+ start_addr=0x10000000;
+ test_size = 0x20;
+ unsigned int temp_i=0;
+ unsigned int temp_k=0;
+ unsigned int pattern_o[8];
+ unsigned int pattern_d[8];
+ //unsigned int i=0;
+
+ printf("\nloop should >2 and now loop== 0x%08x\n", loop);
+ //DDR_TEST_START:
+
+ ///*
+
+ error_count=0;
+ do {
+ if (lflag)
+ loop = 888;
+ if (loop%2)
+ {
+ start_addr=0x10000000;
+ test_size = 0x20;
+ for ((i=0);(i<8);(i++))
+ {
+ des[i]= a_des[i];
+ }
+ }
+ else
+ {
+ start_addr=0x10000400;
+ test_size = 0x20;
+ for ((i=0);(i<8);(i++))
+ {
+ des[i]= b_des[i];
+ }
+ }
+ //if(old_pattern_flag==1)
+ {
+
+ printf("\nStart writing at 0x%08x - 0x%08x...\n", start_addr, start_addr + test_size);
+
+ /*
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+ flush_dcache_range(start_addr,start_addr + test_size);
+
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ if (pattern_o[temp_i] != pattern_5[temp_k][temp_i])
+ {error_count++;
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ */
+ if (pattern_flag1 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ // if(pattern_o[temp_i]!=pattern_4[temp_k][temp_i])
+ if ((pattern_o[temp_i]) != (des_pattern(temp_i,1,temp_k,temp_i)))
+ {error_count++;
+ // printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_4[temp_k][temp_i],pattern_1[temp_k][temp_i]);
+ printf("p4Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,1,temp_k,temp_i),pattern_1[temp_k][temp_i]);
+ }
+
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,1,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_1[temp_k][temp_i]);
+ // printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_4[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ // printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_4[temp_k][temp_i]),pattern_d[temp_i]);
+ printf("p4 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_pattern(temp_i,1,temp_k,temp_i)),pattern_d[temp_i]);
+ }
+
+ }
+ }
+ }
+ }
+ if (pattern_flag2 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ // if(pattern_o[temp_i]!=pattern_5[temp_k][temp_i])
+ if ((pattern_o[temp_i]) != (des_pattern(temp_i,2,temp_k,temp_i)))
+ {error_count++;
+ // printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_5[temp_k][temp_i],pattern_2[temp_k][temp_i]);
+ printf("p5Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,2,temp_k,temp_i),pattern_2[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,2,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_2[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ //printf("\n0x%08x",pattern_5[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ // printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_5[temp_k][temp_i]),pattern_d[temp_i]);
+ printf("p5 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_inv_pattern(temp_i,2,temp_k,temp_i)),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+
+ }
+
+ if (pattern_flag3 == 1) {
+ for ((temp_k=0);(temp_k<4);(temp_k++)) {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ //if(pattern_o[temp_i]!=pattern_6[temp_k][temp_i])
+ if ((pattern_o[temp_i]) != (des_pattern(temp_i,3,temp_k,temp_i)))
+ {error_count++;
+ // printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), pattern_6[temp_k][temp_i],pattern_3[temp_k][temp_i]);
+ printf("p6Error data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), des_pattern(temp_i,3,temp_k,temp_i),pattern_3[temp_k][temp_i]);
+ }
+ }
+ }
+ }
+ for ((temp_k=0);(temp_k<4);(temp_k++))
+ {
+ {
+ ddr_udelay(10000);
+ for ((temp_i=0);(temp_i<8);(temp_i++))
+ {
+ test_addr=start_addr+(temp_i<<2);
+ *(volatile uint32_t *)(int_convter_p(test_addr))=des_inv_pattern(temp_i,3,temp_k,temp_i);//des[temp_i]^pattern_2[temp_k][temp_i];
+ // #define des_pattern(a,b,c,d) des[a]^pattern_##b[c][d]
+ //des[temp_i]^pattern_2[temp_k][temp_i]
+ }
+ // _clean_dcache_addr(0x10000000);
+#ifdef DDR_PREFETCH_CACHE
+ flush_dcache_range(start_addr,start_addr + test_size);
+#endif
+ for ((temp_i=0);(temp_i<8);(temp_i++)) {
+ test_addr=start_addr+(temp_i<<2);
+ pattern_o[temp_i]=*(volatile uint32_t *)(int_convter_p(test_addr));
+ // printf("\n test_addr pattern_o pattern_d 0x%08x - 0x%08x - 0x%08x", test_addr,pattern_o[temp_i], pattern_3[temp_k][temp_i]);
+ //printf("\n0x%08x",(pattern_o[temp_i])^(des[temp_i]));
+ // printf("\n0x%08x",pattern_6[temp_k][temp_i]);
+ pattern_d[temp_i]=des_xor_pattern((des[temp_i]),(pattern_o[temp_i]));
+ if ((des_xor_pattern((des[temp_i]),(pattern_o[temp_i]))) != pattern_d[temp_i])
+ {error_count++;
+ // printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(pattern_6[temp_k][temp_i]),pattern_d[temp_i]);
+ printf("p6 invError data [0x%08x] at offset 0x%08x[0x%08x]-D0x%08x\n",pattern_o[temp_i], p_convter_int(test_addr), ~(des_inv_pattern(temp_i,3,temp_k,temp_i)),pattern_d[temp_i]);
+ }
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ printf("\Error count==0x%08x", error_count);
+ printf("\n \n");
+ }while(--loop);
+ //*/
+
+ printf("\rEnd ddr test. \n");
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+}
+
+
+U_BOOT_CMD(
+ ddrtest_gxtvbb_crosstalk, 5, 1, do_ddr_gxtvbb_crosstalk,
+ "DDR test function",
+ "ddrtest [LOOP] [ADDR].Default address is 0x10000000\n"
+);
+
+#if 1
+int do_ddrtest_find_gate_wind(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Tune ddr dqs function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+ // /*
+ // #define DATX8_DQ_LCD_BDL_REG_WIDTH 12
+
+#define DATX8_DQ_LANE_WIDTH 4
+#define CHANNEL_CHANNEL_WIDTH 2
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+
+#define DATX8_DQ_LANE_LANE00 0
+#define DATX8_DQ_LANE_LANE01 1
+#define DATX8_DQ_LANE_LANE02 2
+#define DATX8_DQ_LANE_LANE03 3
+
+#define DATX8_DQ_BDLR0 0
+#define DATX8_DQ_BDLR1 1
+#define DATX8_DQ_BDLR2 2
+#define DATX8_DQ_BDLR3 3
+#define DATX8_DQ_BDLR4 4
+#define DATX8_DQ_BDLR5 5
+#define DATX8_DQ_BDLR6 6
+#define DATX8_DQ_DXNLCDLR0 7
+#define DATX8_DQ_DXNLCDLR1 8
+#define DATX8_DQ_DXNLCDLR2 9
+#define DATX8_DQ_DXNMDLR 10
+#define DATX8_DQ_DXNGTR 11
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ // #define DQ_LCD_BDL_REG_NUM_PER_CHANNEL 5//DATX8_DQ_LCD_BDL_REG_WIDTH*DATX8_DQ_LANE_WIDTH
+ // #define DQ_LCD_BDL_REG_NUM DQ_LCD_BDL_REG_NUM_PER_CHANNEL*CHANNEL_CHANNEL_WIDTH
+ //*/
+
+
+ // unsigned int dq_lcd_bdl_reg_org[DQ_LCD_BDL_REG_NUM];
+ // unsigned int dq_lcd_bdl_reg_left[DQ_LCD_BDL_REG_NUM];
+ // unsigned int dq_lcd_bdl_reg_right[DQ_LCD_BDL_REG_NUM];
+ // unsigned int dq_lcd_bdl_reg_index[DQ_LCD_BDL_REG_NUM];
+
+ // unsigned int dq_lcd_bdl_reg_left_min[DQ_LCD_BDL_REG_NUM];
+ // unsigned int dq_lcd_bdl_reg_right_min[DQ_LCD_BDL_REG_NUM];
+
+ unsigned int dq_lcd_bdl_temp_reg_value;
+ // unsigned int dq_lcd_bdl_temp_reg_value_min;
+ // unsigned int dq_lcd_bdl_temp_reg_value_max;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsnd;
+ // unsigned int dq_lcd_bdl_temp_reg_lef_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_rig_min_value;
+ // unsigned int dq_lcd_bdl_temp_reg_value_dqs;
+ // unsigned int dq_lcd_bdl_temp_reg_value_wdqd;
+ // unsigned int dq_lcd_bdl_temp_reg_value_rdqsd;
+
+ // unsigned int dq_lcd_bdl_temp_reg_lef;
+ // unsigned int dq_lcd_bdl_temp_reg_rig;
+ // unsigned int dq_lcd_bdl_temp_reg_center;
+ // unsigned int dq_lcd_bdl_temp_reg_windows;
+ // unsigned int dq_lcd_bdl_temp_reg_center_min;
+ // unsigned int dq_lcd_bdl_temp_reg_windows_min;
+
+ unsigned int dqgtr_org[4],dqlcdlr2_org[4],dqgtr_l[4],dqlcdlr2_l[4],dqgtr_r[4],dqlcdlr2_r[4],dqmdlr[4];
+ unsigned int dqgtr_temp;
+ unsigned int dqlcdlr2_temp;
+ unsigned int dqqsgate_org[4],dqqsgate_l[4], dqqsgate_r[4];
+ unsigned int ddr_gate_up_down=0;
+ unsigned int ddr_gate_init_lane=0;
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+
+
+ if (argc >5) {
+ ddr_gate_up_down = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_gate_up_down = 0;
+ }
+ if ((strcmp(argv[5], "l") == 0) || (strcmp(argv[5], "L") == 0))
+ {
+ ddr_gate_up_down = 00000;
+ }
+ }
+ if (argc >6) {
+ ddr_gate_init_lane = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_gate_init_lane = 0;
+ }
+ if ((strcmp(argv[6], "l") == 0) || (strcmp(argv[6], "L") == 0))
+ {
+ ddr_gate_init_lane = 00000;
+ }
+ }
+
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\nddr_gate_up_down== 0x%08x\n", ddr_gate_up_down);
+ printf("\nddr_gate_init_lane== 0x%08x\n", ddr_gate_init_lane);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
+ }
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj;
+ }
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj;
+ } else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj;
+ }
+ }
+ }
+ }////save and print org training dqs value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ printf("\ntest lane==0x%08x\n ",temp_count_i);
+ if (ddr_gate_init_lane)
+ {
+ temp_count_i=ddr_gate_init_lane;
+ printf("\ntest lane change==0x%08x\n ",temp_count_i);
+ }
+
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
+ }
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj;
+ }
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj;
+ }
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj;
+ }
+
+ // for((temp_count_k=0);(temp_count_k<2);(temp_count_k++))
+ {
+ //if(temp_count_k==0)
+ {
+ dqlcdlr2_org[temp_count_i]=readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0);
+ dqgtr_org[temp_count_i]=readl(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0);
+ dqmdlr[temp_count_i]=readl(reg_add+DDR0_PUB_ACMDLR-DDR0_PUB_DX0LCDLR0);
+ dq_lcd_bdl_temp_reg_value=(((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2*((dqgtr_org[temp_count_i])&(DXNGTR_MAX))+(((dqlcdlr2_org[temp_count_i]))&ACLCDLR_MAX);
+ dqqsgate_org[temp_count_i]=dq_lcd_bdl_temp_reg_value;
+
+ printf("\ngate org==0x%08x 0x%08x 0x%08x 0x%08x\n ",dqqsgate_org[temp_count_i],dqgtr_org[temp_count_i],dqlcdlr2_org[temp_count_i], dqmdlr[temp_count_i]);
+
+ if (ddr_gate_up_down == 0)
+ {
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value--;
+ printf("\ngate left temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ dqgtr_temp=dq_lcd_bdl_temp_reg_value/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ dqlcdlr2_temp=dq_lcd_bdl_temp_reg_value-dqgtr_temp*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+
+ writel((dqlcdlr2_temp),(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ writel((((readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0)))&0xfffff000)|(dqgtr_temp)),(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
+ printf("\n (reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0) 0x%08x gtr==0x%08x\n ",(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0),(readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0))));
+ printf("\nlcdlr2==0x%08x\n ",readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ printf("\ndqgtr_temp==0x%08x\n ",dqgtr_temp);
+ printf("\ngatedqlcdlr2_temp==0x%08x\n ",dqlcdlr2_temp);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ printf("\ngateleft edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\ngate left edge detect \n");
+ printf("\ngate left edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ //dq_lcd_bdl_temp_reg_value_min=dq_lcd_bdl_temp_reg_value;
+ dqqsgate_l[temp_count_i]=dq_lcd_bdl_temp_reg_value;
+ writel(dqlcdlr2_org[temp_count_i],(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ writel( dqgtr_org[temp_count_i],(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
+
+ dq_lcd_bdl_temp_reg_value=(((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2*((dqgtr_org[temp_count_i])&DXNGTR_MAX)+(((dqlcdlr2_org[temp_count_i]))&ACLCDLR_MAX);
+ }
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ temp_test_error=0;
+ dq_lcd_bdl_temp_reg_value++;
+ printf("\ngate rig temp==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ dqgtr_temp=dq_lcd_bdl_temp_reg_value/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ dqlcdlr2_temp=dq_lcd_bdl_temp_reg_value-dqgtr_temp*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+
+ writel((dqlcdlr2_temp),(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ writel(((readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0)))&0xfffff000)|(dqgtr_temp),(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
+ printf("\n (reg_addDDR0_PUB_DX0GTR) 0x%08x gtr==0x%08x\n ",(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0),(readl((reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0))));
+ printf("\nlcdlr2==0x%08x\n ",readl(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ printf("\ndqgtr_temp==0x%08x\n ",dqgtr_temp);
+ printf("\ngatedqlcdlr2_temp==0x%08x\n ",dqlcdlr2_temp);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ printf("\ngaterig edge detect \n");
+ dq_lcd_bdl_temp_reg_value++;
+ break;
+ }
+ }
+ printf("\ngate rig edge detect \n");
+ printf("\ngate rig edge==0x%08x\n ",dq_lcd_bdl_temp_reg_value);
+ //dq_lcd_bdl_temp_reg_value_max=dq_lcd_bdl_temp_reg_value;
+ dqqsgate_r[temp_count_i]=dq_lcd_bdl_temp_reg_value;
+ writel(dqlcdlr2_org[temp_count_i],(reg_add+DDR0_PUB_DX0LCDLR2-DDR0_PUB_DX0LCDLR0));
+ writel( dqgtr_org[temp_count_i],(reg_add+DDR0_PUB_DX0GTR-DDR0_PUB_DX0LCDLR0));
+
+
+
+
+
+
+ }
+
+
+
+ }
+ }
+
+ }
+ }
+
+ ////tune and save training dqs value
+
+
+
+
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj;
+
+
+
+
+ printf("\n ddrtest size ==0x%08x, test times==0x%08x,test_loop==0x%08x\n",ddr_test_size,(test_times+1),test_loop);
+ printf("\n add 0x00000000 reg== org lef rig center win lef_m rig_m min_c min_win \n");
+
+ for ((temp_count_i=0);(temp_count_i<DATX8_DQ_LANE_WIDTH);(temp_count_i++))
+ {
+ {
+
+ if (temp_count_i == DATX8_DQ_LANE_LANE00)
+ {
+ reg_add=DDR0_PUB_DX0LCDLR0+reg_base_adj+0*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE01)
+ {
+ reg_add=DDR0_PUB_DX1LCDLR0+reg_base_adj+0*4;}
+
+ else if(temp_count_i==DATX8_DQ_LANE_LANE02)
+ {
+ reg_add=DDR0_PUB_DX2LCDLR0+reg_base_adj+0*4;}
+ else if(temp_count_i==DATX8_DQ_LANE_LANE03)
+ {
+ reg_add=DDR0_PUB_DX3LCDLR0+reg_base_adj+0*4;}
+ }
+
+ //unsigned int dqgtr_org[4],dqlcdlr2_org[4],dqgtr_l[4],dqlcdlr2_l[4],dqgtr_r[4],dqlcdlr2_r[4],dqmdlr[4];
+ // unsigned int dqgtr_temp;
+ // unsigned int dqlcdlr2_temp;
+ // unsigned int dqqsgate_l[4], dqqsgate_r[4];
+ (dqgtr_l[temp_count_i])=(dqqsgate_l[temp_count_i])/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ (dqlcdlr2_l[temp_count_i])=(dqqsgate_l[temp_count_i])-(dqgtr_l[temp_count_i])*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ (dqgtr_r[temp_count_i])=(dqqsgate_r[temp_count_i])/((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ (dqlcdlr2_r[temp_count_i])=(dqqsgate_r[temp_count_i])-(dqgtr_r[temp_count_i])*((((dqmdlr[temp_count_i]))&ACLCDLR_MAX)*2);
+ printf("\n add reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+ (dqqsgate_org[temp_count_i]),
+ (dqqsgate_l[temp_count_i]),
+ (dqqsgate_r[temp_count_i]),
+ (dqgtr_org[temp_count_i]),
+ (dqlcdlr2_org[temp_count_i]),
+ (dqgtr_l[temp_count_i]),
+ (dqgtr_r[temp_count_i]),
+ (dqlcdlr2_l[temp_count_i]),
+ (dqlcdlr2_r[temp_count_i])
+ );
+
+
+ }
+
+
+
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+
+U_BOOT_CMD(
+ ddrtest_gate, 7, 1, do_ddrtest_find_gate_wind,
+ "DDR test function should dcache off ddrtest_gate a 0 0x80000 1 0 3",
+ "ddrtest_gate [LOOP] [ADDR].Default address is 0x10000000\n"
+);
+
+
+#endif
+
+///*
+int do_ddr_test_ac_windows_bdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr ac bdlr windows function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+ static unsigned int soft_ca_training_seed=0;
+ static unsigned int soft_ca_training_step=0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ac_mdlr_a_org=0;
+ unsigned int ac_mdlr_b_org=0;
+
+ unsigned int ac_lcdlr_a_org=0;
+ unsigned int ac_bdlr0_a_org=0;
+ unsigned int ac_lcdlr_b_org=0;
+ unsigned int ac_bdlr0_b_org=0;
+ unsigned int ac_lcdlr_a_rig=0;
+ unsigned int ac_bdlr0_a_rig=0;
+ unsigned int ac_lcdlr_b_rig=0;
+ unsigned int ac_bdlr0_b_rig=0;
+ unsigned int ac_lcdlr_a_lef=0;
+ unsigned int ac_bdlr0_a_lef=0;
+ unsigned int ac_lcdlr_b_lef=0;
+ unsigned int ac_bdlr0_b_lef=0;
+
+ unsigned int ac_lcdlr_a_rig_min=0;
+ unsigned int ac_bdlr0_a_rig_min=0;
+ unsigned int ac_lcdlr_b_rig_min=0;
+ unsigned int ac_bdlr0_b_rig_min=0;
+ unsigned int ac_lcdlr_a_lef_min=0;
+ unsigned int ac_bdlr0_a_lef_min=0;
+ unsigned int ac_lcdlr_b_lef_min=0;
+ unsigned int ac_bdlr0_b_lef_min=0;
+ // unsigned int ac_lcdlr_temp;
+ // unsigned int ac_bdlr0_temp=0;
+
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ unsigned int ac_bdlr_lef[10];
+ unsigned int ac_bdlr_rig[10];
+ unsigned int ac_bdlr_temp_value;
+ unsigned int ac_bdlr_reg_seed_value;
+ unsigned int ac_bdlr_temp_reg_value;
+ // unsigned int temp_test_error;
+ unsigned int temp_i=0;
+ unsigned int temp_j=0;
+ //unsigned int reg_add=0;
+ // static unsigned int soft_ca_training_enabled=1;
+
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+
+ if (argc >5) {
+ soft_ca_training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ soft_ca_training_seed = 0x1f;
+ }
+
+
+ }
+ if (argc >6) {
+ soft_ca_training_step = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ soft_ca_training_step = 0;
+ }
+
+
+ }
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ printf("\nsoft_ca_training_seed== 0x%08x\n", soft_ca_training_seed);
+ printf("\nsoft_ca_training_step== 0x%08x\n", soft_ca_training_step);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+
+
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+
+ }
+ }
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel 0x%08x\n",reg_add);
+ ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
+ ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
+ ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
+
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+ }
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+
+ ac_mdlr_b_org=readl(reg_add);
+ ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
+ ac_bdlr0_b_org=readl(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR);
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+ }
+
+
+ }
+
+ }
+
+ }////save and print org training value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel AC\n");
+ }
+ else
+ {
+ printf("\ntest B channel AC\n");
+ }
+
+
+#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+ //wr_reg(DDR0_PUB_ACBDLR3, 0x0808); //cs0 cs1
+ //wr_reg(DDR0_PUB_ACBDLR0, 0x1f); //ck0
+ // wr_reg(DDR0_PUB_ACBDLR4, 0x0808); //odt0 odt1
+ //wr_reg(DDR0_PUB_ACBDLR5, 0x0808); //cke0 cke1
+
+
+ //wr_reg(DDR0_PUB_ACBDLR1, 0x181818); //ras cas we
+ //wr_reg(DDR0_PUB_ACBDLR2, 0x181818); //ba0 ba1 ba2
+ //wr_reg(DDR0_PUB_ACBDLR6, 0x12121212); //a0 a1 a2 a3
+ //wr_reg(DDR0_PUB_ACBDLR7, 0x0d0d0d0d); //a4 a5 a6 a7
+ //wr_reg(DDR0_PUB_ACBDLR8, 0x10101010); //a8 a9 a10 a11
+ //wr_reg(DDR0_PUB_ACBDLR9, 0x18181818); //a12 a13 a14 a15
+ reg_add=DDR0_PUB_ACBDLR0;
+ ac_bdlr_reg_seed_value=(soft_ca_training_seed|(soft_ca_training_seed<<8)|(soft_ca_training_seed<<16)|(soft_ca_training_seed<<24));
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+ //wr_reg((DDR0_PUB_ACBDLR0+temp_i*4),
+ //ac_bdlr_reg_seed_value); //cs0 cs1
+ //reg_add=reg_add+temp_i*4;
+
+ //reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ wrr_reg((reg_add),
+ ac_bdlr_reg_seed_value); //cs0 cs1
+ ac_bdlr_lef[temp_i]=ac_bdlr_reg_seed_value;
+ ac_bdlr_rig[temp_i]=ac_bdlr_reg_seed_value;
+ }
+
+ printf("\nbdl soft_ca_training_step==0x%08x\n ",soft_ca_training_step);
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+ //ac_bdlr_temp_value=rdr_reg((unsigned int )reg_add);
+ if (temp_i == 1)
+ {
+ //temp_i=3;
+ }
+
+ for (( temp_j=0);(temp_j<4);( temp_j++))
+ {
+ if (soft_ca_training_step)
+ {
+ temp_i=(soft_ca_training_step>>2);
+ temp_j=soft_ca_training_step-((soft_ca_training_step>>2)<<2);
+ soft_ca_training_step=0;
+ }
+ if ((temp_i*4+temp_j) == 1)
+ {
+ temp_i=1;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 7)
+ {
+ temp_i=2;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 14)
+ {
+ temp_i=4;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 18)
+ {
+ temp_i=5;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 22)
+ {
+ temp_i=6;
+ temp_j=0;
+ }
+ //printf("\nbdl temp_i==0x%08x\n ",temp_i);
+ printf("\nbdl temp_ij==0x%08x\n ",(temp_i*4+temp_j));
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ ac_bdlr_temp_reg_value=rdr_reg((unsigned int )reg_add);
+ ac_bdlr_temp_value=((ac_bdlr_temp_reg_value>>(temp_j<<3))&ACBDLR_MAX);
+ while (ac_bdlr_temp_value>0)
+ {
+ temp_test_error=0;
+ ac_bdlr_temp_value--;
+
+ printf("\nbdl temp_ij==0x%08x lef temp==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
+
+ ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_reg_seed_value)|((ac_bdlr_temp_value)<<(temp_j<<3)));
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ wrr_reg((unsigned int )reg_add,
+ ac_bdlr_temp_reg_value);
+ printf("\nbdl reg_add 0x%08x== 0x%08x\n ",reg_add,ac_bdlr_temp_reg_value);
+
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ printf("\nbdl left edge detect \n");
+ ac_bdlr_temp_value++;
+ break;
+ }
+ }
+
+ printf("\nbdl left edge detect \n");
+ printf("\n\nbdl temp_ij==0x%08x bdl left edge==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ wrr_reg((unsigned int )reg_add,
+ ac_bdlr_reg_seed_value);
+
+ ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_lef[temp_i])|((ac_bdlr_temp_value)<<(temp_j<<3)));
+ ac_bdlr_lef[temp_i]=ac_bdlr_temp_reg_value;
+
+ ac_bdlr_temp_value=((ac_bdlr_reg_seed_value>>(temp_j<<3))&ACBDLR_MAX);
+ while (ac_bdlr_temp_value<ACBDLR_MAX)
+ {
+ temp_test_error=0;
+ ac_bdlr_temp_value++;
+ printf("\ntemp_ij==0x%08x rig temp==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
+
+ ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_reg_seed_value)|((ac_bdlr_temp_value)<<(temp_j<<3)));
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ wrr_reg((unsigned int )reg_add,
+ ac_bdlr_temp_reg_value);
+ printf("\nbdl reg_add 0x%08x== 0x%08x\n ",reg_add,ac_bdlr_temp_reg_value);
+#ifdef DDR_LCDLR_CK_USE_FAST_PATTERN
+ temp_test_error=ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+#else
+ temp_test_error= ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ temp_test_error= temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+#endif
+ if (temp_test_error)
+ {
+ printf("\nbdl rig edge detect \n");
+ ac_bdlr_temp_value--;
+ break;
+ }
+ }
+
+
+
+ printf("\nbdl rig edge detect \n");
+ //printf("\n\nbdl rig edge==0x%08x\n ",ac_bdlr_temp_value);
+ printf("\n\nbdl temp_ij==0x%08x bdl righ edge==0x%08x\n ",(temp_i*4+temp_j),ac_bdlr_temp_value);
+ reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ wrr_reg((unsigned int )reg_add,
+ ac_bdlr_reg_seed_value);
+
+ ac_bdlr_temp_reg_value=(((~(0xff<<(temp_j<<3)))&ac_bdlr_rig[temp_i])|((ac_bdlr_temp_value)<<(temp_j<<3)));
+ ac_bdlr_rig[temp_i]=ac_bdlr_temp_reg_value;
+ }
+ }
+
+ printf("\nbdl lef edge==bdlr0 bdlr1 bdlr2 bdlr3 bdlr4 bdlr5 bdlr6 bdlr7 bdlr8 bdlr9 \n ");
+ printf("\nbdl lef edge==\n");
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+
+ printf("0x%08x\n ",ac_bdlr_lef[temp_i]);
+
+ }
+
+ printf("\n ");
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+ printf("0x%08x\n ",ac_bdlr_rig[temp_i]);
+ }
+ printf("\nbdl rig edge===========\n");
+ printf("\n===================\n");
+
+ printf("\nbdl lef edge==\n");
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+ for (( temp_j=0);(temp_j<4);( temp_j++))
+ {
+ if ((temp_i*4+temp_j) == 1)
+ {
+ temp_i=1;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 7)
+ {
+ temp_i=2;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 14)
+ {
+ temp_i=4;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 18)
+ {
+ temp_i=5;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 22)
+ {
+ temp_i=6;
+ temp_j=0;
+ }
+ ac_bdlr_temp_reg_value=((((0xff<<(temp_j<<3)))&ac_bdlr_lef[temp_i])>>(temp_j<<3));
+ printf("\ntempi_j0x%08x==0x%08x",((temp_i<<2)+temp_j),ac_bdlr_temp_reg_value);
+ }
+ }
+
+ printf("\n ");
+ printf("\nbdl rig edge==\n");
+ for (( temp_i=0);(temp_i<10);( temp_i++))
+ {
+ for (( temp_j=0);(temp_j<4);( temp_j++))
+ {
+ if ((temp_i*4+temp_j) == 1)
+ {
+ temp_i=1;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 7)
+ {
+ temp_i=2;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 14)
+ {
+ temp_i=4;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 18)
+ {
+ temp_i=5;
+ temp_j=0;
+ }
+ if ((temp_i*4+temp_j) == 22)
+ {
+ temp_i=6;
+ temp_j=0;
+ }
+ ac_bdlr_temp_reg_value=((((0xff<<(temp_j<<3)))&ac_bdlr_rig[temp_i])>>(temp_j<<3));
+ printf("\ntempi_j0x%08x==0x%08x",((temp_i<<2)+temp_j),ac_bdlr_temp_reg_value);
+ }
+ }
+ }
+
+ ////tune and save training dqs value
+ ////calculate and print dqs value
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_a_lef>ac_lcdlr_a_lef_min)
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+
+ if (ac_lcdlr_a_rig<ac_lcdlr_a_rig_min)
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+
+ if (ac_bdlr0_a_lef>ac_bdlr0_a_lef_min)
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+
+ if (ac_bdlr0_a_rig<ac_bdlr0_a_rig_min)
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ else
+ {
+ ac_lcdlr_a_lef_min=ac_lcdlr_a_lef;
+ ac_lcdlr_a_rig_min=ac_lcdlr_a_rig;
+ ac_bdlr0_a_lef_min=ac_bdlr0_a_lef;
+ ac_bdlr0_a_rig_min=ac_bdlr0_a_rig;
+ }
+ printf("\ntest A channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org,ac_lcdlr_a_lef,ac_lcdlr_a_rig,ac_lcdlr_a_lef_min,ac_lcdlr_a_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org,ac_bdlr0_a_lef,ac_bdlr0_a_rig,ac_bdlr0_a_lef_min,ac_bdlr0_a_rig_min);
+ }
+
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+ if (test_times)
+ {
+ if (ac_lcdlr_b_lef>ac_lcdlr_b_lef_min)
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+
+ if (ac_lcdlr_b_rig<ac_lcdlr_b_rig_min)
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+
+ if (ac_bdlr0_b_lef>ac_bdlr0_b_lef_min)
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+
+ if (ac_bdlr0_b_rig<ac_bdlr0_b_rig_min)
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ else
+ {
+ ac_lcdlr_b_lef_min=ac_lcdlr_b_lef;
+ ac_lcdlr_b_rig_min=ac_lcdlr_b_rig;
+ ac_bdlr0_b_lef_min=ac_bdlr0_b_lef;
+ ac_bdlr0_b_rig_min=ac_bdlr0_b_rig;
+ }
+ printf("\ntest B channel AC result\n");
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+
+ printf("\n ac_acmdlr_org 0x%08x reg== 0x%08x lcdlr_lef lcdlr_rig lcdlr_lmin lcdlr_rmin\n",(reg_add),ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org,ac_lcdlr_b_lef,ac_lcdlr_b_rig,ac_lcdlr_b_lef_min,ac_lcdlr_b_rig_min);
+ printf("\n ac_bdlr0_a_org 0x%08x reg== 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org,ac_bdlr0_b_lef,ac_bdlr0_b_rig,ac_bdlr0_b_lef_min,ac_bdlr0_b_rig_min);
+ }
+ }
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+
+
+U_BOOT_CMD(
+ ddr_tune_ddr_ac_bdlr, 7, 1, do_ddr_test_ac_windows_bdlr,
+ "DDR tune ac bdl function",
+ "ddr_tune_ddr_ac_bdlr a 0 0x8000000 1 seed step or ddr_tune_ddr_ac_bdlr b 0 0x800000 1 seed step or ddr_tune_ddr_ac_acbdlr_ck a b 0x80000 l\n dcache off ? \n"
+);
+
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+int do_ddr_test_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr vref function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+ static unsigned int training_seed=0;
+ static unsigned int training_step=0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ac_mdlr_a_org=0;
+ unsigned int ac_mdlr_b_org=0;
+
+ unsigned int ac_lcdlr_a_org=0;
+ unsigned int ac_bdlr0_a_org=0;
+ unsigned int ac_lcdlr_b_org=0;
+ unsigned int ac_bdlr0_b_org=0;
+ // unsigned int ac_lcdlr_a_rig=0;
+ // unsigned int ac_bdlr0_a_rig=0;
+ // unsigned int ac_lcdlr_b_rig=0;
+ // unsigned int ac_bdlr0_b_rig=0;
+ // unsigned int ac_lcdlr_a_lef=0;
+ // unsigned int ac_bdlr0_a_lef=0;
+ // unsigned int ac_lcdlr_b_lef=0;
+ // unsigned int ac_bdlr0_b_lef=0;
+
+ // unsigned int ac_lcdlr_a_rig_min=0;
+ // unsigned int ac_bdlr0_a_rig_min=0;
+ // unsigned int ac_lcdlr_b_rig_min=0;
+ // unsigned int ac_bdlr0_b_rig_min=0;
+ // unsigned int ac_lcdlr_a_lef_min=0;
+ // unsigned int ac_bdlr0_a_lef_min=0;
+ // unsigned int ac_lcdlr_b_lef_min=0;
+ // unsigned int ac_bdlr0_b_lef_min=0;
+ // unsigned int ac_lcdlr_temp;
+ // unsigned int ac_bdlr0_temp=0;
+
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ // unsigned int ac_bdlr_lef[10];
+ // unsigned int ac_bdlr_rig[10];
+ unsigned int iovref_temp_value;
+ unsigned int iovref_temp_reg_value;
+ unsigned int reg_seed_value;
+ // unsigned int temp_reg_value;
+ unsigned int iovref_lef;
+ unsigned int iovref_rig;
+ // unsigned int temp_test_error;
+ // unsigned int temp_i=0;
+ // unsigned int temp_j=0;
+ //unsigned int reg_add=0;
+ // static unsigned int training_enabled=1;
+
+ // iovref_lef=0x49;
+ // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {
+ channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_loop = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_loop = 1;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_loop = 100000;
+ }
+ }
+ training_seed = 0x49;
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed = 0x49;
+ }
+
+
+ }
+
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*7)+440)*3)/2)+1);
+
+ training_step = 0;
+ if (argc >6) {
+ training_step = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ training_step = 0;
+ }
+ }
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_loop== 0x%08x\n", test_loop);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+ }
+ }
+
+ reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel 0x%08x\n",reg_add);
+ ac_mdlr_a_org=(unsigned int )(readl((unsigned int )reg_add));//readl(reg_add);//0xc8836000
+ ac_lcdlr_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR)));//readl(reg_add+4);
+ ac_bdlr0_a_org=(unsigned int )(readl((unsigned int )(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR)));//readl(reg_add+8);
+
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_a_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_a_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_a_org);
+ }
+ if (reg_base_adj == CHANNEL_B_REG_BASE)
+ {
+
+ ac_mdlr_b_org=readl(reg_add);
+ ac_lcdlr_b_org=readl(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR);
+ ac_bdlr0_b_org=readl(reg_add+8);
+ printf("\n ac_mdlr_org 0x%08x reg== 0x%08x\n",(reg_add), ac_mdlr_b_org);
+ printf("\n ac_lcdlr_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACLCDLR-DDR0_PUB_ACMDLR), ac_lcdlr_b_org);
+ printf("\n ac_bdlr0_org 0x%08x reg== 0x%08x\n",(reg_add+DDR0_PUB_ACBDLR0-DDR0_PUB_ACMDLR), ac_bdlr0_b_org);
+ }
+
+
+ }
+
+
+ }////save and print org training value
+
+
+ for (test_times=0;(test_times<test_loop);(test_times++))
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel AC\n");
+ }
+ else
+ {
+ printf("\ntest B channel AC\n");
+ }
+
+
+#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+ //wr_reg(DDR0_PUB_ACBDLR3, 0x0808); //cs0 cs1
+ //wr_reg(DDR0_PUB_ACBDLR0, 0x1f); //ck0
+ // wr_reg(DDR0_PUB_ACBDLR4, 0x0808); //odt0 odt1
+ //wr_reg(DDR0_PUB_ACBDLR5, 0x0808); //cke0 cke1
+
+
+ //wr_reg(DDR0_PUB_ACBDLR1, 0x181818); //ras cas we
+ //wr_reg(DDR0_PUB_ACBDLR2, 0x181818); //ba0 ba1 ba2
+ //wr_reg(DDR0_PUB_ACBDLR6, 0x12121212); //a0 a1 a2 a3
+ //wr_reg(DDR0_PUB_ACBDLR7, 0x0d0d0d0d); //a4 a5 a6 a7
+ //wr_reg(DDR0_PUB_ACBDLR8, 0x10101010); //a8 a9 a10 a11
+ //wr_reg(DDR0_PUB_ACBDLR9, 0x18181818); //a12 a13 a14 a15
+ reg_add=DDR0_PUB_IOVCR0;
+ reg_seed_value=(training_seed|(training_seed<<8)|(training_seed<<16)|(training_seed<<24));
+ //for(( temp_i=0);(temp_i<10);( temp_i++))
+ //wr_reg((DDR0_PUB_ACBDLR0+temp_i*4),
+ //ac_bdlr_reg_seed_value); //cs0 cs1
+ //reg_add=reg_add+temp_i*4;
+
+ //reg_add=DDR0_PUB_ACMDLR+reg_base_adj;
+ //reg_add=(DDR0_PUB_ACBDLR0+temp_i*4);
+ reg_add=reg_add+reg_base_adj;
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+ // iovref_lef=0x49;
+ if (iovref_temp_value)
+ {
+ printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_temp_value,(((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1);
+ }
+ else
+ {
+ printf("\nio vref power down ,use external resister \n ");
+ }
+
+ wrr_reg((reg_add),
+ reg_seed_value); //
+
+ wrr_reg((reg_add+4),
+ reg_seed_value); //
+ iovref_lef=training_seed;
+ iovref_rig=training_seed;
+
+ printf("\ntraining_step==0x%08x\n ",training_step);
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+ while (iovref_temp_value>0x40)
+ {
+ temp_test_error=0;
+ iovref_temp_value--;
+
+ printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
+
+ iovref_temp_reg_value=(iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)|(iovref_temp_value<<24));;
+ wrr_reg((reg_add),
+ iovref_temp_reg_value); //
+
+ wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
+ iovref_temp_reg_value); //
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ printf("\nvref down edge detect \n");
+ iovref_temp_value++;
+ break;
+ }
+ }
+
+ printf("\n down edge detect \n");
+ printf("\n\n iovref down edge==0x%08x\n ",iovref_temp_value);
+ iovref_lef=iovref_temp_value;
+
+ wrr_reg((reg_add),
+ reg_seed_value); //
+
+ wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
+ reg_seed_value); //
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+
+
+ while (iovref_temp_value<0x7f)
+ {
+ temp_test_error=0;
+ iovref_temp_value++;
+
+ printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
+
+ iovref_temp_reg_value=(iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)|(iovref_temp_value<<24));;
+ wrr_reg((reg_add),
+ iovref_temp_reg_value); //
+
+ wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
+ iovref_temp_reg_value); //
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ printf("\nvref up edge detect \n");
+ iovref_temp_value--;
+ break;
+ }
+ }
+
+ printf("\n up edge detect \n");
+ printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
+ iovref_rig=iovref_temp_value;
+
+ //reg_seed_value=0x49494949
+ wrr_reg((reg_add),
+ 0x49494949); //
+
+ wrr_reg((reg_add+DDR0_PUB_IOVCR1-DDR0_PUB_IOVCR0),
+ 0x49494949); //
+
+ printf("\n\n iovref down edge==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
+ printf("\n\n iovref up edge==0x%08x %08dmV\n",iovref_rig,(((((iovref_rig&0X3F)*7)+440)*3)/2)+1);
+ printf("\n\n iovref mid ==0x%08x %08dmV\n",
+ (iovref_lef+iovref_rig)/2,(((((((iovref_lef+iovref_rig)/2)&0X3F)*7)+440)*3)/2)+1);
+ if (iovref_lef == 0x40)
+ printf("\n\n iovref down edge reach reg limited\n");
+ }
+ }
+ }
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+U_BOOT_CMD(
+ ddr_tune_ddr_vref, 7, 1, do_ddr_test_vref,
+ "DDR tune vref function ddr_tune_ddr_vref a 0 0x8000000 1 48 1",
+ "ddr_tune_ddr_vref a 0 0x8000000 1 seed step \n dcache off ? \n"
+);
+
+
+int do_ddr4_test_phy_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ if(watchdog_time_s==0)
+ {
+ watchdog_time_s=50;
+ printf("test soc_vref re set watchdog_time_s==%d\n",watchdog_time_s);
+ }
+
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ // unsigned int start_addr=test_start_addr;
+ printf("\nEnter Test ddr4 phy vref function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+ int training_seed=0;
+ int training_step=0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_soc_dram=0;
+ // unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+ unsigned int dxnlcdlr3[4];
+ unsigned int dxnlcdlr4[4];
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+ // #define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
+#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
+#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
+#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
+#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
+#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
+#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
+#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ // unsigned int ac_bdlr_lef[10];
+ // unsigned int ac_bdlr_rig[10];
+ int iovref_temp_value;
+ int ddr_soc_iovref_org=0;
+ int iovref_temp_reg_value;
+ // unsigned int reg_seed_value;
+ // unsigned int temp_reg_value;
+ int iovref_org[4];
+ int iovref_lef[4];
+ int iovref_rig[4];
+ // unsigned int temp_test_error;
+ // unsigned int temp_i=0;
+ // unsigned int temp_j=0;
+ //unsigned int reg_add=0;
+ // static unsigned int training_enabled=1;
+
+ // iovref_lef=0x49;
+ // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
+ //#define DDR_TEST_ACLCDLR
+
+ char str_temp1[1024]="";
+ char str_temp2[1024]="";
+ char str[512]="";
+ unsigned int soc_iovref_test_ddr_clk=0;
+ sprintf(str_temp1,"ddr_soc_iovref_test_ddr_clk");
+ soc_iovref_test_ddr_clk=env_to_a_num(str_temp1);
+ if(soc_iovref_test_ddr_clk==0)
+ {
+ soc_iovref_test_ddr_clk=global_ddr_clk;
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_test_ddr_clk");
+ sprintf(str_temp2,"0x%08x",soc_iovref_test_ddr_clk);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ }
+ if(soc_iovref_test_ddr_clk!=global_ddr_clk)
+ {
+ printf("running ddr freq==%d,but test freq is %d,will reboot use d2pll \n",global_ddr_clk,soc_iovref_test_ddr_clk);
+ sprintf(str,"d2pll %d",soc_iovref_test_ddr_clk);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ unsigned int soc_iovref_test_step=0;
+ sprintf(str_temp1,"soc_iovref_test_step");
+ soc_iovref_test_step=env_to_a_num(str_temp1);
+ if(soc_iovref_test_step==0)
+ iovref_temp_value=0;
+ {
+ sprintf(str_temp1,"soc_iovref_test_step");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ unsigned int soc_iovref_lef=0;
+ unsigned int soc_iovref_rig=0;
+ //char *p_str=NULL;
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_soc_dram = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_soc_dram = 0;
+ }
+ if (test_soc_dram)
+ test_soc_dram = 1;
+
+ }
+ training_seed = 0;
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+ }
+
+ if (training_seed>0x3f)
+ training_seed=0x3f;
+
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,((((((training_seed&0X3F)*7)+440)*3)/2)+1)*12/15);
+
+ training_step = 0;
+ if (argc >6) {
+ training_step = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ training_step = 0;
+ }
+ }
+ int vref_all=1;
+ if (argc >7) {
+ vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ vref_all =0;//
+ }
+ }
+ vref_all =1;//
+ int vref_lcdlr_offset=0;
+ if (argc >8) {
+ vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ vref_lcdlr_offset =0;
+ }
+ }
+ int vref_set_test_step=0;
+ if (argc >9) {
+ vref_set_test_step = simple_strtoull_ddr(argv[9], &endp, 16);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ vref_set_test_step =0;
+ }
+ }
+
+ unsigned int soc_dram_hex_dec=0;
+ if (argc >10)
+ {
+ soc_dram_hex_dec = simple_strtoull_ddr(argv[10], &endp, 0);
+ if (*argv[10] == 0 || *endp != 0) {
+ soc_dram_hex_dec = 0;
+ }
+ }
+ if (soc_dram_hex_dec)
+ {
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+ printf("\ntraining_seed== 0x%08x\n", training_seed);
+
+ }
+ if (training_seed<45)
+ training_seed=45;
+ if (training_seed>88)
+ training_seed=88;
+ training_seed =(((training_seed*1000-44070)/698));
+
+
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,((((((training_seed&0X3F)*7)+440)*3)/2)+1)*12/15);
+ }
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_soc_dram== 0x%08x\n", test_soc_dram);
+ printf("\nvref_all== 0x%08x\n", vref_all);
+ printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
+ printf("\nsoc_dram_hex_dec== 0x%08x\n", soc_dram_hex_dec);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+ }////save and print org training value
+
+
+
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel data lane\n");
+ }
+ else
+ {
+ printf("\ntest B channel data lane\n");
+ }
+
+
+
+
+#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+ unsigned int dxnmdlr=0;
+ reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
+ dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
+ // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
+ wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
+ printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
+ printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
+ printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
+
+ printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
+ unsigned int temp_i=0;
+ unsigned int temp_i_max=4;
+ for (( temp_i=0);(temp_i<4);( temp_i++))
+ {
+ dxnlcdlr3[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))));
+ dxnlcdlr4[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))));
+ reg_add=DDR0_PUB_DX0GCR5+reg_base_adj+temp_i*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5);
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_org[temp_i]=iovref_temp_value;
+ iovref_temp_value=((iovref_temp_value)&0xff);
+ printf("\ndxnlcdlr3[%08x]==0x%08x,dxnlcdlr4[%08x]==0x%08x\n ",temp_i,dxnlcdlr3[temp_i],temp_i,dxnlcdlr4[temp_i]);
+ // iovref_lef=0x49;
+ if (iovref_temp_value)
+ {
+ printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",reg_add,
+ iovref_org[temp_i],iovref_temp_value,((((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1)*12/15);
+ }
+ else
+ {
+ printf("\nio vref power down ,use external resister \n ");
+ }
+
+ wrr_reg((reg_add),
+ iovref_org[temp_i]); //
+ iovref_lef[temp_i]=(iovref_org[temp_i])&0xff;
+ iovref_rig[temp_i]=(iovref_org[temp_i])&0xff;
+ if (training_seed)
+ {iovref_lef[temp_i]=training_seed;
+ iovref_rig[temp_i]=training_seed;
+
+ }
+ }
+
+ printf("\ntraining_step==0x%08x\n ",training_step);
+ if (vref_all)
+ {temp_i_max=1;
+ }
+ for (( temp_i=0);(temp_i<temp_i_max);( temp_i++))
+ {
+ reg_add=DDR0_PUB_DX0GCR5+reg_base_adj+temp_i*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5);
+
+
+ if (training_seed)
+ {
+ wrr_reg((reg_add),
+ (training_seed|((iovref_org[temp_i])&0xffffff00)));
+ if (vref_all) {
+ wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+1])&0xffffff00))); //
+ wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+2])&0xffffff00))); //
+ wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+3])&0xffffff00))); //
+ }
+ }
+
+ {
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+
+ sprintf(str_temp1,"ddr_soc_iovref_org");
+ ddr_soc_iovref_org=env_to_a_num(str_temp1);
+ if(ddr_soc_iovref_org==0)
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_org");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ soc_iovref_lef=env_to_a_num(str_temp1);
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ soc_iovref_rig=env_to_a_num(str_temp1);
+
+
+ if(soc_iovref_lef)
+ {;
+ }
+
+ ddr_test_watchdog_enable(watchdog_time_s);
+
+ if (vref_set_test_step)
+ {
+ printf("\nvref_set_test_step==0x%08x,skip test left edge\n ",vref_set_test_step);
+ soc_iovref_test_step=1;
+ {
+ sprintf(str_temp1,"soc_iovref_test_step");
+ sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ //break;
+ }
+
+ if(soc_iovref_test_step==0)
+ {//int temp=0;
+ if(soc_iovref_lef)
+ {iovref_temp_value=soc_iovref_lef;
+ }
+ while (iovref_temp_value>0x0)
+ {
+
+ temp_test_error=0;
+ iovref_temp_value=iovref_temp_value-training_step;
+ if (iovref_temp_value<training_step)
+ iovref_temp_value=0;
+ printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
+
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ iovref_temp_reg_value=(iovref_temp_value|((iovref_org[temp_i])&0xffffff00));
+ wrr_reg((reg_add),
+ iovref_temp_reg_value); //
+ if (vref_all) {
+ wrr_reg((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ wrr_reg((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ wrr_reg((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ }
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ ddr_test_watchdog_clear();
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR3+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR4+reg_base_adj)))+vref_lcdlr_offset)); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ }
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+
+ }
+
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),(dxnlcdlr3[0]-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),(dxnlcdlr4[0]-vref_lcdlr_offset)); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[1]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[2]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[3]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[1]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[2]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[3]-vref_lcdlr_offset)); //
+ }
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+
+ }
+
+ }
+ if (temp_test_error)
+ {
+ printf("\nvref down edge detect \n");
+ iovref_temp_value=iovref_temp_value+training_step;
+ break;
+ }
+ }
+ printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
+
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ {
+ soc_iovref_test_step=1;
+ sprintf(str_temp1,"soc_iovref_test_step");
+ sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ run_command("reset",0);
+ }
+
+ }
+
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ soc_iovref_lef=env_to_a_num(str_temp1);
+ iovref_temp_value=soc_iovref_lef;
+ printf("\n down edge detect \n");
+ printf("\n\n iovref down edge==0x%08x\n ",soc_iovref_lef);
+ iovref_lef[temp_i]=iovref_temp_value;
+ //if(soc_iovref_lef)
+ //{iovref_temp_value=soc_iovref_lef;
+ //iovref_lef[temp_i]=iovref_temp_value;
+ //}
+ wrr_reg((reg_add),
+ iovref_org[temp_i]); //
+ if (vref_all) {
+ wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+1]); //
+ wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+2]); //
+ wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+3]); //
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+ }
+
+
+ {
+ if (training_seed)
+ {
+ wrr_reg((reg_add),
+ (training_seed|((iovref_org[temp_i])&0xffffff00)));
+ if (vref_all) {
+ wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+1])&0xffffff00))); //
+ wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+2])&0xffffff00))); //
+ wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ (training_seed|((iovref_org[temp_i+3])&0xffffff00))); //
+ }
+ }
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+
+ //if(soc_iovref_rig==0)
+ if(soc_iovref_test_step==1)
+ {
+ if(soc_iovref_rig)
+ {iovref_temp_value=soc_iovref_rig;
+ }
+ while (iovref_temp_value<0x3f)
+ {
+ temp_test_error=0;
+ iovref_temp_value=iovref_temp_value+training_step;
+ if (iovref_temp_value>0x3f)
+ iovref_temp_value=0x3f;
+ printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
+
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ iovref_temp_reg_value=(iovref_temp_value|((iovref_org[temp_i])&0xffffff00));
+ wrr_reg((reg_add),
+ iovref_temp_reg_value); //
+ if (vref_all) {
+ wrr_reg((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ wrr_reg((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ wrr_reg((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),
+ iovref_temp_reg_value); //
+ }
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ printf("\n reg_add 0x%08x== 0x%08x\n ",(reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5)),iovref_temp_reg_value);
+ ddr_test_watchdog_clear();
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR3+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR4+reg_base_adj)))+vref_lcdlr_offset)); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ ((rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4))))+vref_lcdlr_offset)); //
+ }
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+
+ }
+
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),(dxnlcdlr3[0]-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),(dxnlcdlr4[0]-vref_lcdlr_offset)); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[1]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[2]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (dxnlcdlr3[3]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[1]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[2]-vref_lcdlr_offset)); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (dxnlcdlr4[3]-vref_lcdlr_offset)); //
+ }
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+0*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)))));
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+
+ }
+
+ }
+
+ if (temp_test_error)
+ {
+ printf("\nvref up edge detect \n");
+ iovref_temp_value=iovref_temp_value-training_step;
+ break;
+ }
+ }
+ }
+
+ printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
+
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ sprintf(str_temp2,"0x%08x",iovref_temp_value);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ {
+ soc_iovref_test_step=2;
+ sprintf(str_temp1,"soc_iovref_test_step");
+ sprintf(str_temp2,"0x%08x",soc_iovref_test_step);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ //run_command("reset",0);
+ }
+
+ }
+
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ soc_iovref_rig=env_to_a_num(str_temp1);
+ iovref_temp_value=soc_iovref_rig;
+
+ printf("\n up edge detect \n");
+ printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
+ iovref_rig[temp_i]=iovref_temp_value;
+ //if(soc_iovref_rig)
+ //{iovref_temp_value=soc_iovref_rig;
+ //iovref_rig[temp_i]=iovref_temp_value;
+ //}
+ wrr_reg((reg_add),
+ iovref_org[temp_i]); //
+ if (vref_all) {
+ wrr_reg(((reg_add+1*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+1]); //
+ wrr_reg(((reg_add+2*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+2]); //
+ wrr_reg(((reg_add+3*(DDR0_PUB_DX1GCR5-DDR0_PUB_DX0GCR5))),
+ iovref_org[temp_i+3]); //
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR3+reg_base_adj),dxnlcdlr3[0]); //
+ wrr_reg((DDR0_PUB_DX0LCDLR4+reg_base_adj),dxnlcdlr4[0]); //
+ if (vref_all) {
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR3+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)),
+ dxnlcdlr3[3]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+1*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[1]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+2*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[2]); //
+ wrr_reg(((DDR0_PUB_DX0LCDLR4+reg_base_adj)+3*(DDR0_PUB_DX1LCDLR4-DDR0_PUB_DX0LCDLR4)),
+ dxnlcdlr4[3]); //
+ }
+
+ }
+ }
+
+
+ }
+ // vddq=1.5v
+ ddr_test_watchdog_disable();
+ printf("\n\nsoc iovref test clk==%d\n",soc_iovref_test_ddr_clk);
+ printf("\n\n iovref vddq=1.2v,if use other vddq ,please recount\n");
+ for (( temp_i=0);(temp_i<4);( temp_i++))
+ {
+ printf("\n\n iovref lane_x=0x%08x, org==0x%08x %08dmV\n",temp_i,iovref_org[temp_i],((((((iovref_org[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
+ printf("\n\n iovref lane_x=0x%08x, down edge==0x%08x %08dmV\n",temp_i,iovref_lef[temp_i],((((((iovref_lef[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
+ printf("\n\n iovref lane_x=0x%08x, up edge==0x%08x %08dmV\n",temp_i,iovref_rig[temp_i],((((((iovref_rig[temp_i]&0X3F)*7)+440)*3)/2)+1)*12/15);
+ printf("\n\n iovref lane_x=0x%08x, mid ==0x%08x %08dmV\n",temp_i,
+ (iovref_lef[temp_i]+iovref_rig[temp_i])/2,((((((((iovref_lef[temp_i]+iovref_rig[temp_i])/2)&0X3F)*7)+440)*3)/2)+1)*12/15);
+ if (iovref_lef[temp_i] == 0x0)
+ {
+ printf("\n\n iovref down edge reach reg limited\n");
+ }
+ if (iovref_rig[temp_i] == 0x3f)
+ {
+ printf("\n\n iovref up edge reach reg limited\n");
+ }
+ }
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_org");
+ sprintf(str_temp2,"0x%08x",iovref_org[0]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_lef");
+ sprintf(str_temp2,"0x%08x",iovref_lef[0]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ sprintf(str_temp1,"ddr_soc_iovref_rig");
+ sprintf(str_temp2,"0x%08x",iovref_rig[0]);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+
+ printf("\n\n printf soc vref from env ,if remeasure should clear ddr_soc_iovref_org env ddr_soc_iovref_lef \
+ ddr_soc_iovref_rig ddr_soc_vref_range,ddr_soc_iovref_test_ddr_clk \n");
+ }
+ }
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+#endif
+ return 1;
+
+}
+//*/
+
+int do_ddr4_test_dram_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ if(watchdog_time_s==0)
+ {
+ watchdog_time_s=50;
+ printf("test dram_vref re set watchdog_time_s==%d\n",watchdog_time_s);
+ }
+
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ // unsigned int start_addr=test_start_addr;
+ printf("\nEnter Test ddr4 dram vref function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+ int training_seed=0;
+ int training_step=0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_clear=0;
+ // unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+ unsigned int dxnlcdlr1[4];
+ // unsigned int dxnlcdlr4[4];
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+ // #define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
+#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
+#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
+#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
+#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
+#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
+#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
+#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
+
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ // unsigned int ac_bdlr_lef[10];
+ // unsigned int ac_bdlr_rig[10];
+ int iovref_temp_value;
+ // int iovref_temp_reg_value;
+ // unsigned int reg_seed_value;
+ // unsigned int temp_reg_value;
+ int iovref_org=0;
+ int iovref_lef=0;
+ int iovref_rig=0;
+ int iovref_mid;
+ int iovref_test_read;
+ int iovref_test_step;
+ // unsigned int temp_test_error;
+ // unsigned int temp_i=0;
+ // unsigned int temp_j=0;
+ //unsigned int reg_add=0;
+ // static unsigned int training_enabled=1;
+
+ // iovref_lef=0x49;
+ // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ else
+ {
+ goto usage;
+ }
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ {
+ channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+ {
+ channel_b_en = 1;
+ }
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_clear = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_clear = 0;
+ }
+ if ( test_clear )
+ test_clear = 1;
+
+ }
+ training_seed = 0;
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+
+
+ }
+
+
+
+
+
+ training_step = 0;
+ if (argc >6) {
+ training_step = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ training_step = 0;
+ }
+
+ }
+ if (!training_step)
+ training_step=1;
+ int vref_all=0;
+ if (argc >7) {
+ vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ vref_all =0;// 0x2e;
+ }}
+ int vref_lcdlr_offset=0;
+ if (argc >8) {
+ vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ vref_lcdlr_offset =0;
+ }}
+ int vref_set_test_step=0;
+ if (argc >9) {
+ vref_set_test_step = simple_strtoull_ddr(argv[9], &endp, 16);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ vref_set_test_step =0;
+ }}
+ int vref_dram_range=0;
+ if (argc >10) {
+ vref_dram_range = simple_strtoull_ddr(argv[10], &endp, 16);
+ if (*argv[10] == 0 || *endp != 0)
+ {
+ vref_dram_range =0;
+ }}
+
+
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_clear== 0x%08x\n", test_clear);
+ printf("\nvref_all== 0x%08x\n", vref_all);
+ printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
+ printf("\nvref_dram_range== 0x%08x\n", vref_dram_range);
+
+ unsigned int soc_dram_hex_dec=0;
+ if (argc >11)
+ {
+ soc_dram_hex_dec = simple_strtoull_ddr(argv[11], &endp, 16);
+ if (*argv[11] == 0 || *endp != 0) {
+ soc_dram_hex_dec = 0;
+ }
+ }
+ if (soc_dram_hex_dec)
+ {
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+
+
+ }
+
+ }
+ if (training_seed)
+ {
+ if (soc_dram_hex_dec)
+ {
+ if (vref_dram_range)
+ {
+ if (training_seed<45)
+ training_seed=45;
+ if (training_seed>77)
+ training_seed=77;
+ training_seed =(((((training_seed*1000-45000)/650)>0X32)?(0X32):(((training_seed*1000-45000)/650))));
+ }
+ if (vref_dram_range == 0)
+ {
+ if (training_seed<60)
+ training_seed=60;
+ if (training_seed>92)
+ training_seed=92;
+ training_seed =(((((training_seed*1000-60000)/650)>0X32)?(0X32):(((training_seed*1000-60000)/650))));
+ }
+ }
+ if (vref_dram_range == 0)
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+6000)*1200)/10000));
+ else
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+4500)*1200)/10000));
+ }
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+ char str_temp1[1024]="";
+ char str_temp2[1024]="";
+ char *p_str=NULL;
+
+
+ char str[512]="";
+ unsigned int dram_iovref_test_ddr_clk=0;
+ sprintf(str_temp1,"ddr_dram_iovref_test_ddr_clk");
+ dram_iovref_test_ddr_clk=env_to_a_num(str_temp1);
+ if(dram_iovref_test_ddr_clk==0)
+ {dram_iovref_test_ddr_clk=global_ddr_clk;
+ {
+ sprintf(str_temp1,"ddr_dram_iovref_test_ddr_clk");
+ sprintf(str_temp2,"0x%08x",dram_iovref_test_ddr_clk);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ }
+ if(dram_iovref_test_ddr_clk!=global_ddr_clk)
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,dram_iovref_test_ddr_clk);
+ sprintf(str,"d2pll %d",dram_iovref_test_ddr_clk);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+
+
+ {
+ {
+ sprintf(str_temp1,"ddr_dram_iovref_org");
+ // sprintf(str_temp2,"0x%08x",iovref_org);
+ p_str=getenv(str_temp1);
+
+ if(p_str)
+ {
+ iovref_org= simple_strtoull_ddr(p_str, &endp, 0);
+ }
+
+
+ sprintf(str_temp1,"ddr_dram_iovref_lef");
+ //sprintf(str_temp2,"0x%08x",iovref_lef);
+ p_str=getenv(str_temp1);
+
+ if(p_str)
+ {
+ iovref_lef= simple_strtoull_ddr(p_str, &endp, 0);
+ }
+
+
+ sprintf(str_temp1,"ddr_dram_iovref_rig");
+ //sprintf(str_temp2,"0x%08x",iovref_rig);
+ p_str=getenv(str_temp1);
+
+ if(p_str)
+ {
+ iovref_rig= simple_strtoull_ddr(p_str, &endp, 0);
+ }
+
+ sprintf(str_temp1,"ddr_dram_vref_range");
+ //sprintf(str_temp2,"0x%08x",vref_dram_range);
+ p_str=getenv(str_temp1);
+
+
+ if(p_str)
+ {
+ vref_dram_range= simple_strtoull_ddr(p_str, &endp, 0);
+ }
+
+ }
+
+ if(vref_dram_range|iovref_rig|iovref_org|iovref_lef)
+ {
+ printf("\n\ndram iovref test clk==%d\n",dram_iovref_test_ddr_clk);
+ iovref_mid=(iovref_lef+iovref_rig)/2;
+ if (vref_dram_range == 0)
+ {
+ printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
+ iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+6000)*1200)/10000)),
+ iovref_rig,((((((iovref_rig&0X3F)*65)+6000)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+6000)*1200)/10000)));
+ }
+ if (vref_dram_range)
+ {
+ printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
+ iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+4500)*1200)/10000)),
+ iovref_rig,((((((iovref_rig&0X3F)*65)+4500)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+4500)*1200)/10000)));
+ }
+ if (iovref_rig == 0x32)
+ {
+ printf("\n\n iovref rig reach reg max\n");
+ }
+ if (iovref_rig == 0x0)
+ {
+ printf("\n\n iovref lef reach reg min\n");
+ }
+ printf("\n\n printf dram vref from env ,if remeasure should clear ddr_dram_iovref_org env ddr_dram_iovref_lef \
+ ddr_dram_iovref_rig ddr_dram_vref_range,ddr_dram_iovref_test_ddr_clk \n");
+ return 1;
+ }
+
+ }
+
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+ }////save and print org training value
+
+
+
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel data lane\n");
+ }
+ else
+ {
+ printf("\ntest B channel data lane\n");
+ }
+
+
+
+
+ }
+
+ {
+
+
+#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+ unsigned int dxnmdlr=0;
+ reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
+ dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
+ // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
+ printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
+ //turn off ddr4 phy read vref gate,only output ac lane vref
+ wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_IOVCR0))),0x00090909|(0x0f<<24));
+ wrr_reg((((DDR0_PUB_IOVCR1))),0x109);
+ printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
+ printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
+ printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
+ printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
+ printf("\nDDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
+ printf("\nDDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
+ unsigned int temp_i=0;
+ //unsigned int temp_i_max=4;//DDR0_PUB_MR6
+ for (( temp_i=0);(temp_i<4);( temp_i++))
+ {
+ dxnlcdlr1[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))));
+
+ printf("\nreg==0x%08x,dxnlcdlr1[%08x]==0x%08x\n ",
+ ((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)),
+ temp_i,dxnlcdlr1[temp_i]);
+
+ }
+
+ iovref_test_read=(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0x3f;
+ iovref_temp_value=rdr_reg((unsigned int )(DDR0_PUB_DX0GCR6));
+ if ((iovref_temp_value&0x3f) == 0x09)
+ {
+ iovref_temp_value=(rdr_reg((unsigned int )(DDR0_PUB_MR6)))&0x3f;;
+ iovref_test_read=iovref_temp_value;
+ }
+ iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0xff;
+
+
+ printf("PREG_STICKY_REG7==0x%08x\n ",(rdr_reg((unsigned int )((PREG_STICKY_REG7)))));
+ printf("DDR0_PUB_MR6==0x%08x\n ",(rdr_reg((unsigned int )((DDR0_PUB_MR6)))));
+ printf("DDR0_PUB_DX0GCR6==0x%08x\n ",(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))));
+ if (((iovref_org) == 0) || (test_clear))
+ {
+
+
+
+ iovref_org=iovref_temp_value&0x3f;
+ iovref_lef=iovref_org;
+ iovref_rig=iovref_org;
+ iovref_test_step=0;
+
+ if (training_seed)
+ {
+ iovref_org=training_seed&0x3f;
+ iovref_lef=iovref_org;
+ iovref_rig=iovref_org;
+ iovref_test_step=0;
+
+ }
+ if (vref_dram_range == 0)
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+6000)*1200)/10000));
+ else
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*65)+4500)*1200)/10000));
+ wrr_reg((PREG_STICKY_REG7),iovref_org|(iovref_lef<<8)|((iovref_rig<<16))|(iovref_test_step<<24));
+ }
+
+ printf("PREG_STICKY_REG7==0x%08x\n ",(rdr_reg((unsigned int )((PREG_STICKY_REG7)))));
+ {
+ if ((((rdr_reg((unsigned int )((DDR0_PUB_MR6))))>>6)&1) == 0)
+ {
+ printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",DDR0_PUB_MR6,
+ iovref_temp_value,iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)));
+ printf("reg_add==0x%08x,value==0x%08x, iovref_dx0gcr6 ==0x%08x %08dmV\n",DDR0_PUB_DX0GCR6,
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),
+ (((((((rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0X3F)*65)+6000)*1200)/10000)));
+
+ }
+ if (((rdr_reg((unsigned int )((DDR0_PUB_MR6))))>>6)&1)
+ {
+ printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",DDR0_PUB_MR6,
+ iovref_temp_value,iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)));
+ printf("reg_add==0x%08x,value==0x%08x, iovref_dx0gcr6 ==0x%08x %08dmV\n",DDR0_PUB_DX0GCR6,
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),(rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6)))),
+ (((((((rdr_reg((unsigned int )((DDR0_PUB_DX0GCR6))))&0X3F)*65)+4500)*1200)/10000)));
+
+ }
+
+ }
+
+ iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0x3f; //
+ iovref_lef=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>8)&0x3f;
+ iovref_rig=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>16)&0x3f;
+ iovref_test_step=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>24)&0x3f;
+
+
+
+ printf("\ntraining_step==0x%08x\n ",training_step);
+ printf("\niovref_test_step==0x%08x\n ",iovref_test_step);
+ printf("\niovref_lef==0x%08x\n ",iovref_lef);
+ printf("\niovref_rig==0x%08x\n ",iovref_rig);
+ if (vref_set_test_step)
+ {if(iovref_test_step==0)
+ iovref_test_step=vref_set_test_step;
+ }
+ if (iovref_test_step<2)
+ {
+ if (iovref_test_step == 0)
+ {
+ iovref_temp_value=iovref_lef;
+
+ }
+ if (iovref_test_step == 1)
+ {
+ iovref_temp_value=iovref_rig;
+ }
+ //iovref_temp_value=iovref_lef-training_step;
+ printf("\niovref temp==0x%08x\n ",iovref_temp_value);
+ printf("\niovref_test_read==0x%08x\n ",iovref_test_read);
+ temp_test_error=0;
+ if ((iovref_org == iovref_lef) && (iovref_org == iovref_rig)) {
+ printf("\nfirst test");
+ }
+ else if(iovref_test_read!=iovref_temp_value)
+ {temp_test_error=1;
+ }
+
+ ddr_test_watchdog_enable(watchdog_time_s);
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+ }
+
+ // /*
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ ddr_test_watchdog_clear();
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+ }
+
+
+ }
+ //*/
+ }
+
+
+ if (temp_test_error)
+ {
+ printf("\nvref edge detect \n");
+ if (iovref_test_step == 0)
+ {
+
+ iovref_lef=((iovref_temp_value+training_step)<0x32)?((iovref_temp_value+training_step)):(0x32);
+ iovref_temp_value=iovref_org;
+ }
+ if (iovref_test_step == 1)
+ {
+
+ iovref_rig=(iovref_temp_value>training_step)?((iovref_temp_value-training_step)):(0);
+ iovref_temp_value=iovref_org;
+ }
+ iovref_test_step++;
+ // break;
+ }
+ else
+ {
+ printf("\niovref_lef1=%x\n",iovref_lef);
+ printf("\niovref_test_step=%x\n",iovref_test_step);
+ if (iovref_test_step == 0)
+ {
+ printf("\niovref_lef1_2=%x\n",(iovref_temp_value-training_step));
+ iovref_lef=(iovref_temp_value>training_step)?((iovref_temp_value-training_step)):(0);
+ iovref_temp_value=iovref_lef;
+ if (iovref_lef == 0)
+ {
+ iovref_test_step++;
+ iovref_temp_value=iovref_org;
+ }
+ }
+ if (iovref_test_step == 1)
+ {
+ iovref_rig=((iovref_temp_value+training_step)<0x32)?(iovref_temp_value+training_step):(0x32);
+ iovref_temp_value=iovref_rig;
+ if (iovref_rig == 0x32)
+ iovref_test_step++;
+ }
+ printf("\niovref_lef2=%x\n",iovref_lef);
+ }
+ {
+
+
+ wrr_reg((PREG_STICKY_REG7),iovref_org|(iovref_lef<<8)|((iovref_rig<<16))|(iovref_test_step<<24));
+ printf("\nddr4ram vref test will reboot use new dram vref setting==0x%08x\n ",(rdr_reg((unsigned int )(PREG_STICKY_REG7))));
+ char str[100];
+ sprintf(str,"ddr_test_cmd 0x17 %d 0 0 0 0x%x",dram_iovref_test_ddr_clk,iovref_temp_value|((vref_dram_range&1)<<6));
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ //run_command("ddr_test_cmd 0x17 1100 0 0 0xsoc 0xdram ",0);//
+ }
+ }
+
+ ddr_test_watchdog_disable();
+ if (iovref_test_step >= 2)
+ {
+ printf("\n\ndram iovref test clk==%d\n",dram_iovref_test_ddr_clk);
+ printf("\n\n iovref vddq=1.2v,if use other vddq ,please recount\n");
+ printf("\nddr4ram vref test finish iovref_test_step==0x%08x\n ",iovref_test_step);
+ iovref_org=(rdr_reg((unsigned int )((PREG_STICKY_REG7))))&0x3f; //
+ iovref_lef=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>8)&0x3f;
+ iovref_rig=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>16)&0x3f;
+ iovref_test_step=((rdr_reg((unsigned int )((PREG_STICKY_REG7))))>>24)&0x3f;
+ iovref_mid=(iovref_lef+iovref_rig)/2;
+ if (vref_dram_range == 0)
+ {
+ printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
+ iovref_org,((((((iovref_org&0X3F)*65)+6000)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+6000)*1200)/10000)),
+ iovref_rig,((((((iovref_rig&0X3F)*65)+6000)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+6000)*1200)/10000)));
+ }
+ if (vref_dram_range)
+ {
+ printf("iovref_org==0x%08x,%08dmV||iovref_lef==0x%08x,%08dmV||iovref_rig==0x%08x,%08dmV||iovref_mid0x%08x,%08dmV\n",
+ iovref_org,((((((iovref_org&0X3F)*65)+4500)*1200)/10000)),iovref_lef,((((((iovref_lef&0X3F)*65)+4500)*1200)/10000)),
+ iovref_rig,((((((iovref_rig&0X3F)*65)+4500)*1200)/10000)),iovref_mid,((((((iovref_mid&0X3F)*65)+4500)*1200)/10000)));
+ }
+ if (iovref_rig == 0x32)
+ {
+ printf("\n\n iovref rig reach reg max\n");
+ }
+ if (iovref_rig == 0x0)
+ {
+ printf("\n\n iovref lef reach reg min\n");
+ }
+ //char str2[100];
+ //sprintf(str2,"ddr_test_cmd 0x17 %d 0 0 0 0x%x",global_ddr_clk,iovref_org);
+ //printf("\nstr2=%s\n",str2);
+ //run_command(str2,0);
+ {
+ {
+ sprintf(str_temp1,"ddr_dram_iovref_org");
+ sprintf(str_temp2,"0x%08x",iovref_org);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ sprintf(str_temp1,"ddr_dram_iovref_lef");
+ sprintf(str_temp2,"0x%08x",iovref_lef);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ sprintf(str_temp1,"ddr_dram_iovref_rig");
+ sprintf(str_temp2,"0x%08x",iovref_rig);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ {
+ sprintf(str_temp1,"ddr_dram_vref_range");
+ sprintf(str_temp2,"0x%08x",vref_dram_range);
+ setenv(str_temp1, str_temp2);
+ run_command("save",0);
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+#endif
+ return 1;
+
+}
+
+#endif
+int do_ddr4_test_dram_ac_vref(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ ///*
+ // unsigned int start_addr=test_start_addr;
+ printf("\nEnter Test ddr4 phy_ac or ddr3 dram data vref function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ // unsigned int loop = 1;
+ // unsigned int temp_count_i = 1;
+ // unsigned int temp_count_j= 1;
+ // unsigned int temp_count_k= 1;
+ unsigned int temp_test_error= 0;
+ int training_seed=0;
+ int training_step=0;
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_dram_ac_data=0;
+ // unsigned int test_times=1;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ unsigned int testing_channel = 0;
+ unsigned int dxnlcdlr1[4];
+ // unsigned int dxnlcdlr4[4];
+
+
+#define CHANNEL_A 0
+#define CHANNEL_B 1
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+ // #define DDR0_PUB_REG_BASE 0xc8836000
+#define DDR0_PUB_DX0GCR4 ( DDR0_PUB_REG_BASE + ( 0x1c4 << 2 ) )
+#define DDR0_PUB_DX1GCR4 ( DDR0_PUB_REG_BASE + ( 0x204 << 2 ) )
+#define DDR0_PUB_DX2GCR4 ( DDR0_PUB_REG_BASE + ( 0x244 << 2 ) )
+#define DDR0_PUB_DX3GCR4 ( DDR0_PUB_REG_BASE + ( 0x284 << 2 ) )
+#define DDR0_PUB_DX0GCR5 ( DDR0_PUB_REG_BASE + ( 0x1c5 << 2 ) )
+#define DDR0_PUB_DX1GCR5 ( DDR0_PUB_REG_BASE + ( 0x205 << 2 ) )
+#define DDR0_PUB_DX2GCR5 ( DDR0_PUB_REG_BASE + ( 0x245 << 2 ) )
+#define DDR0_PUB_DX3GCR5 ( DDR0_PUB_REG_BASE + ( 0x285 << 2 ) )
+
+ //#define DDR0_PUB_IOVCR0 ( DDR0_PUB_REG_BASE + ( 0x148 << 2 ) ) // R/W - IO VREF Control Register 0
+ //#define DDR0_PUB_IOVCR1 ( DDR0_PUB_REG_BASE + ( 0x149 << 2 ) ) // R/W - IO VREF Control Register 1
+
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ // unsigned int ac_bdlr_lef[10];
+ // unsigned int ac_bdlr_rig[10];
+ int iovref_temp_value;
+ // int iovref_temp_reg_value;
+ // unsigned int reg_seed_value;
+ // unsigned int temp_reg_value;
+ int iovref_org;
+ int iovref_lef;
+ int iovref_rig;
+ // unsigned int temp_test_error;
+ // unsigned int temp_i=0;
+ // unsigned int temp_j=0;
+ //unsigned int reg_add=0;
+ // static unsigned int training_enabled=1;
+
+ // iovref_lef=0x49;
+ // printf("\n\n iovref org ==0x%08x %08dmV\n",iovref_lef,(((((iovref_lef&0X3F)*7)+440)*3)/2)+1);
+ //#define DDR_TEST_ACLCDLR
+
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+ channel_a_en = 1;
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+ channel_b_en = 1;
+ else
+ goto usage;
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+ channel_a_en = 1;
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+ channel_b_en = 1;
+ }
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+
+ }
+ if (argc >4) {
+ test_dram_ac_data = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_dram_ac_data = 0;
+ }
+ if ( test_dram_ac_data )
+ test_dram_ac_data = 1;
+
+ }
+ training_seed = 0;
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+
+
+ }
+
+
+ training_step = 0;
+ if (argc >6) {
+ training_step = simple_strtoull_ddr(argv[6], &endp, 16);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ training_step = 0;
+ }
+
+
+
+ }
+ int vref_all=0;
+ if (argc >7) {
+ vref_all = simple_strtoull_ddr(argv[7], &endp, 16);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ vref_all =0;// 0x2e;
+ }}
+ int vref_lcdlr_offset=0;
+ if (argc >8) {
+ vref_lcdlr_offset = simple_strtoull_ddr(argv[8], &endp, 16);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ vref_lcdlr_offset =0;
+ }}
+ int soc_dram_hex_dec=0;
+ if (argc >9)
+ {
+ soc_dram_hex_dec = simple_strtoull_ddr(argv[9], &endp, 16);
+ if (*argv[9] == 0 || *endp != 0) {
+ soc_dram_hex_dec = 0;
+ }
+ }
+ if (training_seed ==0) // 0x2e;
+ {training_seed=0x9;
+ }
+ if (soc_dram_hex_dec)
+ {
+ if (argc >5) {
+ training_seed = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ training_seed =0;// 0x2e;
+ }
+
+
+ }
+ if (training_seed ==0) // 0x2e;
+ {training_seed=50;
+ }
+ if (training_seed<45)
+ training_seed=45;
+ if (training_seed>88)
+ training_seed=88;
+ training_seed =(((training_seed*1000-44070)/698));
+
+ }
+
+
+
+ printf("\n\n iovref training_seed ==0x%08x %08dmV\n",training_seed,(((((training_seed&0X3F)*7)+440)*3)/2)+1);
+ printf("\nchannel_a_en== 0x%08x\n", channel_a_en);
+ printf("\nchannel_b_en== 0x%08x\n", channel_b_en);
+ printf("\nddr_test_size== 0x%08x\n", ddr_test_size);
+ printf("\ntest_dram_ac_data== 0x%08x\n", test_dram_ac_data);
+ printf("\nvref_all== 0x%08x\n", vref_all);
+ printf("\nvref_lcdlr_offset== 0x%08x\n", vref_lcdlr_offset);
+ if ( channel_a_en)
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+ if ( channel_b_en)
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+ //save and print org training dqs value
+ if (channel_a_en || channel_b_en)
+ {
+ //dcache_disable();
+ //serial_puts("\ndebug for ddrtest ,jiaxing disable dcache");
+ }////save and print org training value
+
+
+
+ {
+ ////tune and save training dqs value
+ if (channel_a_en || channel_b_en)
+
+ {
+ for ((testing_channel=0);(testing_channel<(channel_a_en+channel_b_en));(testing_channel++))
+ {
+
+ if (( channel_a_en) && ( channel_b_en == 0))
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if(( channel_b_en)&&( channel_a_en==0))
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ else if ((channel_a_en+channel_b_en)==2)
+ {
+ if ( testing_channel == CHANNEL_A)
+ {
+ reg_base_adj=CHANNEL_A_REG_BASE;
+ }
+ else if( testing_channel==CHANNEL_B)
+ {
+ reg_base_adj=CHANNEL_B_REG_BASE;
+ }
+ }
+
+ if (reg_base_adj == CHANNEL_A_REG_BASE)
+ {
+ printf("\ntest A channel data lane\n");
+ }
+ else
+ {
+ printf("\ntest B channel data lane\n");
+ }
+
+
+ {
+
+
+#define wrr_reg(addr, data) (*((volatile unsigned int *)((unsigned long)(unsigned int )addr)))=(data) //wr_reg(addr, data)
+#define rdr_reg(addr) (unsigned int )(*((volatile unsigned int *)((unsigned long)(unsigned int )addr))) //rd_reg(addr)
+ unsigned int dxnmdlr=0;
+ reg_add=DDR0_PUB_DX0MDLR0+reg_base_adj;
+ dxnmdlr=((rdr_reg((unsigned int )reg_add))>>16)&0x1ff;
+ // reg_seed_value=(training_seed|(0x0<<8)|(0x0<<16)|(0x0<<24));
+ printf("\ndxnmdlr==0x%08x\n ",dxnmdlr);
+ //turn off ddr4 phy read vref gate,only output ac lane vref
+ wrr_reg((((DDR0_PUB_DX0GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX1GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX2GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ wrr_reg((((DDR0_PUB_DX3GCR4))),((rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4)))&(~(1<<28)))|(7<<25)|(0xf<<2));
+ printf("\norg DDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
+ printf("\norg DDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
+ wrr_reg((((DDR0_PUB_IOVCR0))),training_seed|(training_seed<<8)|(training_seed<<16)|(0x1f<<24));
+ wrr_reg((((DDR0_PUB_IOVCR1))),0x109);
+ printf("\nDDR0_PUB_DX0GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX0GCR4))));
+ printf("\nDDR0_PUB_DX1GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX1GCR4))));
+ printf("\nDDR0_PUB_DX2GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX2GCR4))));
+ printf("\nDDR0_PUB_DX3GCR4==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_DX3GCR4))));
+ printf("\nDDR0_PUB_IOVCR0==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR0))));
+ printf("\nDDR0_PUB_IOVCR1==0x%08x\n ",(rdr_reg((unsigned int )(DDR0_PUB_IOVCR1))));
+ unsigned int temp_i=0;
+
+ for (( temp_i=0);(temp_i<4);( temp_i++))
+ {
+ {
+ dxnlcdlr1[temp_i]=(rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)+temp_i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))));
+
+ printf("\ndxnlcdlr1[%08x]==0x%08x,dxnlcdlr1[%08x]==0x%08x\n ",temp_i,dxnlcdlr1[temp_i],temp_i,dxnlcdlr1[temp_i]);
+
+ }
+ }
+ reg_add=DDR0_PUB_IOVCR0+reg_base_adj;
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_org=((iovref_temp_value)&0xff);
+ // iovref_lef=0x49;
+
+ {
+ printf("reg_add==0x%08x,value==0x%08x, iovref org ==0x%08x %08dmV\n",reg_add,
+ iovref_temp_value,iovref_org,((((((iovref_temp_value&0X3F)*7)+440)*3)/2)+1)*15/15);
+ }
+
+
+ wrr_reg((reg_add),iovref_temp_value); //
+ iovref_lef=(iovref_org)&0xff;
+ iovref_rig=(iovref_org)&0xff;
+
+ }
+
+ printf("\ntraining_step==0x%08x\n ",training_step);
+
+
+ {
+
+
+
+
+
+
+ {
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+
+ while (iovref_temp_value>0x0)
+ {
+ temp_test_error=0;
+ iovref_temp_value=iovref_temp_value-training_step;
+ if (iovref_temp_value<training_step)
+ iovref_temp_value=0;
+ printf("\niovref lef temp==0x%08x\n ",iovref_temp_value);
+
+
+ wrr_reg((reg_add),(0x1f000000|iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)));
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,rdr_reg((unsigned int )reg_add));
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+
+ }
+
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+
+ }
+
+ }
+ if (temp_test_error)
+ {
+ printf("\nvref down edge detect \n");
+ iovref_temp_value=iovref_temp_value+training_step;
+ break;
+ }
+ }
+
+ printf("\n down edge detect \n");
+ printf("\n\n iovref down edge==0x%08x\n ",iovref_temp_value);
+ iovref_lef=iovref_temp_value;
+
+ wrr_reg((reg_add),iovref_org); //
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+
+
+ }
+
+ {
+
+ iovref_temp_value=rdr_reg((unsigned int )reg_add);
+ iovref_temp_value=((iovref_temp_value)&0xff);
+
+ while (iovref_temp_value<0x3f)
+ {
+ temp_test_error=0;
+ iovref_temp_value=iovref_temp_value+training_step;
+ if (iovref_temp_value>0x3f)
+ iovref_temp_value=0x3f;
+ printf("\niovref rig temp==0x%08x\n ",iovref_temp_value);
+
+ wrr_reg((reg_add),(0x1f000000|iovref_temp_value|(iovref_temp_value<<8)|(iovref_temp_value<<16)));
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",reg_add,rdr_reg((unsigned int )reg_add));
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))+vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+
+ }
+
+ }
+
+ if (vref_lcdlr_offset)
+ {
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX0LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX1LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX2LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),((rdr_reg((unsigned int )(DDR0_PUB_DX3LCDLR1+reg_base_adj)))-vref_lcdlr_offset)); //
+
+
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX0LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX0LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX1LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX1LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX2LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX2LCDLR1+reg_base_adj)))));
+ printf("\n reg_add 0x%08x== 0x%08x\n ",((DDR0_PUB_DX3LCDLR1+reg_base_adj)),
+ (rdr_reg((unsigned int )((DDR0_PUB_DX3LCDLR1+reg_base_adj)))));
+
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+
+ {
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+ }
+
+ }
+
+ }
+ if (temp_test_error)
+ {
+ printf("\nvref up edge detect \n");
+ iovref_temp_value=iovref_temp_value-training_step;
+ break;
+ }
+ }
+
+ printf("\n up edge detect \n");
+ printf("\n\n iovref up edge==0x%08x\n ",iovref_temp_value);
+ iovref_rig=iovref_temp_value;
+
+ wrr_reg((reg_add),iovref_org); //
+ wrr_reg((DDR0_PUB_DX0LCDLR1+reg_base_adj),dxnlcdlr1[0]); //
+ wrr_reg((DDR0_PUB_DX1LCDLR1+reg_base_adj),dxnlcdlr1[1]); //
+ wrr_reg((DDR0_PUB_DX2LCDLR1+reg_base_adj),dxnlcdlr1[2]); //
+ wrr_reg((DDR0_PUB_DX3LCDLR1+reg_base_adj),dxnlcdlr1[3]); //
+
+
+
+ }
+
+
+
+ {
+ printf("\n\n iovref vddq=1.5v,if use other vddq ,please recount\n");
+ printf("\n vddq=1.5v iovref ac+dram_data org==0x%08x %08dmV||down edge==0x%08x %08dmV||up edge==0x%08x %08dmV||mid==0x%08x %08dmV\n",
+ iovref_org,(((((((iovref_org&0X3F)*7)+440)*3)/2)+1)*15/15),iovref_lef,(((((((iovref_lef&0X3F)*7)+440)*3)/2)+1)*15/15),
+ iovref_rig,(((((((iovref_rig&0X3F)*7)+440)*3)/2)+1)*15/15),((iovref_lef+iovref_rig)/2),
+ (((((((((iovref_lef+iovref_rig)/2)&0X3F)*7)+440)*3)/2)+1)*15/15)
+ );
+
+ if (iovref_lef == 0x0)
+ {
+ printf("\n\n iovref down edge reach reg limited\n");
+ }
+ if (iovref_rig == 0x3f)
+ {
+ printf("\n\n iovref up edge reach reg limited\n");
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+ }
+
+ }
+
+
+
+
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ //*/
+#endif
+ return 1;
+
+}
+//
+
+int pll_convert_to_ddr_clk_g12a(unsigned int ddr_pll)
+{
+ unsigned int ddr_clk=0;
+ unsigned int od_div=0xfff;
+ ddr_pll=ddr_pll&0xfffff;
+#if 1// (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ //unsigned int ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))/(((ddr_pll>>2)&0x3)+1)); //od1 od
+ if(((ddr_pll>>16)&7)==0)
+ od_div=2;
+ if(((ddr_pll>>16)&7)==1)
+ od_div=3;
+
+ if(((ddr_pll>>16)&7)==2)
+ od_div=4;
+
+ if(((ddr_pll>>16)&7)==3)
+ od_div=6;
+
+ if(((ddr_pll>>16)&7)==4)
+ od_div=8;
+
+ if(((ddr_pll>>10)&0x1f))
+ ddr_clk = 2*((((24 * ((ddr_pll>>0)&0x1ff))/((ddr_pll>>10)&0x1f))>>((((ddr_pll>>19)&0x1)==1)?(2):(1))))/od_div;
+
+#else
+ ddr_clk = 2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
+
+#endif
+
+
+ return ddr_clk;
+}
+
+
+int ddr_clk_convert_to_pll_g12a(unsigned int ddr_clk, unsigned char pll_bypass_en)
+{
uint32_t ddr_pll_vco_ctrl=0;
uint32_t ddr_pll_vco_m=0;
uint32_t ddr_pll_vco_n=0;
@@ -19901,2416 +19938,2667 @@ int ddr_clk_convert_to_pll_g12a(unsigned int ddr_clk, unsigned char pll_bypass_e
}
ddr_pll_vco_ctrl=ddr_pll_vco_m|(ddr_pll_vco_n<<10)|(ddr_pll_vco_ctrl_od<<16)|(ddr_pll_vco_ctrl_od1<<19);
return ddr_pll_vco_ctrl;
-
- //return ddr_pll_vco_ctrl;
-}
-int pll_convert_to_ddr_clk(unsigned int ddr_pll)
-{
- unsigned int ddr_clk=0;
- ddr_pll=ddr_pll&0xfffff;
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- // printf("\ng12 ddr_pll== %08x \n", ddr_pll);
- ddr_clk=pll_convert_to_ddr_clk_g12a( ddr_pll);
- return ddr_clk;
-#endif
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- //unsigned int ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))/(((ddr_pll>>2)&0x3)+1));
- if(((ddr_pll>>16)&0x1f))
-
- ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))>>((((ddr_pll>>2)&0x3)==3)?(2):(((ddr_pll>>2)&0x3))));
-
-#else
- if((ddr_pll>>9)&0x1f)
- ddr_clk = 2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
-
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
- if((ddr_pll>>9)&0x1f)
- ddr_clk = 2*((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3);
-#endif
-
- return ddr_clk;
-}
-
-int ddr_clk_convert_to_pll(unsigned int ddr_clk)
-{
- unsigned int ddr_pll=0x10221;
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- ddr_pll=ddr_clk_convert_to_pll_g12a( ddr_clk,0);
- return ddr_pll;
-#endif
-
- /* set ddr pll reg */
- if ((ddr_clk >= 40) && (ddr_clk < 750)) {
- // OD N M
- ddr_pll= (2 << 16) | (1 << 9) | ((((ddr_clk/6)*6)/12) << 0);
- }
- else if((ddr_clk >= 750) && (ddr_clk < 2000)) {
- // OD N M
- ddr_pll= (1 << 16) | (1 << 9) | ((((ddr_clk/12)*12)/24) << 0);
- }
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- ddr_pll=0x00104c5;
- /* set ddr pll reg */
- /*
- if ((ddr_clk >= 40) && (ddr_clk < 750)) {
- // OD N M
- ddr_pll= (2 << 2) | (1 << 16) | ((((ddr_clk/6)*6)/12) << 4);
- }
- else if((ddr_clk >= 750) && (ddr_clk < 2000)) {
- // OD N M
- ddr_pll= (1 << 2) | (1 << 16) | ((((ddr_clk/12)*12)/24) << 4);
- }
- */
- if ((ddr_clk < 200)) {
- // OD1 OD N M
- ddr_pll= (2 << 0) | (3 << 2) | (1 << 16) | ((((ddr_clk*6)/6)/3) << 4);
- }
- else if ((ddr_clk>= 200) && (ddr_clk< 400)) {
- // OD1 OD N M
- ddr_pll= (2 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*6)/6)/6) << 4);
- }
- else if ((ddr_clk>= 400) && (ddr_clk < 800)) {
- // OD1 OD N M
- ddr_pll= (1 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*12)/12)/12) << 4);
- }
- else if ((ddr_clk >= 800) && (ddr_clk < 2000)) {
- // OD1 OD N M
- ddr_pll= (0 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*12)/12)/24) << 4);
- }
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
- {
-
-
- if ((ddr_clk < 750)) {
- // OD N M
- ddr_pll= (2 << 16) | (1 << 9) | (((ddr_clk/24)*2)<< 0) ;
- }
- else if ((ddr_clk >= 750)) {
- // OD N M
- ddr_pll= (1 << 16) | (1 << 9) | ((ddr_clk/24)<< 0) ;
- }
-
- }
-#endif
-
- return ddr_pll;
-}
-
-
-int do_ddr4_test_dram_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- char *endp;
-
-#define TEST_DRAM_CLK_USE_ENV 1
- printf("\ntune ddr CLK use uboot env\n");
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-#define DDR_TEST_MIN_FREQ_LIMITED 50
-#define DDR_TEST_MIN_FREQ 300
-#define DDR_TEST_MAX_FREQ 3000
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- unsigned int start_freq=DDR_TEST_MIN_FREQ;
- unsigned int end_freq=DDR_TEST_MAX_FREQ;
- unsigned int test_loops=1;
- //printf("\n111tune ddr CLK use uboot env\n");
- if (argc == 1)
- {
- printf("\nplease read help\n");
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- start_freq=DDR_TEST_MIN_FREQ;
- end_freq=DDR_TEST_MAX_FREQ;
-
- }
-
- if (argc == 2)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq=DDR_TEST_MIN_FREQ;
- end_freq=DDR_TEST_MAX_FREQ;
- }
- if (argc== 3)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=DDR_TEST_MAX_FREQ;
-
- }
- if (argc== 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
-
- }
- if (argc> 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
- test_loops=simple_strtoull_ddr(argv[4], &endp, 0);
- }
- unsigned int temp_test_error=0x0;
- unsigned int ddr_pll=0;
- unsigned int ddr_clk_org=0;
- unsigned int ddr_clk_hope_test=0;
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-
- //#define AM_DDR_PLL_CNTL0 ( MMC_REG_BASE + ( 0x0 << 2 ) )
- ddr_pll = rd_reg(G12_AM_DDR_PLL_CNTL0);
-#else
- ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
-#endif
- //ddr_pll=ddr_pll_org;
- printf("\nddr_pll== %08x\n", ddr_pll);
-#if 0
-#else
- unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
- ddr_clk_org=ddr_clk;
- printf("\nddr_clk== %dMHz\n", ddr_clk);
- printf("\nstart_freq== %dMHz\n", start_freq);
- printf("\nend_freq== %dMHz\n", end_freq);
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
-#endif
-
- // {
- // wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- // ddr_udelay(2000);
- //}
-
-
- unsigned int freq_table_test_value[(DDR_TEST_MAX_FREQ)/12]; // step =0 init ,1 test fail, ,2 test pass,3 test skip;
- // char char_freq_name_table[30];
- // const char *p_char_freq_table;
-
- const char *p_char_ddr_test_step;
- const char * p_char_freq_org;
- char char_freq_org[30];
- int ddr_feq_test_step=0; // step =0 init ,1 going ,2 done;
-
- const char * p_char_freq_name_table;
- char char_freq_name_table[30];
- char char_cmd_table[100];
- char * p_char_store_boot;
- // char char_freq_store_boot[200];
-
- //const char *p_freq_table_int;
- //char char_ddr_feq_test_step[]="ddr_feq_test_step";
- // const char *varname;
- // const char *varvalue;
- unsigned int temp_count=0;
- unsigned int temp_count_sub=0;
-
-
- //
- p_char_ddr_test_step= getenv("ddr_feq_test_step");
- if (p_char_ddr_test_step)
- {
- printf("%s",p_char_ddr_test_step);
-
- ddr_feq_test_step = simple_strtoull_ddr(p_char_ddr_test_step, &endp, 0);
- printf("ddr_feq_test_step=%d\n",ddr_feq_test_step);
- }
- if (ddr_feq_test_step) {
- p_char_freq_org= getenv("ddr_feq_org");
- if (p_char_freq_org)
- {
- printf("%s",p_char_freq_org);
-
- ddr_clk_org = simple_strtoull_ddr(p_char_freq_org, &endp, 10); //must use 10 ,freq 0792 maybe not read sussceful use 0 auto read
- printf("ddr_clk_org=%d\n",ddr_clk_org);
- }
- }
- if (ddr_feq_test_step == 0)
- {
- ddr_feq_test_step=1;
- ddr_clk_org=ddr_clk;
- sprintf(char_freq_org,"%04d",ddr_clk);
- printf("\nddr_org_freq=%s\n",char_freq_org);
- setenv("ddr_feq_org", char_freq_org);
-
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<(DDR_TEST_MAX_FREQ/12)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- setenv(char_freq_name_table, "0");
- setenv("ddr_feq_test_step", "1");
- temp_count++;
- }
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<((start_freq)/12)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- setenv(char_freq_name_table, "3");
- setenv("ddr_feq_test_step", "1");
- temp_count++;
- }
- while (temp_count>((end_freq)/12)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- setenv(char_freq_name_table, "3");
- setenv("ddr_feq_test_step", "1");
- temp_count++;
- }
-
- p_char_store_boot= getenv("storeboot");
- if (p_char_store_boot)
- printf("storeboot %s\n",p_char_store_boot);
- sprintf(char_cmd_table,"ddr_test_cmd 0x1c 0x%08x %d %d %d;%s;",ddr_test_size,start_freq,end_freq,test_loops,p_char_store_boot);
- setenv("storeboot", char_cmd_table);
-
- run_command("save",0);
-
- }
-
- if (ddr_feq_test_step == 1)
- {
-
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
-
- p_char_freq_name_table= getenv(char_freq_name_table);
- if (p_char_freq_name_table)
- {
- printf("%s\n",p_char_freq_name_table);
-
- freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
- }
- temp_count++;
- }
-
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
- ddr_clk_hope_test=(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12)));
- if (freq_table_test_value[temp_count] ==1)
- {
- temp_count_sub=temp_count+1;
- while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*12))) ==
- (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))))
- {temp_count_sub=temp_count_sub+1;
- }
- while (temp_count_sub<((DDR_TEST_MAX_FREQ)/12)) {
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- // freq_table_test_value[temp_count_sub] =1;
- setenv(char_freq_name_table, "3");
- temp_count_sub++;
- }
- {
- ddr_feq_test_step++;
- setenv("ddr_feq_test_step", "2");
- run_command("save",0);
-
- }
- {ddr_clk_hope_test=ddr_clk_org;
- }
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
-
- }
- if (freq_table_test_value[temp_count] ==0)
- {
- if ((ddr_clk_hope_test) != (ddr_clk))
- {
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
- }
- if ((ddr_clk_hope_test) == (ddr_clk))
- {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- freq_table_test_value[temp_count] =1;
- setenv(char_freq_name_table, "1");
- run_command("save",0);
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- while (test_loops--) {
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
- //temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- if (temp_test_error)
- {
- freq_table_test_value[temp_count] =1;
- setenv(char_freq_name_table, "1");
- }
- else
- {
- freq_table_test_value[temp_count] =2;
- setenv(char_freq_name_table, "2");
- }
- run_command("save",0);
-
- ddr_clk_hope_test=(temp_count*12)+12;
- while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(ddr_clk_hope_test))) ==
- (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))))
- {ddr_clk_hope_test=ddr_clk_hope_test+12;
- }
- if (temp_test_error)
- {ddr_clk_hope_test=ddr_clk_org;
- }
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
- }
-
- }
- temp_count++;
- }
- ddr_feq_test_step++;
- setenv("ddr_feq_test_step", "2");
- run_command("save",0);
-
- }
-
- if (ddr_feq_test_step >= 2)
- {
- printf("\nfinish test ddr_feq_test_step=%d\n",ddr_feq_test_step);
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
-
- p_char_freq_name_table= getenv(char_freq_name_table);
- if (p_char_freq_name_table)
- {
- printf("%s\n",p_char_freq_name_table);
-
- freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
- }
- temp_count++;
- }
-
- printf("\nprint test ddr_feq_test_result!!!\n");
- temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
- while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
- p_char_freq_name_table= getenv(char_freq_name_table);
- if (p_char_freq_name_table)
- {
- // printf("%s\n",p_char_freq_name_table);
-
- freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- //printf("%d\n",freq_table_test_value[temp_count]);
- if ( (freq_table_test_value[temp_count]) == 0) {
- printf("%04d no init %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) == 1) {
- printf("%04d fail %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) == 2) {
- printf("%04d pass %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) >= 3) {
- printf("%04d skip test %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
- }
- temp_count++;
- }
- }
-
- }
- //sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- // printf("\nstr=%s\n",str);
-
-
-
-
- //sprintf(str, "%lx", value);
- // setenv("env_ddrtest", str);
-
-
- //run_command("save",0);
-
- //*/
- return 1;
-
-}
-int update_ddr_zq(unsigned int zq0pr)
-{
- wr_reg( DDR0_PUB_ZQ0PR,zq0pr);
- wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
- wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))&(~((1<<2)|(1<<27))));
- printf("\nupdate zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
- return rd_reg(DDR0_PUB_ZQ0PR);
-}
-
-int do_ddr_test_ddr_max_freq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr max frequency function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int add_freq=1;
- unsigned int sub_freq=1;
- unsigned int max_freq=792;
- unsigned int min_freq=792;
- unsigned int loop_max_freq=792;
- unsigned int loop_min_freq=792;
-
- unsigned int ddr_pll=0x10221;
- unsigned int ddr_clk_org=792;
- unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL);
- ddr_pll=ddr_pll_org;
- unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
- ddr_clk_org=ddr_clk;
- printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
-
- unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
- printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
-
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
-
- max_freq=ddr_clk_org;
- min_freq=ddr_clk_org;
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- if (argc == 1)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- test_loop=1;
- add_freq=1;
- sub_freq=1;
- }
-
- if (argc == 2)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop=1;
- add_freq=1;
- sub_freq=1;
- }
- if (argc== 3)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- add_freq=1;
- sub_freq=1;
- }
- if (argc >= 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- add_freq=1;
- sub_freq=1;
- if ((simple_strtoull_ddr(argv[3], &endp, 16)) == 1)
- {
- add_freq=1;
- sub_freq=0;
- }
- else if((simple_strtoull_ddr(argv[3], &endp, 16))==0)
- {
- add_freq=0;
- sub_freq=1;
- }
- }
-
- unsigned int temp_test_error=0;
- while (test_times<(test_loop+1))
- {
- printf("\ntest_times== %d times\n", test_times);
-
- if (add_freq)
- {
-
- while (ddr_clk<1500)
- {
- temp_test_error=0;
- ddr_clk=ddr_clk+12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
- }
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- max_freq=ddr_clk-12;
- printf("\nmax_ddr_clk== %dMHz\n", max_freq);
- temp_test_error=0;
- break;
- }
-
- }
-
- while (ddr_clk>ddr_clk_org)
- {
- ddr_clk=ddr_clk-12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
- }
- printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
-
-
- }
-
- if (sub_freq)
- {
-
- while (ddr_clk>24)
- {
- temp_test_error=0;
- ddr_clk=ddr_clk-12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
- }
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- min_freq=ddr_clk+12;
- printf("\nmin_ddr_clk== %dMHz\n", min_freq);
- temp_test_error=0;
- break;
- }
-
- }
-
- while (ddr_clk<ddr_clk_org)
- {
- ddr_clk=ddr_clk+12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
- }
- printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
-
-
- }
-
- if (test_times == 1)
- {
-
- loop_max_freq=max_freq;
- loop_min_freq=min_freq;
- }
- else
- {
- if (loop_max_freq>max_freq)
- {
- loop_max_freq=max_freq;
- }
- if (min_freq>loop_min_freq)
- {
- loop_min_freq=min_freq;
- }
- }
- test_times++;
-
- }
-
- printf("\nloop_min_freq== %dMHz,pll==0x%08x\n", loop_min_freq,ddr_clk_convert_to_pll(loop_min_freq));
- printf("\nloop_max_freq== %dMHz,pll==0x%08x\n", loop_max_freq,ddr_clk_convert_to_pll(loop_max_freq));
-
- return loop_max_freq;
-}
-
-
-int do_ddr_test_ddr_zq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr zq function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int add_freq=1;
- unsigned int sub_freq=1;
- unsigned int max_freq=792;
- unsigned int min_freq=792;
- unsigned int loop_max_freq=792;
- unsigned int loop_min_freq=792;
-
- unsigned int ddr_pll=0x10221;
- unsigned int ddr_clk_org=792;
- unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL);
- ddr_pll=ddr_pll_org;
- unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
- ddr_clk_org=ddr_clk;
- printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
-
- unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
- // unsigned int zq0pr_best;
- unsigned int zq0pr= rd_reg(DDR0_PUB_ZQ0PR);
- // zq0pr_best=zq0pr_org;
- unsigned int zq0pr_drv_max;
- unsigned int zq0pr_drv_min;
- unsigned int zq0pr_odt_max;
- unsigned int zq0pr_odt_min;
- unsigned int zq0pr_drv_flag=1;
- unsigned int zq0pr_odt_flag=1;
-
-
- printf("\nzq0pr_org== 0x%08x\n", zq0pr_org);
-
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
-
-
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
-
-
-
-
-
-
- max_freq=ddr_clk_org;
- min_freq=ddr_clk_org;
-
-
-
-
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
-
-
-
- if (argc == 1)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- test_loop=1;
- add_freq=1;
- sub_freq=1;
- }
-
- if (argc == 2)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop=1;
- add_freq=1;
- sub_freq=1;
- }
- if (argc== 3)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- add_freq=1;
- sub_freq=1;
- }
- if (argc >= 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- add_freq=1;
- sub_freq=1;
- if ((simple_strtoull_ddr(argv[3], &endp, 16)) == 1)
- {
- add_freq=1;
- sub_freq=0;
- }
- else if((simple_strtoull_ddr(argv[3], &endp, 16))==0)
- {
- add_freq=0;
- sub_freq=1;
- }
- }
-
- if (argc>4)
- {
- if ((simple_strtoull_ddr(argv[4], &endp, 16)) == 1)
- {
- zq0pr_drv_flag=0;
- zq0pr_odt_flag=1;
- }
- else if((simple_strtoull_ddr(argv[4], &endp, 16))==0)
- {
- zq0pr_drv_flag=1;
- zq0pr_odt_flag=0;
- }
-
- }
-
-
- unsigned int temp_test_error=0;
-
-
- test_times=1;
- temp_test_error=0;
- while (test_times<(test_loop+1))
- {
- printf("\ntest_times== %d times\n", test_times);
-
- if (add_freq)
- {
-
- while (ddr_clk<1500)
- {
- temp_test_error=0;
- ddr_clk=ddr_clk+12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
- }
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- max_freq=ddr_clk-12;
- printf("\nmax_ddr_clk== %dMHz\n", max_freq);
- temp_test_error=0;
- break;
- }
-
- }
-
- while (ddr_clk>ddr_clk_org)
- {
- ddr_clk=ddr_clk-12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
- }
- printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
-
-
- }
-
- if (sub_freq)
- {
-
- while (ddr_clk>24)
- {
- temp_test_error=0;
- ddr_clk=ddr_clk-12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
- }
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- min_freq=ddr_clk+12;
- printf("\nmin_ddr_clk== %dMHz\n", min_freq);
- temp_test_error=0;
- break;
- }
-
- }
-
- while (ddr_clk<ddr_clk_org)
- {
- ddr_clk=ddr_clk+12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
- }
- printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
-
-
- }
-
- if (test_times == 1)
- {
-
- loop_max_freq=max_freq;
- loop_min_freq=min_freq;
- }
- else
- {
- if (loop_max_freq>max_freq)
- {
- loop_max_freq=max_freq;
- }
- if (min_freq>loop_min_freq)
- {
- loop_min_freq=min_freq;
- }
- }
- test_times++;
-
- }
-
- printf("\nloop_min_freq== %dMHz,pll==0x%08x\n", loop_min_freq,ddr_clk_convert_to_pll(loop_min_freq));
- printf("\nloop_max_freq== %dMHz,pll==0x%08x\n", loop_max_freq,ddr_clk_convert_to_pll(loop_max_freq));
-
-
- while (ddr_clk
- <loop_max_freq)
- {
- ddr_clk=ddr_clk+12;
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- {
-
- wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- ddr_udelay(2000);
- }
- }
- printf("\nset to loop_max_freq== %dMHz\n", loop_max_freq);
-
- update_ddr_zq(zq0pr);
-
- zq0pr_drv_max=(zq0pr&0xf);
- zq0pr_drv_min=(zq0pr&0xf);
- zq0pr_odt_max=(zq0pr&0xf0);
- zq0pr_odt_min=(zq0pr&0xf0);
-
- if (zq0pr_drv_flag)
- {
- while ((zq0pr&0xf)<0xf)
- {
- zq0pr++;
- update_ddr_zq(zq0pr);
- temp_test_error=0;
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- zq0pr--;
- update_ddr_zq(zq0pr);
- break;
-
-
- }
- }
- zq0pr_drv_max=(zq0pr&0xf);
- printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_max);
-
- update_ddr_zq(zq0pr_org);
-
- while ((zq0pr&0xf)>0x0)
- {
- zq0pr--;
- update_ddr_zq(zq0pr);
- temp_test_error=0;
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- zq0pr++;
- update_ddr_zq(zq0pr);
- break;
-
-
- }
- }
-
-
- zq0pr_drv_min=(zq0pr&0xf);
- printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_min);
- }
-
- if (zq0pr_odt_flag)
- {
- while ((zq0pr&0xf0)<0xf0)
- {
- zq0pr=zq0pr+0x10;
- update_ddr_zq(zq0pr);
- temp_test_error=0;
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- zq0pr=zq0pr-0x10;
- update_ddr_zq(zq0pr);
- break;
-
-
- }
- }
- zq0pr_odt_max=(zq0pr&0xf0);
- printf("\nzq0pr_odt_max== 0x%08x\n", zq0pr_odt_max);
-
- update_ddr_zq(zq0pr_org);
-
-
- while ((zq0pr&0xf0)>0x0)
- {
- zq0pr=zq0pr-0x10;
- update_ddr_zq(zq0pr);
- temp_test_error=0;
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
- if (temp_test_error)
- {
- zq0pr=zq0pr+0x10;
- update_ddr_zq(zq0pr);
- break;
-
-
- }
- }
- zq0pr_odt_min=(zq0pr&0xf0);
- printf("\nzq0pr_odt_min== 0x%08x\n", zq0pr_odt_min);
- }
- update_ddr_zq(zq0pr_org);
-
- printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_max);
- printf("\nzq0pr_drv_min== 0x%08x\n", zq0pr_drv_min);
- printf("\nzq0pr_odt_max== 0x%08x\n", zq0pr_odt_max);
- printf("\nzq0pr_odt_min== 0x%08x\n", zq0pr_odt_min);
-
- return loop_max_freq;
-
-
-
-}
-
-int clear_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
-{
- wr_reg(DMC_MON_CTRL3, timer_counter);
- wr_reg(DMC_MON_CTRL2, (port_id<<0)|(port<<16)|(0<<20)|(1<<30));
- ddr_udelay(1);
- if (((rd_reg(DMC_MON_CTRL2))>>30) == 1)
- return 1;
- else
- return 0;
-
-
-}
-int open_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
-{
- wr_reg(DMC_MON_CTRL3, timer_counter);
- wr_reg(DMC_MON_CTRL2, ((rd_reg(DMC_MON_CTRL2))&(1<<30))|(port_id<<0)|(port<<16)|(0<<20)|(1<<31));
-
- return 1;
-}
-
-int finish_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
-{
- //wr_reg(DMC_MON_CTRL3, timer_time);
- if (((rd_reg(DMC_MON_CTRL2))>>31) == 0)
- {
- printf("\nddr bandwidth timer finish count and print result\n");
- printf("\nDMC_MON_port == 0x%08x port_id==0x%08x timer_time==0x%08x",port,port_id,timer_counter);
- printf("\nDMC_MON_ALL_REQ_CNT == 0x%08x",(rd_reg(DMC_MON_ALL_REQ_CNT)));
-
- printf("\nDMC_MON_ALL_GRANT_CNT == 0x%08x",(rd_reg(DMC_MON_ALL_GRANT_CNT)));
- printf("\nDMC_MON_ALL_GRANT_CNT_band == 0x%08x kbyte,dec== %d Mbyte",((rd_reg(DMC_MON_ALL_GRANT_CNT))*(8))/1024,((rd_reg(DMC_MON_ALL_GRANT_CNT))*(8))/(1024*1024));
- printf("\nDMC_MON_ONE _GRANT_CNT for selected port and subids == 0x%08x",(rd_reg(DMC_MON_ONE_GRANT_CNT)));
- printf("\nDMC_MON_ONE _GRANT_CNT_band for selected port and subids == 0x%08x,dec== %dMbyte",((rd_reg(DMC_MON_ONE_GRANT_CNT))*(8))/1024,((rd_reg(DMC_MON_ONE_GRANT_CNT))*(8))/(1024*1024));
- }
- //wr_reg(DMC_MON_CTRL2, ((rd_reg(DMC_MON_CTRL2))&(1<<30))|(port_id<<0)|(port<<16)|(0<<20)|(1<<31));
-
- return 1;
-}
-
-
-
-int do_ddr_test_bandwidth(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter Test ddr bandwidth function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- printf("\nargc== 0x%08x\n", argc);
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
- unsigned int test_loop=1;
- unsigned int test_times=1;
- unsigned int timer_time_ms=1000;
-
-
- unsigned int ddr_pll=0x10221;
- unsigned int ddr_clk_org=792;
- unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL)&(~(1<<29));
- ddr_pll=ddr_pll_org;
- unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
- ddr_clk_org=ddr_clk;
- printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
-
- unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
- printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
-
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- unsigned int test_port=0;
- unsigned int test_port_sub_id=1;
-
-
- if (argc == 1)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- test_loop=1;
-
- }
-
- if (argc == 2)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop=1;
-
- }
- if (argc== 3)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
-
- }
- if (argc >= 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- test_port= simple_strtoull_ddr(argv[3], &endp, 16);
-
-
- }
- if (argc >= 5)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
- test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
- test_port= simple_strtoull_ddr(argv[3], &endp, 16);
- test_port_sub_id= simple_strtoull_ddr(argv[4], &endp, 16);
-
- }
- if (argc >5)
- {
-
- timer_time_ms= simple_strtoull_ddr(argv[5], &endp, 16);
-
- }
-
- //unsigned int temp_test_error=0;
- unsigned int timer_counter=0;
- timer_counter=(timer_time_ms*1000*ddr_clk/2);
- //while(test_times<(test_loop+1))
- {
- {
- clear_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
- open_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
- while (test_times<(test_loop+1))
- {
- printf("\ntest_times== %d times\n", test_times);
- ddr_test_s_cross_talk_pattern(ddr_test_size);
- test_times++;
- }
- finish_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
- printf("\ntimer_time_ms== %d ms\n", timer_time_ms);
-
- printf("\nddr_clk== %dMHz\n", ddr_clk);
-
- }
- }
-
- return 1;
-}
-
-int do_ddr_fine_tune_lcdlr_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter ddr_fine_tune_lcdlr_env function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
-
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
-
-#define WR_RD_ADJ_USE_ENV 1
-#define WR_RD_ADJ_USE_UART_INPUT 2
- unsigned int wr_rd_adj_input_src=1;
-
- int wr_adj_per[12]={
- 100 ,
- 1000 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
-
- };
- int rd_adj_per[12]={
- 100 ,
- 100 ,
- 80 ,
- 80 ,
- 80 ,
- 80 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- 100 ,
- };
- if (argc == 1)
- printf("\nplease read help\n");
-
- if (argc >= 2)
- {
- wr_rd_adj_input_src = simple_strtoull_ddr(argv[1], &endp, 10);
-
- unsigned int i=0;
- if (wr_rd_adj_input_src == WR_RD_ADJ_USE_UART_INPUT)
- {
- printf("\ntune ddr lcdlr use uart input\n");
- if (argc>24+2)
- {argc=24+2;}
- {
-
- for (i = 2;i<argc;i++)
- {
- if (i<(2+12)) {
- wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 10);
- }
- else
- {
- rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 10);
- }
- }
- }
-
- }
- if (wr_rd_adj_input_src == WR_RD_ADJ_USE_ENV)
- {printf("\ntune ddr lcdlr use uboot env\n");
- {
- //char str[24];
- const char *s;
-
- // char *varname;
- int value=0;
-
- //*varname="env_ddrtest";
- s = getenv("env_wr_lcdlr_pr");
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",wr_adj_per);
- //sprintf(str,"d%",s);
- //getc
-
- }
- value = simple_strtoull_ddr(s, &endp, 16);
- printf("%d",value);
- }
- s = getenv("env_rd_lcdlr_pr");
-
- if (s)
- {//i=0;
- //while(s_temp)
- {
- printf("%s",s);
- //sscanf(s,"d%,",rd_adj_per);
-
- }
- //value = simple_strtoull_ddr(s, &endp, 16);
- }
-
- //sprintf(str, "%lx", value);
- // setenv("env_ddrtest", str);
-
-
- //run_command("save",0);
- }
-
- if (argc>24+2)
- argc=24+2;
- for (i = 2;i<argc;i++)
- {
- if (i<(2+12)) {
- wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
- }
- else
- {
- rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
- }
- }
-
-
- }
- printf(" int wr_adj_per[12]={\n");
- for (i = 0;i<12;i++)
- {
- printf("%04d ,\n",wr_adj_per[i]);
- }
- printf("};\n");
- printf(" int rd_adj_per[12]={\n");
- for (i = 0;i<12;i++)
- {
- printf("%04d ,\n",rd_adj_per[i]);
- }
- printf("};\n");
-
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
- wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))|(1<<0));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
- wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))|(1<<0));
-#else
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
- wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))|(1<<26));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
- wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))|(1<<26));
-#endif
-
- int lcdlr_w=0,lcdlr_r=0;
- unsigned temp_reg=0;
- int temp_count=0;
- for ( temp_count=0;temp_count<2;temp_count++)
- { temp_reg=(unsigned)(DDR0_PUB_ACLCDLR+(temp_count<<2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- if (temp_count == 1)
- lcdlr_w=lcdlr_w&ACBDLR_MAX;
- wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
- }
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- for ( temp_count=2;temp_count<6;temp_count++)
- { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
- wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
- wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
- }
-#else
- for ( temp_count=2;temp_count<6;temp_count++)
- { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
- }
-#endif
- for ( temp_count=6;temp_count<8;temp_count++)
- { temp_reg=(unsigned)(DDR1_PUB_ACLCDLR+((temp_count-6)<<2));
-
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- if (temp_count == 7)
- lcdlr_w=lcdlr_w&ACBDLR_MAX;
- wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
- }
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
- for ( temp_count=8;temp_count<12;temp_count++)
- { temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-2));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
- wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
- wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR4-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
- }
-#else
- for ( temp_count=8;temp_count<12;temp_count++)
- { temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-8));
- lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&0xff);
- lcdlr_w=lcdlr_w?lcdlr_w:1;
- lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&0xff);
- lcdlr_r=lcdlr_r?lcdlr_r:1;
- lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
- lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
- wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
- }
-#endif
-
-#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
-
-
- wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))&(~(1<<0)));
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
-
- wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))&(~(1<<0)));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
-
-
-#else
- wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))&(~(1<<26)));
- wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
-
- wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))&(~(1<<26)));
- wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
-#endif
- printf("\nend adjust lcdlr\n");
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
- }
-
-
-
- return 1;
-
-}
-//*/
-int do_ddr_modify_reg_use_mask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter ddr_modify_reg_use_mask function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
-
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
- // unsigned int *p_start_addr;
-
- unsigned int reg_add=0;
- unsigned int wr_reg_value=0;
- unsigned int rd_reg_value=0;
- unsigned int wr_reg_and_mask_1=0xffffffff;
- // unsigned int wr_reg_or_mask_2=0x0;
-
-
-
- if (argc == 1)
- { printf("\nplease read help\n");
- printf("\nexample only change 0xc8836800 0x8c010226 0x000fffff bit20-bit31,no change pll od oc \n");
- printf("\nddr_test_cmd 9 0xc8836800 0x8c010226 0x000fffff\n");
- }
- else {
- if (argc >= 2)
- {
- reg_add = simple_strtoull_ddr(argv[1], &endp, 10);
- }
- if (argc >= 3)
- {
- wr_reg_value = simple_strtoull_ddr(argv[2], &endp, 10);
- }
- if (argc >= 4)
- {
- wr_reg_and_mask_1 = simple_strtoull_ddr(argv[3], &endp, 10);
-
- }
- rd_reg_value= (rd_reg(reg_add));
- wr_reg(reg_add,(rd_reg_value&wr_reg_and_mask_1)|(wr_reg_value&(~wr_reg_and_mask_1)) );
- //rd_reg_value= (rd_reg(reg_add));
- //wr_reg(reg_add,(rd_reg_value&(~wr_reg_or_mask_2))|(wr_reg_value&(wr_reg_or_mask_2)) );
-
- printf("\nmodify ok read==0x%08x\n",(rd_reg(reg_add)));
-
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
- }
-
- return 1;
-
-}
-int do_ddr_set_zq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter set ddr zq function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
-
- unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
- unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
- unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
- // unsigned int zq0pr_best;
- unsigned int zq0pr0= rd_reg(DDR0_PUB_ZQ0PR);
- unsigned int zq1pr0= rd_reg(DDR0_PUB_ZQ1PR);
- unsigned int zq2pr0= rd_reg(DDR0_PUB_ZQ2PR);
-
- if (argc == 1)
- { printf("\nplease read help\n");
- printf("\nexample only change zq \n");
- printf("\nddr_test_cmd 10 0x19\n");
- }
- else{
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- zq0pr0= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
- // zq1pr0 = argv[2];
- zq1pr0= simple_strtoull_ddr(argv[2], &endp, 0);
- }
-
- if (argc >= 4)
- {
- // zq2pr0 =argv[3];
- zq2pr0= simple_strtoull_ddr(argv[3], &endp, 0);
-
- }}
-
- printf("\nzq0pr_org== 0x%08x\n", zq0pr_org);
- printf("\nzq1pr_org== 0x%08x\n", zq1pr_org);
- printf("\nzq2pr_org== 0x%08x\n", zq2pr_org);
- wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
- printf("\norg channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
- printf("\norg channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
- printf("\norg channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
-
- wr_reg( DDR0_PUB_ZQ0PR,zq0pr0);
- wr_reg( DDR0_PUB_ZQ1PR,zq1pr0);
- wr_reg( DDR0_PUB_ZQ2PR,zq2pr0);
- wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
- wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))&(~((1<<2)|(1<<27))));
- printf("\nupdate channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
- printf("\nupdate channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
- printf("\nupdate channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
-
- wr_reg( DDR0_PUB_ZQ0PR,zq0pr0);
- wr_reg( DDR0_PUB_ZQ1PR,zq1pr0);
- wr_reg( DDR0_PUB_ZQ2PR,zq2pr0);
- printf("\nupdate channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
- printf("\nupdate channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
- printf("\nupdate channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
-
- //wr_reg( DDR1_PUB_ZQCR,(rd_reg(DDR1_PUB_ZQCR))|(1<<2)|(1<<27));
- //wr_reg( DDR1_PUB_ZQCR,(rd_reg(DDR1_PUB_ZQCR))&(~((1<<2)|(1<<27))));
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
- return 1;
-
-}
-
-
-int ddr_ee_pwm_voltage_table[31][2] = {
- { 0x1c0000, 860},
- { 0x1b0001, 870},
- { 0x1a0002, 880},
- { 0x190003, 890},
- { 0x180004, 900},
- { 0x170005, 910},
- { 0x160006, 920},
- { 0x150007, 930},
- { 0x140008, 940},
- { 0x130009, 950},
- { 0x12000a, 960},
- { 0x11000b, 970},
- { 0x10000c, 980},
- { 0x0f000d, 990},
- { 0x0e000e, 1000},
- { 0x0d000f, 1010},
- { 0x0c0010, 1020},
- { 0x0b0011, 1030},
- { 0x0a0012, 1040},
- { 0x090013, 1050},
- { 0x080014, 1060},
- { 0x070015, 1070},
- { 0x060016, 1080},
- { 0x050017, 1090},
- { 0x040018, 1100},
- { 0x030019, 1110},
- { 0x02001a, 1120},
- { 0x01001b, 1130},
- { 0x00001c, 1140}
-};
-
-
-void ddr_test_pwm_set_voltage(unsigned int id, unsigned int voltage)
-{
- int to;
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
- enum pwm_id {
- pwm_a = 0,
- pwm_b,
- pwm_c,
- pwm_d,
- pwm_e,
- pwm_f,
- };
-
- //printf("test ddr init pwm id %08d \n",id);
-
- unsigned reg;
- /*
- * TODO: support more pwm controllers, right now only support
- * PWM_B, PWM_D
- */
- switch (id) {
- case pwm_b:
- reg =* (P_PWM_MISC_REG_AB);
- reg &= ~(0x7f << 16);
- reg |= ((1 << 23) | (1 << 1));
- *(P_PWM_MISC_REG_AB) = reg;
- /*
- * default set to max voltage
- */
- *(P_PWM_PWM_B) = ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
- reg = *(P_PIN_MUX_REG1);
- reg &= ~(1 << 10);
- *(P_PIN_MUX_REG1) = reg;
-
- reg = *(P_PIN_MUX_REG2);
- reg &= ~(1 << 5);
- reg |= (1 << 11); // enable PWM_B
- *(P_PIN_MUX_REG2) = reg;
- break;
-
- case pwm_d:
- reg =*( P_PWM_MISC_REG_CD);
- reg &= ~(0x7f << 16);
- reg |= ((1 << 23) | (1 << 1));
- *(P_PWM_MISC_REG_CD) = reg;
- /*
- * default set to max voltage
- */
- *(P_PWM_PWM_D )= ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
- reg =*( P_PIN_MUX_REG1);
- reg &= ~(1 << 9);
- reg &= ~(1 << 11);
- *(P_PIN_MUX_REG1) = reg;
-
- reg = *(P_PIN_MUX_REG2);
- reg |= (1 << 12); // enable PWM_D
- *(P_PIN_MUX_REG2 )= reg;
- break;
- default:
- break;
- }
-
- ddr_udelay(200);
-
- //printf("test ddr set vddee to %08d mv\n",voltage);
-
- for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
- if (ddr_ee_pwm_voltage_table[to][1] >= voltage) {
- break;
- }
- }
- if (to >= ARRAY_SIZE(ddr_ee_pwm_voltage_table)) {
- to = ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1;
- }
- switch (id) {
- case pwm_b:
- *(P_PWM_PWM_B) = ddr_ee_pwm_voltage_table[to][0];
- break;
-
- case pwm_d:
- *(P_PWM_PWM_D) = ddr_ee_pwm_voltage_table[to][0];
- break;
- default:
- break;
- }
- ddr_udelay(200);
-}
-
-int do_ddr_test_pwm_cmd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter do_ddr_test_pwm_cmd function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
-
-
- unsigned int id=0;
- // unsigned int voltage=1000;
- unsigned int pwm_low=0x1f;
- unsigned int pwm_high=0;
-
-
- {
-
-
-
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else{
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- // zq1pr0 = argv[2];
- id= simple_strtoull_ddr(argv[1], &endp, 0);
- //voltage= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
-
- pwm_low= simple_strtoull_ddr(argv[2], &endp, 0);
- }
- if (argc >= 4)
- {
-
- pwm_high= simple_strtoull_ddr(argv[3], &endp, 0);
- }
- pwm_low=(pwm_low>0x1f)?(0x1f):(pwm_low);
- pwm_high=(pwm_high>0x1f)?(0x1f):(pwm_high);
-
- printf("\npwm_low== 0x%08d 0-1f\n", pwm_low);
- printf("\npwm_high== 0x%08d 0-1f\n", pwm_high);
- printf("\npwm_id== 0x%08d\n", id);
- printf("\npwm_id 0== pwm_a\n");
- printf("\npwm_id 1== pwm_b\n");
- printf("\npwm_id 2== pwm_c\n");
- printf("\npwm_id 3== pwm_d\n");
- printf("\npwm_id 4== pwm_e\n");
- printf("\npwm_id 5== pwm_f\n");
- //ddr_test_pwm_set_voltage(id,voltage);
-
- {
-
-
-
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-
-
-
-
-
-
- enum pwm_id {
- pwm_a = 0,
- pwm_b,
- pwm_c,
- pwm_d,
- pwm_e,
- pwm_f,
- };
-
-
- //printf("test ddr init pwm id %08d \n",id);
-
- unsigned int reg;
-
- /*
- * TODO: support more pwm controllers, right now only support
- * PWM_B, PWM_D
- */
-
- switch (id) {
- case pwm_b:
- reg = *(P_PWM_MISC_REG_AB);
- reg &= ~(0x7f << 16);
- reg |= ((1 << 23) | (1 << 1));
- *(P_PWM_MISC_REG_AB) = reg;
- /*
- * default set to max voltage
- */
- *(P_PWM_PWM_B) =0x00001f;//pwm_low|(pwm_high<<16);// ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
- reg = *(P_PIN_MUX_REG1);
- reg &= ~(1 << 10);
- *(P_PIN_MUX_REG1) = reg;
-
- reg = *(P_PIN_MUX_REG2);
- reg &= ~(1 << 5);
- reg |= (1 << 11); // enable PWM_B
- *(P_PIN_MUX_REG2 )= reg;
- break;
-
- case pwm_d:
- reg = *(P_PWM_MISC_REG_CD);
- reg &= ~(0x7f << 16);
- reg |= ((1 << 23) | (1 << 1));
- *(P_PWM_MISC_REG_CD) = reg;
- /*
- * default set to max voltage
- */
- *(P_PWM_PWM_D )= 0x00001f;//pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
- reg =*( P_PIN_MUX_REG1);
- reg &= ~(1 << 9);
- reg &= ~(1 << 11);
- *(P_PIN_MUX_REG1) = reg;
-
- reg = *(P_PIN_MUX_REG2);
- reg |= (1 << 12); // enable PWM_D
- *(P_PIN_MUX_REG2) = reg;
- break;
- default:
- break;
- }
-
- ddr_udelay(200);
-
- //printf("test ddr set vddee to %08d mv\n",voltage);
-
- //for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
- // if (ddr_ee_pwm_voltage_table[to][1] >= voltage) {
- // break;
- // }
- //}
- //if (to >= ARRAY_SIZE(ddr_ee_pwm_voltage_table)) {
- // to = ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1;
- //}
-
- switch (id) {
- case pwm_b:
- *(P_PWM_PWM_B) = pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[to][0];
- break;
-
- case pwm_d:
- *(P_PWM_PWM_D) = pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[to][0];
- break;
- default:
- break;
- }
- ddr_udelay(200);
- }
-
- unsigned int ddl_100step_ps= 0;
- ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
- printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
- ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
-
-
- }
-
- }
- return 1;
-
-}
-int do_ddr_test_pwm_ddl (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter do_ddr_test_pwm_ddl function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
-
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
-
- unsigned int id=0;
- unsigned int voltage=1000;
- unsigned int loop=0;
- int to;
-
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else{
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- voltage= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
- // zq1pr0 = argv[2];
- id= simple_strtoull_ddr(argv[2], &endp, 0);
- }
- if (argc >= 4)
- {
- // zq1pr0 = argv[2];
- loop= simple_strtoull_ddr(argv[3], &endp, 0);
- }
-
- printf("\nvoltage== %08d\n", voltage);
- printf("\npwm_id== %08d\n", id);
- printf("\npwm_id 0== pwm_a\n");
- printf("\npwm_id 1== pwm_b\n");
- printf("\npwm_id 2== pwm_c\n");
- printf("\npwm_id 3== pwm_d\n");
- printf("\npwm_id 4== pwm_e\n");
- printf("\npwm_id 5== pwm_f\n");
- ddr_test_pwm_set_voltage(id,voltage);
- unsigned int ddl_100step_ps= 0;
- ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
- printf("\nvoltage ==%08d,ddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n",voltage, ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
- ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
-
- if (loop)
- {
-
- for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
-
- ddr_test_pwm_set_voltage(id,(ddr_ee_pwm_voltage_table[to][1]));
- ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
- printf("\nvoltage ==%08d,ddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n",
- (ddr_ee_pwm_voltage_table[to][1]),ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
- ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
- }
- }
-
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
-
-
- }
-
- return 1;
-
-}
-
-int do_ddr_test_shift_ddr_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test shift ddr clk function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- int test_app_pra[4] = {0,0,0,0};
-
- char *endp;
-
-
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else{
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- test_app_pra[0]= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
- // zq1pr0 = argv[2];
- test_app_pra[1]= simple_strtoull_ddr(argv[2], &endp, 0);
- }
-
- if (argc >= 4)
- {
- // zq2pr0 =argv[3];
- test_app_pra[2]= simple_strtoull_ddr(argv[3], &endp, 0);
-
- }
- }
-
-
- //shift ddr frequency test
- printf("test_app_pra[0]==0x%08x\n",test_app_pra[0] );
- printf("test_app_pra[1]==0x%08x\n",test_app_pra[1] );
- printf("test_app_pra[2]==0x%08x\n",test_app_pra[2] );
- unsigned int reg_value[4] = {0};
- unsigned int delay_ms_time=30;
- unsigned int test_times=0xffff;
- unsigned int test_count=0;
- unsigned int test_loop_flag=0;
- reg_value[0]=0xc4aae860 ;
- wr_reg( 0xc883601c,(reg_value[0]));
- //update_reg_debug_value(&(reg_value[0]),0xc883601c );
- reg_value[1]=0x000ea203 ;
- wr_reg( 0xc8837004,(reg_value[1]));
- //update_reg_debug_value(&(reg_value[1]),0xc8837004 );
-
- reg_value[3]=0x03e3b740 ;
- if ((test_app_pra[1]))
- {delay_ms_time=(test_app_pra[1]);
- }
- if ((test_app_pra[2]))
- {test_times=(test_app_pra[2]);
- if (test_times == 0xffffffff)
- test_loop_flag=1;
- }
- printf("delay_ms_time==%d\n",delay_ms_time );
- printf("test_times==%d\n",test_times );
- if (test_app_pra[0] ==0)
- reg_value[2]=0x03e3b750 ;
- if (test_app_pra[0] ==1)
- reg_value[2]=0x03e3b754 ;
- if (test_app_pra[0] ==2)
- reg_value[2]=0x03e3b758 ;
- if (test_app_pra[0] ==3)
- reg_value[2]=0x03e3b75c ;
-
- if (test_app_pra[0] ==4)
- {
- reg_value[2]=0x03e3b750 ;
- reg_value[3]=0x03e3b754 ;
- }
- if (test_app_pra[0] ==5)
- {
- reg_value[2]=0x03e3b750 ;
- reg_value[3]=0x03e3b758 ;
- }
- if (test_app_pra[0] ==6)
- {
- reg_value[2]=0x03e3b750 ;
- reg_value[3]=0x03e3b75c ;
- }
- if (test_app_pra[0] ==7)
- {
- reg_value[2]=0x03e3b754 ;
- reg_value[3]=0x03e3b758 ;
- }
- if (test_app_pra[0] ==8)
- {
- reg_value[2]=0x03e3b754 ;
- reg_value[3]=0x03e3b75c ;
- }
- if (test_app_pra[0] ==9)
- {
- reg_value[2]=0x03e3b758 ;
- reg_value[3]=0x03e3b75c ;
- }
- while (1) {test_count++;
- // reg_value[2]=0x03e3b750 ;
- //update_reg_debug_value(&(reg_value[2]),0xc883700c );
-
- wr_reg( 0xc8837010,(0x001c0101));
- ddr_udelay(delay_ms_time * 1000);
- wr_reg( 0xc883700c,(reg_value[2]));
- printf("\nupdate reg 0xc883700c=0x%08x\n",rd_reg(0xc883700c));
- ddr_udelay(delay_ms_time * 1000);
- wr_reg( 0xc8837010,(0x000c0101));
- ddr_udelay(delay_ms_time * 1000);
- wr_reg( 0xc8837010,(0x001c0101));
- ddr_udelay(delay_ms_time * 1000);
- //usleep(1000 * 1000);
- //reg_value[3]=0x03e3b740 ;
- //update_reg_debug_value(&(reg_value[3]),0xc883700c );
- wr_reg( 0xc883700c,(reg_value[3]));
- printf("\nupdate reg 0xc883700c=0x%08x\n",rd_reg(0xc883700c));
- ddr_udelay(delay_ms_time * 1000);
- wr_reg( 0xc8837010,(0x000c0101));
- ddr_udelay(delay_ms_time * 1000);
- printf("\ntesting %d times\n",(test_count));
- if (!test_loop_flag)
- {
- if (test_count == test_times)
- break;
- }
- }
-
- return 1;
-
-}
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
-int do_ddr_test_shift_ddr_clk_txl(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test shift ddr clk function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
- int test_app_pra[4] = {0,0,0,0};
-
- char *endp;
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else{
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- test_app_pra[0]= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
- // zq1pr0 = argv[2];
- test_app_pra[1]= simple_strtoull_ddr(argv[2], &endp, 0);
- }
-
- if (argc >= 4)
- {
- // zq2pr0 =argv[3];
- test_app_pra[2]= simple_strtoull_ddr(argv[3], &endp, 0);
-
- }}
- if (argc >= 5)
- {
- // zq2pr0 =argv[3];
- test_app_pra[3]= simple_strtoull_ddr(argv[4], &endp, 0);
-
- }
-
-
-
-
-
- //shift ddr frequency test
- printf("test_app_pra[0]==0x%08x\n",test_app_pra[0] );
- printf("test_app_pra[1]==0x%08x\n",test_app_pra[1] );
- printf("test_app_pra[2]==0x%08x\n",test_app_pra[2] );
- printf("test_app_pra[3]==0x%08x\n",test_app_pra[3] );
- // unsigned int reg_value[4] = {0};
- unsigned int delay_ms_time=30;
- unsigned int test_times=0xffff;
- unsigned int test_count=0;
- unsigned int test_loop_flag=0;
- //reg_value[0]=0 ;
- // reg_value[1]=0x000ea202 ;
- //wr_reg( 0xc8837004,(reg_value[1]));
- //update_reg_debug_value(&(reg_value[1]),0xc8837004 );
-
-
- if ((test_app_pra[1]))
- {delay_ms_time=(test_app_pra[1]);
- }
- if ((test_app_pra[2]))
- {test_times=(test_app_pra[2]);
- if (test_times == 0xffffffff)
- test_loop_flag=1;
- }
- delay_ms_time=0;
- printf("delay_ms_time==%d\n",delay_ms_time );
- printf("test_times==%d\n",test_times );
-
-
- // printf("\ntesting reg_value[2] ==%08x; \n",(reg_value[2));
-
-
- while (1) {test_count++;
- // reg_value[2]=0x03e3b750 ;
- //update_reg_debug_value(&(reg_value[2]),0xc883700c );
-
- wr_reg( 0xff63700c,0x3e3b774);
- // wr_reg( 0xff63700c,((rd_reg(0xff63700c))&(~(0x7<2)))|(reg_value[2]<<2)|(1<<4));
- printf("\nupdate reg 0xff63700c=0x%08x\n",rd_reg(0xff63700c));
- ddr_udelay(delay_ms_time * 1000);
- wr_reg( 0xff63700c,0x3e3b764);
- //wr_reg( 0xff63700c,((rd_reg(0xff63700c))&(~(0x7<2)))|(reg_value[2]<<2)|(1<<4));
- printf("\n...update reg 0xff63700c=0x%08x\n",rd_reg(0xff63700c));
- ddr_udelay(delay_ms_time * 1000);
-
-
-
- printf("\ntesting %d times\n",(test_count));
- if (!test_loop_flag)
- {
- if (test_count == test_times)
- break;
- }
- }
-
- return 1;
-}
-#endif
-int do_ddr_test_write_read (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- {
- printf("\nEnter do_ddr_test_ddr_write_read_current\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- char *endp;
-
- unsigned int pattern_id=1;
- unsigned int pattern[4] ={0};
- unsigned int write_read=0;
- unsigned int read_pattern[4]={0} ;
- unsigned int loop=1;
- unsigned int start_addr = DDR_TEST_START_ADDR;
- unsigned int test_size = DDR_TEST_SIZE;
- unsigned int copy_offset= DDR_TEST_SIZE;
- unsigned int no_show_info= 0;
- unsigned int us_delay_counter= 0;
-
-
- if (argc == 1)
- printf("\nplease read help\n");
- else {
- if (argc >= 2)
- {
- // zq0pr0 = argv[1];
- write_read= simple_strtoull_ddr(argv[1], &endp, 0);
- }
-
- if (argc >= 3)
- {
- // zq1pr0 = argv[2];
- pattern_id= simple_strtoull_ddr(argv[2], &endp, 0);
- }
- if (argc >= 4)
- {
- // zq1pr0 = argv[2];
- loop= simple_strtoull_ddr(argv[3], &endp, 0);
- }
- if (argc >=5)
- {
- // zq1pr0 = argv[2];
- start_addr= simple_strtoull_ddr(argv[4], &endp, 0);
- }
- if (argc >=6)
- {
- // zq1pr0 = argv[2];
- test_size= simple_strtoull_ddr(argv[5], &endp, 0);
- }
- if (argc >=7)
- {
- // zq1pr0 = argv[2];
- no_show_info= simple_strtoull_ddr(argv[6], &endp, 0);
- }
- if (argc >=8)
- {
- // zq1pr0 = argv[2];
- us_delay_counter= simple_strtoull_ddr(argv[7], &endp, 0);
- }
- }
- printf("\nwrite_read== 0x%08d\n", write_read);
- printf("\npattern_id== 0x%08d\n", pattern_id);
- printf("\nloop== 0x%08d\n", loop);
- printf("\nstart_addr== 0x%08x\n", start_addr);
- printf("\ntest_size== 0x%08x\n", test_size);
- printf("\nus_delay_counter== %d\n", us_delay_counter);
- copy_offset=test_size;
-
- unsigned int *p;
- unsigned int j;
-
-
- p = (unsigned int * )(int_convter_p(start_addr));
-
- if (pattern_id == 0)
- {
- pattern[0]=0;
- pattern[1]=0;
- pattern[2]=0;
- pattern[3]=0;
- }
- if (pattern_id == 1)
- {
- pattern[0]=0xffffffff;
- pattern[1]=0xffffffff;
- pattern[2]=0xffffffff;
- pattern[3]=0xffffffff;
- }
-
-
- do
- {
- if (write_read == 0)
- {
- if(!no_show_info)
- printf("\nloop:0x%08x:Start writing at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
- for (j=0;j<test_size/4;)
- {
- *(p+j)=(pattern[0]);
- *(p+j+1)=(pattern[1]);
- *(p+j+2)=(pattern[2]);
- *(p+j+3)=(pattern[3]);
- j=j+4;
- }
- }
- if (write_read == 1)
- {
- if(!no_show_info)
- printf("\nloop:0x%08x:Start reading at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
- for (j=0;j<test_size/4;)
- {
- read_pattern[0]= *(p+j);
- read_pattern[1]= *(p+j+1);
- read_pattern[2]=*(p+j+2);
- read_pattern[3]= *(p+j+3);
- j=j+4;
- }
- if (loop == 1) {
- if(!no_show_info)
- printf(" \nloop:0x%08x:Start reading read_pattern[0] 0x%08x, pattern[1] 0x%08x,pattern[2] 0x%08x,pattern[3] 0x%08x",
- loop,read_pattern[0], read_pattern[1],read_pattern[2],read_pattern[3]
- ); }
- }
- if (write_read == 2)
- {
- if(!no_show_info)
- printf("\nloop:0x%08x:Start copying at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
- for (j=0;j<test_size/4;)
- {
- *(p+j+copy_offset/4)= *(p+j);
- *(p+j+1+copy_offset/4)= *(p+j+1);
- *(p+j+2+copy_offset/4)= *(p+j+2);
- *(p+j+3+copy_offset/4)= *(p+j+3);
- j=j+4;
- }
- }
- if(us_delay_counter)
- {
- ddr_udelay(us_delay_counter);
- }
- }while(loop--);
-
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
-
- printf("\ntest end\n");
-
- return 1;
- }
- //*/
-}
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-
+
+ //return ddr_pll_vco_ctrl;
+}
+int pll_convert_to_ddr_clk(unsigned int ddr_pll)
+{
+ unsigned int ddr_clk=0;
+ ddr_pll=ddr_pll&0xfffff;
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ // printf("\ng12 ddr_pll== %08x \n", ddr_pll);
+ ddr_clk=pll_convert_to_ddr_clk_g12a( ddr_pll);
+ return ddr_clk;
+#endif
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ //unsigned int ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))/(((ddr_pll>>2)&0x3)+1));
+ if(((ddr_pll>>16)&0x1f))
+
+ ddr_clk = 2*((((24 * ((ddr_pll>>4)&0x1ff))/((ddr_pll>>16)&0x1f))>>((((ddr_pll>>0)&0x3)==3)?(2):(((ddr_pll>>0)&0x3))))>>((((ddr_pll>>2)&0x3)==3)?(2):(((ddr_pll>>2)&0x3))));
+
+#else
+ if((ddr_pll>>9)&0x1f)
+ ddr_clk = 2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
+
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
+ if((ddr_pll>>9)&0x1f)
+ ddr_clk = 2*((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3);
+#endif
+
+ return ddr_clk;
+}
+
+int ddr_clk_convert_to_pll(unsigned int ddr_clk)
+{
+ unsigned int ddr_pll=0x10221;
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ ddr_pll=ddr_clk_convert_to_pll_g12a( ddr_clk,0);
+ return ddr_pll;
+#endif
+
+ /* set ddr pll reg */
+ if ((ddr_clk >= 40) && (ddr_clk < 750)) {
+ // OD N M
+ ddr_pll= (2 << 16) | (1 << 9) | ((((ddr_clk/6)*6)/12) << 0);
+ }
+ else if((ddr_clk >= 750) && (ddr_clk < 2000)) {
+ // OD N M
+ ddr_pll= (1 << 16) | (1 << 9) | ((((ddr_clk/12)*12)/24) << 0);
+ }
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ ddr_pll=0x00104c5;
+ /* set ddr pll reg */
+ /*
+ if ((ddr_clk >= 40) && (ddr_clk < 750)) {
+ // OD N M
+ ddr_pll= (2 << 2) | (1 << 16) | ((((ddr_clk/6)*6)/12) << 4);
+ }
+ else if((ddr_clk >= 750) && (ddr_clk < 2000)) {
+ // OD N M
+ ddr_pll= (1 << 2) | (1 << 16) | ((((ddr_clk/12)*12)/24) << 4);
+ }
+ */
+ if ((ddr_clk < 200)) {
+ // OD1 OD N M
+ ddr_pll= (2 << 0) | (3 << 2) | (1 << 16) | ((((ddr_clk*6)/6)/3) << 4);
+ }
+ else if ((ddr_clk>= 200) && (ddr_clk< 400)) {
+ // OD1 OD N M
+ ddr_pll= (2 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*6)/6)/6) << 4);
+ }
+ else if ((ddr_clk>= 400) && (ddr_clk < 800)) {
+ // OD1 OD N M
+ ddr_pll= (1 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*12)/12)/12) << 4);
+ }
+ else if ((ddr_clk >= 800) && (ddr_clk < 2000)) {
+ // OD1 OD N M
+ ddr_pll= (0 << 0) | (1 << 2) | (1 << 16) | ((((ddr_clk*12)/12)/24) << 4);
+ }
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_DEFAULT)
+ {
+
+
+ if ((ddr_clk < 750)) {
+ // OD N M
+ ddr_pll= (2 << 16) | (1 << 9) | (((ddr_clk/24)*2)<< 0) ;
+ }
+ else if ((ddr_clk >= 750)) {
+ // OD N M
+ ddr_pll= (1 << 16) | (1 << 9) | ((ddr_clk/24)<< 0) ;
+ }
+
+ }
+#endif
+
+ return ddr_pll;
+}
+
+
+int do_ddr4_test_dram_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ char *endp;
+
+#define TEST_DRAM_CLK_USE_ENV 1
+ printf("\ntune ddr CLK use uboot env\n");
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+#define DDR_TEST_MIN_FREQ_LIMITED 50
+#define DDR_TEST_MIN_FREQ 300
+#define DDR_TEST_MAX_FREQ 3000
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ unsigned int start_freq=DDR_TEST_MIN_FREQ;
+ unsigned int end_freq=DDR_TEST_MAX_FREQ;
+ unsigned int test_loops=1;
+ //printf("\n111tune ddr CLK use uboot env\n");
+ if (argc == 1)
+ {
+ printf("\nplease read help\n");
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ start_freq=DDR_TEST_MIN_FREQ;
+ end_freq=DDR_TEST_MAX_FREQ;
+
+ }
+
+ if (argc == 2)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq=DDR_TEST_MIN_FREQ;
+ end_freq=DDR_TEST_MAX_FREQ;
+ }
+ if (argc== 3)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=DDR_TEST_MAX_FREQ;
+
+ }
+ if (argc== 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
+
+ }
+ if (argc> 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
+ test_loops=simple_strtoull_ddr(argv[4], &endp, 0);
+ }
+ unsigned int temp_test_error=0x0;
+ unsigned int ddr_pll=0;
+ unsigned int ddr_clk_org=0;
+ unsigned int ddr_clk_hope_test=0;
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+
+ //#define AM_DDR_PLL_CNTL0 ( MMC_REG_BASE + ( 0x0 << 2 ) )
+ ddr_pll = rd_reg(G12_AM_DDR_PLL_CNTL0);
+#else
+ ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
+#endif
+ //ddr_pll=ddr_pll_org;
+ printf("\nddr_pll== %08x\n", ddr_pll);
+#if 0
+#else
+ unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
+ ddr_clk_org=ddr_clk;
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+ printf("\nstart_freq== %dMHz\n", start_freq);
+ printf("\nend_freq== %dMHz\n", end_freq);
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+#endif
+
+ // {
+ // wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ // ddr_udelay(2000);
+ //}
+
+
+ unsigned int freq_table_test_value[(DDR_TEST_MAX_FREQ)/12]; // step =0 init ,1 test fail, ,2 test pass,3 test skip;
+ // char char_freq_name_table[30];
+ // const char *p_char_freq_table;
+
+ const char *p_char_ddr_test_step;
+ const char * p_char_freq_org;
+ char char_freq_org[30];
+ int ddr_feq_test_step=0; // step =0 init ,1 going ,2 done;
+
+ const char * p_char_freq_name_table;
+ char char_freq_name_table[30];
+ char char_cmd_table[100];
+ char * p_char_store_boot;
+ // char char_freq_store_boot[200];
+
+ //const char *p_freq_table_int;
+ //char char_ddr_feq_test_step[]="ddr_feq_test_step";
+ // const char *varname;
+ // const char *varvalue;
+ unsigned int temp_count=0;
+ unsigned int temp_count_sub=0;
+
+
+ //
+ p_char_ddr_test_step= getenv("ddr_feq_test_step");
+ if (p_char_ddr_test_step)
+ {
+ printf("%s",p_char_ddr_test_step);
+
+ ddr_feq_test_step = simple_strtoull_ddr(p_char_ddr_test_step, &endp, 0);
+ printf("ddr_feq_test_step=%d\n",ddr_feq_test_step);
+ }
+ if (ddr_feq_test_step) {
+ p_char_freq_org= getenv("ddr_feq_org");
+ if (p_char_freq_org)
+ {
+ printf("%s",p_char_freq_org);
+
+ ddr_clk_org = simple_strtoull_ddr(p_char_freq_org, &endp, 10); //must use 10 ,freq 0792 maybe not read sussceful use 0 auto read
+ printf("ddr_clk_org=%d\n",ddr_clk_org);
+ }
+ }
+ if (ddr_feq_test_step == 0)
+ {
+ ddr_feq_test_step=1;
+ ddr_clk_org=ddr_clk;
+ sprintf(char_freq_org,"%04d",ddr_clk);
+ printf("\nddr_org_freq=%s\n",char_freq_org);
+ setenv("ddr_feq_org", char_freq_org);
+
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<(DDR_TEST_MAX_FREQ/12)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ setenv(char_freq_name_table, "0");
+ setenv("ddr_feq_test_step", "1");
+ temp_count++;
+ }
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<((start_freq)/12)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ setenv(char_freq_name_table, "3");
+ setenv("ddr_feq_test_step", "1");
+ temp_count++;
+ }
+ while (temp_count>((end_freq)/12)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ setenv(char_freq_name_table, "3");
+ setenv("ddr_feq_test_step", "1");
+ temp_count++;
+ }
+
+ p_char_store_boot= getenv("storeboot");
+ if (p_char_store_boot)
+ printf("storeboot %s\n",p_char_store_boot);
+ sprintf(char_cmd_table,"ddr_test_cmd 0x1c 0x%08x %d %d %d;%s;",ddr_test_size,start_freq,end_freq,test_loops,p_char_store_boot);
+ setenv("storeboot", char_cmd_table);
+
+ run_command("save",0);
+
+ }
+
+ if (ddr_feq_test_step == 1)
+ {
+
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+
+ p_char_freq_name_table= getenv(char_freq_name_table);
+ if (p_char_freq_name_table)
+ {
+ printf("%s\n",p_char_freq_name_table);
+
+ freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
+ }
+ temp_count++;
+ }
+
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
+ ddr_clk_hope_test=(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12)));
+ if (freq_table_test_value[temp_count] ==1)
+ {
+ temp_count_sub=temp_count+1;
+ while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*12))) ==
+ (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))))
+ {temp_count_sub=temp_count_sub+1;
+ }
+ while (temp_count_sub<((DDR_TEST_MAX_FREQ)/12)) {
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ // freq_table_test_value[temp_count_sub] =1;
+ setenv(char_freq_name_table, "3");
+ temp_count_sub++;
+ }
+ {
+ ddr_feq_test_step++;
+ setenv("ddr_feq_test_step", "2");
+ run_command("save",0);
+
+ }
+ {ddr_clk_hope_test=ddr_clk_org;
+ }
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+
+ }
+ if (freq_table_test_value[temp_count] ==0)
+ {
+ if ((ddr_clk_hope_test) != (ddr_clk))
+ {
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+ }
+ if ((ddr_clk_hope_test) == (ddr_clk))
+ {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ freq_table_test_value[temp_count] =1;
+ setenv(char_freq_name_table, "1");
+ run_command("save",0);
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ while (test_loops--) {
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ //temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ if (temp_test_error)
+ {
+ freq_table_test_value[temp_count] =1;
+ setenv(char_freq_name_table, "1");
+ }
+ else
+ {
+ freq_table_test_value[temp_count] =2;
+ setenv(char_freq_name_table, "2");
+ }
+ run_command("save",0);
+
+ ddr_clk_hope_test=(temp_count*12)+12;
+ while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(ddr_clk_hope_test))) ==
+ (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))))
+ {ddr_clk_hope_test=ddr_clk_hope_test+12;
+ }
+ if (temp_test_error)
+ {ddr_clk_hope_test=ddr_clk_org;
+ }
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+ }
+
+ }
+ temp_count++;
+ }
+ ddr_feq_test_step++;
+ setenv("ddr_feq_test_step", "2");
+ run_command("save",0);
+
+ }
+
+ if (ddr_feq_test_step >= 2)
+ {
+ printf("\nfinish test ddr_feq_test_step=%d\n",ddr_feq_test_step);
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+
+ p_char_freq_name_table= getenv(char_freq_name_table);
+ if (p_char_freq_name_table)
+ {
+ printf("%s\n",p_char_freq_name_table);
+
+ freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
+ }
+ temp_count++;
+ }
+
+ printf("\nprint test ddr_feq_test_result!!!\n");
+ temp_count=(DDR_TEST_MIN_FREQ_LIMITED/12);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/12)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))));
+ p_char_freq_name_table= getenv(char_freq_name_table);
+ if (p_char_freq_name_table)
+ {
+ // printf("%s\n",p_char_freq_name_table);
+
+ freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ //printf("%d\n",freq_table_test_value[temp_count]);
+ if ( (freq_table_test_value[temp_count]) == 0) {
+ printf("%04d no init %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) == 1) {
+ printf("%04d fail %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) == 2) {
+ printf("%04d pass %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) >= 3) {
+ printf("%04d skip test %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*12))),freq_table_test_value[temp_count]);
+ }
+ temp_count++;
+ }
+ }
+
+ }
+ //sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ // printf("\nstr=%s\n",str);
+
+
+
+
+ //sprintf(str, "%lx", value);
+ // setenv("env_ddrtest", str);
+
+
+ //run_command("save",0);
+
+ //*/
+ return 1;
+
+}
+int update_ddr_zq(unsigned int zq0pr)
+{
+ wr_reg( DDR0_PUB_ZQ0PR,zq0pr);
+ wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
+ wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))&(~((1<<2)|(1<<27))));
+ printf("\nupdate zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
+ return rd_reg(DDR0_PUB_ZQ0PR);
+}
+
+int do_ddr_test_ddr_max_freq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr max frequency function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int add_freq=1;
+ unsigned int sub_freq=1;
+ unsigned int max_freq=792;
+ unsigned int min_freq=792;
+ unsigned int loop_max_freq=792;
+ unsigned int loop_min_freq=792;
+
+ unsigned int ddr_pll=0x10221;
+ unsigned int ddr_clk_org=792;
+ unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL);
+ ddr_pll=ddr_pll_org;
+ unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
+ ddr_clk_org=ddr_clk;
+ printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
+
+ unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
+ printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
+
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+
+ max_freq=ddr_clk_org;
+ min_freq=ddr_clk_org;
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ if (argc == 1)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ test_loop=1;
+ add_freq=1;
+ sub_freq=1;
+ }
+
+ if (argc == 2)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop=1;
+ add_freq=1;
+ sub_freq=1;
+ }
+ if (argc== 3)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ add_freq=1;
+ sub_freq=1;
+ }
+ if (argc >= 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ add_freq=1;
+ sub_freq=1;
+ if ((simple_strtoull_ddr(argv[3], &endp, 16)) == 1)
+ {
+ add_freq=1;
+ sub_freq=0;
+ }
+ else if((simple_strtoull_ddr(argv[3], &endp, 16))==0)
+ {
+ add_freq=0;
+ sub_freq=1;
+ }
+ }
+
+ unsigned int temp_test_error=0;
+ while (test_times<(test_loop+1))
+ {
+ printf("\ntest_times== %d times\n", test_times);
+
+ if (add_freq)
+ {
+
+ while (ddr_clk<1500)
+ {
+ temp_test_error=0;
+ ddr_clk=ddr_clk+12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
+ }
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ max_freq=ddr_clk-12;
+ printf("\nmax_ddr_clk== %dMHz\n", max_freq);
+ temp_test_error=0;
+ break;
+ }
+
+ }
+
+ while (ddr_clk>ddr_clk_org)
+ {
+ ddr_clk=ddr_clk-12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+ }
+ printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
+
+
+ }
+
+ if (sub_freq)
+ {
+
+ while (ddr_clk>24)
+ {
+ temp_test_error=0;
+ ddr_clk=ddr_clk-12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
+ }
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ min_freq=ddr_clk+12;
+ printf("\nmin_ddr_clk== %dMHz\n", min_freq);
+ temp_test_error=0;
+ break;
+ }
+
+ }
+
+ while (ddr_clk<ddr_clk_org)
+ {
+ ddr_clk=ddr_clk+12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+ }
+ printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
+
+
+ }
+
+ if (test_times == 1)
+ {
+
+ loop_max_freq=max_freq;
+ loop_min_freq=min_freq;
+ }
+ else
+ {
+ if (loop_max_freq>max_freq)
+ {
+ loop_max_freq=max_freq;
+ }
+ if (min_freq>loop_min_freq)
+ {
+ loop_min_freq=min_freq;
+ }
+ }
+ test_times++;
+
+ }
+
+ printf("\nloop_min_freq== %dMHz,pll==0x%08x\n", loop_min_freq,ddr_clk_convert_to_pll(loop_min_freq));
+ printf("\nloop_max_freq== %dMHz,pll==0x%08x\n", loop_max_freq,ddr_clk_convert_to_pll(loop_max_freq));
+
+ return loop_max_freq;
+}
+
+
+int do_ddr_test_ddr_zq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr zq function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int add_freq=1;
+ unsigned int sub_freq=1;
+ unsigned int max_freq=792;
+ unsigned int min_freq=792;
+ unsigned int loop_max_freq=792;
+ unsigned int loop_min_freq=792;
+
+ unsigned int ddr_pll=0x10221;
+ unsigned int ddr_clk_org=792;
+ unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL);
+ ddr_pll=ddr_pll_org;
+ unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
+ ddr_clk_org=ddr_clk;
+ printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
+
+ unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
+ // unsigned int zq0pr_best;
+ unsigned int zq0pr= rd_reg(DDR0_PUB_ZQ0PR);
+ // zq0pr_best=zq0pr_org;
+ unsigned int zq0pr_drv_max;
+ unsigned int zq0pr_drv_min;
+ unsigned int zq0pr_odt_max;
+ unsigned int zq0pr_odt_min;
+ unsigned int zq0pr_drv_flag=1;
+ unsigned int zq0pr_odt_flag=1;
+
+
+ printf("\nzq0pr_org== 0x%08x\n", zq0pr_org);
+
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+
+
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+
+
+
+
+
+
+ max_freq=ddr_clk_org;
+ min_freq=ddr_clk_org;
+
+
+
+
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+
+
+
+ if (argc == 1)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ test_loop=1;
+ add_freq=1;
+ sub_freq=1;
+ }
+
+ if (argc == 2)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop=1;
+ add_freq=1;
+ sub_freq=1;
+ }
+ if (argc== 3)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ add_freq=1;
+ sub_freq=1;
+ }
+ if (argc >= 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ add_freq=1;
+ sub_freq=1;
+ if ((simple_strtoull_ddr(argv[3], &endp, 16)) == 1)
+ {
+ add_freq=1;
+ sub_freq=0;
+ }
+ else if((simple_strtoull_ddr(argv[3], &endp, 16))==0)
+ {
+ add_freq=0;
+ sub_freq=1;
+ }
+ }
+
+ if (argc>4)
+ {
+ if ((simple_strtoull_ddr(argv[4], &endp, 16)) == 1)
+ {
+ zq0pr_drv_flag=0;
+ zq0pr_odt_flag=1;
+ }
+ else if((simple_strtoull_ddr(argv[4], &endp, 16))==0)
+ {
+ zq0pr_drv_flag=1;
+ zq0pr_odt_flag=0;
+ }
+
+ }
+
+
+ unsigned int temp_test_error=0;
+
+
+ test_times=1;
+ temp_test_error=0;
+ while (test_times<(test_loop+1))
+ {
+ printf("\ntest_times== %d times\n", test_times);
+
+ if (add_freq)
+ {
+
+ while (ddr_clk<1500)
+ {
+ temp_test_error=0;
+ ddr_clk=ddr_clk+12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
+ }
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ max_freq=ddr_clk-12;
+ printf("\nmax_ddr_clk== %dMHz\n", max_freq);
+ temp_test_error=0;
+ break;
+ }
+
+ }
+
+ while (ddr_clk>ddr_clk_org)
+ {
+ ddr_clk=ddr_clk-12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+ }
+ printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
+
+
+ }
+
+ if (sub_freq)
+ {
+
+ while (ddr_clk>24)
+ {
+ temp_test_error=0;
+ ddr_clk=ddr_clk-12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ printf("\ntesting_ddr_clk== %dMHz\n", ddr_clk);
+ }
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ min_freq=ddr_clk+12;
+ printf("\nmin_ddr_clk== %dMHz\n", min_freq);
+ temp_test_error=0;
+ break;
+ }
+
+ }
+
+ while (ddr_clk<ddr_clk_org)
+ {
+ ddr_clk=ddr_clk+12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+ }
+ printf("\nback to org_ddr_clk== %dMHz\n", ddr_clk);
+
+
+ }
+
+ if (test_times == 1)
+ {
+
+ loop_max_freq=max_freq;
+ loop_min_freq=min_freq;
+ }
+ else
+ {
+ if (loop_max_freq>max_freq)
+ {
+ loop_max_freq=max_freq;
+ }
+ if (min_freq>loop_min_freq)
+ {
+ loop_min_freq=min_freq;
+ }
+ }
+ test_times++;
+
+ }
+
+ printf("\nloop_min_freq== %dMHz,pll==0x%08x\n", loop_min_freq,ddr_clk_convert_to_pll(loop_min_freq));
+ printf("\nloop_max_freq== %dMHz,pll==0x%08x\n", loop_max_freq,ddr_clk_convert_to_pll(loop_max_freq));
+
+
+ while (ddr_clk
+ <loop_max_freq)
+ {
+ ddr_clk=ddr_clk+12;
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ {
+
+ wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ ddr_udelay(2000);
+ }
+ }
+ printf("\nset to loop_max_freq== %dMHz\n", loop_max_freq);
+
+ update_ddr_zq(zq0pr);
+
+ zq0pr_drv_max=(zq0pr&0xf);
+ zq0pr_drv_min=(zq0pr&0xf);
+ zq0pr_odt_max=(zq0pr&0xf0);
+ zq0pr_odt_min=(zq0pr&0xf0);
+
+ if (zq0pr_drv_flag)
+ {
+ while ((zq0pr&0xf)<0xf)
+ {
+ zq0pr++;
+ update_ddr_zq(zq0pr);
+ temp_test_error=0;
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ zq0pr--;
+ update_ddr_zq(zq0pr);
+ break;
+
+
+ }
+ }
+ zq0pr_drv_max=(zq0pr&0xf);
+ printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_max);
+
+ update_ddr_zq(zq0pr_org);
+
+ while ((zq0pr&0xf)>0x0)
+ {
+ zq0pr--;
+ update_ddr_zq(zq0pr);
+ temp_test_error=0;
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ zq0pr++;
+ update_ddr_zq(zq0pr);
+ break;
+
+
+ }
+ }
+
+
+ zq0pr_drv_min=(zq0pr&0xf);
+ printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_min);
+ }
+
+ if (zq0pr_odt_flag)
+ {
+ while ((zq0pr&0xf0)<0xf0)
+ {
+ zq0pr=zq0pr+0x10;
+ update_ddr_zq(zq0pr);
+ temp_test_error=0;
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ zq0pr=zq0pr-0x10;
+ update_ddr_zq(zq0pr);
+ break;
+
+
+ }
+ }
+ zq0pr_odt_max=(zq0pr&0xf0);
+ printf("\nzq0pr_odt_max== 0x%08x\n", zq0pr_odt_max);
+
+ update_ddr_zq(zq0pr_org);
+
+
+ while ((zq0pr&0xf0)>0x0)
+ {
+ zq0pr=zq0pr-0x10;
+ update_ddr_zq(zq0pr);
+ temp_test_error=0;
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+ if (temp_test_error)
+ {
+ zq0pr=zq0pr+0x10;
+ update_ddr_zq(zq0pr);
+ break;
+
+
+ }
+ }
+ zq0pr_odt_min=(zq0pr&0xf0);
+ printf("\nzq0pr_odt_min== 0x%08x\n", zq0pr_odt_min);
+ }
+ update_ddr_zq(zq0pr_org);
+
+ printf("\nzq0pr_drv_max== 0x%08x\n", zq0pr_drv_max);
+ printf("\nzq0pr_drv_min== 0x%08x\n", zq0pr_drv_min);
+ printf("\nzq0pr_odt_max== 0x%08x\n", zq0pr_odt_max);
+ printf("\nzq0pr_odt_min== 0x%08x\n", zq0pr_odt_min);
+
+ return loop_max_freq;
+
+
+
+}
+
+int clear_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
+{
+ wr_reg(DMC_MON_CTRL3, timer_counter);
+ wr_reg(DMC_MON_CTRL2, (port_id<<0)|(port<<16)|(0<<20)|(1<<30));
+ ddr_udelay(1);
+ if (((rd_reg(DMC_MON_CTRL2))>>30) == 1)
+ return 1;
+ else
+ return 0;
+
+
+}
+int open_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
+{
+ wr_reg(DMC_MON_CTRL3, timer_counter);
+ wr_reg(DMC_MON_CTRL2, ((rd_reg(DMC_MON_CTRL2))&(1<<30))|(port_id<<0)|(port<<16)|(0<<20)|(1<<31));
+
+ return 1;
+}
+
+int finish_ddr_band_monitor(unsigned int port,unsigned int port_id,unsigned int timer_counter)
+{
+ //wr_reg(DMC_MON_CTRL3, timer_time);
+ if (((rd_reg(DMC_MON_CTRL2))>>31) == 0)
+ {
+ printf("\nddr bandwidth timer finish count and print result\n");
+ printf("\nDMC_MON_port == 0x%08x port_id==0x%08x timer_time==0x%08x",port,port_id,timer_counter);
+ printf("\nDMC_MON_ALL_REQ_CNT == 0x%08x",(rd_reg(DMC_MON_ALL_REQ_CNT)));
+
+ printf("\nDMC_MON_ALL_GRANT_CNT == 0x%08x",(rd_reg(DMC_MON_ALL_GRANT_CNT)));
+ printf("\nDMC_MON_ALL_GRANT_CNT_band == 0x%08x kbyte,dec== %d Mbyte",((rd_reg(DMC_MON_ALL_GRANT_CNT))*(8))/1024,((rd_reg(DMC_MON_ALL_GRANT_CNT))*(8))/(1024*1024));
+ printf("\nDMC_MON_ONE _GRANT_CNT for selected port and subids == 0x%08x",(rd_reg(DMC_MON_ONE_GRANT_CNT)));
+ printf("\nDMC_MON_ONE _GRANT_CNT_band for selected port and subids == 0x%08x,dec== %dMbyte",((rd_reg(DMC_MON_ONE_GRANT_CNT))*(8))/1024,((rd_reg(DMC_MON_ONE_GRANT_CNT))*(8))/(1024*1024));
+ }
+ //wr_reg(DMC_MON_CTRL2, ((rd_reg(DMC_MON_CTRL2))&(1<<30))|(port_id<<0)|(port<<16)|(0<<20)|(1<<31));
+
+ return 1;
+}
+
+
+
+int do_ddr_test_bandwidth(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter Test ddr bandwidth function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ printf("\nargc== 0x%08x\n", argc);
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+ unsigned int test_loop=1;
+ unsigned int test_times=1;
+ unsigned int timer_time_ms=1000;
+
+
+ unsigned int ddr_pll=0x10221;
+ unsigned int ddr_clk_org=792;
+ unsigned int ddr_pll_org = rd_reg(AM_DDR_PLL_CNTL)&(~(1<<29));
+ ddr_pll=ddr_pll_org;
+ unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
+ ddr_clk_org=ddr_clk;
+ printf("\nddr_clk_org== %dMHz\n", ddr_clk_org);
+
+ unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
+ printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
+
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ unsigned int test_port=0;
+ unsigned int test_port_sub_id=1;
+
+
+ if (argc == 1)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ test_loop=1;
+
+ }
+
+ if (argc == 2)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop=1;
+
+ }
+ if (argc== 3)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+
+ }
+ if (argc >= 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ test_port= simple_strtoull_ddr(argv[3], &endp, 16);
+
+
+ }
+ if (argc >= 5)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 16);
+ test_loop= simple_strtoull_ddr(argv[2], &endp, 16);
+ test_port= simple_strtoull_ddr(argv[3], &endp, 16);
+ test_port_sub_id= simple_strtoull_ddr(argv[4], &endp, 16);
+
+ }
+ if (argc >5)
+ {
+
+ timer_time_ms= simple_strtoull_ddr(argv[5], &endp, 16);
+
+ }
+
+ //unsigned int temp_test_error=0;
+ unsigned int timer_counter=0;
+ timer_counter=(timer_time_ms*1000*ddr_clk/2);
+ //while(test_times<(test_loop+1))
+ {
+ {
+ clear_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
+ open_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
+ while (test_times<(test_loop+1))
+ {
+ printf("\ntest_times== %d times\n", test_times);
+ ddr_test_s_cross_talk_pattern(ddr_test_size);
+ test_times++;
+ }
+ finish_ddr_band_monitor( test_port, test_port_sub_id, timer_counter);
+ printf("\ntimer_time_ms== %d ms\n", timer_time_ms);
+
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+
+ }
+ }
+
+ return 1;
+}
+
+int do_ddr_fine_tune_lcdlr_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter ddr_fine_tune_lcdlr_env function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+
+#define WR_RD_ADJ_USE_ENV 1
+#define WR_RD_ADJ_USE_UART_INPUT 2
+ unsigned int wr_rd_adj_input_src=1;
+
+ int wr_adj_per[12]={
+ 100 ,
+ 1000 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+
+ };
+ int rd_adj_per[12]={
+ 100 ,
+ 100 ,
+ 80 ,
+ 80 ,
+ 80 ,
+ 80 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ 100 ,
+ };
+ if (argc == 1)
+ printf("\nplease read help\n");
+
+ if (argc >= 2)
+ {
+ wr_rd_adj_input_src = simple_strtoull_ddr(argv[1], &endp, 10);
+
+ unsigned int i=0;
+ if (wr_rd_adj_input_src == WR_RD_ADJ_USE_UART_INPUT)
+ {
+ printf("\ntune ddr lcdlr use uart input\n");
+ if (argc>24+2)
+ {argc=24+2;}
+ {
+
+ for (i = 2;i<argc;i++)
+ {
+ if (i<(2+12)) {
+ wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 10);
+ }
+ else
+ {
+ rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 10);
+ }
+ }
+ }
+
+ }
+ if (wr_rd_adj_input_src == WR_RD_ADJ_USE_ENV)
+ {printf("\ntune ddr lcdlr use uboot env\n");
+ {
+ //char str[24];
+ const char *s;
+
+ // char *varname;
+ int value=0;
+
+ //*varname="env_ddrtest";
+ s = getenv("env_wr_lcdlr_pr");
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",wr_adj_per);
+ //sprintf(str,"d%",s);
+ //getc
+
+ }
+ value = simple_strtoull_ddr(s, &endp, 16);
+ printf("%d",value);
+ }
+ s = getenv("env_rd_lcdlr_pr");
+
+ if (s)
+ {//i=0;
+ //while(s_temp)
+ {
+ printf("%s",s);
+ //sscanf(s,"d%,",rd_adj_per);
+
+ }
+ //value = simple_strtoull_ddr(s, &endp, 16);
+ }
+
+ //sprintf(str, "%lx", value);
+ // setenv("env_ddrtest", str);
+
+
+ //run_command("save",0);
+ }
+
+ if (argc>24+2)
+ argc=24+2;
+ for (i = 2;i<argc;i++)
+ {
+ if (i<(2+12)) {
+ wr_adj_per[i-2]=simple_strtoull_ddr(argv[i], &endp, 16);
+ }
+ else
+ {
+ rd_adj_per[i-14]=simple_strtoull_ddr(argv[i], &endp, 16);
+ }
+ }
+
+
+ }
+ printf(" int wr_adj_per[12]={\n");
+ for (i = 0;i<12;i++)
+ {
+ printf("%04d ,\n",wr_adj_per[i]);
+ }
+ printf("};\n");
+ printf(" int rd_adj_per[12]={\n");
+ for (i = 0;i<12;i++)
+ {
+ printf("%04d ,\n",rd_adj_per[i]);
+ }
+ printf("};\n");
+
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
+ wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))|(1<<0));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
+ wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))|(1<<0));
+#else
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))|(1<<29));
+ wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))|(1<<26));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))|(1<<29));
+ wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))|(1<<26));
+#endif
+
+ int lcdlr_w=0,lcdlr_r=0;
+ unsigned temp_reg=0;
+ int temp_count=0;
+ for ( temp_count=0;temp_count<2;temp_count++)
+ { temp_reg=(unsigned)(DDR0_PUB_ACLCDLR+(temp_count<<2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ if (temp_count == 1)
+ lcdlr_w=lcdlr_w&ACBDLR_MAX;
+ wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
+ }
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ for ( temp_count=2;temp_count<6;temp_count++)
+ { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
+ wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR3-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
+ wr_reg(((uint64_t)(temp_reg+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR1)),(lcdlr_r));
+ }
+#else
+ for ( temp_count=2;temp_count<6;temp_count++)
+ { temp_reg=(unsigned)(DDR0_PUB_DX0LCDLR1+(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
+ }
+#endif
+ for ( temp_count=6;temp_count<8;temp_count++)
+ { temp_reg=(unsigned)(DDR1_PUB_ACLCDLR+((temp_count-6)<<2));
+
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&ACLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ if (temp_count == 7)
+ lcdlr_w=lcdlr_w&ACBDLR_MAX;
+ wr_reg(((uint64_t)(temp_reg)),((lcdlr_w)&ACLCDLR_MAX));
+ }
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+ for ( temp_count=8;temp_count<12;temp_count++)
+ { temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-2));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&DQLCDLR_MAX);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1))))&DQLCDLR_MAX);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(lcdlr_w));
+ wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR3-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
+ wr_reg(((uint64_t)(temp_reg+DDR1_PUB_DX0LCDLR4-DDR1_PUB_DX0LCDLR1)),(lcdlr_r));
+ }
+#else
+ for ( temp_count=8;temp_count<12;temp_count++)
+ { temp_reg=(unsigned)(DDR1_PUB_DX0LCDLR1+(DDR1_PUB_DX1LCDLR1-DDR1_PUB_DX0LCDLR1)*(temp_count-8));
+ lcdlr_w=(int)((rd_reg((uint64_t)(temp_reg)))&0xff);
+ lcdlr_w=lcdlr_w?lcdlr_w:1;
+ lcdlr_r=(int)(((rd_reg((uint64_t)(temp_reg)))>>8)&0xff);
+ lcdlr_r=lcdlr_r?lcdlr_r:1;
+ lcdlr_w=(lcdlr_w*(wr_adj_per[temp_count]))/100;
+ lcdlr_r=(lcdlr_r*(rd_adj_per[temp_count]))/100;
+ wr_reg(((uint64_t)(temp_reg)),(((lcdlr_r<<16)|(lcdlr_r<<8)|(lcdlr_w))));
+ }
+#endif
+
+#if (CONFIG_DDR_PHY == P_DDR_PHY_905X)
+
+
+ wr_reg(DDR0_PUB_PGCR6, (rd_reg(DDR0_PUB_PGCR6))&(~(1<<0)));
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
+
+ wr_reg(DDR1_PUB_PGCR6, (rd_reg(DDR1_PUB_PGCR6))&(~(1<<0)));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
+
+
+#else
+ wr_reg(DDR0_PUB_PGCR1, (rd_reg(DDR0_PUB_PGCR1))&(~(1<<26)));
+ wr_reg(DDR0_PUB_PIR, (rd_reg(DDR0_PUB_PIR))&(~(1<<29)));
+
+ wr_reg(DDR1_PUB_PGCR1, (rd_reg(DDR1_PUB_PGCR1))&(~(1<<26)));
+ wr_reg(DDR1_PUB_PIR, (rd_reg(DDR1_PUB_PIR))&(~(1<<29)));
+#endif
+ printf("\nend adjust lcdlr\n");
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+ }
+
+
+
+ return 1;
+
+}
+//*/
+int do_ddr_modify_reg_use_mask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter ddr_modify_reg_use_mask function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+ // unsigned int *p_start_addr;
+
+ unsigned int reg_add=0;
+ unsigned int wr_reg_value=0;
+ unsigned int rd_reg_value=0;
+ unsigned int wr_reg_and_mask_1=0xffffffff;
+ // unsigned int wr_reg_or_mask_2=0x0;
+
+
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+ printf("\nexample only change 0xc8836800 0x8c010226 0x000fffff bit20-bit31,no change pll od oc \n");
+ printf("\nddr_test_cmd 9 0xc8836800 0x8c010226 0x000fffff\n");
+ }
+ else {
+ if (argc >= 2)
+ {
+ reg_add = simple_strtoull_ddr(argv[1], &endp, 10);
+ }
+ if (argc >= 3)
+ {
+ wr_reg_value = simple_strtoull_ddr(argv[2], &endp, 10);
+ }
+ if (argc >= 4)
+ {
+ wr_reg_and_mask_1 = simple_strtoull_ddr(argv[3], &endp, 10);
+
+ }
+ rd_reg_value= (rd_reg(reg_add));
+ wr_reg(reg_add,(rd_reg_value&wr_reg_and_mask_1)|(wr_reg_value&(~wr_reg_and_mask_1)) );
+ //rd_reg_value= (rd_reg(reg_add));
+ //wr_reg(reg_add,(rd_reg_value&(~wr_reg_or_mask_2))|(wr_reg_value&(wr_reg_or_mask_2)) );
+
+ printf("\nmodify ok read==0x%08x\n",(rd_reg(reg_add)));
+
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+ }
+
+ return 1;
+
+}
+int do_ddr_set_zq(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter set ddr zq function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+
+ unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
+ unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
+ unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
+ // unsigned int zq0pr_best;
+ unsigned int zq0pr0= rd_reg(DDR0_PUB_ZQ0PR);
+ unsigned int zq1pr0= rd_reg(DDR0_PUB_ZQ1PR);
+ unsigned int zq2pr0= rd_reg(DDR0_PUB_ZQ2PR);
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+ printf("\nexample only change zq \n");
+ printf("\nddr_test_cmd 10 0x19\n");
+ }
+ else{
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ zq0pr0= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ zq1pr0= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+
+ if (argc >= 4)
+ {
+ // zq2pr0 =argv[3];
+ zq2pr0= simple_strtoull_ddr(argv[3], &endp, 0);
+
+ }}
+
+ printf("\nzq0pr_org== 0x%08x\n", zq0pr_org);
+ printf("\nzq1pr_org== 0x%08x\n", zq1pr_org);
+ printf("\nzq2pr_org== 0x%08x\n", zq2pr_org);
+ wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
+ printf("\norg channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
+ printf("\norg channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
+ printf("\norg channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
+
+ wr_reg( DDR0_PUB_ZQ0PR,zq0pr0);
+ wr_reg( DDR0_PUB_ZQ1PR,zq1pr0);
+ wr_reg( DDR0_PUB_ZQ2PR,zq2pr0);
+ wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))|(1<<2)|(1<<27));
+ wr_reg( DDR0_PUB_ZQCR,(rd_reg(DDR0_PUB_ZQCR))&(~((1<<2)|(1<<27))));
+ printf("\nupdate channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
+ printf("\nupdate channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
+ printf("\nupdate channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
+
+ wr_reg( DDR0_PUB_ZQ0PR,zq0pr0);
+ wr_reg( DDR0_PUB_ZQ1PR,zq1pr0);
+ wr_reg( DDR0_PUB_ZQ2PR,zq2pr0);
+ printf("\nupdate channel 0 zq zq0pr=0x%08x,zq0dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ0PR),rd_reg(DDR0_PUB_ZQ0DR));
+ printf("\nupdate channel 0 zq zq1pr=0x%08x,zq1dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ1PR),rd_reg(DDR0_PUB_ZQ1DR));
+ printf("\nupdate channel 0 zq zq2pr=0x%08x,zq2dr=0x%08x,\n",rd_reg(DDR0_PUB_ZQ2PR),rd_reg(DDR0_PUB_ZQ2DR));
+
+ //wr_reg( DDR1_PUB_ZQCR,(rd_reg(DDR1_PUB_ZQCR))|(1<<2)|(1<<27));
+ //wr_reg( DDR1_PUB_ZQCR,(rd_reg(DDR1_PUB_ZQCR))&(~((1<<2)|(1<<27))));
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+ return 1;
+
+}
+
+
+int ddr_ee_pwm_voltage_table[31][2] = {
+ { 0x1c0000, 860},
+ { 0x1b0001, 870},
+ { 0x1a0002, 880},
+ { 0x190003, 890},
+ { 0x180004, 900},
+ { 0x170005, 910},
+ { 0x160006, 920},
+ { 0x150007, 930},
+ { 0x140008, 940},
+ { 0x130009, 950},
+ { 0x12000a, 960},
+ { 0x11000b, 970},
+ { 0x10000c, 980},
+ { 0x0f000d, 990},
+ { 0x0e000e, 1000},
+ { 0x0d000f, 1010},
+ { 0x0c0010, 1020},
+ { 0x0b0011, 1030},
+ { 0x0a0012, 1040},
+ { 0x090013, 1050},
+ { 0x080014, 1060},
+ { 0x070015, 1070},
+ { 0x060016, 1080},
+ { 0x050017, 1090},
+ { 0x040018, 1100},
+ { 0x030019, 1110},
+ { 0x02001a, 1120},
+ { 0x01001b, 1130},
+ { 0x00001c, 1140}
+};
+
+
+void ddr_test_pwm_set_voltage(unsigned int id, unsigned int voltage)
+{
+ int to;
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+ enum pwm_id {
+ pwm_a = 0,
+ pwm_b,
+ pwm_c,
+ pwm_d,
+ pwm_e,
+ pwm_f,
+ };
+
+ //printf("test ddr init pwm id %08d \n",id);
+
+ unsigned reg;
+ /*
+ * TODO: support more pwm controllers, right now only support
+ * PWM_B, PWM_D
+ */
+ switch (id) {
+ case pwm_b:
+ reg =* (P_PWM_MISC_REG_AB);
+ reg &= ~(0x7f << 16);
+ reg |= ((1 << 23) | (1 << 1));
+ *(P_PWM_MISC_REG_AB) = reg;
+ /*
+ * default set to max voltage
+ */
+ *(P_PWM_PWM_B) = ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
+ reg = *(P_PIN_MUX_REG1);
+ reg &= ~(1 << 10);
+ *(P_PIN_MUX_REG1) = reg;
+
+ reg = *(P_PIN_MUX_REG2);
+ reg &= ~(1 << 5);
+ reg |= (1 << 11); // enable PWM_B
+ *(P_PIN_MUX_REG2) = reg;
+ break;
+
+ case pwm_d:
+ reg =*( P_PWM_MISC_REG_CD);
+ reg &= ~(0x7f << 16);
+ reg |= ((1 << 23) | (1 << 1));
+ *(P_PWM_MISC_REG_CD) = reg;
+ /*
+ * default set to max voltage
+ */
+ *(P_PWM_PWM_D )= ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
+ reg =*( P_PIN_MUX_REG1);
+ reg &= ~(1 << 9);
+ reg &= ~(1 << 11);
+ *(P_PIN_MUX_REG1) = reg;
+
+ reg = *(P_PIN_MUX_REG2);
+ reg |= (1 << 12); // enable PWM_D
+ *(P_PIN_MUX_REG2 )= reg;
+ break;
+ default:
+ break;
+ }
+
+ ddr_udelay(200);
+
+ //printf("test ddr set vddee to %08d mv\n",voltage);
+
+ for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
+ if (ddr_ee_pwm_voltage_table[to][1] >= voltage) {
+ break;
+ }
+ }
+ if (to >= ARRAY_SIZE(ddr_ee_pwm_voltage_table)) {
+ to = ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1;
+ }
+ switch (id) {
+ case pwm_b:
+ *(P_PWM_PWM_B) = ddr_ee_pwm_voltage_table[to][0];
+ break;
+
+ case pwm_d:
+ *(P_PWM_PWM_D) = ddr_ee_pwm_voltage_table[to][0];
+ break;
+ default:
+ break;
+ }
+ ddr_udelay(200);
+}
+
+int do_ddr_test_pwm_cmd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter do_ddr_test_pwm_cmd function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+
+
+ unsigned int id=0;
+ // unsigned int voltage=1000;
+ unsigned int pwm_low=0x1f;
+ unsigned int pwm_high=0;
+
+
+ {
+
+
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else{
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ // zq1pr0 = argv[2];
+ id= simple_strtoull_ddr(argv[1], &endp, 0);
+ //voltage= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+
+ pwm_low= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+ if (argc >= 4)
+ {
+
+ pwm_high= simple_strtoull_ddr(argv[3], &endp, 0);
+ }
+ pwm_low=(pwm_low>0x1f)?(0x1f):(pwm_low);
+ pwm_high=(pwm_high>0x1f)?(0x1f):(pwm_high);
+
+ printf("\npwm_low== 0x%08d 0-1f\n", pwm_low);
+ printf("\npwm_high== 0x%08d 0-1f\n", pwm_high);
+ printf("\npwm_id== 0x%08d\n", id);
+ printf("\npwm_id 0== pwm_a\n");
+ printf("\npwm_id 1== pwm_b\n");
+ printf("\npwm_id 2== pwm_c\n");
+ printf("\npwm_id 3== pwm_d\n");
+ printf("\npwm_id 4== pwm_e\n");
+ printf("\npwm_id 5== pwm_f\n");
+ //ddr_test_pwm_set_voltage(id,voltage);
+
+ {
+
+
+
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+
+
+
+
+
+ enum pwm_id {
+ pwm_a = 0,
+ pwm_b,
+ pwm_c,
+ pwm_d,
+ pwm_e,
+ pwm_f,
+ };
+
+
+ //printf("test ddr init pwm id %08d \n",id);
+
+ unsigned int reg;
+
+ /*
+ * TODO: support more pwm controllers, right now only support
+ * PWM_B, PWM_D
+ */
+
+ switch (id) {
+ case pwm_b:
+ reg = *(P_PWM_MISC_REG_AB);
+ reg &= ~(0x7f << 16);
+ reg |= ((1 << 23) | (1 << 1));
+ *(P_PWM_MISC_REG_AB) = reg;
+ /*
+ * default set to max voltage
+ */
+ *(P_PWM_PWM_B) =0x00001f;//pwm_low|(pwm_high<<16);// ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
+ reg = *(P_PIN_MUX_REG1);
+ reg &= ~(1 << 10);
+ *(P_PIN_MUX_REG1) = reg;
+
+ reg = *(P_PIN_MUX_REG2);
+ reg &= ~(1 << 5);
+ reg |= (1 << 11); // enable PWM_B
+ *(P_PIN_MUX_REG2 )= reg;
+ break;
+
+ case pwm_d:
+ reg = *(P_PWM_MISC_REG_CD);
+ reg &= ~(0x7f << 16);
+ reg |= ((1 << 23) | (1 << 1));
+ *(P_PWM_MISC_REG_CD) = reg;
+ /*
+ * default set to max voltage
+ */
+ *(P_PWM_PWM_D )= 0x00001f;//pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1][0];
+ reg =*( P_PIN_MUX_REG1);
+ reg &= ~(1 << 9);
+ reg &= ~(1 << 11);
+ *(P_PIN_MUX_REG1) = reg;
+
+ reg = *(P_PIN_MUX_REG2);
+ reg |= (1 << 12); // enable PWM_D
+ *(P_PIN_MUX_REG2) = reg;
+ break;
+ default:
+ break;
+ }
+
+ ddr_udelay(200);
+
+ //printf("test ddr set vddee to %08d mv\n",voltage);
+
+ //for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
+ // if (ddr_ee_pwm_voltage_table[to][1] >= voltage) {
+ // break;
+ // }
+ //}
+ //if (to >= ARRAY_SIZE(ddr_ee_pwm_voltage_table)) {
+ // to = ARRAY_SIZE(ddr_ee_pwm_voltage_table) - 1;
+ //}
+
+ switch (id) {
+ case pwm_b:
+ *(P_PWM_PWM_B) = pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[to][0];
+ break;
+
+ case pwm_d:
+ *(P_PWM_PWM_D) = pwm_low|(pwm_high<<16);//ddr_ee_pwm_voltage_table[to][0];
+ break;
+ default:
+ break;
+ }
+ ddr_udelay(200);
+ }
+
+ unsigned int ddl_100step_ps= 0;
+ ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
+ printf("\nddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n", ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
+ ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+
+
+ }
+
+ }
+ return 1;
+
+}
+int do_ddr_test_pwm_ddl (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter do_ddr_test_pwm_ddl function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+
+ unsigned int id=0;
+ unsigned int voltage=1000;
+ unsigned int loop=0;
+ int to;
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else{
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ voltage= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ id= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+ if (argc >= 4)
+ {
+ // zq1pr0 = argv[2];
+ loop= simple_strtoull_ddr(argv[3], &endp, 0);
+ }
+
+ printf("\nvoltage== %08d\n", voltage);
+ printf("\npwm_id== %08d\n", id);
+ printf("\npwm_id 0== pwm_a\n");
+ printf("\npwm_id 1== pwm_b\n");
+ printf("\npwm_id 2== pwm_c\n");
+ printf("\npwm_id 3== pwm_d\n");
+ printf("\npwm_id 4== pwm_e\n");
+ printf("\npwm_id 5== pwm_f\n");
+ ddr_test_pwm_set_voltage(id,voltage);
+ unsigned int ddl_100step_ps= 0;
+ ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
+ printf("\nvoltage ==%08d,ddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n",voltage, ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
+ ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
+
+ if (loop)
+ {
+
+ for (to = 0; to < ARRAY_SIZE(ddr_ee_pwm_voltage_table); to++) {
+
+ ddr_test_pwm_set_voltage(id,(ddr_ee_pwm_voltage_table[to][1]));
+ ddl_100step_ps=((100*1000*1000)/(2*global_ddr_clk))/((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff);
+ printf("\nvoltage ==%08d,ddl_100step_ps== %08d,0_5cycle_ps== %08d,0_5cycle==0x%08x\n",
+ (ddr_ee_pwm_voltage_table[to][1]),ddl_100step_ps,((1000*1000)/(2*global_ddr_clk)),
+ ((((readl(DDR0_PUB_ACMDLR0)))>>16)&0xff));
+ }
+ }
+
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+
+
+ }
+
+ return 1;
+
+}
+
+int do_ddr_test_shift_ddr_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test shift ddr clk function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ int test_app_pra[4] = {0,0,0,0};
+
+ char *endp;
+
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else{
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ test_app_pra[0]= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ test_app_pra[1]= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+
+ if (argc >= 4)
+ {
+ // zq2pr0 =argv[3];
+ test_app_pra[2]= simple_strtoull_ddr(argv[3], &endp, 0);
+
+ }
+ }
+
+
+ //shift ddr frequency test
+ printf("test_app_pra[0]==0x%08x\n",test_app_pra[0] );
+ printf("test_app_pra[1]==0x%08x\n",test_app_pra[1] );
+ printf("test_app_pra[2]==0x%08x\n",test_app_pra[2] );
+ unsigned int reg_value[4] = {0};
+ unsigned int delay_ms_time=30;
+ unsigned int test_times=0xffff;
+ unsigned int test_count=0;
+ unsigned int test_loop_flag=0;
+ reg_value[0]=0xc4aae860 ;
+ wr_reg( 0xc883601c,(reg_value[0]));
+ //update_reg_debug_value(&(reg_value[0]),0xc883601c );
+ reg_value[1]=0x000ea203 ;
+ wr_reg( 0xc8837004,(reg_value[1]));
+ //update_reg_debug_value(&(reg_value[1]),0xc8837004 );
+
+ reg_value[3]=0x03e3b740 ;
+ if ((test_app_pra[1]))
+ {delay_ms_time=(test_app_pra[1]);
+ }
+ if ((test_app_pra[2]))
+ {test_times=(test_app_pra[2]);
+ if (test_times == 0xffffffff)
+ test_loop_flag=1;
+ }
+ printf("delay_ms_time==%d\n",delay_ms_time );
+ printf("test_times==%d\n",test_times );
+ if (test_app_pra[0] ==0)
+ reg_value[2]=0x03e3b750 ;
+ if (test_app_pra[0] ==1)
+ reg_value[2]=0x03e3b754 ;
+ if (test_app_pra[0] ==2)
+ reg_value[2]=0x03e3b758 ;
+ if (test_app_pra[0] ==3)
+ reg_value[2]=0x03e3b75c ;
+
+ if (test_app_pra[0] ==4)
+ {
+ reg_value[2]=0x03e3b750 ;
+ reg_value[3]=0x03e3b754 ;
+ }
+ if (test_app_pra[0] ==5)
+ {
+ reg_value[2]=0x03e3b750 ;
+ reg_value[3]=0x03e3b758 ;
+ }
+ if (test_app_pra[0] ==6)
+ {
+ reg_value[2]=0x03e3b750 ;
+ reg_value[3]=0x03e3b75c ;
+ }
+ if (test_app_pra[0] ==7)
+ {
+ reg_value[2]=0x03e3b754 ;
+ reg_value[3]=0x03e3b758 ;
+ }
+ if (test_app_pra[0] ==8)
+ {
+ reg_value[2]=0x03e3b754 ;
+ reg_value[3]=0x03e3b75c ;
+ }
+ if (test_app_pra[0] ==9)
+ {
+ reg_value[2]=0x03e3b758 ;
+ reg_value[3]=0x03e3b75c ;
+ }
+ while (1) {test_count++;
+ // reg_value[2]=0x03e3b750 ;
+ //update_reg_debug_value(&(reg_value[2]),0xc883700c );
+
+ wr_reg( 0xc8837010,(0x001c0101));
+ ddr_udelay(delay_ms_time * 1000);
+ wr_reg( 0xc883700c,(reg_value[2]));
+ printf("\nupdate reg 0xc883700c=0x%08x\n",rd_reg(0xc883700c));
+ ddr_udelay(delay_ms_time * 1000);
+ wr_reg( 0xc8837010,(0x000c0101));
+ ddr_udelay(delay_ms_time * 1000);
+ wr_reg( 0xc8837010,(0x001c0101));
+ ddr_udelay(delay_ms_time * 1000);
+ //usleep(1000 * 1000);
+ //reg_value[3]=0x03e3b740 ;
+ //update_reg_debug_value(&(reg_value[3]),0xc883700c );
+ wr_reg( 0xc883700c,(reg_value[3]));
+ printf("\nupdate reg 0xc883700c=0x%08x\n",rd_reg(0xc883700c));
+ ddr_udelay(delay_ms_time * 1000);
+ wr_reg( 0xc8837010,(0x000c0101));
+ ddr_udelay(delay_ms_time * 1000);
+ printf("\ntesting %d times\n",(test_count));
+ if (!test_loop_flag)
+ {
+ if (test_count == test_times)
+ break;
+ }
+ }
+
+ return 1;
+
+}
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+int do_ddr_test_shift_ddr_clk_txl(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test shift ddr clk function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ int test_app_pra[4] = {0,0,0,0};
+
+ char *endp;
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else{
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ test_app_pra[0]= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ test_app_pra[1]= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+
+ if (argc >= 4)
+ {
+ // zq2pr0 =argv[3];
+ test_app_pra[2]= simple_strtoull_ddr(argv[3], &endp, 0);
+
+ }}
+ if (argc >= 5)
+ {
+ // zq2pr0 =argv[3];
+ test_app_pra[3]= simple_strtoull_ddr(argv[4], &endp, 0);
+
+ }
+
+
+
+
+
+ //shift ddr frequency test
+ printf("test_app_pra[0]==0x%08x\n",test_app_pra[0] );
+ printf("test_app_pra[1]==0x%08x\n",test_app_pra[1] );
+ printf("test_app_pra[2]==0x%08x\n",test_app_pra[2] );
+ printf("test_app_pra[3]==0x%08x\n",test_app_pra[3] );
+ // unsigned int reg_value[4] = {0};
+ unsigned int delay_ms_time=30;
+ unsigned int test_times=0xffff;
+ unsigned int test_count=0;
+ unsigned int test_loop_flag=0;
+ //reg_value[0]=0 ;
+ // reg_value[1]=0x000ea202 ;
+ //wr_reg( 0xc8837004,(reg_value[1]));
+ //update_reg_debug_value(&(reg_value[1]),0xc8837004 );
+
+
+ if ((test_app_pra[1]))
+ {delay_ms_time=(test_app_pra[1]);
+ }
+ if ((test_app_pra[2]))
+ {test_times=(test_app_pra[2]);
+ if (test_times == 0xffffffff)
+ test_loop_flag=1;
+ }
+ delay_ms_time=0;
+ printf("delay_ms_time==%d\n",delay_ms_time );
+ printf("test_times==%d\n",test_times );
+
+
+ // printf("\ntesting reg_value[2] ==%08x; \n",(reg_value[2));
+
+
+ while (1) {test_count++;
+ // reg_value[2]=0x03e3b750 ;
+ //update_reg_debug_value(&(reg_value[2]),0xc883700c );
+
+ wr_reg( 0xff63700c,0x3e3b774);
+ // wr_reg( 0xff63700c,((rd_reg(0xff63700c))&(~(0x7<2)))|(reg_value[2]<<2)|(1<<4));
+ printf("\nupdate reg 0xff63700c=0x%08x\n",rd_reg(0xff63700c));
+ ddr_udelay(delay_ms_time * 1000);
+ wr_reg( 0xff63700c,0x3e3b764);
+ //wr_reg( 0xff63700c,((rd_reg(0xff63700c))&(~(0x7<2)))|(reg_value[2]<<2)|(1<<4));
+ printf("\n...update reg 0xff63700c=0x%08x\n",rd_reg(0xff63700c));
+ ddr_udelay(delay_ms_time * 1000);
+
+
+
+ printf("\ntesting %d times\n",(test_count));
+ if (!test_loop_flag)
+ {
+ if (test_count == test_times)
+ break;
+ }
+ }
+
+ return 1;
+}
+#endif
+
+void ddr_memcpy(void *dst, const void *src, uint32_t len)
+{
+ //enable_mmu_el1_s();
+ //printf("\nlen==%d,",len);
+ //printf(len);
+ //serial_puts("\n");
+ //uint32_t ddr_test_start_time_us=get_us_time(); // check cost time
+ //const char *s = src;
+ //char *d = dst;
+ len=(len>>3);
+ const long long *s = src;
+ long long *d = dst;
+ while (len)
+ {
+ //ddr_pld_cache(s) ;
+ ///1 times len==33554432 copy time==18192 us 1.2g bandwidth 3688M/S
+ // 4times len==33554432 copy time==11844 us 1.2g bandwidth 5666M/S
+ // 8times len==33554432 copy time==11844 us 1.2g bandwidth 5666M/S
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ len=len-4;
+ }
+ // uint32_t ddr_test_end_time_us=get_us_time(); // check cost time
+ // serial_puts("\ncopy time==");
+ // serial_put_dec(ddr_test_end_time_us-ddr_test_start_time_us);
+ // serial_puts("\n");
+ //printf("\ncopy time==%d us,",(ddr_test_end_time_us-ddr_test_start_time_us));
+}
+
+#define PATTERN_MATRIX_X (3+32+16+17) //68*32==2176 ///2.2k -0x880-1 loop
+#define PATTERN_MATRIX_Y (32)
+#define PATTERN_MATRIX_LOOP_SIZE ((PATTERN_MATRIX_X)*(PATTERN_MATRIX_Y)*4)
+
+unsigned int cpu_ddr_test_init_pattern_generater(unsigned int add_offset )
+{
+
+ unsigned int pattern_select=0;
+ unsigned int pattern_value=0;
+ //test_size=(test_size>0x10000)?test_size:0x10000;
+ // uint32_t write_addr = start_add;
+ uint32_t martix_x_select= 0;
+ uint32_t martix_y_select= 0;
+ unsigned int pattern_value_temp_16=0;
+ {
+ // uint32_t test_end_add = start_add+test_size;
+ // for((write_addr=start_add);(write_addr<test_end_add);)
+ {
+ pattern_select=((add_offset)%((PATTERN_MATRIX_Y)*(PATTERN_MATRIX_X)));
+ martix_x_select=pattern_select/(PATTERN_MATRIX_Y);
+ martix_y_select=pattern_select%(PATTERN_MATRIX_Y);
+ //write_addr_nibble_start=((((add_offset/PATTERN_MATRIX_Y)/PATTERN_MATRIX_X))*
+ // (((PATTERN_MATRIX_Y)*PATTERN_MATRIX_X)));
+ //write_addr_nibble_start=(((add_offset)%PATTERN_MATRIX_Y)%PATTERN_MATRIX_X)
+ {
+ if(martix_x_select==0)
+ pattern_value=0xaaaa5555; //for 16 bit bus pattern
+
+ if(martix_x_select==1)
+ pattern_value=0x0000ffff; //for 16 bit bus pattern
+
+ if(martix_x_select==2)
+ pattern_value=0;
+
+ if((martix_x_select>2)&&(martix_x_select<(3+32)))
+ {
+ pattern_value=1<<(martix_x_select-3);
+ }
+ if((martix_x_select>(2+32))&&(martix_x_select<(3+32+16))) //for 16 bit bus pattern
+ {
+ pattern_value_temp_16=(1<<(martix_x_select-3-32));
+ pattern_value=pattern_value_temp_16|((~pattern_value_temp_16)<<16);
+ }
+ if((martix_x_select>(2+32+16))&&(martix_x_select<(3+32+16+17))) //for dbi bus pattern 17 group
+ {
+ pattern_value_temp_16=(0x0f0f+0xf0f*(martix_x_select-3-32-16));
+ pattern_value=pattern_value_temp_16|((~pattern_value_temp_16)<<16);
+ }
+ }
+ if(martix_y_select%2)
+ pattern_value=~pattern_value;
+ }
+ }
+ // serial_puts("\ncpu_test_ddr_debug4");
+ return pattern_value;
+}
+
+void cpu_ddr_test_init_pattern_area(unsigned int test_init_start,unsigned int test_size,unsigned int parttern_frequency_setting )
+{
+ // printf("\n 111");
+ if(parttern_frequency_setting==0)
+ parttern_frequency_setting=1; //for different frequency pattern
+ test_size=(test_size>((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting)))?test_size:((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting));
+ //unsigned int test_start=0x1080000;
+ unsigned int write_add=test_init_start;
+ unsigned int size_loop=0;
+ unsigned int size_loop_max=0;
+ //unsigned int count=0;
+ for(;(size_loop<((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting)));)
+ {
+ //serial_puts("\ncpu_test_ddr_debug5");
+
+ // for( count=0;count<(parttern_frequency_setting);)
+ {
+ write_add = (uint32_t)(size_loop + test_init_start);
+ wr_reg((unsigned long)write_add, cpu_ddr_test_init_pattern_generater((size_loop>>2)/parttern_frequency_setting));
+ size_loop=size_loop+4;
+ }
+ // serial_puts("\ncpu_test_ddr_debug6");
+
+ // serial_puts(" ");
+ #if 0
+ serial_put_hex(size_loop,32);
+ serial_puts(" ");
+ serial_put_hex(cpu_ddr_test_init_pattern_generater(size_loop>>2),32);
+ #endif
+ }
+ size_loop=1;
+ size_loop_max=((test_size/(((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting))))+1);
+ for(;(size_loop<size_loop_max);)
+ {
+ // serial_puts("\ncpu_test_ddr_debug41");
+ ddr_memcpy((void *)(uint64_t)(test_init_start+((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting))*(size_loop)), (void *)(uint64_t)test_init_start, ((PATTERN_MATRIX_LOOP_SIZE)*(parttern_frequency_setting)));
+ //serial_puts("\ncpu_test_ddr_debug42");
+ size_loop++;
+ }
+}
+
+unsigned int cpu_ddr_test(unsigned test_init_start,unsigned int start_add, unsigned int test_size, unsigned int test_data_bit_enable,unsigned int parttern_frequency_setting)
+{
+ //printf("\n 1112");
+
+ unsigned int src_add=test_init_start;
+ unsigned int pattern_value=0;
+ unsigned int size_loop=0;
+ unsigned int ddr_test_error=0;
+ unsigned int read_add=0;
+ unsigned int read_value=0;
+ test_size=(test_size>0x2000)?(test_size):(0x2000);
+ //cpu_ddr_test_init_pattern_area(test_size);
+ uint32_t ddr_test_start_time_us=get_us_time(); // check cost time
+ ddr_memcpy((void *)(uint64_t)start_add, (void *)(uint64_t)src_add, test_size);
+ uint32_t ddr_test_end_time_us=get_us_time(); // check cost time
+ printf("\ncpu_ddr_test_test_copy_bandwidth==%d Mbyte/s\n",(1*test_size*2)/(ddr_test_end_time_us-ddr_test_start_time_us));
+
+ for(;size_loop<(test_size);)
+ {
+ read_add = (uint32_t)(size_loop + start_add);
+ read_value=(rd_reg((unsigned long)read_add));
+ pattern_value=( cpu_ddr_test_init_pattern_generater((size_loop>>2)/parttern_frequency_setting));
+ if(((test_data_bit_enable)&read_value)!=((test_data_bit_enable)&pattern_value))
+ {
+ #if 1
+ printf("error data enable %08x read_value %08x pattern_value %08x",test_data_bit_enable,read_value,pattern_value);
+ #if 0
+ serial_puts("\nerror data ");
+ serial_put_hex(test_data_bit_enable,32);
+ serial_puts(" ");
+ serial_put_hex(read_value,32);
+ serial_puts(" ");
+ serial_put_hex(pattern_value,32);
+ serial_puts("\n");
+ #endif
+ #endif
+ ddr_test_error++;
+ return ddr_test_error;
+ }
+ size_loop=size_loop+(1<<2);// use big step will fast test ,but lose accuracy.
+ }
+ //printf("\n 1114");
+ return ddr_test_error;
+}
+
+int do_cpu_ddr_test (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ //ddr_cpu_test 0x1080000 0x10000000 0x2000000 0xffffffff 10 //size do not overlap
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ unsigned int init_start_add=0;
+ unsigned int test_add=0;
+ unsigned int test_size=0;
+ unsigned int test_data_bit_enable=0;
+ unsigned int test_loops=0;
+ unsigned int test_loop=0;
+ unsigned int test_errors=0;
+ unsigned int parttern_frequency_setting =1;
+ char *endp;
+ if (argc == 1)
+ printf("\nplease read help\n");
+ else
+ {
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ init_start_add= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ test_add= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+ if (argc >= 4)
+ {
+ // zq1pr0 = argv[2];
+ test_size= simple_strtoull_ddr(argv[3], &endp, 0);
+ }
+ if (argc >= 5)
+ {
+ // zq1pr0 = argv[2];
+ test_data_bit_enable= simple_strtoull_ddr(argv[4], &endp, 0);
+ }
+ if (argc >= 6)
+ {
+ // zq1pr0 = argv[2];
+ test_loops= simple_strtoull_ddr(argv[5], &endp, 0);
+ if(test_loops==0)
+ test_loops=1;
+ }
+ if (argc >= 7)
+ {
+ // zq1pr0 = argv[2];
+ parttern_frequency_setting= simple_strtoull_ddr(argv[6], &endp, 0);
+ if(parttern_frequency_setting==0)
+ parttern_frequency_setting=1;
+ }
+ }
+ uint32_t ddr_test_start_time_us=get_us_time(); // check cost time
+ cpu_ddr_test_init_pattern_area(init_start_add,test_size,parttern_frequency_setting);
+ for(test_loop=0;test_loop<test_loops;)
+ {
+ test_errors=test_errors+cpu_ddr_test(init_start_add,test_add,test_size,test_data_bit_enable,parttern_frequency_setting);
+ test_loop++;
+ printf("\ncpu_ddr_test_test_times==%d test_errors==%d",test_loop,test_errors);
+ }
+ uint32_t ddr_test_end_time_us=get_us_time(); // check cost time
+ printf("\ncpu_ddr_test_test_and compare_bandwidth==%d Mbyte/s\n",(test_loops*test_size*2)/(ddr_test_end_time_us-ddr_test_start_time_us));
+ return test_errors;
+}
+U_BOOT_CMD(
+ ddr_cpu_test, 30, 1, do_cpu_ddr_test,
+ "ddr_test_cmd cmd arg1 arg2 arg3...",
+ "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+
+int do_ddr_test_write_read (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ {
+ printf("\nEnter do_ddr_test_ddr_write_read_current\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ char *endp;
+
+ unsigned int pattern_id=1;
+ unsigned int pattern[4] ={0};
+ unsigned int write_read=0;
+ unsigned int read_pattern[4]={0} ;
+ unsigned int loop=1;
+ unsigned int start_addr = DDR_TEST_START_ADDR;
+ unsigned int test_size = DDR_TEST_SIZE;
+ unsigned int copy_offset= DDR_TEST_SIZE;
+ unsigned int no_show_info= 0;
+ unsigned int us_delay_counter= 0;
+
+
+ if (argc == 1)
+ printf("\nplease read help\n");
+ else {
+ if (argc >= 2)
+ {
+ // zq0pr0 = argv[1];
+ write_read= simple_strtoull_ddr(argv[1], &endp, 0);
+ }
+
+ if (argc >= 3)
+ {
+ // zq1pr0 = argv[2];
+ pattern_id= simple_strtoull_ddr(argv[2], &endp, 0);
+ }
+ if (argc >= 4)
+ {
+ // zq1pr0 = argv[2];
+ loop= simple_strtoull_ddr(argv[3], &endp, 0);
+ }
+ if (argc >=5)
+ {
+ // zq1pr0 = argv[2];
+ start_addr= simple_strtoull_ddr(argv[4], &endp, 0);
+ }
+ if (argc >=6)
+ {
+ // zq1pr0 = argv[2];
+ test_size= simple_strtoull_ddr(argv[5], &endp, 0);
+ }
+ if (argc >=7)
+ {
+ // zq1pr0 = argv[2];
+ no_show_info= simple_strtoull_ddr(argv[6], &endp, 0);
+ }
+ if (argc >=8)
+ {
+ // zq1pr0 = argv[2];
+ us_delay_counter= simple_strtoull_ddr(argv[7], &endp, 0);
+ }
+ }
+ printf("\nwrite_read== 0x%08d\n", write_read);
+ printf("\npattern_id== 0x%08d\n", pattern_id);
+ printf("\nloop== 0x%08d\n", loop);
+ printf("\nstart_addr== 0x%08x\n", start_addr);
+ printf("\ntest_size== 0x%08x\n", test_size);
+ printf("\nus_delay_counter== %d\n", us_delay_counter);
+ copy_offset=test_size;
+
+ unsigned int *p;
+ unsigned int j;
+
+
+ p = (unsigned int * )(int_convter_p(start_addr));
+
+ if (pattern_id == 0)
+ {
+ pattern[0]=0;
+ pattern[1]=0;
+ pattern[2]=0;
+ pattern[3]=0;
+ }
+ if (pattern_id == 1)
+ {
+ pattern[0]=0xffffffff;
+ pattern[1]=0xffffffff;
+ pattern[2]=0xffffffff;
+ pattern[3]=0xffffffff;
+ }
+
+
+ do
+ {
+ if (write_read == 0)
+ {
+ if(!no_show_info)
+ printf("\nloop:0x%08x:Start writing at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
+ for (j=0;j<test_size/4;)
+ {
+ *(p+j)=(pattern[0]);
+ *(p+j+1)=(pattern[1]);
+ *(p+j+2)=(pattern[2]);
+ *(p+j+3)=(pattern[3]);
+ j=j+4;
+ }
+ }
+ if (write_read == 1)
+ {
+ if(!no_show_info)
+ printf("\nloop:0x%08x:Start reading at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
+ for (j=0;j<test_size/4;)
+ {
+ read_pattern[0]= *(p+j);
+ read_pattern[1]= *(p+j+1);
+ read_pattern[2]=*(p+j+2);
+ read_pattern[3]= *(p+j+3);
+ j=j+4;
+ }
+ if (loop == 1) {
+ if(!no_show_info)
+ printf(" \nloop:0x%08x:Start reading read_pattern[0] 0x%08x, pattern[1] 0x%08x,pattern[2] 0x%08x,pattern[3] 0x%08x",
+ loop,read_pattern[0], read_pattern[1],read_pattern[2],read_pattern[3]
+ ); }
+ }
+ if (write_read == 2)
+ {
+ if(!no_show_info)
+ printf("\nloop:0x%08x:Start copying at 0x%08x - 0x%08x...", loop,start_addr, start_addr + test_size);
+ for (j=0;j<test_size/4;)
+ {
+ *(p+j+copy_offset/4)= *(p+j);
+ *(p+j+1+copy_offset/4)= *(p+j+1);
+ *(p+j+2+copy_offset/4)= *(p+j+2);
+ *(p+j+3+copy_offset/4)= *(p+j+3);
+ j=j+4;
+ }
+ }
+ if(us_delay_counter)
+ {
+ ddr_udelay(us_delay_counter);
+ }
+ }while(loop--);
+
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+
+ printf("\ntest end\n");
+
+ return 1;
+ }
+ //*/
+}
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+
#define TEST_MIN_DDR_EE_VOLTAGE 681
-#define TEST_MAX_DDR_EE_VOLTAGE 962
-#define G12_AO_PWM_PWM_B (0xff807000 + (0x001 << 2))
+#define TEST_MAX_DDR_EE_VOLTAGE 962
+#define G12_AO_PWM_PWM_B (0xff807000 + (0x001 << 2))
static int pwm_voltage_table_ee[][2] =
-{
+{
{ 0x1c0000, 681},
{ 0x1b0001, 691},
{ 0x1a0002, 701},
@@ -22340,9 +22628,9 @@ static int pwm_voltage_table_ee[][2] =
{ 0x02001a, 942},
{ 0x01001b, 952},
{ 0x00001c, 962}
-};
+};
uint32_t find_vddee_voltage_index(unsigned int target_voltage)
-{
+{
unsigned int to;
for (to = 0; to < ARRAY_SIZE(pwm_voltage_table_ee); to++) {
if (pwm_voltage_table_ee[to][1] >= target_voltage) {
@@ -22354,9 +22642,9 @@ uint32_t find_vddee_voltage_index(unsigned int target_voltage)
}
return to;
}
-
+
void set_ee_voltage(uint32_t ee_over_ride_voltage)
-{
+{
unsigned int to;
for (to = (ARRAY_SIZE(pwm_voltage_table_ee));( to >0); to--) {
if ((pwm_voltage_table_ee[to-1][1]<ee_over_ride_voltage) && (pwm_voltage_table_ee[to][1] >= ee_over_ride_voltage)) {
@@ -22364,10457 +22652,11158 @@ void set_ee_voltage(uint32_t ee_over_ride_voltage)
}
}
if (ee_over_ride_voltage) {
- writel(pwm_voltage_table_ee[to][0],G12_AO_PWM_PWM_B);
- printf ("\nDDR_overide_EE_voltage ==%d mv /n",pwm_voltage_table_ee[to-1][1]);
+ writel(pwm_voltage_table_ee[to][0],G12_AO_PWM_PWM_B);
+ printf ("\nDDR_overide_EE_voltage ==%d mv /n",pwm_voltage_table_ee[to-1][1]);
}
}
unsigned int read_ee_voltage(void)
-{
+{
unsigned int to;
unsigned int reg_value=0;
- reg_value=readl(G12_AO_PWM_PWM_B);
+ reg_value=readl(G12_AO_PWM_PWM_B);
to=reg_value&0xff;
return pwm_voltage_table_ee[to][1];
-}
-uint32_t get_bdlr_100step(uint32_t ddr_frequency)
-{
+}
+uint32_t get_bdlr_100step(uint32_t ddr_frequency)
+{
uint32_t bdlr_100step=0;
- //uint32_t ps=0;
- //ps=(rd_reg(DMC_DRAM_FREQ_CTRL))&1;
+ //uint32_t ps=0;
+ //ps=(rd_reg(DMC_DRAM_FREQ_CTRL))&1;
dwc_ddrphy_apb_wr(((((0<<20)|(2<<16)|(0<<12)|(0xe3)))),0xc00);
- bdlr_100step=(100000000/(2*ddr_frequency))/((dwc_ddrphy_apb_rd((((0<<20)|(2<<16)|(0<<12)|(0xe4)))))&0x3ff);
- return bdlr_100step;
+ bdlr_100step=(100000000/(2*ddr_frequency))/((dwc_ddrphy_apb_rd((((0<<20)|(2<<16)|(0<<12)|(0xe4)))))&0x3ff);
+ return bdlr_100step;
}
-
-int do_ddr_test_pwm_bdlr (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- printf("\nEnter g12 do_ddr_test_pwm_bdl function\n");
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- //if (argc < 2)
- // goto usage;
-
-
- unsigned int argc_count=1;
- unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
- while(argc_count<argc)
- {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
- if (*argv[argc_count] == 0 || *endp != 0) {
- para_meter[argc_count-1] = 0;
- }
- argc_count++;
- }
-
- //uint32_t id=para_meter[0];
- //uint32_t voltage=para_meter[1];
- uint32_t loop=para_meter[0];
- uint32_t voltage_min=para_meter[1];
- uint32_t voltage_max=para_meter[2];
- uint32_t show_count_message=para_meter[3];
-
- //#define PWM_ID_DEFAULT 0<<0
- //#define PWM_VOLTAGE_DEFAULT 800<<0
-#define PWM_LOOP_DEFAULT 10<<0
-#define PWM_VOLTAGE_MIN_DEFAULT TEST_MIN_DDR_EE_VOLTAGE
-#define PWM_VOLTAGE_MAX_DEFAULT TEST_MAX_DDR_EE_VOLTAGE
-
-
- //id=id?id:PWM_ID_DEFAULT;
- //voltage=voltage?voltage:PWM_VOLTAGE_DEFAULT;
- loop=loop?loop:PWM_LOOP_DEFAULT;
- voltage_min=(voltage_min<PWM_VOLTAGE_MIN_DEFAULT)?PWM_VOLTAGE_MIN_DEFAULT:voltage_min;
- voltage_max=(voltage_max>PWM_VOLTAGE_MAX_DEFAULT)?PWM_VOLTAGE_MAX_DEFAULT:voltage_max;
- voltage_max=(voltage_max<PWM_VOLTAGE_MIN_DEFAULT)?PWM_VOLTAGE_MAX_DEFAULT:voltage_max;
-
- // printf("\nvoltage_min=%d\n",voltage_min);
- // printf("\nvoltage_max=%d\n",voltage_max);
+
+int do_ddr_test_pwm_bdlr (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ printf("\nEnter g12 do_ddr_test_pwm_bdl function\n");
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ //if (argc < 2)
+ // goto usage;
+
+
+ unsigned int argc_count=1;
+ unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
+ while(argc_count<argc)
+ {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
+ if (*argv[argc_count] == 0 || *endp != 0) {
+ para_meter[argc_count-1] = 0;
+ }
+ argc_count++;
+ }
+
+ //uint32_t id=para_meter[0];
+ //uint32_t voltage=para_meter[1];
+ uint32_t loop=para_meter[0];
+ uint32_t voltage_min=para_meter[1];
+ uint32_t voltage_max=para_meter[2];
+ uint32_t show_count_message=para_meter[3];
+
+ //#define PWM_ID_DEFAULT 0<<0
+ //#define PWM_VOLTAGE_DEFAULT 800<<0
+ #define PWM_LOOP_DEFAULT 10<<0
+ #define PWM_VOLTAGE_MIN_DEFAULT TEST_MIN_DDR_EE_VOLTAGE
+ #define PWM_VOLTAGE_MAX_DEFAULT TEST_MAX_DDR_EE_VOLTAGE
+
+
+ //id=id?id:PWM_ID_DEFAULT;
+ //voltage=voltage?voltage:PWM_VOLTAGE_DEFAULT;
+ loop=loop?loop:PWM_LOOP_DEFAULT;
+ voltage_min=(voltage_min<PWM_VOLTAGE_MIN_DEFAULT)?PWM_VOLTAGE_MIN_DEFAULT:voltage_min;
+ voltage_max=(voltage_max>PWM_VOLTAGE_MAX_DEFAULT)?PWM_VOLTAGE_MAX_DEFAULT:voltage_max;
+ voltage_max=(voltage_max<PWM_VOLTAGE_MIN_DEFAULT)?PWM_VOLTAGE_MAX_DEFAULT:voltage_max;
+
+ // printf("\nvoltage_min=%d\n",voltage_min);
+ // printf("\nvoltage_max=%d\n",voltage_max);
uint16_t bdlr_100_min=0;
uint16_t bdlr_100_average=0;
uint16_t bdlr_100_max=0;
uint16_t bdlr_100_cur=0;
- //uint16_t cur_ddr_frequency=0;
- uint32_t count=1;
-
- bdlr_100_cur=get_bdlr_100step(global_ddr_clk);
- bdlr_100_min=bdlr_100_cur;
- bdlr_100_max=bdlr_100_cur;
- bdlr_100_average=bdlr_100_cur;
-
+ //uint16_t cur_ddr_frequency=0;
+ uint32_t count=1;
+
+ bdlr_100_cur=get_bdlr_100step(global_ddr_clk);
+ bdlr_100_min=bdlr_100_cur;
+ bdlr_100_max=bdlr_100_cur;
+ bdlr_100_average=bdlr_100_cur;
+
unsigned int to=0;
unsigned int to_min=0;
unsigned int to_max=(ARRAY_SIZE(pwm_voltage_table_ee))-1;
//unsigned int temp_count=0;
- printf("\nread org_EE_voltage %d mv \n",read_ee_voltage());
- to_min=find_vddee_voltage_index(voltage_min);
- to_max=find_vddee_voltage_index(voltage_max);
- for (to =(to_max+1) ;( to >to_min); to--) {
- // printf("\nTO=%d\n",to);
- writel(pwm_voltage_table_ee[to-1][0],G12_AO_PWM_PWM_B);
- udelay(1000);
- bdlr_100_cur=get_bdlr_100step(global_ddr_clk);
- bdlr_100_min=bdlr_100_cur;
- bdlr_100_max=bdlr_100_cur;
- bdlr_100_average=bdlr_100_cur;
- count=1;
-
- // printf("\nDDR_set EE_voltage %d bdlr_100_average %d bdlr_100_min %d bdlr_100_max %d count %d,bdlr_100_cur %d \n",pwm_voltage_table_ee[to-1][1],
- //bdlr_100_average,bdlr_100_min,bdlr_100_max,count,bdlr_100_cur);
-
- do {
- bdlr_100_cur=(100000000/(2*global_ddr_clk))/((dwc_ddrphy_apb_rd((((0<<20)|(2<<16)|(0<<12)|(0xe4)))))&0x3ff);
+ printf("\nread org_EE_voltage %d mv \n",read_ee_voltage());
+ to_min=find_vddee_voltage_index(voltage_min);
+ to_max=find_vddee_voltage_index(voltage_max);
+ for (to =(to_max+1) ;( to >to_min); to--) {
+ // printf("\nTO=%d\n",to);
+ writel(pwm_voltage_table_ee[to-1][0],G12_AO_PWM_PWM_B);
+ udelay(1000);
+ bdlr_100_cur=get_bdlr_100step(global_ddr_clk);
+ bdlr_100_min=bdlr_100_cur;
+ bdlr_100_max=bdlr_100_cur;
+ bdlr_100_average=bdlr_100_cur;
+ count=1;
+
+ // printf("\nDDR_set EE_voltage %d bdlr_100_average %d bdlr_100_min %d bdlr_100_max %d count %d,bdlr_100_cur %d \n",pwm_voltage_table_ee[to-1][1],
+ //bdlr_100_average,bdlr_100_min,bdlr_100_max,count,bdlr_100_cur);
+
+ do {
+ bdlr_100_cur=(100000000/(2*global_ddr_clk))/((dwc_ddrphy_apb_rd((((0<<20)|(2<<16)|(0<<12)|(0xe4)))))&0x3ff);
bdlr_100_min=(bdlr_100_cur<bdlr_100_min)?bdlr_100_cur:bdlr_100_min;
bdlr_100_max=(bdlr_100_cur>bdlr_100_max)?bdlr_100_cur:bdlr_100_max;
- bdlr_100_average=(bdlr_100_cur+bdlr_100_average*count)/(count+1);
- count++;
- if(show_count_message)
- printf("%d\n",bdlr_100_cur);
-
- }while(count<loop);
- printf("\nDDR_set EE_voltage %d bdlr_100_average %d bdlr_100_min %d bdlr_100_max %d count %d",pwm_voltage_table_ee[to-1][1],
- bdlr_100_average,bdlr_100_min,bdlr_100_max,count);
-
-
- }
-
-
-
-
- return 1;
-
-}
-int do_ddr_display_g12_ddr_information(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
-
-{
+ bdlr_100_average=(bdlr_100_cur+bdlr_100_average*count)/(count+1);
+ count++;
+ if(show_count_message)
+ printf("%d\n",bdlr_100_cur);
+
+ }while(count<loop);
+ printf("\nDDR_set EE_voltage %d bdlr_100_average %d bdlr_100_min %d bdlr_100_max %d count %d",pwm_voltage_table_ee[to-1][1],
+ bdlr_100_average,bdlr_100_min,bdlr_100_max,count);
+
+
+ }
+
+
+
+
+ return 1;
+
+}
+
+typedef struct ddr_sha_s {
+ unsigned char sha2[SHA256_SUM_LEN];
+ ddr_set_t ddrs;
+} ddr_sha_t;
+
+ddr_sha_t ddr_sha = {{0}};
+ddr_set_t *ddr_set_t_p_arrary = &ddr_sha.ddrs;
+int do_ddr_display_g12_ddr_information(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ ddr_set_t *ddr_set_t_p=NULL;
+ ddr_set_t_p=(ddr_set_t *)(ddr_set_t_p_arrary);
+ //ddr_set_t_p= (ddr_set_t *)G12_DMC_STICKY_0;
+ //if (sizeof(ddr_set_t)<loop_max)
+ printf("\nddr_set_t_p==0x%08x\n",(uint32_t)(uint64_t)(ddr_set_t_p));
+ uint32_t loop=0;
+ uint32_t loop_max = (4+(0x3f<<2));//((DMC_STICKY_63-DMC_STICKY_0));
+ // loop_max=sizeof(ddr_set_t);
+ for (loop = 0; loop <loop_max; loop+=4) {
+ wr_reg(((uint64_t)(ddr_set_t_p) + loop), rd_reg(G12_DMC_STICKY_0 + loop));
+ }
+
+{
uint16_t dq_bit_delay[72];
unsigned char t_count=0;
uint16_t delay_org=0;
uint16_t delay_temp=0;
uint32_t add_offset=0;
- dwc_ddrphy_apb_wr(0xd0000,0x0);
- bdlr_100step=get_bdlr_100step(global_ddr_clk);
- ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
-
- {
- // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
- //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(1<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
- //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(2<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
- //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(3<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
- //dwc_ddrphy_apb_wr((0<<20)|(2<<16)|(0<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //HwtMRL
-
- printf("\n dfimrl0 dfimrl1 dfimrl2 dfimrl3 HwtMRL");
- add_offset=((0<<20)|(0<<16)|(0<<12)|(0x20));
- delay_org=dwc_ddrphy_apb_rd(add_offset);
- printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
- add_offset=((0<<20)|(0<<16)|(1<<12)|(0x20));
- delay_org=dwc_ddrphy_apb_rd(add_offset);
- printf("\n t_count: %04d %04d %08x %08x",1,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
- add_offset=((0<<20)|(0<<16)|(2<<12)|(0x20));
- delay_org=dwc_ddrphy_apb_rd(add_offset);
- printf("\n t_count: %04d %04d %08x %08x",2,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
- add_offset=((0<<20)|(0<<16)|(3<<12)|(0x20));
- delay_org=dwc_ddrphy_apb_rd(add_offset);
- printf("\n t_count: %04d %04d %08x %08x",3,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
- add_offset=((0<<20)|(2<<16)|(0<<12)|(0x20));
- delay_org=dwc_ddrphy_apb_rd(add_offset);
- printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
- }
- {
- printf("\n count_index delay_value register_add register_value \n ");
- printf("\n address delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6 is coarse --step==1UI",ui_1_32_100step);
- for(t_count=0;t_count<10;t_count++)
- {
- add_offset=((0<<20)|(0<<16)|(t_count<<12)|(0x80));
+ dwc_ddrphy_apb_wr(0xd0000,0x0);
+ bdlr_100step=get_bdlr_100step(global_ddr_clk);
+ ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
+
+ {
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
+ //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(1<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
+ //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(2<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
+ //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(3<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //DFIMRL
+ //dwc_ddrphy_apb_wr((0<<20)|(2<<16)|(0<<12)|(0x20),p_dev->p_ddrs->dfi_mrl); //HwtMRL
+ //ddr_set_t_p->dfi_mrl;
+ //ddr_set_t_p->dfi_hwtmrl;
+ ddr_set_t_p->ARdPtrInitVal=0;
+ printf("\n ARdPtrInitVal");
+ add_offset=((0<<20)|(0<<16)|(0<<12)|(0x2e));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->ARdPtrInitVal=delay_org;
+ printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+
+ printf("\n dfimrl0 dfimrl1 dfimrl2 dfimrl3 HwtMRL");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->dfi_mrl=delay_org;
+ printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(1<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ printf("\n t_count: %04d %04d %08x %08x",1,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(2<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ printf("\n t_count: %04d %04d %08x %08x",2,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(3<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ printf("\n t_count: %04d %04d %08x %08x",3,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(2<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+
+ ddr_set_t_p->dfi_hwtmrl=delay_org;
+ printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ }
+ {
+ printf("\n count_index delay_value register_add register_value \n ");
+ printf("\n address delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<10;t_count++)
+ {
+ add_offset=((0<<20)|(0<<16)|(t_count<<12)|(0x80));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
- {
- printf("\n tdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-9 is coarse --step==1UI",ui_1_32_100step);
- for(t_count=0;t_count<16;t_count++)
- {
- add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0xd0+(t_count/8)+((t_count%2)<<8)));
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->ac_trace_delay[t_count]=delay_temp;
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ printf("\n tdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-9 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0xd0+(t_count/8)+((t_count%2)<<8)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
- {
- printf("\n rxdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI,no coarse",ui_1_32_100step);
- for(t_count=0;t_count<16;t_count++)
- {
- add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x8c+(t_count/8)+((t_count%2)<<8)));
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dqs_delay[t_count]=delay_temp;
+
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ printf("\n rxdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI,no coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x8c+(t_count/8)+((t_count%2)<<8)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
- {
- printf("\n write dq_bit delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-8 is coarse --step==1U",ui_1_32_100step);
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->read_dqs_delay[t_count]=delay_temp;
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ printf("\n write dq_bit delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-8 is coarse --step==1U",ui_1_32_100step);
for(t_count=0;t_count<72;t_count++)
{
- add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
- {
- printf("\n read dq_bit delay * BDLRx100==%d ps bit0-4 fine tune --step==bdlr step size about 5ps,no coarse",bdlr_100step);
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dq_bit_delay[t_count]=delay_temp;
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ printf("\n read dq_bit delay * BDLRx100==%d ps bit0-4 fine tune --step==bdlr step size about 5ps,no coarse",bdlr_100step);
for(t_count=0;t_count<72;t_count++)
{
- add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0x68+((t_count%9)<<8)+(t_count/36)));
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0x68+((t_count%9)<<8)+(t_count/36)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=((delay_org&0x3f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
- {
- printf("\n read dqs gate delay * 1/32UIx100==%d ps bit0-4 fine tune ,bit 6-10 is coarse",ui_1_32_100step);
- for(t_count=0;t_count<16;t_count++)
- {
- add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x80+(t_count/8)+((t_count%2)<<8)));
+ delay_temp=((delay_org&0x3f));
+
+ ddr_set_t_p->read_dq_bit_delay[t_count]=delay_temp;
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ printf("\n read dqs gate delay * 1/32UIx100==%d ps bit0-4 fine tune ,bit 6-10 is coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x80+(t_count/8)+((t_count%2)<<8)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
-
- printf("\n soc vref : lpddr4-- VREF = VDDQ*(0.047 + VrefDAC0[6:0]*0.00367 DDR4 --VREF = VDDQ*(0.510 + VrefDAC0[6:0]*0.00345");
- //((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value)
- for(t_count=0;t_count<72;t_count++)
- {
- add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(((t_count%36)%9)<<8)|(0x40));
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->read_dqs_gate_delay[t_count]=delay_temp;
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+
+ printf("\n soc vref : lpddr4-- VREF = VDDQ*(0.047 + VrefDAC0[6:0]*0.00367 DDR4 --VREF = VDDQ*(0.510 + VrefDAC0[6:0]*0.00345");
+ //((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value)
+ uint32_t vref_t_count=0;
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(((t_count%36)%9)<<8)|(0x40));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=((delay_org));
- printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
- }
- }
-}
-
-{
+ delay_temp=((delay_org));
+ if(t_count<35)
+ {
+ vref_t_count=((((t_count%36)/9)*8)+(t_count%9));
+ ddr_set_t_p->soc_bit_vref[vref_t_count]=delay_temp;
+ }
+ printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ printf("\n dram vref : lpddr4-- VREF = VDDQ*(0. + VrefDAC0[6:0]*0. DDR4 --VREF = VDDQ*(0. + VrefDAC0[6:0]*0.");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x082));
+ delay_temp=dwc_ddrphy_apb_rd(add_offset);
+ for(t_count=0;t_count<32;t_count++)
+ {
+ ddr_set_t_p->dram_bit_vref[t_count]=delay_temp;
+
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ printf("\n t_count: %04d %04d %08x %08x",0,delay_temp,((((add_offset) << 1)+0xfe000000)),delay_temp);
+ }
+
+ // if(over_ride_index ==DMC_TEST_WINDOW_INDEX_RETRAINING)
+ { // if (read_write==REGISTER_READ)
+ for(t_count=0;t_count<4;t_count++)
+ {//p_dev->p_ddrs->tdqs2dq=lpddr4_tdqs2dq;
+ //ddr_set_t_p->retraining[0]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaa)); //PptCtlStatic
+ //ddr_set_t_p->retraining[1]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0
+ //ddr_set_t_p->retraining[2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1
+ ddr_set_t_p->retraining[4*t_count+0]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))&0xff; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+1]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))>>8; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0 lane 0-3
+ ddr_set_t_p->retraining[4*t_count+3]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1 lane 0-3
+ }
+ }
+}
+
+{
uint32_t count=0;
uint32_t reg_add_offset=0;
uint16_t reg_value=0;
- //ddr_log_serial_puts("\npctl timming:\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
-#define DMC_DRAM_TDPD ((0x001d << 2) + 0xff638400)
-#define DMC_DRAM_TMRD ((0x0000 << 2) + 0xff638400)
-#define G12_DMC_STICKY_0 ((0x0000 << 2) + 0xff638800)
-
- printf("\n PCTL timming: 0x");
-
+ //ddr_log_serial_puts("\npctl timming:\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ #define DMC_DRAM_TDPD ((0x001d << 2) + 0xff638400)
+ #define DMC_DRAM_TMRD ((0x0000 << 2) + 0xff638400)
+ #define G12_DMC_STICKY_0 ((0x0000 << 2) + 0xff638800)
+
+ printf("\n PCTL timming: 0x");
+
for (count=0;count<(DMC_DRAM_TDPD-DMC_DRAM_TMRD);) {
reg_add_offset=(DMC_DRAM_TMRD+(count));
- //ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- //ddr_log_serial_put_hex(reg_add_offset,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- //ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- //ddr_log_serial_put_hex(readl(reg_add_offset),32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- printf("\n reg_add_offset: %08x %08x %08x ",reg_add_offset,readl(reg_add_offset),reg_add_offset);
+ //ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_put_hex(reg_add_offset,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_put_hex(readl(reg_add_offset),32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ printf("\n reg_add_offset: %08x %08x %08x ",reg_add_offset,readl(reg_add_offset),reg_add_offset);
count=count+4;
}
- //ddr_log_serial_puts("\nmrs register: base (0x54000<<1)+fe000000,byte offset\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- printf("\n mrs register: ");
- printf("\n mrs register: base (0x54000<<1)+fe000000,%08x byte offset\n",(0x54000<<1)+0xfe000000);
+ //ddr_log_serial_puts("\nmrs register: base (0x54000<<1)+fe000000,byte offset\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ printf("\n mrs register: ");
+ printf("\n mrs register: base (0x54000<<1)+fe000000,%08x byte offset\n",(0x54000<<1)+0xfe000000);
for (count=0;count<0x80;) {
reg_add_offset=0x54000+count;//dwc_ddrphy_apb_wr(0x54008,0x1001);
- //ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- //ddr_log_serial_put_hex(count,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- //ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_put_hex(count,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ //ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
reg_value= ((*(volatile uint16_t *)((uint64_t)(((0x54000+(count>>1))) << 1)+0xfe000000))>>(((count)%2)?8:0));//dwc_ddrphy_apb_rd(0x54000+add_offset+1);
reg_value=reg_value&0xff;
- //ddr_log_serial_put_hex(reg_value,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- printf("\n reg_add_offset: %08x %08x %08x",reg_add_offset,reg_value,((((0x54000+(count>>1))) << 1)+0xfe000000));
- count=count+1;
+ //ddr_log_serial_put_hex(reg_value,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ printf("\n reg_add_offset: %08x %08x %08x",reg_add_offset,reg_value,((((0x54000+(count>>1))) << 1)+0xfe000000));
+ count=count+1;
}
- //ddr_log_serial_puts("\ntimming.c:\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
-
-
- printf("\n sticky register: ");
+ //ddr_log_serial_puts("\ntimming.c:\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+
+
+ printf("\n sticky register: ");
{
uint32_t loop_max = 0;
- loop_max=64<<2;//sizeof(ddr_set_t);
+ loop_max=64<<2;//sizeof(ddr_set_t);
//uint32_t loop = 0;
for (count = 0; count < loop_max; count+=4) {
- // ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- // ddr_log_serial_put_hex(count,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- // ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
- // ddr_log_serial_put_hex(rd_reg((uint64_t)(p_dev->p_ddrs) + count),32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- // count=count+4;
- printf("\n reg_add_offset: %08x %08x %08x",count,rd_reg((uint64_t)(G12_DMC_STICKY_0) + count),((G12_DMC_STICKY_0) + count));
- }
- }
-
- // ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
-}
-
- printf("\n ");
-
-
- ddr_set_t *ddr_set_t_p;
- ddr_set_t_p= (ddr_set_t *)G12_DMC_STICKY_0;
- {
- printf("\nddr_set_t_p->magic:%08x",ddr_set_t_p->magic);
- printf("\nddr_set_t_p->rsv_int0:%08x",ddr_set_t_p->rsv_int0);
- printf("\nddr_set_t_p->board_id:%08x",ddr_set_t_p->board_id);
- printf("\nddr_set_t_p->version:%08x",ddr_set_t_p->version);
- printf("\nddr_set_t_p->DramType:%08x",ddr_set_t_p->DramType);
- printf("\nddr_set_t_p->DisabledDbyte:%08x",ddr_set_t_p->DisabledDbyte);
- printf("\nddr_set_t_p->Is2Ttiming:%08x",ddr_set_t_p->Is2Ttiming);
- printf("\nddr_set_t_p->HdtCtrl:%08x",ddr_set_t_p->HdtCtrl);
- printf("\nddr_set_t_p->dram_rank_config:%08x",ddr_set_t_p->dram_rank_config);
- printf("\nddr_set_t_p->diagnose:%08x",ddr_set_t_p->diagnose);
- printf("\nddr_set_t_p->imem_load_addr:%08x",ddr_set_t_p->imem_load_addr);
- printf("\nddr_set_t_p->dmem_load_addr:%08x",ddr_set_t_p->dmem_load_addr);
- printf("\nddr_set_t_p->imem_load_size:%08x",ddr_set_t_p->imem_load_size);
- printf("\nddr_set_t_p->dmem_load_size:%08x",ddr_set_t_p->dmem_load_size);
- printf("\nddr_set_t_p->ddr_base_addr:%08x",ddr_set_t_p->ddr_base_addr);
- printf("\nddr_set_t_p->ddr_start_offset:%08x",ddr_set_t_p->ddr_start_offset);
- printf("\nddr_set_t_p->dram_cs0_size_MB:%08x",ddr_set_t_p->dram_cs0_size_MB);
- printf("\nddr_set_t_p->dram_cs1_size_MB:%08x",ddr_set_t_p->dram_cs1_size_MB);
- printf("\nddr_set_t_p->training_SequenceCtrl[0]:%08x",ddr_set_t_p->training_SequenceCtrl[0]);
- printf("\nddr_set_t_p->training_SequenceCtrl[1]:%08x",ddr_set_t_p->training_SequenceCtrl[1]);
- printf("\nddr_set_t_p->phy_odt_config_rank[0]:%08x",ddr_set_t_p->phy_odt_config_rank[0]);
- printf("\nddr_set_t_p->phy_odt_config_rank[1]:%08x",ddr_set_t_p->phy_odt_config_rank[1]);
- printf("\nddr_set_t_p->phy_odt_config_rank[2]:%08x",ddr_set_t_p->phy_odt_config_rank[2]);
- printf("\nddr_set_t_p->phy_odt_config_rank[3]:%08x",ddr_set_t_p->phy_odt_config_rank[3]);
- printf("\nddr_set_t_p->dfi_odt_config:%08x",ddr_set_t_p->dfi_odt_config);
- printf("\nddr_set_t_p->DRAMFreq[0]:%08x",ddr_set_t_p->DRAMFreq[0]);
- printf("\nddr_set_t_p->DRAMFreq[1]:%08x",ddr_set_t_p->DRAMFreq[1]);
- printf("\nddr_set_t_p->DRAMFreq[2]:%08x",ddr_set_t_p->DRAMFreq[2]);
- printf("\nddr_set_t_p->DRAMFreq[3]:%08x",ddr_set_t_p->DRAMFreq[3]);
- printf("\nddr_set_t_p->PllBypassEn:%08x",ddr_set_t_p->PllBypassEn);
- printf("\nddr_set_t_p->ddr_rdbi_wr_enable:%08x",ddr_set_t_p->ddr_rdbi_wr_enable);
- printf("\nddr_set_t_p->ddr_rfc_type:%08x",ddr_set_t_p->ddr_rfc_type);
- printf("\nddr_set_t_p->enable_lpddr4x_mode:%08x",ddr_set_t_p->enable_lpddr4x_mode);
- printf("\nddr_set_t_p->pll_ssc_mode:%08x",ddr_set_t_p->pll_ssc_mode);
- printf("\nddr_set_t_p->clk_drv_ohm:%08x",ddr_set_t_p->clk_drv_ohm);
- printf("\nddr_set_t_p->cs_drv_ohm:%08x",ddr_set_t_p->cs_drv_ohm);
- printf("\nddr_set_t_p->ac_drv_ohm:%08x",ddr_set_t_p->ac_drv_ohm);
- printf("\nddr_set_t_p->soc_data_drv_ohm_p:%08x",ddr_set_t_p->soc_data_drv_ohm_p);
- printf("\nddr_set_t_p->soc_data_drv_ohm_n:%08x",ddr_set_t_p->soc_data_drv_ohm_n);
- printf("\nddr_set_t_p->soc_data_odt_ohm_p:%08x",ddr_set_t_p->soc_data_odt_ohm_p);
- printf("\nddr_set_t_p->soc_data_odt_ohm_n:%08x",ddr_set_t_p->soc_data_odt_ohm_n);
- printf("\nddr_set_t_p->dram_data_drv_ohm:%08x",ddr_set_t_p->dram_data_drv_ohm);
- printf("\nddr_set_t_p->dram_data_odt_ohm:%08x",ddr_set_t_p->dram_data_odt_ohm);
- printf("\nddr_set_t_p->dram_ac_odt_ohm:%08x",ddr_set_t_p->dram_ac_odt_ohm);
- printf("\nddr_set_t_p->soc_clk_slew_rate:%08x",ddr_set_t_p->soc_clk_slew_rate);
- printf("\nddr_set_t_p->soc_cs_slew_rate:%08x",ddr_set_t_p->soc_cs_slew_rate);
- printf("\nddr_set_t_p->soc_ac_slew_rate:%08x",ddr_set_t_p->soc_ac_slew_rate);
- printf("\nddr_set_t_p->soc_data_slew_rate:%08x",ddr_set_t_p->soc_data_slew_rate);
- printf("\nddr_set_t_p->vref_output_permil:%08x",ddr_set_t_p->vref_output_permil);
- printf("\nddr_set_t_p->vref_receiver_permil:%08x",ddr_set_t_p->vref_receiver_permil);
- printf("\nddr_set_t_p->vref_dram_permil:%08x",ddr_set_t_p->vref_dram_permil);
- printf("\nddr_set_t_p->vref_reverse:%08x",ddr_set_t_p->vref_reverse);
- printf("\nddr_set_t_p->ac_trace_delay[0]:%08x",ddr_set_t_p->ac_trace_delay[0]);
- printf("\nddr_set_t_p->ac_trace_delay[1]:%08x",ddr_set_t_p->ac_trace_delay[1]);
- printf("\nddr_set_t_p->ac_trace_delay[2]:%08x",ddr_set_t_p->ac_trace_delay[2]);
- printf("\nddr_set_t_p->ac_trace_delay[3]:%08x",ddr_set_t_p->ac_trace_delay[3]);
- printf("\nddr_set_t_p->ac_trace_delay[4]:%08x",ddr_set_t_p->ac_trace_delay[4]);
- printf("\nddr_set_t_p->ac_trace_delay[5]:%08x",ddr_set_t_p->ac_trace_delay[5]);
- printf("\nddr_set_t_p->ac_trace_delay[6]:%08x",ddr_set_t_p->ac_trace_delay[6]);
- printf("\nddr_set_t_p->ac_trace_delay[7]:%08x",ddr_set_t_p->ac_trace_delay[7]);
- printf("\nddr_set_t_p->ac_trace_delay[8]:%08x",ddr_set_t_p->ac_trace_delay[8]);
- printf("\nddr_set_t_p->ac_trace_delay[9]:%08x",ddr_set_t_p->ac_trace_delay[9]);
- printf("\nddr_set_t_p->ac_trace_delay[10]:%08x",ddr_set_t_p->ac_trace_delay[10]);
- printf("\nddr_set_t_p->ac_trace_delay[11]:%08x",ddr_set_t_p->ac_trace_delay[11]);
- //printf("\nddr_set_t_p->ac_pinmux[26]:%08x",ddr_set_t_p->ac_pinmux[26]);
- //printf("\nddr_set_t_p->dfi_pinmux[28]:%08x",ddr_set_t_p->dfi_pinmux[28]);
- //printf("\nddr_set_t_p->slt_test_function[2]:%08x",ddr_set_t_p->slt_test_function[2]);
- printf("\nddr_set_t_p->dq_bdlr_org:%08x",ddr_set_t_p->dq_bdlr_org);
- //printf("\nddr_set_t_p->rsv_char1[2]:%08x",ddr_set_t_p->rsv_char1[2]);
- printf("\nddr_set_t_p->ddr_dmc_remap[0]:%08x",ddr_set_t_p->ddr_dmc_remap[0]);
- printf("\nddr_set_t_p->ddr_dmc_remap[1]:%08x",ddr_set_t_p->ddr_dmc_remap[1]);
- printf("\nddr_set_t_p->ddr_dmc_remap[2]:%08x",ddr_set_t_p->ddr_dmc_remap[2]);
- printf("\nddr_set_t_p->ddr_dmc_remap[3]:%08x",ddr_set_t_p->ddr_dmc_remap[3]);
- printf("\nddr_set_t_p->ddr_dmc_remap[4]:%08x",ddr_set_t_p->ddr_dmc_remap[4]);
- printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[0]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[0]);
- printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[1]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[1]);
- printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[2]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[2]);
- printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[3]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[3]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[0]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[0]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[1]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[1]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[2]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[2]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[3]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[3]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[4]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[4]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[5]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[5]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[6]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[6]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[7]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[7]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[8]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[8]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[9]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[9]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[10]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[10]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[11]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[11]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[12]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[12]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[13]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[13]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[14]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[14]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[15]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[15]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[16]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[16]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[17]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[17]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[18]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[18]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[19]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[19]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[20]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[20]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[21]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[21]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[22]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[22]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[23]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[23]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[24]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[24]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[25]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[25]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[26]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[26]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[27]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[27]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[28]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[28]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[29]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[29]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[30]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[30]);
- printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[31]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[31]);
- printf("\nddr_set_t_p->dram_rtt_nom_wr_park[0]:%08x",ddr_set_t_p->dram_rtt_nom_wr_park[0]);
- printf("\nddr_set_t_p->dram_rtt_nom_wr_park[1]:%08x",ddr_set_t_p->dram_rtt_nom_wr_park[1]);
- printf("\nddr_set_t_p->ddr_func:%08x",ddr_set_t_p->ddr_func);
- //printf("\nddr_set_t_p->rsv_long0[2]:%08x",ddr_set_t_p->rsv_long0[2]);
- //printf("\nddr_set_t_p->dqs_adjust[16]:%08x",ddr_set_t_p->dqs_adjust[16]);
- //printf("\nddr_set_t_p->dq_bit_delay[72]:%08x",ddr_set_t_p->dq_bit_delay[72]);
-
- }
-
-
-
- return 1;
-
-
-}
-#else
-int do_ddr_display_ddr_information(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
-
- // char *endp;
-
- unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
- unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
- unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
- unsigned int soc_ac_drv3=0;
- unsigned int soc_ac_drv4_up=0;
- unsigned int soc_ac_drv4_down=0;
- unsigned int soc_ac_odt3=0;
- unsigned int soc_ac_odt4=0;
- unsigned int soc_data01_drv3=0;
- unsigned int soc_data01_drv4_up=0;
- unsigned int soc_data01_drv4_down=0;
- unsigned int soc_data01_odt3=0;
- unsigned int soc_data01_odt4=0;
-
- unsigned int soc_data23_drv3=0;
- unsigned int soc_data23_drv4_up=0;
- unsigned int soc_data23_drv4_down=0;
- unsigned int soc_data23_odt3=0;
- unsigned int soc_data23_odt4=0;
- unsigned int dram_drv=0;
- unsigned int dram_odt=0;
- unsigned int dram_ddr4_drv=0;
- unsigned int dram_ddr4_odt=0;
- //unsigned int soc_zq_odt_div=480;
-
- unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
- unsigned int pub_mr1= rd_reg(DDR0_PUB_MR1);
- unsigned int reg_value=0;
-#define DDR_TYPE_LPDDR2 0
-#define DDR_TYPE_LPDDR3 1
-#define DDR_TYPE_DDR3 3
-#define DDR_TYPE_DDR4 4
- unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
-
- {
- if (ddr_type==0)
- printf("\nddr_type==lpddr2\n");
- if (ddr_type==1)
- printf("\nddr_type==lpddr3\n");
- if (ddr_type==DDR_TYPE_DDR3)
- printf("\nddr_type==ddr3\n");
- if (ddr_type==DDR_TYPE_DDR4)
- printf("\nddr_type==ddr4\n");
- if(ddr_type==DDR_TYPE_DDR3)
- {//soc_zq_odt_div=360;
- }
- soc_ac_drv3=zq0pr_org&0xf;
- soc_ac_odt3=(zq0pr_org>>4)&0xf;
- soc_ac_drv4_up=(zq0pr_org>>8)&0xf;
- soc_ac_drv4_down=(zq0pr_org>>12)&0xf;
- soc_ac_odt4=(zq0pr_org>>16)&0xf;
-
- soc_data01_drv3=zq1pr_org&0xf;
- soc_data01_odt3=(zq1pr_org>>4)&0xf;
- soc_data01_drv4_up=(zq1pr_org>>8)&0xf;
- soc_data01_drv4_down=(zq1pr_org>>12)&0xf;
- soc_data01_odt4=(zq1pr_org>>16)&0xf;
-
- soc_data23_drv3=zq2pr_org&0xf;
- soc_data23_odt3=(zq2pr_org>>4)&0xf;
- soc_data23_drv4_up=(zq2pr_org>>8)&0xf;
- soc_data23_drv4_down=(zq2pr_org>>12)&0xf;
- soc_data23_odt4=(zq2pr_org>>16)&0xf;
-
-
- reg_value=pub_mr1;
- if((((reg_value>>5)&1)==0))
- {
- if(((reg_value>>1)&1)==0)
- {
- dram_drv=40;
- dram_ddr4_drv=34;
- }
- else
- {
- dram_drv=34;
- dram_ddr4_drv=48;
- }
- }
-
- if(((reg_value>>8)&7)==0)
- {
- dram_ddr4_odt=0;
- }
- if(((reg_value>>8)&7))
- {
- dram_ddr4_odt=240/(((reg_value>>10)&1)|(((reg_value>>9)&1)<<1)|(((reg_value>>8)&1)<<2));
- }
- reg_value=(((reg_value>>9)&1)<<2)|(((reg_value>>6)&1)<<1)|(((reg_value>>2)&1)<<0);
- if(reg_value==1)
- {
- dram_odt=60;
- }
- if(reg_value==2)
- {
- dram_odt=120;
- }
- if(reg_value==3)
- {
- dram_odt=40;
- }
- if(reg_value==4)
- {
- dram_odt=20;
- }
- if(reg_value==5)
- {
- dram_odt=30;
- }
-
- printf("zq0pr_org==%x,zq1pr_org==%x,zq2pr_org==%x,\n",zq0pr_org,zq1pr_org,zq2pr_org);
- printf("soc_ac_drv3==%d,soc_ac_odt3==%d,\n",480/(soc_ac_drv3+1),360/(soc_ac_odt3+1));
- printf("soc_data01_drv3==%d,soc_data01_odt3==%d,\n",480/(soc_data01_drv3+1),360/(soc_data01_odt3+1));
- printf("soc_data23_drv3==%d,soc_data23_odt3==%d,\n",480/(soc_data23_drv3+1),360/(soc_data23_odt3+1));
- printf("dram_drv3==%d,dram_odt3==%d,\n\n\n",dram_drv,dram_odt);
-
- printf("soc_ac_drv4_up==%d,soc_ac_drv4_down==%d,soc_ac_odt4==%d,\n",480/(soc_ac_drv4_up+1),480/(soc_ac_drv4_down+1),480/(soc_ac_odt4+1));
- printf("soc_data01_drv4_up==%d,soc_data01_drv4_down==%d,soc_data01_odt4==%d,\n",480/(soc_data01_drv4_up+1),480/(soc_data01_drv4_down+1),480/(soc_data01_odt4+1));
- printf("soc_data23_drv4_up==%d,soc_data23_drv4_down==%d,soc_data23_odt4==%d,\n",480/(soc_data23_drv4_up+1),480/(soc_data23_drv4_down+1),480/(soc_data23_odt4+1));
-
-
- printf("dram_ddr4_drv==%d,dram_ddr4_odt==%d,\n",dram_ddr4_drv,dram_ddr4_odt);
-
-
- }
- unsigned int dtedr0[2][4];
- unsigned int dtedr1[2][4];
- //unsigned int vtdr[2][4];
- unsigned int lcdlr_w_setting[2][4];
- unsigned int lcdlr_r_setting[2][4];
- unsigned int delay_line_100step=0;
- if (1) {
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- /*
- bl2_print("DDR0_PUB_ACLCDLR: 0x",rd_reg(DDR0_PUB_ACLCDLR), VALUE_HEX, "....\n");
- bl2_print("DDR0_PUB_ACBDLR0: 0x", rd_reg(DDR0_PUB_ACBDLR0), VALUE_HEX, "....\n");
- bl2_print("DDR0_MDLR: ", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF), VALUE_DEC ,"....\n");
- bl2_print("DDR0_CLK: ", p_ddr_set->ddr_clk, VALUE_DEC, "MHz\n");
- bl2_print("delay_line_10step:", (1000*1000*10/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF), VALUE_DEC, "....\n");
- */
- //printf("DDR0_MDLR:%8d, CLK:%8dMhz, delay_line_10step:%8d ps\n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
- //p_ddr_set->ddr_clk ,(1000*1000/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
- wr_reg(DDR0_PUB_RANKIDR, ((0<<0)|((0<<16))));
- ///*
- unsigned int i=0;
- unsigned int rank=0;
- for(rank=0;rank<2;(rank++))
- {
- printf("DDR0_RANK0==%d,\n",rank);
- //bl2_print("DDR0_RANK0: 0x", rank, VALUE_HEX, "\n\n");
- wr_reg(DDR0_PUB_RANKIDR, ((rank<<0)|((rank<<16))));
- for(i=0;i<4;(i++))
- {
- //change dtcr0 lane reg map
- wr_reg(DDR0_PUB_DTCR0,(((rank<<24)|(i<<16)))|((rd_reg(DDR0_PUB_DTCR0))&(~((1<<11)|(0xf<<16)))));//
-
- printf("DDR0_LANE0: 0x %d\n", i);
- // bl2_print("DDR0_PUB_DTEDR0: 0x", rd_reg(DDR0_PUB_DTEDR0), VALUE_HEX, "\n")
- // bl2_print("DDR0_PUB_DTEDR1: 0x", rd_reg(DDR0_PUB_DTEDR1), VALUE_HEX, "\n")
-
- // bl2_print("DDR0_PUB_DTEDR2: 0x", rd_reg(DDR0_PUB_DTEDR2), VALUE_HEX, "\n")
- dtedr0[rank][i]=(rd_reg(DDR0_PUB_DTEDR0));
- dtedr1[rank][i]=(rd_reg(DDR0_PUB_DTEDR1));
- //vtdr[rank][i]=(rd_reg(DDR0_PUB_VTDR));
- printf("DDR0_PUB_W_Min:%d \n", (rd_reg(DDR0_PUB_DTEDR0))&0x1ff);
-
- printf("DDR0_PUB_W_Max: %d\n", ((rd_reg(DDR0_PUB_DTEDR0))>>9)&0x1ff);
-
- // bl2_print("DDR0_PUB_W_Max: ", ((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))), VALUE_DEC, "\n\n")
- lcdlr_w_setting[rank][i]=((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)))));
- printf("DDR0_PUB_W_SETTING:%d \n", ((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)))))&0x1ff);
-
-
-
- printf("DDR0_PUB_R_Min: %d\n", (rd_reg(DDR0_PUB_DTEDR1))&0x1ff);
-
- printf("DDR0_PUB_R_Max:%d\n", ((rd_reg(DDR0_PUB_DTEDR1))>>9)&0x1ff);
-
- printf("DDR0_PUB_R_SETTING: %d\n", ((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR3+i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))))&0x1ff);
- lcdlr_r_setting[rank][i]=((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR3+i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
- printf("DDR0_PUB_VTDR: 0x%x\n", (rd_reg(DDR0_PUB_VTDR)));
- }
- }
- wr_reg(DDR0_PUB_RANKIDR, ((0<<0)|((0<<16))));
-
- unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
- unsigned int ddr_clk =pll_convert_to_ddr_clk(ddr_pll);
- ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
-
- printf("\nddr_clk== %dMHz\n", ddr_clk);
- global_ddr_clk=ddr_clk;
- printf("DDR0_PUB_ACBDLR0: 0x%x\n", (rd_reg(DDR0_PUB_ACBDLR0)));
- printf("DDR0_PUB_ACLCDLR: 0x%x\n", (rd_reg(DDR0_PUB_ACLCDLR)));
-
- //printf("DDR0_MDLR:%d \n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
- //printf("DDR0_CLK:%d MHz \n", p_ddr_set->ddr_clk");
- //printf("delay_line_10step:%d \n", (1000*1000*10/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF)");
-
- printf("DDR0_MDLR:%8d, CLK:%8dMhz, delay_line_10step:%8d ps,delay_line_100step:%8d ps,\n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
- global_ddr_clk ,(10000*1000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
- (1000*100000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
- delay_line_100step=(1000*100000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF);
- for(rank=0;rank<2;(rank++))
- {
- printf("DDR0_RANK0==%d,\n",rank);
-
- for(i=0;i<4;(i++))
- {
- //dtedr0[rank][i]=(rd_reg(DDR0_PUB_DTEDR0));
- //dtedr1[rank][i]=(rd_reg(DDR0_PUB_DTEDR1));
- //vtdr[rank][i]=(rd_reg(DDR0_PUB_VTDR));
- printf("%4d ", ((((dtedr0[rank][i])>>9)&0x1ff)-lcdlr_w_setting[rank][i])*delay_line_100step/100
- );
- printf("%4d ", ((lcdlr_w_setting[rank][i])-(((dtedr0[rank][i])>>0)&0x1ff))*delay_line_100step/100
- );
-
- printf("%4d ", ((lcdlr_r_setting[rank][i])-(((dtedr1[rank][i])>>0)&0x1ff))*delay_line_100step/100
- );
- printf("%4d ", ((((dtedr1[rank][i])>>9)&0x1ff)-lcdlr_r_setting[rank][i])*delay_line_100step/100
- );
- }
- printf("\n");
- }
- printf("\nend==%d,\n",rank);
-#endif
- }
-
- CLOSE_CHANNEL_A_PHY_CLK();
- CLOSE_CHANNEL_B_PHY_CLK();
- return 1;
-}
-
-
-int do_ddr_offset_ddr_lcdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
-#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- char *endp;
- unsigned int resume_ddl=0; // 0 pause 1,resume
- unsigned int offset_id=0; // 0 left 1 right
- unsigned int count=0;
- unsigned int reg_add=0;
- unsigned int reg_value=0;
- unsigned int offset_value[10]={0,0,0,0,0,0,0,0,0,0} ; // ac w clk w lane 0 w r lane 1 w r lane2 w r lane3 w r
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
- if (argc == 1)
- printf("\nplease read help\n");
- else if (argc > 1)
- {
- count=0;
- resume_ddl= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- resume_ddl = 0;
- }
- // count++;
- if (argc > 2)
- {
- count=1;
- offset_id= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- offset_id = 0;
- }
- // count++;
- }
-
- if (argc > 3)
- {
- count=2;
- while(count<(argc-1))
- {
- offset_value[count-2]= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- offset_value[count-2] = 0;
- }
- count++;
- }
- }
-
- }
-
- printf("resume_ddl=%d,\n",resume_ddl);
- if(offset_id)
- printf("offset right ++%d,\n",offset_id);
- else
- printf("offset left --%d,\n",offset_id);
-
- for (i = 0;i<10;i++)
- {
- printf("offset_value[%d]=%d\n",i,offset_value[i]);
- }
-
- {
- //writel((0), 0xc8836c00);
- OPEN_CHANNEL_A_PHY_CLK();
- }
-
- {
- OPEN_CHANNEL_B_PHY_CLK();
- //writel((0), 0xc8836c00);
- }
-
-
- printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
- writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
- printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
-
-
- //if (vref_lcdlr_offset)
- for (i = 0;i<10;i++)
- {
- if(i==0)
- reg_add = DDR0_PUB_ACLCDLR;
- if(i==1)
- reg_add = DDR0_PUB_ACBDLR0;
- if(i>1)
- {
- if(i%2){
- reg_add = DDR0_PUB_DX0LCDLR3 + ((DDR0_PUB_DX1LCDLR3 - DDR0_PUB_DX0LCDLR3)*((i-2)/2));}
- else{
- reg_add = DDR0_PUB_DX0LCDLR1 + ((DDR0_PUB_DX1LCDLR3 - DDR0_PUB_DX0LCDLR3)*((i-2)/2));}
- }
-
- printf("\n org reg_add 0x%08x== 0x%08x\n ",(reg_add),
- rd_reg(reg_add));
- if(offset_id) //offset +
- {
- wr_reg(reg_add, ( rd_reg(reg_add)+offset_value[i]));
- if(i>1)
- {if(i%2){wr_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3),
- ( rd_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3))+offset_value[i]));
- }
- }
-
-
-
- }
- else
- {
- reg_value=rd_reg(reg_add);
- reg_value=( reg_value>offset_value[i])?( reg_value-offset_value[i]):0;
- wr_reg(reg_add, reg_value);
- if(i>1)
- {if(i%2){wr_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3),
- ( reg_value));
- }
- }
-
-
-
- }
-
- printf("\n mod reg_add 0x%08x== 0x%08x\n ",(reg_add),
- rd_reg(reg_add));
- // /*
- {
-
-
-
- }
- //*/
- }
- // printf("\n read reg==0x%08x\n ",(readl(reg_add)));
- printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- if(resume_ddl){
- writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
- printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
- }
-
-
-
-
-
-#endif
- return 1;
-}
-
-
-#endif
-int do_ddr_set_watchdog_value(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
- if (argc == 1)
- printf("\nplease read help\n");
-
- else if (argc > 1)
- {
- {
- watchdog_time_s = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- watchdog_time_s= 20;
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- }
-
- return 1;
-}
-
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- #define G12_DATA_READ_OFFSET_MAX (0X3F)
- #define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
-
- #define DMC_TEST_WINDOW_INDEX_ATXDLY 1
- #define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
- #define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
- #define DMC_TEST_WINDOW_INDEX_TXDQDLY 4
- #define DMC_TEST_WINDOW_INDEX_RXPBDLY 5
- #define DMC_TEST_WINDOW_INDEX_RXENDLY 6
-
- #define DMC_TEST_WINDOW_INDEX_EE_VOLTAGE 0x11
- #define DMC_TEST_WINDOW_INDEX_SOC_VREF 0x12
- #define DMC_TEST_WINDOW_INDEX_DRAM_VREF 0x13
-
- typedef struct training_delay_information{
- uint16_t ac_delay[10];
- uint16_t txdqs_delay[16];
- uint16_t rxdqs_delay[16];
- uint16_t txdq_delay[72];
- uint16_t rxdq_delay[72];
- uint16_t gate_rxdq_delay[72];
-
- } training_delay_t;
- training_delay_t training_delay_t_p;
-
- uint16_t lcd_bdl_value[72][4]; //org min max status
- // #define LCD_BDLR_ORG 0
- #define LCD_BDLR_MIN 0
- #define LCD_BDLR_MAX 1
- #define LCD_BDLR_STATUS 2
-
- //BYTE0-3
- #define TEST_ARG_0_DMC_STICKY_MAGIC 0
- #define TEST_ARG_1_CMD0 1
- #define TEST_ARG_2_STEP 2 // 0 init 1 test ac 2 test tdqs_write
- #define TEST_ARG_3_ALL_TOGHTER 3
-
- //BYTE4-7
- #define TEST_ARG_FREQ_NIBBLE_L 4
- #define TEST_ARG_FREQ_NIBBLE_H 5
-
- //BYTE8-11
- #define TEST_ARG_BOOT_TIMES_L 6
- #define TEST_ARG_BOOT_TIMES_H 7
-
- //BYTE12-15
- //#define TEST_ARG_ERROR_FLAG 8 //take 4 byte for kernel test flag
- #define TEST_ARG_ERROR_FLAG 63*4 //take 4 byte for kernel test flag
-
- //BYTE16-19
- //#define TEST_ARG_16_LCDLR_TEMP_COUNT 16
- #define TEST_ARG_CS0_TEST_START_INDEX 12
- #define TEST_ARG_CS0_TEST_SIZE_INDEX 16
- #define TEST_ARG_CS1_TEST_START_INDEX 20
- #define TEST_ARG_CS1_TEST_SIZE_INDEX 24
-
- #define TEST_ARG_WATCHDOG_TIME_SIZE_INDEX 28
- #define TEST_ARG_TEST_INDEX_ENALBE_INDEX 30
- //#define TEST_ARG_NIBBLE_MASK0_ENALBE_INDEX 32
-
- #define TEST_ARG_ERROR_FLAG_NULL 0
- #define TEST_ARG_ERROR_FLAG_FAIL 1
- #define TEST_ARG_ERROR_FLAG_PASS 2
-
- #define TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE 32 // 32BYTE
- #define TEST_ARG_NIBBLE_WIDTH_BYTE 3 //3///BYTE
-
-int do_ddr_test_dqs_window_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_dqs_window function ddr_test_cmd 0x27 0x1080000 0x800000 0x40000000 0x800000 15 0x6 0 0 0 0 0 0 1/config\n");
- printf("\nddr_test_cmd 0x27 cs0_test_start cs0_test_size cs1_test_start cs1_test_size ns test_index_enable nibble_mask0 nibble_mask1 nibble_mask2 dram_type channel_mode config_register all_togther--- watchdog should >15s\n");
- printf("\n ac write_dqs read_dqs can test togther test_index_enable can enable kernel test \n");
- // unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
- unsigned int temp_test_error=0;
- unsigned int nibble_save_offset= 0;
- unsigned int nibble_step= 0;
- unsigned int nibble_max= 16;
- unsigned int test_index_enable= 0;
- unsigned int test_index= 0;
- unsigned int test_index_max= 6;
- unsigned int reg_value= 0;
- unsigned int dram_type= 0;
- unsigned int channel_mode= 0;
- unsigned int kernel_watchdog_s= 20;//240;
- // unsigned int finish_clear_flag= 0;
- unsigned int config_register= 0;
- unsigned int all_toghter_enable=0;
- unsigned int error_flag_reg_add=0;
- char *string_print_flag= " uboot-window-loop \n";
- //int argc2;
- //char * argv2[30];
- char *endp;
- char *buf;
- buf="";
-
- unsigned int cs0_test_start= 0x1080000;
- unsigned int cs0_test_size= DDR_CORSS_TALK_TEST_SIZE;
- unsigned int cs1_test_start= 0;
- unsigned int cs1_test_size= 0;
- unsigned int enable_kernel_test=0;
- if (argc >1) {
- cs0_test_start = simple_strtoull_ddr(argv[1], &endp, 16);
- if (*argv[1] == 0 || *endp != 0)
- {
- cs0_test_start = 0x1080000;
- }
- }
-
- if (argc >2) {
- cs0_test_size = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- {
- cs0_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
-
- if (argc >3) {
- cs1_test_start = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- cs1_test_start = 0;
- }
- }
- if (argc >4) {
- cs1_test_size = simple_strtoull_ddr(argv[4], &endp, 16);
- if (*argv[4] == 0 || *endp != 0)
- {
- cs1_test_size = 0;
- }
- }
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = cs0_test_size;
- if (argc >5) {
- watchdog_time_s = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- watchdog_time_s= 20;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
-
- if (argc >6) {
- test_index_enable = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_index_enable= 0;
- }
- }
- printf("test_index_enable==0x%08x\n",test_index_enable);
- enable_kernel_test=(test_index_enable>>7)&1;
- if(enable_kernel_test){
- printf("enable kernel window test\n");
- }
-
- unsigned int nibble_mask[3]= {0,0,0};
- if (argc >7) {
- nibble_mask[0] = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0)
- {
- nibble_mask[0]= 0;
- }
- }
- printf("nibble_mask[0]==0x%08x\n",nibble_mask[0]);
- if (argc >8) {
- nibble_mask[1] = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0)
- {
- nibble_mask[1]= 0;
- }
- }
- printf("nibble_mask[1]==0x%08x\n",nibble_mask[1]);
- if (argc >9) {
- nibble_mask[2] = simple_strtoull_ddr(argv[9], &endp, 0);
- if (*argv[9] == 0 || *endp != 0)
- {
- nibble_mask[2]= 0;
- }
- }
- printf("nibble_mask[2]==0x%08x\n",nibble_mask[2]);
-
- if (argc >10) {
- dram_type = simple_strtoull_ddr(argv[10], &endp, 0);
- if (*argv[10] == 0 || *endp != 0)
- {
- dram_type= 0;
- }
- }
- if (argc >11) {
- channel_mode = simple_strtoull_ddr(argv[11], &endp, 0);
- if (*argv[11] == 0 || *endp != 0)
- {
- channel_mode= 0;
- }
- }
- ///*
- if (argc >12) {
- config_register = simple_strtoull_ddr(argv[12], &endp, 0);
- if (*argv[12] == 0 || *endp != 0)
- {
- config_register= 0;
- }
- }//*/
- ///*
- if (argc >13) {
- all_toghter_enable = simple_strtoull_ddr(argv[13], &endp, 0);
- if (*argv[13] == 0 || *endp != 0)
- {
- all_toghter_enable= 0;
- }
- }//*/
- printf("all_toghter_enable==0x%08x\n",all_toghter_enable);
-
- if (argc >14) {
- error_flag_reg_add = simple_strtoull_ddr(argv[14], &endp, 0);
- if (*argv[14] == 0 || *endp != 0)
- {
- error_flag_reg_add= 0;
- }
- }
- printf("error_flag_reg_add==0x%08x\n",error_flag_reg_add);
- printf("\ntest use uboot sticky register\n");
-
- //DMC_STICKY_0
- char str[1024]="";
- //char str_temp1[1024]="";
- //char str_temp2[1024]="";
- volatile uint16_t *num_arry=NULL;
- //volatile uint16_t *p_num_arry;
- int i;
- //unsigned int stick_base_add=0;
- //uint32_t ddr_wr_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index,uint32_t value)
-
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_G12A_0)&0xffff);
- //num_arry = (uint16_t *)(uint64_t )(sticky_reg_base_add);
- //num_arry=p_num_arry;
- for (i = 0; i < 64*4; i++) {
- num_arry[i]=ddr_rd_8_16bit_on_32reg(sticky_reg_base_add,8,i);
- if((i==0)||(i==32)||(i==(32+10*3))||(i==(32+10*3+16*3))||(i==(32+10*3+16*3+16*3)))
- {
- printf("\n numarry[%d]" ,i);
- }
- printf(" %d ",num_arry[i]);
- }
-
- /*
- #define TEST_ARG_1_CMD0 1
- //#define TEST_ARG_1_CMD1 1
- #define TEST_ARG_2_STEP 2
- #define TEST_ARG_3_FREQ 3
- #define TEST_ARG_4_STEP_STATUS 4
- #define TEST_ARG_5_BOOT_TIMES 5
- #define TEST_ARG_6_LCDLR_TEMP_COUNT 6
- #define TEST_ARG_7_DMC_STICKY_MAGIC 7
- */
-
- uint16_t test_left_max_init_value =32;
- uint16_t test_right_max_init_value =32;
- uint16_t test_boot_times =0;
- uint16_t test_ddr_frequency =0;
- //uint16_t temp_sub_value_a =0;
- /*
- uint16_t test_arg_1_cmd0 =1; //master cmd
- uint16_t test_arg_1_cmd1 =0; //min cmd
- uint16_t test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- uint16_t test_arg_3_freq =0;
- uint16_t test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- test_arg_0_cmd0=num_arry[0];
- test_arg_1_cmd1=num_arry[1];
- test_arg_2_step=num_arry[2];
- test_arg_3_freq=num_arry[3];
- test_arg_4_step_status=num_arry[4];
- //boot_times=num_arry[5];
- //lcdlr_temp_count=num_arry[6];
- */
- printf("TEST_ARG_0_DMC_STICKY_MAGIC==0x%08x\n",num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]);
- printf("\nTEST_ARG_1_CMD0==0x%08x\n",num_arry[TEST_ARG_1_CMD0]);
- printf("TEST_ARG_2_STEP==0x%08x\n",num_arry[TEST_ARG_2_STEP]);
- printf("TEST_ARG_3_ALL_TOGHTER==0x%08x\n",num_arry[TEST_ARG_3_ALL_TOGHTER]);
- printf("TEST_ARG_FREQ_NIBBLE_L==0x%08x\n",num_arry[TEST_ARG_FREQ_NIBBLE_L]);
- printf("TEST_ARG_FREQ_NIBBLE_H==0x%08x\n",num_arry[TEST_ARG_FREQ_NIBBLE_H]);
- printf("TEST_ARG_BOOT_TIMES_L==0x%08x\n",num_arry[TEST_ARG_BOOT_TIMES_L]);
- printf("TEST_ARG_BOOT_TIMES_H==0x%08x\n",num_arry[TEST_ARG_BOOT_TIMES_H]);
- printf("TEST_ARG_ERROR_FLAG==0x%08x\n",num_arry[TEST_ARG_ERROR_FLAG]);
-
- printf("TEST_ARG_FREQ==%dM\n",(num_arry[TEST_ARG_FREQ_NIBBLE_H]<<8)|(num_arry[TEST_ARG_FREQ_NIBBLE_L]<<0));
- printf("TEST_ARG_BOOT_TIMES==%d\n",(num_arry[TEST_ARG_BOOT_TIMES_H]<<8)|(num_arry[TEST_ARG_BOOT_TIMES_L]<<0));
- test_boot_times=(num_arry[TEST_ARG_BOOT_TIMES_H]<<8)|(num_arry[TEST_ARG_BOOT_TIMES_L]<<0);
- test_ddr_frequency=(num_arry[TEST_ARG_FREQ_NIBBLE_H]<<8)|(num_arry[TEST_ARG_FREQ_NIBBLE_L]<<0);
- if((num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]==(DMC_STICKY_UBOOT_WINDOW_MAGIC_1&0xff))&&
- (num_arry[TEST_ARG_1_CMD0]==(DMC_STICKY_UBOOT_WINDOW_MAGIC_1&0xff)) ) //for check magic number make sume enter test command
- {
- //num_arry[TEST_ARG_5_BOOT_TIMES]++;
- test_boot_times++;
- num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
- num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
-
- if( test_ddr_frequency!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_ddr_frequency);
- sprintf(str,"d2pll %d",test_ddr_frequency);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- else
- {
- test_boot_times=0;
- num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
- num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
- num_arry[TEST_ARG_2_STEP]=0;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
- }
- printf("test_sticky is not magic nummber,boot times==%d\n",test_boot_times);
-
- if(config_register==1)
- {
- wr_reg((sticky_reg_base_add+TEST_ARG_CS0_TEST_START_INDEX), cs0_test_start);
- wr_reg((sticky_reg_base_add+TEST_ARG_CS0_TEST_SIZE_INDEX), cs0_test_size);
- wr_reg((sticky_reg_base_add+TEST_ARG_CS1_TEST_START_INDEX), cs1_test_start);
- wr_reg((sticky_reg_base_add+TEST_ARG_CS1_TEST_SIZE_INDEX), cs1_test_size);
- {
- num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX]=watchdog_time_s&0xff;
- num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1]=(watchdog_time_s>>8)&0xff;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_WATCHDOG_TIME_SIZE_INDEX,num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,(TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1),num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1]);
- }
- num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX]=test_index_enable;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_TEST_INDEX_ENALBE_INDEX,num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX]);
- num_arry[TEST_ARG_2_STEP]=0;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
- num_arry[TEST_ARG_3_ALL_TOGHTER]=all_toghter_enable;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_3_ALL_TOGHTER,num_arry[TEST_ARG_3_ALL_TOGHTER]);
- }
-
- if(( num_arry[TEST_ARG_2_STEP])==0)
- {
- {
- num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]=DMC_STICKY_UBOOT_WINDOW_MAGIC_1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_0_DMC_STICKY_MAGIC,num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]);
- num_arry[TEST_ARG_1_CMD0]=DMC_STICKY_UBOOT_WINDOW_MAGIC_1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_1_CMD0,num_arry[TEST_ARG_1_CMD0]);
- num_arry[TEST_ARG_2_STEP]=1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
- {
- test_boot_times=0;
- num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
- num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
- }
- {
- test_ddr_frequency=global_ddr_clk;
- num_arry[TEST_ARG_FREQ_NIBBLE_L]=test_ddr_frequency&0xff;
- num_arry[TEST_ARG_FREQ_NIBBLE_H]=(test_ddr_frequency>>8)&0xff;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_FREQ_NIBBLE_L,num_arry[TEST_ARG_FREQ_NIBBLE_L]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_FREQ_NIBBLE_H,num_arry[TEST_ARG_FREQ_NIBBLE_H]);
- }
-
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_ERROR_FLAG,num_arry[TEST_ARG_ERROR_FLAG]);
- }
-
-
- for (nibble_step = 0; nibble_step < 72; nibble_step++)
- {
- //if(lane_step%2)
- {
- //num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_ORG]=0xffff;
- test_left_max_init_value=16;
- test_right_max_init_value=16;
- if(nibble_step<10)
- {
- test_left_max_init_value=32;
- test_right_max_init_value=32;
- }
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN]=test_left_max_init_value;
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX]=test_right_max_init_value;
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS]=0;//0
- //ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,i,num_arry[i]);
- }
-
- {
- if (nibble_step<32)
- {
- if(((nibble_mask[0])>>nibble_step)&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- else if (nibble_step<64)
- {
- if(((nibble_mask[1])>>(nibble_step-32))&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- else if (nibble_step<96)
- {
- if(((nibble_mask[2])>>(nibble_step-64))&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- if(all_toghter_enable)
- {
- if((nibble_step==0)||(nibble_step==10)||(nibble_step==(10+16)))
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=0;
- else
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- }
- //num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS]=0xffff;//0
- }
-
- {
- //printf("..num_arry[TEST_ARG_1_CMD0]=%d\n",num_arry[TEST_ARG_1_CMD0]);
- for (i = TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE; i < 72*TEST_ARG_NIBBLE_WIDTH_BYTE; i++) {
- // num_arry[i]=0;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,i,num_arry[i]);
- // ddr_wr_16bit_on_32reg((sticky_reg_base_add+(i<<1)),num_arry[i]);
- // printf("num_arry[0x%08x] ==0x%08x\n",i,num_arry[i]);
- }
-
- num_arry[TEST_ARG_2_STEP]=1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
- }
-
- }
-
-if(config_register==1)
-{
- num_arry[TEST_ARG_2_STEP]=0;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
-}
-
-if(( num_arry[TEST_ARG_2_STEP]))
-{
-for(test_index=num_arry[TEST_ARG_2_STEP];test_index<test_index_max ;test_index++ )
-{
- printf("\ntest_index=%d\n",test_index);
- if((((test_index_enable)>>(test_index-1))&1)==0)
- {
- num_arry[TEST_ARG_2_STEP]=((num_arry[TEST_ARG_2_STEP])+1);//why can not use ++
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
- continue;
- }
- {
- if(test_index==DMC_TEST_WINDOW_INDEX_ATXDLY)
- {
- nibble_save_offset=0;
- nibble_max=10;
- if((dram_type==CONFIG_DDR_TYPE_LPDDR3))
- {
- nibble_mask[0]= 0x3e0;
- }
- if((dram_type==CONFIG_DDR_TYPE_LPDDR4))
- {
- nibble_mask[0]= 0x210;
- if((channel_mode==CONFIG_DDR0_32BIT_RANK01_CH0))
- nibble_mask[0]= 0x3f0;
- }
- test_left_max_init_value=64;
- test_right_max_init_value=64;
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
- {
- nibble_save_offset=10;
- nibble_max=16;
- if((cs1_test_size==0))
- {
- nibble_mask[0]= 0xff00;
- }
- test_left_max_init_value=16;
- test_right_max_init_value=16;
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_RXCLKDLY)
- {
- nibble_save_offset=(10)+(16);
- if((cs1_test_size==0))
- {
- nibble_mask[0]= 0xff00;
- }
- nibble_max=16;
- test_left_max_init_value=16;
- test_right_max_init_value=16;
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_TXDQDLY)
- {
- nibble_save_offset=0;
- nibble_max=72;
- if((cs1_test_size==0))
- {
- nibble_mask[1]= 0xfffffff0;
- nibble_mask[2]= 0xffffffff;
- }
- test_left_max_init_value=16;
- test_right_max_init_value=16;
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_RXPBDLY)
- {
- nibble_save_offset=0;
- nibble_max=72;
- if((cs1_test_size==0))
- {
- nibble_mask[1]= 0xfffffff0;
- nibble_mask[2]= 0xffffffff;
- }
-
- test_left_max_init_value=64;
- test_right_max_init_value=64;}
- //nibble_max=8;//
- // if(nibble_max>30) can not over sticky register size
- // nibble_max=30;
- for ((nibble_step=0);(nibble_step<nibble_max);(nibble_step++))
- {
- if (nibble_step<32)
- {
- if(((nibble_mask[0])>>nibble_step)&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- else if (nibble_step<64)
- {
- if(((nibble_mask[1])>>(nibble_step-32))&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- else if (nibble_step<96)
- {
- if(((nibble_mask[2])>>(nibble_step-64))&1)
- num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
- }
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- }
- }
-
-{
- for ((nibble_step=0);(nibble_step<nibble_max);(nibble_step++))
- {
- if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==4)
- continue;
- printf("nibble_step ==%d\n",nibble_step);
-
- if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
- {
- if(nibble_step%2)
- {
- //nibble_save_offset
- //num_arry[TEST_ARG_2_STEP]=1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- //nibble_step++;
- continue;
- }
- }
- test_start_addr=cs0_test_start;
- ddr_test_size=cs0_test_size;
- if(test_index==DMC_TEST_WINDOW_INDEX_ATXDLY)
- {
- test_start_addr=cs0_test_start;
- ddr_test_size=cs0_test_size;
- }
-
- if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
- {
- if(nibble_step>7)
- {
- test_start_addr=cs1_test_start;
- ddr_test_size=cs1_test_size;
- }
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_RXCLKDLY)
- {
- if(nibble_step>7)
- {
- test_start_addr=cs1_test_start;
- ddr_test_size=cs1_test_size;
- }
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_TXDQDLY)
- {
- if(nibble_step>35)
- {
- test_start_addr=cs1_test_start;
- ddr_test_size=cs1_test_size;
- }
- }
- if(test_index==DMC_TEST_WINDOW_INDEX_RXPBDLY)
- {
- if(nibble_step>35)
- {
- test_start_addr=cs1_test_start;
- ddr_test_size=cs1_test_size;
- }
- }
- {
- if (nibble_step<32)
- {
- nibble_mask[0]=((0xffffffff)&(~(1<<nibble_step)));
- nibble_mask[1]=((0xffffffff));
- nibble_mask[2]=((0xffffffff));
- }
- else if (nibble_step<64)
- {
- nibble_mask[0]=((0xffffffff));
- nibble_mask[1]=((0xffffffff)&(~(1<<(nibble_step-32))));
- nibble_mask[2]=((0xffffffff));
- }
- else if (nibble_step<96)
- {
- nibble_mask[0]=((0xffffffff));
- nibble_mask[1]=((0xffffffff));
- nibble_mask[2]=((0xffffffff)&(~(1<<(nibble_step-64))));
- }
- }
-
- ddr_test_watchdog_enable(watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",watchdog_time_s);
- if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0xffff)
- ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0)
- ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==1) )
- {
- printf("\nnibble_step ==%d ", nibble_step);
- if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0xffff)
- ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0))
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
-
- if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]==0)
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- }
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]=
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]-1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
- }
-
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
-
- if(all_toghter_enable)
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_LEFT,
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
- else
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_LEFT,
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
- printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if(temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- //
- if(!enable_kernel_test)
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_enable(kernel_watchdog_s); //s
- printf("\nenable %ds watchdog \n",kernel_watchdog_s);
- run_command("run storeboot",0);
- }
- /*
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- */
- }
- }
- else if (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==1)
- {//go on find left edge
-
- if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]==0)
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- }
-
- if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_PASS)
- {
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- }
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
- run_command("reset",0);
- }
- if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_FAIL)
- {
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]=
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]-1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
- }
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
- sprintf(buf, "0x%08x", ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
- printf( "%s", buf);
- if(all_toghter_enable)
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_LEFT,
- ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
- else
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_LEFT,
- ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
- printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if(temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- //
- if(!enable_kernel_test)
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_enable(kernel_watchdog_s); //s
- printf("\nenable %ds watchdog \n",kernel_watchdog_s);
- run_command("run storeboot",0);
- }
- /*
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- */
- }
- }
- }
- // run_command("reset",0);
- }
-
- if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2)||
- (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==3))
- {
- printf("\nnibble_step ==%d ", nibble_step);
- if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2)
- ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2))
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=3;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
-
- if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]==0)
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- }
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]=
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]-1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
- }
-
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_RIGHT,
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
- printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if(temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- //
- if(!enable_kernel_test)
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_enable(kernel_watchdog_s); //s
- printf("\nenable %ds watchdog \n",kernel_watchdog_s);
- run_command("run storeboot",0);
- }
- /*
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- */
- }
- }
- else if (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==3)
- {//go on find left edge
- if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]==0)
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- }
-
- if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_PASS)
- {
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- }
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
- run_command("reset",0);
- }
- if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_FAIL)
- {
- {
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]=
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]-1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
- }
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- }
- sprintf(buf, "0x%08x", ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]));
- printf( "%s", buf);
- sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_RIGHT,
- ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]));
- printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- if(temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- if(!enable_kernel_test)
- {
- num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- TEST_ARG_ERROR_FLAG,
- num_arry[TEST_ARG_ERROR_FLAG]);
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_enable(kernel_watchdog_s); //s
- printf("\nenable %ds watchdog \n",kernel_watchdog_s);
- run_command("run storeboot",0);
- }
-
- /*
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
- (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
- num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
- run_command("reset",0);
- */
- }
- }
- }
- // run_command("reset",0);
- }
-
- ddr_test_watchdog_disable(); //s
- {
- printf("close watchdog\n");
- }
- }
-
- printf("11num_arry[TEST_ARG_2_STEP]==%d\n",num_arry[TEST_ARG_2_STEP]);
- num_arry[TEST_ARG_2_STEP]=(num_arry[TEST_ARG_2_STEP])+1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
- printf("22num_arry[TEST_ARG_2_STEP]==%d\n",num_arry[TEST_ARG_2_STEP]);
- //}
-
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
- //}
- //for(test_index=1;test_index<test_index_max ;test_index++ )
- {
- unsigned int ui_1_32_100step= 0;
- unsigned int bdlr_100step= 0;
- ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
- bdlr_100step=get_bdlr_100step(global_ddr_clk);
- //if((((test_index_enable)>>(test_index-1))&1)==0)
-
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,bdlr_100step=%d ps,ui_1_32_100step=%d ps,\n",0,0,global_ddr_clk,
- bdlr_100step,ui_1_32_100step);
-
- printf("\n test result index==");
- printf("%08d",test_index);
-
- if (test_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
- printf(" ac window:");
- printf(" step_size ps==");
- printf("%08d",ui_1_32_100step);
- printf("/100 ps ");
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
- printf(" txdqs window:");
- printf(" step_size ps==");
- printf("%08d",ui_1_32_100step);
- printf("/100 ps ");
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
- printf(" rx_clk_window:");
- printf(" step_size ps==");
- printf("%08d",ui_1_32_100step);
- printf("/100 ps ");
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
- printf(" tx_bit_dq_window:");
- printf(" step_size ps==");
- printf("%08d",ui_1_32_100step);
- printf("/100 ps ");
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
- printf(" rx_bit_dq_window");
- printf(" step_size ps==");
- printf("%08d",bdlr_100step);//480ps
- printf("/100 ps ");
- }
- printf("ddr clk frequency : ");
- printf("%08d",(global_ddr_clk));
- printf("Mhz ");
- printf(string_print_flag);
- printf("index org min max left right dec vref_range vref_count");
- printf(string_print_flag);
-
- char delay_left_margin=0;
- char delay_right_margin=0;
- for ( nibble_step=0;nibble_step<nibble_max;nibble_step++)
- {
- //serial_put_dec_out_align(delay_martix[count].add_index,8);
- printf("%08d",nibble_step);
- printf(" ");
- printf("%08d",0);
- //serial_puts(" ");
- //if ((test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) )
- {
- {
- printf(" ");
- printf("%08d",0//num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN]
- );
- }
- }
- {
- {
- printf(" ");
- printf("%08d",0//num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]
- );
- }
- }
-
- // delay_left_margin=((num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]>num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN])?
- // (num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]-num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN]):0);
- // delay_right_margin=((num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]>num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG])?
- // (num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]-num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]):0);
- delay_left_margin=num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)];
- delay_right_margin=num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)];
- printf(" ");
- printf("%08d",delay_left_margin);
-
- //serial_put_dec_out_align((delay_martix[count].delay_org>delay_martix[count].delay_min)?(delay_martix[count].delay_org-delay_martix[count].delay_min):0,8);
- printf(" ");
- printf("%08d",delay_right_margin);
- //serial_put_dec_out_align((delay_martix[count].delay_max>delay_martix[count].delay_org)?(delay_martix[count].delay_max-delay_martix[count].delay_org):0,8);
- printf(" ");
- printf("%08d",0);
- printf(" ");
- printf("%08d",0);
- printf(" 2d-eye"); //p_dev->cur_type
- printf(" dramtype ");
- printf("%08d",0);
- printf(" ");
- printf("%08d",(global_ddr_clk));
- printf(" M bdl ");
- printf("%08d",bdlr_100step);//480ps
- printf(" /100 ps ");
- printf("1/32step== ");
- printf("%08d",ui_1_32_100step);
- printf(" /100 ps ");
- //serial_puts("bit_init_value ");
- //serial_put_dec_out_align((p_dev->ddr_gloabl_message.stick_dmc_ddr_window_test_read_per_bit_init_value),4);
- //if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY){
- //serial_puts("txdqsdly_second_tune_min_value ");
- //serial_put_dec_out_align(txdqsdly_second_tune_value[count],4);
- //}
- printf(string_print_flag);
- //serial_puts("\n");
- }
- }
-}
-}
-}
-
- if(config_register==1)
- {
- if(num_arry[TEST_ARG_2_STEP]==0)
- {
- num_arry[TEST_ARG_2_STEP]=1;
- ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
- }
- }
- return reg_value;
-}
-#else
-int do_ddr_test_dqs_window_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnterddr_test_dqs_window function\n");
- printf("\nddr_test_cmd 0x27 a 0 0x80000 ns lane_disable add_test_size --- watchdog should >15s\n");
- unsigned int channel_a_en = 0;
- unsigned int channel_b_en = 0;
- // unsigned int reg_add=0;
- // unsigned int reg_base_adj=0;
-
- unsigned int lane_step= 0;
- unsigned int reg_value= 0;
- //int argc2;
- //char * argv2[30];
- char *endp;
- char *buf;
- buf="";
-
- if (argc == 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
-
- {channel_a_en = 1;
- }
- else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
-
- {channel_b_en = 1;
- }
-
-
- }
- if (argc > 2)
- {
- if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
-
- {channel_a_en = 1;
- }
- if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
-
- {channel_b_en = 1;
- }
- }
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- if (argc >3) {
- ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
-
-
-
- if (argc >4) {
- watchdog_time_s = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- watchdog_time_s= 20;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
-
- unsigned int lane_disable= 0;
-
- if (argc >5) {
- lane_disable = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- unsigned int add_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- if (argc >6) {
- add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- add_test_size= ddr_test_size;
- }
- }
- printf("add_test_size==0x%08x\n",add_test_size);
- //argc2=5;
- //for(i = 1;i<(argc);i++)
- {
- //argv2[i-1]=argv[i];
- }
-
- //argv2[0]=argv[1];
- //argv2[1]=argv[2];
- //argv2[2]=argv[3];
- //#include <stdio.h>
- // unsigned int wr_adj_per[24] ;
- //if(1)
-
- printf("\ntest use uboot sticky register\n");
-
- //DMC_STICKY_0
-
-
- char str[1024]="";
- char str_temp1[1024]="";
- char str_temp2[1024]="";
- //const char *s;
- unsigned int str_to_numarry[48];
- //str_buf = (char *)malloc(sizeof(char)*1024);
-
- unsigned int *num_arry;
- //unsigned int *num_arry_temp;
- //unsigned int *num_arry_lane0=NULL;
- //unsigned int *num_arry_lane1=NULL;
- //unsigned int *num_arry_lane2=NULL;
- //unsigned int *num_arry_lane3=NULL;
- //char *name_lane0;
- //char *name_lane1;
- //char *name_lane2;
- //char *name_lane3;
- num_arry = (unsigned int *)(&str_to_numarry);
- int i;
- //char *varname; char *env_lcdlr_temp_count;
- unsigned int lcdlr_temp_count=0;
- // const char *temp_s;const char *temp_s1;
- // int value=0;
-
- //#define DMC_STICKY_0 ((0x0000 << 2) + 0xff639800)
- //#define DMC_STICKY_MAGIC_0 0x12345678
- //#define DMC_STICKY_MAGIC_1 0xabcdbead
- //unsigned int dmc_sticky[64];
- //unsigned int sticky_reg_base_add=0;
- //varname="env_ddrtest_data_lane";
- //name_lane0="ddr_test_data_lane0";
- //name_lane1="ddr_test_data_lane1";
- //name_lane2="ddr_test_data_lane2";
- //name_lane3="ddr_test_data_lane3";
- //env_lcdlr_temp_count="lcdlr_temp_count";
-
-
- {//i=0;
- //while(s_temp)
- {
-
-
-
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- for (i = 0; i < 63; i++) {
- dmc_sticky[i]=rd_reg(sticky_reg_base_add+(i<<2));
- //printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
-
- for (i = 0; i < 48; i++) {
- num_arry[i]=dmc_sticky[i];
- printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
-
- //lcdlr_temp_count=num_arry[5];
-
-
-
- }
- }
-
-
-
-
- ///*
- //if(1)
-
- unsigned int test_arg_0_cmd0 =0; //master cmd
- unsigned int test_arg_1_cmd1 =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- // unsigned int lane_step= 0;
- //char str[24];
- unsigned int boot_times=0;
-
- test_arg_0_cmd0=num_arry[0];
- test_arg_1_cmd1=num_arry[1];
- test_arg_2_step=num_arry[2];
- test_arg_3_freq=num_arry[3];
- test_arg_4_step_status=num_arry[4];
- boot_times=num_arry[5];
- lcdlr_temp_count=num_arry[6];
- printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
- printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5 boottimes=%d\n",num_arry[5]);
- printf("test_arg_6 lcdlr_temp_count=%d\n",num_arry[6]);
- printf("test_arg_7=%d\n",num_arry[7]);
-
- if((num_arry[7]==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {boot_times++;
-
- }
- else
- {boot_times=0;
- printf("test_sticky is not magic nummber,boot times==%d\n",boot_times);
- // writel(DMC_STICKY_MAGIC_0,(sticky_reg_base_add+(6<<2)));
- writel(DMC_STICKY_MAGIC_1,(sticky_reg_base_add+(7<<2)));
- test_arg_2_step=0;
- num_arry[6]=0;
- lcdlr_temp_count=0;
- //return 1;
- }
- num_arry[5]=boot_times;
-
- writel(num_arry[5],(sticky_reg_base_add+(5<<2)));
-
- //if(test_arg_2_step)
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
- test_arg_0_cmd0=0x22;
- test_arg_1_cmd1=0;
- test_arg_2_step=1;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- lcdlr_temp_count=0;
- num_arry[0]=test_arg_0_cmd0;
- num_arry[1]=test_arg_1_cmd1;
- num_arry[2]=test_arg_2_step;
- num_arry[3]=test_arg_3_freq;
- num_arry[4]=test_arg_4_step_status;
- num_arry[5]=boot_times;
- lcdlr_temp_count=num_arry[6];
- num_arry[6]=lcdlr_temp_count;
- num_arry[7]=DMC_STICKY_MAGIC_1;
- for (i = 8; i < 48; i++) {
- num_arry[i]=0;
- }
-
- for (lane_step = 0; lane_step < 4; lane_step++)
- {
- //if(lane_step%2)
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0xff);
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))>>8)&0xff);
-#else
- dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0x1ff);
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff);
-
- printf("lcdlr1 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1),
- ((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1))&0x1ff),dq_lcd_bdl_value_wdq_org_a[lane_step]);
- printf("lcdlr3 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3),
- (((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
- DDR0_PUB_DX0LCDLR3)
- +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff),dq_lcd_bdl_value_rdqs_org_a[lane_step]);
-#endif
-
- //printf("lcdlr1 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
- //DDR0_PUB_DX0LCDLR1)
- //+DDR0_PUB_DX0LCDLR1));
- //printf("lcdlr3 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
- //DDR0_PUB_DX0LCDLR3)
- //+DDR0_PUB_DX0LCDLR3));
- //dq_lcd_bdl_value_rdqs_org_a[lane_step]=0;
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=0xffff;
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=0xffff;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- }
- //else
- {
- //dq_lcd_bdl_value_wdq_org_a[lane_step]=0;
- dq_lcd_bdl_value_wdq_min_a[lane_step]=0xffff;
- dq_lcd_bdl_value_wdq_max_a[lane_step]=0xffff;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- }
- }
-
- {
- dq_lcd_bdl_value_aclcdlr_org_a=((readl(DDR0_PUB_ACLCDLR))&ACLCDLR_MAX);
- dq_lcd_bdl_value_aclcdlr_min_a=0xffff;
- dq_lcd_bdl_value_aclcdlr_max_a=0xffff;
- dq_lcd_bdl_value_aclcdlr_status_a=0;
- dq_lcd_bdl_value_bdlr0_org_a=((readl(DDR0_PUB_ACBDLR0))&ACBDLR_MAX);
- dq_lcd_bdl_value_bdlr0_min_a=0xffff;
- dq_lcd_bdl_value_bdlr0_max_a=0xffff;
- dq_lcd_bdl_value_bdlr0_status_a=0;
- }
-
-
-
-#if 1 //( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- dq_lcd_bdl_value_wdq_status_a[0]=4;
- dq_lcd_bdl_value_rdqs_status_a[0]=4;
- }
- if(lane_disable&0x2){
- dq_lcd_bdl_value_wdq_status_a[1]=4;
- dq_lcd_bdl_value_rdqs_status_a[1]=4;
- }
- if(lane_disable&0x4){
- dq_lcd_bdl_value_wdq_status_a[2]=4;
- dq_lcd_bdl_value_rdqs_status_a[2]=4;
- }
- if(lane_disable&0x8){
- dq_lcd_bdl_value_wdq_status_a[3]=4;
- dq_lcd_bdl_value_rdqs_status_a[3]=4;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- dq_lcd_bdl_value_aclcdlr_status_a=4;
- printf("dq_lcd_bdl_value_aclcdlr_status_a==%x\n",dq_lcd_bdl_value_aclcdlr_status_a);
- }
- if(lane_disable&0x20){
- dq_lcd_bdl_value_bdlr0_status_a=4;
- printf("dq_lcd_bdl_value_bdlr0_status_a==%x\n",dq_lcd_bdl_value_bdlr0_status_a);
-
- }
- }
-
- {
- for (lane_step = 0; lane_step < 4; lane_step++)
-
-
- {
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- }
-
-
-
-
- lane_step=4;
- {
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- }
- }
-
-
-
- }
-
-
-
-
- for (i = 0; i < 48; i++) {
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- //setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
-
-
- }
-
- test_arg_2_step++;
- num_arry[2]=test_arg_2_step;
- sprintf(str, "0x%08x", num_arry[0]);
- printf("%d %d\n", 0,num_arry[0]);
- for (i = 1; i < 48; i++) {
- //num_arry[i]=0;
- sprintf(str, "%s;0x%08x", str,num_arry[i]);
- printf("%d %d\n", i,num_arry[i]);
-
- }
- //sprintf(str, "%lx", value);
- printf("%s", str);
- // setenv(varname, str);
- //run_command("save",0);
-
- for (i = 0; i < 48; i++) {
-
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
-
- for (i = 8; i < 48; i++) {
- num_arry[i]=readl((sticky_reg_base_add+(i<<2)));
- printf("ddr_test_data_num_%04d==%d\n",i,num_arry[i]);
- }
-
- ///*
- {
- for (lane_step = 0; lane_step < 4; lane_step++)
- {
- {
- dq_lcd_bdl_value_wdq_org_a[lane_step]=num_arry[8+lane_step*4*2+0];
- dq_lcd_bdl_value_wdq_min_a[lane_step]=num_arry[8+lane_step*4*2+1];
- dq_lcd_bdl_value_wdq_max_a[lane_step]=num_arry[8+lane_step*4*2+2];
- dq_lcd_bdl_value_wdq_status_a[lane_step]=num_arry[8+lane_step*4*2+3];
- }
- {
- dq_lcd_bdl_value_rdqs_org_a[lane_step]=num_arry[8+lane_step*4*2+4];
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=num_arry[8+lane_step*4*2+5];
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=num_arry[8+lane_step*4*2+6];
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=num_arry[8+lane_step*4*2+7];
- }
-
-
- }
- lane_step=4;
- {
- dq_lcd_bdl_value_aclcdlr_org_a=num_arry[8+lane_step*4*2+0];
- dq_lcd_bdl_value_aclcdlr_min_a=num_arry[8+lane_step*4*2+1];
- dq_lcd_bdl_value_aclcdlr_max_a=num_arry[8+lane_step*4*2+2];
- dq_lcd_bdl_value_aclcdlr_status_a=num_arry[8+lane_step*4*2+3];
- dq_lcd_bdl_value_bdlr0_org_a=num_arry[8+lane_step*4*2+4];
- dq_lcd_bdl_value_bdlr0_min_a=num_arry[8+lane_step*4*2+5];
- dq_lcd_bdl_value_bdlr0_max_a=num_arry[8+lane_step*4*2+6];
- dq_lcd_bdl_value_bdlr0_status_a=num_arry[8+lane_step*4*2+7];
- }
- }
- //*/
-
-
-
-
- if (channel_a_en)
- {
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane a\n");
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- ddr_test_watchdog_enable(watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",watchdog_time_s);
-
- /*
- {
- lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- setenv(env_lcdlr_temp_count, buf);
- run_command("save",0);
- }
- */
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
- )
- {
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0))
- { dq_lcd_bdl_value_wdq_status_a[lane_step]=1;
- {
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+0),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
-
- }
- else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- //
- // }
- lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_wdq_min_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
-
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+1;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_wdq_status_a[lane_step]==2)||
- (dq_lcd_bdl_value_wdq_status_a[lane_step]==3))
- {
- // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
- // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- // num_to_env(varname,num_arry);
- // run_command("reset",0);
- // }
-
- {
- if(dq_lcd_bdl_value_wdq_status_a[lane_step]==2)
- { dq_lcd_bdl_value_wdq_status_a[lane_step]=3;
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+0),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
-
- }
- else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==3)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- //
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_wdq_max_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+2;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- run_command("reset",0);
- }
-
- }
-
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
- )
- {
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
- ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- { dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- //i=6;
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
-
- }
- else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_rdqs_min_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+5;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3))
- {
-
- {
- if(dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)
- {
-
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
-
- }
- else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_rdqs_max_a[lane_step]=lcdlr_temp_count;
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- //ddr_udelay(1000000);
- // num_to_env(varname,num_arry);
-
- {
- i=8+lane_step*8+6;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- run_command("reset",0);
- }
-
- }
-
- /*
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
- */
-
-
- ddr_test_watchdog_disable(); //s
- {printf("close watchdog\n");
- }
-
-
- }
-
-
-
- }
-
- if (channel_a_en)
- {
-
- //*(char *)(argv2[0])="a";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest lcdlr ac bdlr window lane a...\n");
-
- {
- ddr_test_watchdog_enable(watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",watchdog_time_s);
- printf("\ndq_lcd_bdl_value_aclcdlr_status_a %d \n",dq_lcd_bdl_value_aclcdlr_status_a);
- lane_step=4;
- //env_lcdlr_temp_count="lcdlr_temp_count_a";
- if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==0)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==1)
- )
- {
- if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
- ||(dq_lcd_bdl_value_aclcdlr_status_a==0))
- { dq_lcd_bdl_value_aclcdlr_status_a=1;
- {
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- i=8+lane_step*8+3;
- printf("aclcdlr_status_a==0x%08x\n",num_arry[i]);
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
-
- }
- printf("\n222test lcdlr ac bdlr window lane a...\n");
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- printf("\n333test lcdlr ac bdlr window lane a...\n");
- //ddr_tune_aclcdlr_step
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 0),2);
- printf("\nstr=%s\n",str);
- printf("aclcdlr_status_a1==0x%08x\n",num_arry[i]);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_aclcdlr_status_a=2;
-
- }
- else if (dq_lcd_bdl_value_aclcdlr_status_a==1)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- //lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_aclcdlr_min_a=lcdlr_temp_count;
- dq_lcd_bdl_value_aclcdlr_status_a=2;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
-
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+1;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_aclcdlr_status_a==2)||
- (dq_lcd_bdl_value_aclcdlr_status_a==3))
- {
- // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
- // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
- // num_to_env(varname,num_arry);
- // run_command("reset",0);
- // }
-
- {
- if(dq_lcd_bdl_value_aclcdlr_status_a==2)
- { dq_lcd_bdl_value_aclcdlr_status_a=3;
- {
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 0),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_aclcdlr_status_a=4;
-
- }
- else if (dq_lcd_bdl_value_aclcdlr_status_a==3)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_aclcdlr_max_a=lcdlr_temp_count;
- dq_lcd_bdl_value_aclcdlr_status_a=4;
- }
-
- num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
- num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
- num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+2;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+3;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- run_command("reset",0);
- }
-
- }
-
-
- if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
- ||(dq_lcd_bdl_value_bdlr0_status_a==0)
- ||(dq_lcd_bdl_value_bdlr0_status_a==1)
- )
- {
- if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
- ||(dq_lcd_bdl_value_bdlr0_status_a==0))
- { dq_lcd_bdl_value_bdlr0_status_a=1;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_bdlr0_status_a=2;
-
- }
- else if (dq_lcd_bdl_value_bdlr0_status_a==1)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_bdlr0_min_a=lcdlr_temp_count;
- dq_lcd_bdl_value_bdlr0_status_a=2;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
- //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- //ddr_udelay(1000000);
- //num_to_env(varname,num_arry);
- {
- i=8+lane_step*8+5;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_bdlr0_status_a==2)||
- (dq_lcd_bdl_value_bdlr0_status_a==3))
- {
-
- {
- if(dq_lcd_bdl_value_bdlr0_status_a==2)
- {
-
- dq_lcd_bdl_value_bdlr0_status_a=3;
- {
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
- {
- lcdlr_temp_count=0;
- sprintf(buf, "0x%08x", lcdlr_temp_count);
- printf( "%s", buf);
- // setenv(env_lcdlr_temp_count, buf);
- // run_command("save",0);
- writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
- }
-
- sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- ddr_udelay(2000000);
- dq_lcd_bdl_value_bdlr0_status_a=4;
-
- }
- else if (dq_lcd_bdl_value_bdlr0_status_a==3)
- {
- // temp_s= getenv(env_lcdlr_temp_count);
- // if(temp_s)
- // {
- // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
- // }
- lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
- dq_lcd_bdl_value_bdlr0_max_a=lcdlr_temp_count;
- dq_lcd_bdl_value_bdlr0_status_a=4;
- }
-
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
- //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
- //ddr_udelay(1000000);
- // num_to_env(varname,num_arry);
-
- {
- i=8+lane_step*8+6;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- //run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- i=8+lane_step*8+7;
- sprintf(str_temp1,"ddr_test_data_num_%04d",i);
- sprintf(str_temp2,"0x%08x",num_arry[i]);
- // setenv(str_temp1, str_temp2);
- // run_command("save",0);
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
- run_command("reset",0);
- }
-
- }
-
- /*
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
-
- if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
- (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
- {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
- sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
- printf("\nstr=%s\n",str);
- //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- ddr_test_watchdog_clear();
- run_command(str,0);
- ddr_test_watchdog_clear();
- dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
- num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
- //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
- num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
- num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
- num_to_env(varname,num_arry);
- run_command("reset",0);
- }
- */
-
-
- ddr_test_watchdog_disable(); //s
- {printf("close watchdog\n");
- }
-
-
- }
-
-
-
- }
-
- if (channel_b_en)
- {//*(char *)(argv2[0])="b";
- // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
- printf("\ntest dqs window lane b\n");
- for ((lane_step=0);(lane_step<8);(lane_step++))
- {
- //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d 1",ddr_test_size,( lane_step));
- printf("\nstr=%s\n",str);
- run_command(str,0);
-
- }
- }
-
- unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
- if (channel_a_en)
- {
- acmdlr=((readl((DDR0_PUB_ACMDLR)))&ACLCDLR_MAX);
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_a[lane_step],
- dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
- dq_lcd_bdl_value_rdqs_org_a[lane_step],
- dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
- }
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- dq_lcd_bdl_value_aclcdlr_org_a,
- dq_lcd_bdl_value_aclcdlr_min_a,dq_lcd_bdl_value_aclcdlr_max_a,
- dq_lcd_bdl_value_bdlr0_org_a,
- dq_lcd_bdl_value_bdlr0_min_a,dq_lcd_bdl_value_bdlr0_max_a);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- dq_lcd_bdl_value_aclcdlr_org_a,
- (((dq_lcd_bdl_value_aclcdlr_max_a-dq_lcd_bdl_value_aclcdlr_org_a)*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_aclcdlr_org_a-dq_lcd_bdl_value_aclcdlr_min_a)*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
- 2*dq_lcd_bdl_value_aclcdlr_org_a));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- dq_lcd_bdl_value_bdlr0_org_a,
- 0,
- 0,
- (((dq_lcd_bdl_value_bdlr0_org_a-dq_lcd_bdl_value_bdlr0_min_a)*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_bdlr0_max_a-dq_lcd_bdl_value_bdlr0_org_a)*delay_step_x100
- )/100),
-
- 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
- 2*dq_lcd_bdl_value_bdlr0_org_a));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- dq_lcd_bdl_value_wdq_org_a[lane_step],
- (((dq_lcd_bdl_value_wdq_max_a[lane_step]-dq_lcd_bdl_value_wdq_org_a[lane_step])*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_wdq_org_a[lane_step]-dq_lcd_bdl_value_wdq_min_a[lane_step])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(dq_lcd_bdl_value_wdq_max_a[lane_step]+dq_lcd_bdl_value_wdq_min_a[lane_step])/(
- 2*dq_lcd_bdl_value_wdq_org_a[lane_step]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- dq_lcd_bdl_value_rdqs_org_a[lane_step],
- 0,
- 0,
-
- (((dq_lcd_bdl_value_rdqs_org_a[lane_step]-dq_lcd_bdl_value_rdqs_min_a[lane_step])*delay_step_x100
- )/100),
- (((dq_lcd_bdl_value_rdqs_max_a[lane_step]-dq_lcd_bdl_value_rdqs_org_a[lane_step])*delay_step_x100
- )/100),
- 100*(dq_lcd_bdl_value_rdqs_max_a[lane_step]+dq_lcd_bdl_value_rdqs_min_a[lane_step])/(
- 2*dq_lcd_bdl_value_rdqs_org_a[lane_step]));
-
-
-
- }
- }
-
-
-
- if (channel_b_en)
- {
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {;
- }
- }
-
- return reg_value;
-}
-
-
-unsigned int do_ddr_uboot_window_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
- unsigned temp_count=0;
- for(;temp_count<argc;temp_count++)
- {
- printf("arg[%d]==%s;\n",argc,argv[temp_count]);
- }
-
- if (argc >1) {
- g_ddr_test_struct->ddr_data_source = simple_strtoull_ddr(argv[1], &endp, 16);
- if (*argv[1] == 0 || *endp != 0)
- {
- g_ddr_test_struct->ddr_data_source = DDR_PARAMETER_SOURCE_FROM_DMC_STICKY;
- }
- }
- if (argc >2) {
- g_ddr_test_struct->ddr_data_source = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- {
- g_ddr_test_struct->ddr_data_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
- /*
- g_ddr_test_struct->ddr_data_source =
- g_ddr_test_struct->ddr_data_test_size =
- g_ddr_test_struct->ddr_address_test_size =
- g_ddr_test_struct->ddr_test_watchdog_times_s =
- g_ddr_test_struct->ddr_test_lane_disable =
- g_ddr_test_struct->ddr_address_test_size =
- g_ddr_test_struct->ddr_address_test_size =
- */
-
- return 1;
-}
-
-unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_index,unsigned int lcdlr_value,unsigned int read_write_flag )
-{
- //char *endp;
- unsigned read_value=0;
-
- //return read_value;
-
-#if 1
- unsigned reg_add=0;
- {
-#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
- {
- reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1);
- if((data_index%2)==0)
- {
- if(read_write_flag==DDR_PARAMETER_READ)
- {
- lcdlr_value=((readl(reg_add))&0xff);
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
- wr_reg(reg_add, ((readl(reg_add))&0xffffff00)|(lcdlr_value&0xff));
- }
- }
- if((data_index%2)==1)
- {
- if(read_write_flag==DDR_PARAMETER_READ)
- {
- lcdlr_value=(((readl(reg_add))>>8)&0xff);
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
- wr_reg(reg_add, ((readl(reg_add))&0xffff00ff)|((lcdlr_value&0xff)<<8));
- }
- }
- }
-
-#else
-
- if((data_index%2)==0)
- {
- reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR1);
-
- }
- if((data_index%2)==1)
- {
- reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
- DDR0_PUB_DX0LCDLR1)
- +DDR0_PUB_DX0LCDLR3);
-
- }
- if(read_write_flag==DDR_PARAMETER_READ)
- {
- lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
- wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
- }
-
-#endif
- }
-
-
-
- printf("lcdlr %d %08x,%08x\n", data_index,reg_add,
- (readl(reg_add)));
- read_value=lcdlr_value;
-
- return read_value;
-
-#endif
-}
-unsigned int do_ddr_read_acmdlr(void )
-{
-
- unsigned reg_value=0;
-#if ( CONFIG_DDR_PHY<=P_DDR_PHY_905X)
- reg_value=(readl(DDR0_PUB_ACMDLR0));
- reg_value=(reg_value>>16)&0x1ff;
-#endif
- return reg_value;
-}
-unsigned int do_ddr_read_write_ddr_add_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
-{
- unsigned reg_add=0;
-
- if(add_index==0)
- reg_add=(DDR0_PUB_ACLCDLR);
- if(add_index==1)
- reg_add=(DDR0_PUB_ACBDLR0);
- {
- if(read_write_flag==DDR_PARAMETER_READ)
- {
- lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
- wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
- }
-
- }
- printf("lcdlr %d %08x,%08x\n", add_index,reg_add,
- (readl(reg_add)));
- return lcdlr_value;
-}
-
-int do_ddr_uboot_window_use_source_quick_method(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- //setenv bootcmd "ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000"
- printf("\nsetenv bootcmd ddr_test_cmd 0x32 2 6 20 0 0x100000 0x4000000 \n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-#define DDR_TEST_NULL 0
-#define DDR_TEST_PASS 1
-#define DDR_TEST_FAIL 2
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
-
- unsigned int address_test_watchdog_time_s=15;
- unsigned int test_watchdog_time_s=15;
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- address_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=100;
- unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- unsigned int lcdlr_min=0;
- unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- char str[1024]="";
-
- if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- ddr_test_data_array_max=64;
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int test_arg_0_ab_best_lcdlr_value =0; //best_lcdlr_value
- unsigned int test_arg_1_test_error_flag =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_5_ab_edge_lcdlr_value =0;
- unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_arg_7_magic_number =0;
- unsigned int org_lcdlr_value_temp=0;
- unsigned int acmdlr=0;
- acmdlr=do_ddr_read_acmdlr();
-
- test_arg_0_ab_best_lcdlr_value=num_array[0];
- test_arg_1_test_error_flag=num_array[1];
- test_arg_2_step=num_array[2];
- test_arg_3_freq=num_array[3];
- test_arg_4_step_status=num_array[4];
- test_arg_5_ab_edge_lcdlr_value=num_array[5];
- test_arg_6_lcdlr_temp_count=num_array[6];
- test_arg_7_magic_number=num_array[7];
- printf("test_arg_0_ab_best_lcdlr_value==%d\n",test_arg_0_ab_best_lcdlr_value);
- printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
- printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
- printf("test_arg_7_magic_number=%d\n",num_array[7]);
-
-
-
- if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {
- }
- else
- {
-
- test_arg_0_ab_best_lcdlr_value=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_2_step=0;
- test_arg_6_lcdlr_temp_count=0;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- }
- //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
- num_array[0] = test_arg_0_ab_best_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
-
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
- test_arg_0_ab_best_lcdlr_value=0;
- test_arg_1_test_error_flag=0;
- test_arg_2_step=1;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_6_lcdlr_temp_count=lcdlr_min;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- num_array[0] = test_arg_0_ab_best_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- //for (temp_count = 8; temp_count< 48;temp_count++) {
- // num_array[temp_count]=0;
- //}
-
- for (temp_count = 8; temp_count < (32+8); temp_count++) //data
- {
- //printf("1temp_count=%d\n",temp_count);
-
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //printf("2temp_count=%d\n",temp_count);
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- //temp_count=temp_count+4;
- }
-
-
-
- }
-
- for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
- {
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- }
-
-
- }
-
-
-
-
-#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- num_array[8+3]=0xffff;
- num_array[8+4+3]=0xffff;
- }
- if(lane_disable&0x2){
- num_array[8+3+8]=0xffff;
- num_array[8+4+3+8]=0xffff;
- }
- if(lane_disable&0x4){
- num_array[8+3+8+8]=0xffff;
- num_array[8+4+3+8+8]=0xffff;
- }
- if(lane_disable&0x8){
- num_array[8+3+8+8+8]=0xffff;
- num_array[8+4+3+8+8+8]=0xffff;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- num_array[8+3+8+8+8+8]=0xffff;
- }
- if(lane_disable&0x20){
- num_array[8+4+3+8+8+8+8]=0xffff;
-
- }
- }
-
-
- }
-
-
-
-
- for (temp_count= 0; temp_count< 48;temp_count++) {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- test_arg_2_step++;
- num_array[2]=test_arg_2_step;
- for (temp_count = 1; temp_count < 48; temp_count++)
- {
- printf("%d %d\n", temp_count,num_array[temp_count]);
- }
- temp_count=2;
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- //for (i = 0; i < 48; i++) {
-
- // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
- //}
-
-
- //for (i = 8; i < 48; i++) {
- //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
- //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
- //}
-
- ///*
- unsigned int lane_step=0;
-
- printf("\nstart loop test\n");
-
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
- if((num_array[(lane_step<<2)+3+8]<0x4))
- {break;
- }
- }
- printf("\nstart test lane_step =%d\n",lane_step);
- if(lane_step<10)
- {
- if(lane_step<8)
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
- //lcdlr_min=0;
- //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
- }
- else
- {
- test_watchdog_time_s=address_test_watchdog_time_s;
- ddr_test_size=ddr_add_test_size;
- //lcdlr_min=0;
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
-
- if((num_array[8+(lane_step<<2)+3]==0)) //test left edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
- // test_arg_0_ab_best_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_ab_best_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=1;
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==1)) //test left edge ongoing -loop
- {
-
- if((num_array[5]+1)>=(num_array[6]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
-
-
- num_array[8+(lane_step<<2)+3]=2; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // test_arg_0_ab_best_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_ab_best_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
-
- }
- }
-
-
- }
-
- else if((num_array[8+(lane_step<<2)+3]==2)) //test right edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=3;
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==3)) //test right edge ongoing -loop
- {
-
- if((num_array[6]+1)>=(num_array[5]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- num_array[8+(lane_step<<2)+3]=4; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- run_command("reset",0);
- while(1);
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
-
- }
- }
-
-
- }
- }
-
- if(lane_step>=10) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
- }
-
- // unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- lane_step=4;
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
-
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
-
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
-
-
-
- }
- }
-
- test_arg_2_step=0x10000;
- num_array[2]=test_arg_2_step;
-
-
-
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- return 1;
-}
-
-int do_ddr_uboot_window_use_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- //setenv bootcmd "ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000"
- printf("\nsetenv bootcmd ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000 \n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
-
- unsigned int address_test_watchdog_time_s=15;
- unsigned int test_watchdog_time_s=15;
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- address_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=100;
- unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- unsigned int lcdlr_min=0;
- unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- char str[1024]="";
-
- if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- ddr_test_data_array_max=64;
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int test_arg_0_cmd0 =0; //master cmd
- unsigned int test_arg_1_cmd1 =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_5_boottimes =0;
- unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_arg_7_magic_number =0;
- unsigned int org_lcdlr_value_temp=0;
- unsigned int acmdlr=0;
- acmdlr=do_ddr_read_acmdlr();
-
- test_arg_0_cmd0=num_array[0];
- test_arg_1_cmd1=num_array[1];
- test_arg_2_step=num_array[2];
- test_arg_3_freq=num_array[3];
- test_arg_4_step_status=num_array[4];
- test_arg_5_boottimes=num_array[5];
- test_arg_6_lcdlr_temp_count=num_array[6];
- test_arg_7_magic_number=num_array[7];
- printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
- printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5_boottimes=%d\n",num_array[5]);
- printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
- printf("test_arg_7_magic_number=%d\n",num_array[7]);
-
-
-
- if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {test_arg_5_boottimes++;
-
- }
- else
- {test_arg_5_boottimes=0;
- test_arg_2_step=0;
- test_arg_6_lcdlr_temp_count=0;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- }
- printf("boot times==%d\n",test_arg_5_boottimes);
- num_array[0] = test_arg_0_cmd0 ;
- num_array[1] = test_arg_1_cmd1 ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_boottimes ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
-
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
- test_arg_0_cmd0=0X31;//DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW;
- test_arg_1_cmd1=0;
- test_arg_2_step=1;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- test_arg_6_lcdlr_temp_count=lcdlr_min;
- num_array[0] = test_arg_0_cmd0 ;
- num_array[1] = test_arg_1_cmd1 ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_boottimes ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- //for (temp_count = 8; temp_count< 48;temp_count++) {
- // num_array[temp_count]=0;
- //}
-
- for (temp_count = 8; temp_count < (32+8); temp_count++) //data
- {
- //printf("1temp_count=%d\n",temp_count);
- if((temp_count%4)==0) //org
- {
- //printf("2temp_count=%d\n",temp_count);
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
-
- }
- if((temp_count%4)==1) //min
- {
- num_array[temp_count]=0;
- }
- if((temp_count%4)==2) //max
- {
- num_array[temp_count]=acmdlr;
- }
- if((temp_count%4)==3) //status
- {
- num_array[temp_count]=0;
- }
-
-
- }
-
- for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
- {
- if((temp_count%4)==0) //org
- {
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
-
- }
- if((temp_count%4)==1) //min
- {
- num_array[temp_count]=0;
- }
- if((temp_count%4)==2) //max
- {
- num_array[temp_count]=acmdlr*3;
- if(temp_count==(32+8+4+2))
- num_array[temp_count]=0x3f;//bdlr0 max value
- }
- if((temp_count%4)==3) //status
- {
- num_array[temp_count]=0;
- }
-
-
- }
-
-
-
-
-#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- num_array[8+3]=0xffff;
- num_array[8+4+3]=0xffff;
- }
- if(lane_disable&0x2){
- num_array[8+3+8]=0xffff;
- num_array[8+4+3+8]=0xffff;
- }
- if(lane_disable&0x4){
- num_array[8+3+8+8]=0xffff;
- num_array[8+4+3+8+8]=0xffff;
- }
- if(lane_disable&0x8){
- num_array[8+3+8+8+8]=0xffff;
- num_array[8+4+3+8+8+8]=0xffff;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- num_array[8+3+8+8+8+8]=0xffff;
- }
- if(lane_disable&0x20){
- num_array[8+4+3+8+8+8+8]=0xffff;
-
- }
- }
-
-
- }
-
-
-
-
- for (temp_count= 0; temp_count< 48;temp_count++) {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- test_arg_2_step++;
- num_array[2]=test_arg_2_step;
- for (temp_count = 1; temp_count < 48; temp_count++)
- {
- printf("%d %d\n", temp_count,num_array[temp_count]);
- }
- temp_count=2;
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- //for (i = 0; i < 48; i++) {
-
- // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
- //}
-
-
- //for (i = 8; i < 48; i++) {
- //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
- //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
- //}
-
- ///*
- unsigned int lane_step=0;
-
- printf("\nstart loop test\n");
-
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
- if((num_array[(lane_step<<2)+3+8]<0x4))
- {break;
- }
- }
- printf("\nstart test lane_step =%d\n",lane_step);
- if(lane_step<10)
- {
- if(lane_step<8)
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
- lcdlr_min=0;
- lcdlr_max=(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
- }
- else
- {
- test_watchdog_time_s=address_test_watchdog_time_s;
- ddr_test_size=ddr_add_test_size;
- lcdlr_min=0;
- lcdlr_max=(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- }
-
- if((num_array[8+(lane_step<<2)+3]==0)) //test left edge begin
- {
- num_array[8+(lane_step<<2)+3]=1;
- test_arg_6_lcdlr_temp_count=lcdlr_min;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
-
- num_array[8+(lane_step<<2)+3]=2; //left finish
-
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- temp_count=8+(lane_step<<2)+1;
- num_array[temp_count]=test_arg_6_lcdlr_temp_count;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
-
-
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==1)) //test left edge ongoing -loop
- {
- num_array[8+(lane_step<<2)+3]=1;
- test_arg_6_lcdlr_temp_count++;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=2; //left finish
-
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- temp_count=8+(lane_step<<2)+1;
- num_array[temp_count]=test_arg_6_lcdlr_temp_count;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
-
-
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==2)) //test right edge begin
- {
- num_array[8+(lane_step<<2)+3]=3;
- test_arg_6_lcdlr_temp_count=lcdlr_max;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=4; //right finish
-
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- temp_count=8+(lane_step<<2)+2;
- num_array[temp_count]=test_arg_6_lcdlr_temp_count;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
-
-
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==3)) //test right edge ongoing -loop
- {
- num_array[8+(lane_step<<2)+3]=3;
- test_arg_6_lcdlr_temp_count--;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=4; //right finish
-
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- temp_count=8+(lane_step<<2)+2;
- num_array[temp_count]=test_arg_6_lcdlr_temp_count;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0;
- num_array[6]=test_arg_6_lcdlr_temp_count;
-
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
-
-
-
- }
- }
- }
-
- if(lane_step>=10) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
- }
-
- // unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- lane_step=4;
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
-
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
-
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
-
-
-
- }
- }
-
- test_arg_2_step=0x10000;
- num_array[2]=test_arg_2_step;
-
-
-
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- return 1;
-}
-
-
-int do_ddr_uboot_kernel_window_use_source_quick_method(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- //setenv storeboot "ddr_test_cmd 0x33 2 6 20 0 0x100000 0x4000000"
- printf("\nsetenv bootcmd ddr_test_cmd 0x33 2 6 20 0 0x100000 0x4000000 \n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-#define DDR_TEST_NULL 0
-#define DDR_TEST_PASS 1
-#define DDR_TEST_FAIL 2
-
-#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
-#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
- //PREG_STICKY_REG5
-
-
-#define DDR_TEST_STATUS_UBOOT_ONGOING 1
-#define DDR_TEST_STATUS_UBOOT_FINISH 2
-#define DDR_TEST_STATUS_KERNEL_ONGING 3
-#define DDR_TEST_STATUS_KERNEL_FINISH 4
-
-#define DDR_TEST_METHOD_DIVIDER_2 1 //AB METHOD A is failing B is passing value
-#define DDR_TEST_METHOD_DECREASE 2
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_method=DDR_TEST_METHOD_DIVIDER_2;
- unsigned int ddr_add_test_method=DDR_TEST_METHOD_DIVIDER_2;
- unsigned int ddr_test_method=DDR_TEST_METHOD_DIVIDER_2;
-
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
-
- unsigned int address_test_watchdog_time_s=15;
- unsigned int test_watchdog_time_s=15;
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- address_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
- if (argc >7) {
- ddr_data_test_method = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0)
- {
- ddr_data_test_method= DDR_TEST_METHOD_DIVIDER_2;
- }
- }
- printf("ddr_data_test_method==0x%08x\n",ddr_data_test_method);
- if (argc >8) {
- ddr_add_test_method = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0)
- {
- ddr_add_test_method= DDR_TEST_METHOD_DIVIDER_2;
- }
- }
- printf("ddr_add_test_method==0x%08x\n",ddr_add_test_method);
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=100;
- unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- unsigned int lcdlr_min=0;
- unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- char str[1024]="";
-
- if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- ddr_test_data_array_max=64;
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int test_arg_0_ab_best_lcdlr_value =0; //best_lcdlr_value
- unsigned int test_arg_1_test_error_flag =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 UBOOT ONGOING 2 UBOOT FINISH 3 KERNEL ONGOING 4 KERNEL FINISH
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_5_ab_edge_lcdlr_value =0;
- unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_arg_7_magic_number =0;
- unsigned int org_lcdlr_value_temp=0;
- unsigned int acmdlr=0;
- acmdlr=do_ddr_read_acmdlr();
-
- test_arg_0_ab_best_lcdlr_value=num_array[0];
- test_arg_1_test_error_flag=num_array[1];
- test_arg_2_step=num_array[2];
- test_arg_3_freq=num_array[3];
- test_arg_4_step_status=num_array[4];
- test_arg_5_ab_edge_lcdlr_value=num_array[5];
- test_arg_6_lcdlr_temp_count=num_array[6];
- test_arg_7_magic_number=num_array[7];
- printf("test_arg_0_ab_best_lcdlr_value==%d\n",test_arg_0_ab_best_lcdlr_value);
- printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
- printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
- printf("test_arg_7_magic_number=%d\n",num_array[7]);
-
-
-
- if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {
- }
- else
- {
-
- test_arg_0_ab_best_lcdlr_value=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_2_step=0;
- test_arg_6_lcdlr_temp_count=0;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- }
- //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
- num_array[0] = test_arg_0_ab_best_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
-
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
-
-
-
- test_arg_0_ab_best_lcdlr_value=0;
- test_arg_1_test_error_flag=0;
- test_arg_2_step=DDR_TEST_STATUS_UBOOT_ONGOING;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_6_lcdlr_temp_count=lcdlr_min;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- num_array[0] = test_arg_0_ab_best_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- //for (temp_count = 8; temp_count< 48;temp_count++) {
- // num_array[temp_count]=0;
- //}
-
- for (temp_count = 8; temp_count < (32+8); temp_count++) //data
- {
- //printf("1temp_count=%d\n",temp_count);
-
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //printf("2temp_count=%d\n",temp_count);
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- //temp_count=temp_count+4;
- }
-
-
-
- }
-
- for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
- {
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- }
-
-
- }
-
-
-
-
-#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- num_array[8+3]=0xffff;
- num_array[8+4+3]=0xffff;
- }
- if(lane_disable&0x2){
- num_array[8+3+8]=0xffff;
- num_array[8+4+3+8]=0xffff;
- }
- if(lane_disable&0x4){
- num_array[8+3+8+8]=0xffff;
- num_array[8+4+3+8+8]=0xffff;
- }
- if(lane_disable&0x8){
- num_array[8+3+8+8+8]=0xffff;
- num_array[8+4+3+8+8+8]=0xffff;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- num_array[8+3+8+8+8+8]=0xffff;
- }
- if(lane_disable&0x20){
- num_array[8+4+3+8+8+8+8]=0xffff;
-
- }
- }
-
-
- }
-
-
-
-
- for (temp_count= 0; temp_count< 48;temp_count++) {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- //test_arg_2_step++;
- num_array[2]=test_arg_2_step;
- for (temp_count = 1; temp_count < 48; temp_count++)
- {
- printf("%d %d\n", temp_count,num_array[temp_count]);
- }
- temp_count=2;
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- //for (i = 0; i < 48; i++) {
-
- // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
- //}
-
-
- //for (i = 8; i < 48; i++) {
- //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
- //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
- //}
-
- ///*
- unsigned int lane_step=0;
-
- printf("\nstart loop test\n");
-
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
- if(test_arg_2_step<DDR_TEST_STATUS_KERNEL_ONGING)
- {
- if((num_array[(lane_step<<2)+3+8]<(0x4)))
- {break;
- }
- }
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_ONGOING)
- {if(lane_step>9)
- {
- test_arg_2_step=DDR_TEST_STATUS_UBOOT_FINISH;
- printf("uboot test result: \n");
- }
- }
-
- if(test_arg_2_step>DDR_TEST_STATUS_UBOOT_FINISH)
- {
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
-
- {
- if((num_array[(lane_step<<2)+3+8]<(0x4+4)))
- {break;
- }
- }
- }
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- //test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
- }
- else
- {
- printf("\nstart test lane_step =%d\n",lane_step);
- if(lane_step<10)
- {
- if(lane_step<8)
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
- ddr_test_method=ddr_data_test_method;
- //lcdlr_min=0;
- //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
- }
- else
- {
- test_watchdog_time_s=address_test_watchdog_time_s;
- ddr_test_size=ddr_add_test_size;
- ddr_test_method=ddr_add_test_method;
- //lcdlr_min=0;
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
-
- if(num_array[8+(lane_step<<2)+3]>4) //from kernel
- {
- num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- if(((num_array[8+(lane_step<<2)+3]==0))||((num_array[8+(lane_step<<2)+3]==4))) //test left edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
- // test_arg_0_ab_best_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_ab_best_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- read_write_window_test_flag(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
-
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=(num_array[8+(lane_step<<2)+3]+1);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- {
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- }
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
-
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
- //if( num_array[8+(lane_step<<2)+3]>4)
-
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==1)||((num_array[8+(lane_step<<2)+3]==5))) //test left edge begin) //test left edge ongoing -loop
- {
-
- if((num_array[6]+1)>=(num_array[8+(lane_step<<2)+1]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
-
-
- num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- // num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- // test_arg_0_ab_best_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_ab_best_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- // num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- // num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
- }
-
- }
- }
-
-
- }
-
- else if((num_array[8+(lane_step<<2)+3]==2)||((num_array[8+(lane_step<<2)+3]==6))) //test right edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- //test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=num_array[8+(lane_step<<2)+3]+1;
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
-
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==3)||(num_array[8+(lane_step<<2)+3]==7)) //test right edge ongoing -loop
- {
-
- if((num_array[8+(lane_step<<2)+2]+1)>=(num_array[6]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- run_command("reset",0);
- while(1);
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- // num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- // num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
-
- }
- }
-
-
- }
- }
- }
- if(lane_step>=10) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
- }
-
- // unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- lane_step=4;
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
-
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
-
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
-
-
-
- }
- }
-
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
- num_array[2]=test_arg_2_step;
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_KERNEL_ONGING)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- test_arg_2_step=DDR_TEST_STATUS_KERNEL_FINISH;
- num_array[2]=test_arg_2_step;
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL;
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- }
-
-
-
-
-
-
- // if( num_array[8+(lane_step<<2)+3]>4)
-
-
-
- return 1;
-}
-
-
-int do_ddr_uboot_kernel_window_use_source_quick_methods(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- //setenv storeboot "ddr_test_cmd 0x34 2 6 20 0 0x100000 0x4000000"
- printf("\nsetenv bootcmd ddr_test_cmd 0x34 2 6 20 0 0x100000 0x4000000 \n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-#define DDR_TEST_NULL 0
-#define DDR_TEST_PASS 1
-#define DDR_TEST_FAIL 2
-
-#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
-#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
- //PREG_STICKY_REG5
-
-
-#define DDR_TEST_STATUS_UBOOT_ONGOING 1
-#define DDR_TEST_STATUS_UBOOT_FINISH 2
-#define DDR_TEST_STATUS_KERNEL_ONGING 3
-#define DDR_TEST_STATUS_KERNEL_FINISH 4
-
-#define DDR_TEST_METHOD_DIVIDER_2 1 //AB METHOD A is failing B is passing value
-#define DDR_TEST_METHOD_DECREASE 2
-#define DDR_TEST_METHOD_DECREASE_ALL_SAMETIME 3
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_method=DDR_TEST_METHOD_DIVIDER_2;
- unsigned int ddr_add_test_method=DDR_TEST_METHOD_DIVIDER_2;
- unsigned int ddr_test_method=DDR_TEST_METHOD_DIVIDER_2;
-
- unsigned int ddr_enable_kernel_window_test_flag=0;
-
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
- unsigned int ddr_lcdlr_test_offset=0;
- //unsigned int ddr_lcdlr_test_org_save=0;
- unsigned int ddr_lcdlr_test_temp_value=0;
-
- unsigned int address_test_watchdog_time_s=15;
- unsigned int test_watchdog_time_s=15;
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- address_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
- if (argc >7) {
- ddr_data_test_method = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0)
- {
- ddr_data_test_method= DDR_TEST_METHOD_DIVIDER_2;
- }
- }
- printf("ddr_data_test_method==0x%08x\n",ddr_data_test_method);
- if (argc >8) {
- ddr_add_test_method = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0)
- {
- ddr_add_test_method= DDR_TEST_METHOD_DIVIDER_2;
- }
- }
- printf("ddr_add_test_method==0x%08x\n",ddr_add_test_method);
-
- if (argc >9) {
- ddr_enable_kernel_window_test_flag = simple_strtoull_ddr(argv[9], &endp, 0);
- if (*argv[9] == 0 || *endp != 0)
- {
- ddr_enable_kernel_window_test_flag= 0;
- }
- }
- printf("ddr_enable_kernel_window_test_flag==0x%08x\n",ddr_enable_kernel_window_test_flag);
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=100;
- unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- unsigned int lcdlr_min=0;
- unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- char str[1024]="";
-
- if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
- ddr_test_data_array_max=64;
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int test_arg_0_orgt_store_lcdlr_value =0; //best_lcdlr_value
- unsigned int test_arg_1_test_error_flag =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 UBOOT ONGOING 2 UBOOT FINISH 3 KERNEL ONGOING 4 KERNEL FINISH
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_5_ab_edge_lcdlr_value =0;
- unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_arg_7_magic_number =0;
- unsigned int org_lcdlr_value_temp=0;
- unsigned int acmdlr=0;
- acmdlr=do_ddr_read_acmdlr();
-
- test_arg_0_orgt_store_lcdlr_value=num_array[0];
- test_arg_1_test_error_flag=num_array[1];
- test_arg_2_step=num_array[2];
- test_arg_3_freq=num_array[3];
- test_arg_4_step_status=num_array[4];
- test_arg_5_ab_edge_lcdlr_value=num_array[5];
- test_arg_6_lcdlr_temp_count=num_array[6];
- test_arg_7_magic_number=num_array[7];
- printf("test_arg_0_orgt_store_lcdlr_value==%d\n",test_arg_0_orgt_store_lcdlr_value);
- printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
- printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
- printf("test_arg_7_magic_number=%d\n",num_array[7]);
-
-
-
- if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {
- }
- else
- {
-
- test_arg_0_orgt_store_lcdlr_value=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_2_step=0;
- test_arg_6_lcdlr_temp_count=0;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- }
- //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
- num_array[0] = test_arg_0_orgt_store_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
-
- if(test_arg_2_step)
- {
- if(test_arg_3_freq!=global_ddr_clk) //
- {
- printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
- sprintf(str,"d2pll %d",test_arg_3_freq);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- while(1);
- }
- }
- if(test_arg_2_step==0)
- {
- {
-
-
-
- test_arg_0_orgt_store_lcdlr_value=0;
- test_arg_1_test_error_flag=0;
- test_arg_2_step=DDR_TEST_STATUS_UBOOT_ONGOING;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- test_arg_5_ab_edge_lcdlr_value=0;
- test_arg_6_lcdlr_temp_count=lcdlr_min;
- test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
- num_array[0] = test_arg_0_orgt_store_lcdlr_value ;
- num_array[1] = test_arg_1_test_error_flag ;
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
-
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- //for (temp_count = 8; temp_count< 48;temp_count++) {
- // num_array[temp_count]=0;
- //}
-
- for (temp_count = 8; temp_count < (32+8); temp_count++) //data
- {
- //printf("1temp_count=%d\n",temp_count);
-
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //printf("2temp_count=%d\n",temp_count);
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- //temp_count=temp_count+4;
- }
-
-
-
- }
-
- for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
- {
- if((temp_count%4)==0) //org
- {
- if(((temp_count-8)/4)<8)
- {
- lcdlr_min=0;
- lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- else if(((temp_count-8)/4)<10)
- {
- lcdlr_min=0;
- lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- if(((temp_count-8)/4)==9)
- lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
- //num_array[temp_count]=0;
- //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
- num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
- num_array[temp_count+1]=lcdlr_min;
- num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
- num_array[temp_count+3]=0;
- }
-
-
- }
-
-
-
-
-#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
- printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
- printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
- printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
- printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
- if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
- lane_disable= lane_disable|1;
- if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
- lane_disable= lane_disable|(1<<1);
- if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
- lane_disable= lane_disable|(1<<2);
- if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
- lane_disable= lane_disable|(1<<3);
-
-#endif
- if(lane_disable)
- {if(lane_disable&0x1){
- num_array[8+3]=0xffff;
- num_array[8+4+3]=0xffff;
- }
- if(lane_disable&0x2){
- num_array[8+3+8]=0xffff;
- num_array[8+4+3+8]=0xffff;
- }
- if(lane_disable&0x4){
- num_array[8+3+8+8]=0xffff;
- num_array[8+4+3+8+8]=0xffff;
- }
- if(lane_disable&0x8){
- num_array[8+3+8+8+8]=0xffff;
- num_array[8+4+3+8+8+8]=0xffff;
- }
- printf("lane_disable==%x\n",lane_disable);
- if(lane_disable&0x10){
- num_array[8+3+8+8+8+8]=0xffff;
- }
- if(lane_disable&0x20){
- num_array[8+4+3+8+8+8+8]=0xffff;
-
- }
- }
-
-
- }
-
-
-
-
- for (temp_count= 0; temp_count< 48;temp_count++) {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- //test_arg_2_step++;
- num_array[2]=test_arg_2_step;
- for (temp_count = 1; temp_count < 48; temp_count++)
- {
- printf("%d %d\n", temp_count,num_array[temp_count]);
- }
- temp_count=2;
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- //for (i = 0; i < 48; i++) {
-
- // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
- //}
-
-
- //for (i = 8; i < 48; i++) {
- //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
- //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
- //}
-
- ///*
- unsigned int lane_step=0;
- unsigned int lane_step_count=0;
-
- printf("\nstart loop test\n");
-
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
- if(ddr_enable_kernel_window_test_flag==0)
- {
- if((num_array[(lane_step<<2)+3+8]<(0x4)))
- {break;
- }
- }
- else if(test_arg_2_step<DDR_TEST_STATUS_KERNEL_ONGING)
- {
- if((num_array[(lane_step<<2)+3+8]<(0x4)))
- {break;
- }
- }
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_ONGOING)
- {if(lane_step>9)
- {
- test_arg_2_step=DDR_TEST_STATUS_UBOOT_FINISH;
- printf("uboot test result: \n");
- }
- }
-
-
- if(ddr_enable_kernel_window_test_flag)
- {
- if(test_arg_2_step>DDR_TEST_STATUS_UBOOT_FINISH)
- {
- for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
- {
-
- {
- if((num_array[(lane_step<<2)+3+8]<(0x4+4)))
- {break;
- }
- }
- }
- }
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- //test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
- }
- else
- {
- printf("\nstart test lane_step =%d\n",lane_step);
- if(lane_step<10)
- {
- if(lane_step<8)
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
- ddr_test_method=ddr_data_test_method;
- //lcdlr_min=0;
- //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
- }
- else
- {
- test_watchdog_time_s=address_test_watchdog_time_s;
- ddr_test_size=ddr_add_test_size;
- ddr_test_method=ddr_add_test_method;
- //lcdlr_min=0;
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
- //if(lane_step==9)
- //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
- }
-
- if(num_array[8+(lane_step<<2)+3]>4) //from kernel
- {
- num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
- // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- if(((num_array[8+(lane_step<<2)+3]==0))||((num_array[8+(lane_step<<2)+3]==4))) //test left edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
- // test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_orgt_store_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+1]);
- num_array[0]=test_arg_0_orgt_store_lcdlr_value;
- temp_count=0;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- read_write_window_test_flag(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
-
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=(num_array[8+(lane_step<<2)+3]+1);
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- {
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- }
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//test_arg_0_orgt_store_lcdlr_value;//num_array[8+(lane_step<<2)+1];
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- {
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- else if(lane_step<10)
- {
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- }
-
- //here will dead
-
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
- //if( num_array[8+(lane_step<<2)+3]>4)
-
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
-
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==1)||((num_array[8+(lane_step<<2)+3]==5))) //test left edge begin) //test left edge ongoing -loop
- {
-
- if((num_array[6]+1)>=(num_array[8+(lane_step<<2)+1]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
-
-
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- //ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
- for ((lane_step_count=0);(lane_step_count<10);(lane_step_count++))
- {
-
- num_array[8+(lane_step_count<<2)+3]= num_array[8+(lane_step_count<<2)+3]+1; //update status
- lane_step_count=8+(lane_step_count<<2)+3;
- if(num_array[8+(lane_step_count<<2)+3]<9)
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // if(num_array[1]==DDR_TEST_FAIL)
- // num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
- // if(num_array[1]==DDR_TEST_PASS)
- // num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
- // temp_count=8+(lane_step<<2)+1;
-
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
-
- test_arg_0_orgt_store_lcdlr_value= num_array[0];
- if(num_array[1]==DDR_TEST_FAIL)
- {
- ddr_lcdlr_test_offset=num_array[8+(lane_step<<2)+1]+1-test_arg_0_orgt_store_lcdlr_value;
- }
- if(num_array[1]==DDR_TEST_PASS)
- {
- ddr_lcdlr_test_offset=num_array[8+(lane_step<<2)+1]+0-test_arg_0_orgt_store_lcdlr_value;
- }
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {
- if((num_array[8+(lane_step_count<<2)+2]+ddr_lcdlr_test_offset)>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- read_write_window_test_parameter(data_source,
- (8+(lane_step_count<<2)+2) ,ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- // num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- // test_arg_0_orgt_store_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
- // num_array[0]=test_arg_0_orgt_store_lcdlr_value;
- // temp_count=0;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- // num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
-
- ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//tnum_array[8+(lane_step<<2)+1];
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
-
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
-
- }
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- // num_array[8+(lane_step<<2)+3]=1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
- temp_count=8+(lane_step<<2)+1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])+1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//tnum_array[8+(lane_step<<2)+1];
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
- if(lane_step_count==9)
- {if (ddr_lcdlr_test_temp_value>0x3f)
- ddr_lcdlr_test_temp_value=0x3f;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
-
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
- }
-
- }
- }
-
-
- }
-
- else if((num_array[8+(lane_step<<2)+3]==2)||((num_array[8+(lane_step<<2)+3]==6))) //test right edge begin
- {
- /*
- num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
- num_array[2] = test_arg_2_step ;
- num_array[3] = test_arg_3_freq ;
- num_array[4] = test_arg_4_step_status ;
- num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
- num_array[6] = test_arg_6_lcdlr_temp_count ;
- num_array[7] = test_arg_7_magic_number ;
- */
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+2]);
- num_array[0]=test_arg_0_orgt_store_lcdlr_value;
- temp_count=0;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- //test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
- temp_count=6;
- read_write_window_test_parameter(data_source, //temp_lcdlr
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+3]=num_array[8+(lane_step<<2)+3]+1;
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source, //lane status
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
- ddr_lcdlr_test_temp_value=0;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
-
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- // {if ((num_array[8+(lane_step_count<<2)+2]<ddr_lcdlr_test_offset)
- // ddr_lcdlr_test_temp_value=0;
- // }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- else if((num_array[8+(lane_step<<2)+3]==3)||(num_array[8+(lane_step<<2)+3]==7)) //test right edge ongoing -loop
- {
-
- if((num_array[8+(lane_step<<2)+2]+1)>=(num_array[6]))
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
-
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- //ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
- for ((lane_step_count=0);(lane_step_count<10);(lane_step_count++))
- {
-
- num_array[8+(lane_step_count<<2)+3]= num_array[8+(lane_step_count<<2)+3]+1; //update status
- lane_step_count=8+(lane_step_count<<2)+3;
- if(num_array[8+(lane_step_count<<2)+3]<9)
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- num_array[5]=0; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // if(num_array[1]==DDR_TEST_FAIL)
- // num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
- // if(num_array[1]==DDR_TEST_PASS)
- // num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
- // temp_count=8+(lane_step<<2)+2;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
-
- test_arg_0_orgt_store_lcdlr_value= num_array[0];
- if(num_array[1]==DDR_TEST_FAIL)
- {
- ddr_lcdlr_test_offset=test_arg_0_orgt_store_lcdlr_value-num_array[8+(lane_step<<2)+2]+1;
- }
- if(num_array[1]==DDR_TEST_PASS)
- {
- ddr_lcdlr_test_offset=test_arg_0_orgt_store_lcdlr_value-num_array[8+(lane_step<<2)+2]+0;
- }
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
- if(num_array[8+(lane_step_count<<2)+2]<ddr_lcdlr_test_offset)
- ddr_lcdlr_test_temp_value=0;
- if(num_array[8+(lane_step_count<<2)+3]<9)
- read_write_window_test_parameter(data_source,
- (8+(lane_step_count<<2)+2) ,ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- if(num_array[1]==DDR_TEST_FAIL)
- num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
- if(num_array[1]==DDR_TEST_PASS)
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- run_command("reset",0);
- while(1);
- }
- else
- {
- if(num_array[1]==DDR_TEST_NULL)
- {printf("default value not stable ,or recovery sticky?\n");
- }
- else if(num_array[1]==DDR_TEST_FAIL)
- {
-
-
-
- {
- // num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- num_array[5]=num_array[6]; //update edge lcdlr
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
- // temp_count=8+(lane_step<<2)+1;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
- ddr_lcdlr_test_temp_value=0;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
-
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- // {if ((num_array[8+(lane_step_count<<2)+0]<ddr_lcdlr_test_offset)
- // ddr_lcdlr_test_temp_value=0;
- // }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
- }
- }
-
- else if(num_array[1]==DDR_TEST_PASS)
- {
- // num_array[8+(lane_step<<2)+3]=3; //update status
- temp_count=8+(lane_step<<2)+3;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
- temp_count=8+(lane_step<<2)+2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
- test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- test_arg_6_lcdlr_temp_count=((num_array[5])-1);
- // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
- num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
- temp_count=1; //update test error flag
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
- (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
- ddr_lcdlr_test_temp_value=0;
- }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
- }
- //here will dead
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- if( num_array[8+(lane_step<<2)+3]>4)
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
- if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
- {
- ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
- }
- for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
- {
- ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
- //if(lane_step_count==9)
- // {if ((num_array[8+(lane_step_count<<2)+0]<ddr_lcdlr_test_offset)
- // ddr_lcdlr_test_temp_value=0;
- // }
- if(num_array[8+(lane_step_count<<2)+3]<9)
- do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
- ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
- }
- }
- else
- {
- if(lane_step<8)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- else if(lane_step<10)
- org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
- }
- num_array[1]=DDR_TEST_PASS; //pass 2 error 1
- temp_count=1;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- if(num_array[8+(lane_step<<2)+3]>4)
- {
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- }
-
- run_command("reset",0);
- while(1);
- }
-
- }
-
- }
- }
-
-
- }
- }
- }
- if(lane_step>=10) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
- }
-
- // unsigned int acmdlr= 0;
- unsigned int delay_step_x100= 0;
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
- lane_step,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- lane_step=4;
- {
- printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
- 4,
- num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
- num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
- }
- printf("\n\n-----------------------------------------------------------------------------\n\n");
- {
- printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
- clk_setup ps| clk_hold ps|adj_percent[100]\n");
-
- printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
- printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- 4,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
-
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
- }
- printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
- rd_setup ps|rd_hold x ps|adj_percent[100]\n");
-
-
- for ((lane_step=0);(lane_step<4);(lane_step++))
- {
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+0],
- (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
- )/100),
-
- 0,
- 0,
- 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
- 2*num_array[8+(lane_step)*8+0]));
-
- printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
- lane_step,
- num_array[8+(lane_step)*8+4],
- 0,
- 0,
-
- (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
- )/100),
- (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
- )/100),
- 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
- 2*num_array[8+(lane_step)*8+4]));
-
-
-
- }
- }
-
-
- if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
- num_array[2]=test_arg_2_step;
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
-
- if(test_arg_2_step==DDR_TEST_STATUS_KERNEL_ONGING)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
- {
- test_arg_2_step=DDR_TEST_STATUS_KERNEL_FINISH;
- num_array[2]=test_arg_2_step;
- temp_count=2;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
- num_array[1]=DDR_TEST_NULL;
- read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
- DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
- {
- ddr_test_watchdog_disable(); //s
- run_command("run storeboot",0);
- while(1);
- }
- }
-
-
-
-
-
-
- // if( num_array[8+(lane_step<<2)+3]>4)
-
-
-
- return 1;
-}
-
-int do_ddr_uboot_window_use_source_all_same_increase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nsetenv bootcmd ddr_test_cmd 0x35 4 6 60 0 0x100000 0x4000000 0 0x100010 0\n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-
-#define DDR_TEST_NULL 0
-#define DDR_TEST_PASS 1
-#define DDR_TEST_FAIL 2
-
-
-#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
-#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
- //PREG_STICKY_REG4
- //PREG_STICKY_REG5
-
-#define DDR_TEST_STATUS_UBOOT_ONGOING 1
-#define DDR_TEST_STATUS_UBOOT_FINISH 2
-#define DDR_TEST_STATUS_KERNEL_ONGING 3
-#define DDR_TEST_STATUS_KERNEL_FINISH 4
- //#define DDR_TEST_FAIL 2
-
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
-
- unsigned int ddr_test_clear_flag=0;
- unsigned int ddr_test_init_offset=0;
- unsigned int ddr_test_uboot_kernel_enable_mask=0;
-
- unsigned int ddr_test_uboot_loop=0;
-
- unsigned int kernel_test_watchdog_time_s=60;
- unsigned int test_watchdog_time_s=15;
-
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- kernel_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- kernel_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("kernel_test_watchdog_time_s==%d\n",kernel_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
-
- if (argc >7) {
- ddr_test_clear_flag = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0)
- {
- ddr_test_clear_flag= 0x10000000;
- }
- }
- printf("ddr_test_clear_flag==0x%08x\n",ddr_test_clear_flag);
-
- if (argc >8) {
- ddr_test_init_offset = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0)
- {
- ddr_test_init_offset= 0;
- }
- }
- printf("ddr_test_init_offset==0x%08x\n",ddr_test_init_offset);
-
- if (argc >9) {
- ddr_test_uboot_kernel_enable_mask = simple_strtoull_ddr(argv[9], &endp, 0);
- if (*argv[9] == 0 || *endp != 0)
- {
- ddr_test_uboot_kernel_enable_mask= 0;
- }
- }
- printf("ddr_test_uboot_kernel_enable_mask==0x%08x\n",ddr_test_uboot_kernel_enable_mask);
-
- if (argc >10) {
- ddr_test_uboot_loop = simple_strtoull_ddr(argv[10], &endp, 0);
- if (*argv[10] == 0 || *endp != 0)
- {
- ddr_test_uboot_loop= 0;
- }
- }
- printf("ddr_test_uboot_loop==0x%08x\n",ddr_test_uboot_loop);
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=10;
- unsigned int num_array[10];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- //unsigned int lcdlr_min=0;
- //unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- //char str[1024]="";
-
-
- ddr_test_data_array_max=10;
-
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int reg_def_value_data[4]; //write_lcdlr_value+read_lcdlr_value<<16;
-
- //#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
- //#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
-
- unsigned int test_arg_4_step_flag_add_sticky_offset =0; //use for kernel
- unsigned int test_arg_5_pass_fail_flag_add_sticky_offset =0; //use for kernel
-
- unsigned int test_arg_6_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_7_lcdlr_offset =0; //left_lcdlr+right_lcdlr<<16
- unsigned int test_arg_7_lcdlr_offset_l =0; //left_lcdlr
- unsigned int test_arg_7_lcdlr_offset_r=0; //right_lcdlr
- unsigned int delay_step_x100= 0;
-
- //unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_lcdlr_temp_value1 =0;
- unsigned int test_lcdlr_temp_value2 =0;
- unsigned int test_lcdlr_temp_value =0;
- unsigned int test_lcdlr_reach_lcdlr_limited_flag =0;
-
- unsigned int acmdlr=0;
- acmdlr=do_ddr_read_acmdlr();
-
- test_lcdlr_reach_lcdlr_limited_flag=0;
- reg_def_value_data[0]=num_array[0];
- reg_def_value_data[1]=num_array[1];
- reg_def_value_data[2]=num_array[2];
- reg_def_value_data[3]=num_array[3];
- test_arg_4_step_flag_add_sticky_offset=num_array[4];
- test_arg_5_pass_fail_flag_add_sticky_offset=num_array[5];
- test_arg_6_step_status=num_array[6];
- test_arg_7_lcdlr_offset=num_array[7];
-
-
-
- printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
- printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
- printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
- printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
- printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
- printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
- printf("test_arg_6_step_status=%d\n",num_array[6]);
- printf("\ntest_arg_7_lcdlr_offset=0x%08x\n",num_array[7]);
-
-
-
-
- //for (temp_count= 0;temp_count < 8; temp_count++)
- // {
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- //}
-
-
- if(ddr_test_clear_flag)
- { test_arg_6_step_status=0;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- printf("\n clear sticky register should reset,then over write ....\n");
- run_command("reset",0);
- while(1);
- }
-
- if(test_arg_6_step_status==0)
- {
- {
-
- //test_arg_6_step_status=1;
-
-
- for (temp_count = 0; temp_count < (8); temp_count++) //data
- {
- test_lcdlr_temp_value1=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
- temp_count=temp_count+1;
- test_lcdlr_temp_value2=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
- reg_def_value_data[temp_count/2]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
- printf("num_array[%d]=%08x\n",temp_count/2,num_array[temp_count/2]);
- }
-
- }
- test_arg_4_step_flag_add_sticky_offset=0;
- test_arg_5_pass_fail_flag_add_sticky_offset=0;
- test_arg_6_step_status=0;
- test_arg_7_lcdlr_offset=0;
- if(ddr_test_init_offset)
- {test_arg_7_lcdlr_offset=ddr_test_init_offset;
- }
- num_array[0] = reg_def_value_data[0] ;
- num_array[1] = reg_def_value_data[1] ;
- num_array[2] = reg_def_value_data[2] ;
- num_array[3] = reg_def_value_data[3] ;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ; //use for kernel
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;//use for kernel
- num_array[6] = test_arg_6_step_status ;
- num_array[7] = test_arg_7_lcdlr_offset ;
-
-
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- for (temp_count = 0; temp_count < (8); temp_count++) //data
- {
- test_lcdlr_temp_value1=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
- temp_count=temp_count+1;
- test_lcdlr_temp_value2=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
- reg_def_value_data[temp_count/2]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
- num_array[temp_count/2]=reg_def_value_data[temp_count/2];
- printf("re-num_array[%d]=%08x\n",temp_count/2,num_array[temp_count/2]);
- }
- }
-
- if(ddr_test_uboot_kernel_enable_mask&1)
- {printf("skip uboot test should init kernel offset value==0x%08x\n",num_array[7]);
- }
-
- test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- unsigned int lane_step_count=0;
- {
-
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
-
- }
-
- printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
- printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
- printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
- printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
- printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
- printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
- printf("test_arg_6_step_status=%d\n",num_array[6]);
- printf("test_arg_7_lcdlr_offset=%d\n",num_array[7]);
-
- if(test_arg_6_step_status==4) //uboot finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
-
- // unsigned int acmdlr= 0;
-
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
-
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
-
- printf("\n\n-----------------------------------------------------------------------------\n\n");
-
-
- }
- if(ddr_test_uboot_kernel_enable_mask&2)
- {
- if(ddr_test_uboot_loop)
- {
- { test_arg_6_step_status=0;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- printf("\n clear sticky register should reset,then over write ....\n");
- run_command("reset",0);
- while(1);
- }
- run_command("reset",0);
- while(1);
- }
- else
- return 1;
- }
- }
-
-
-
- //if((test_arg_6_step_status==0)) //0 test left edge begin 1 test left edge ongoing 2//left_finish 3 right edge ongoing 4 right finish //5 kernel left edge ongoing 6 kernel left finish 7 kernel right ongoing
- // uboot find from pass to fail offset 0->max
- //kernel find from fail to pass offset from max ->0
- if((test_arg_6_step_status<4)) //// uboot find from pass to fail offset 0->max
- {
- if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
- ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
- )
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
- {
- if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
-
- if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
- if((lane_step_count%2)==1)
- {
- if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
-
- }
-
-
-
-
- }
- if(test_lcdlr_reach_lcdlr_limited_flag)
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
- else if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL) //pass 1 error 2
- {
-
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
-
-
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l+1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r+1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
-
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- }
-
- if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
-
- }
- }
-
-
-
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- //here will dead
- if(test_arg_6_step_status>4)
- {
- //ddr_test_watchdog_disable(); //s
- ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- // temp_count=5;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("run storeboot",0);
- while(1);
- } else
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
-
-
-
- {
- //write org value
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
- }
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
-
-
-
-
- }
- }
-
-
- if((test_arg_6_step_status==4)||(test_arg_6_step_status==6))
- {
- test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_UBOOT_FINISH;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
- temp_count=4;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;//DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- }
- if((test_arg_6_step_status>=4)) ////kernel find from fail to pass offset from max ->0
- {
- if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
- ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
- )
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
- {
- if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
-
- if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
- if((lane_step_count%2)==1)
- {
- if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
-
- }
-
-
-
-
- }
- // if(test_lcdlr_reach_lcdlr_limited_flag)
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
- else if((test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL)
- //||(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL))//pass 2 error 1
- )
- {
-
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
-
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- }
- else if (test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)//pass 2 error 1
- {printf("\nfind drop power,test_arg_5_pass_fail_flag_add_sticky_offset=%d \n",test_arg_5_pass_fail_flag_add_sticky_offset);
- }
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- }
-
- if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
-
- }
- }
-
-
-
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- //here will dead
- if(test_arg_6_step_status>4)
- {
- //ddr_test_watchdog_disable(); //s
- ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- // temp_count=5;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("run storeboot",0);
- while(1);
- } else
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- {
- //write org value
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
- }
- do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
- }
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- }
- }
-
- if(test_arg_6_step_status>=8) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
-
-
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
-
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
- printf("\n\n-----------------------------------------------------------------------------\n\n");
-
- test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_KERNEL_FINISH;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
- temp_count=4;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- test_arg_6_step_status=0xffff;
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- ddr_test_watchdog_disable(); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- run_command("run storeboot",0);
- while(1);
- return 1;
-}
-
-
-int do_ddr4_test_dram_clk_use_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- ///*
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
- char *endp;
-
-#define TEST_DRAM_CLK_USE_ENV 1
- printf("\ntune ddr CLK use uboot sticky register\n");
-
-#define DDR_CORSS_TALK_TEST_SIZE 0x20000
-#define DDR_TEST_MIN_FREQ_LIMITED 50
-#define DDR_TEST_MIN_FREQ 300
- // #define DDR_TEST_MAX_FREQ 3000
-
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
- unsigned int start_freq=DDR_TEST_MIN_FREQ;
- unsigned int end_freq=DDR_TEST_MAX_FREQ;
- unsigned int test_loops=1;
- if (argc == 1)
- {
- printf("\nplease read help\n");
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- start_freq=DDR_TEST_MIN_FREQ;
- end_freq=DDR_TEST_MAX_FREQ;
-
- }
-
- if (argc == 2)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq=DDR_TEST_MIN_FREQ;
- end_freq=DDR_TEST_MAX_FREQ;
- }
- if (argc== 3)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=DDR_TEST_MAX_FREQ;
-
- }
- if (argc== 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
-
- }
- if (argc> 4)
- {
- ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
- start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
- end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
- test_loops=simple_strtoull_ddr(argv[4], &endp, 0);
- }
- unsigned int temp_test_error=0x0;
- unsigned int ddr_pll=0;
- unsigned int ddr_clk_org=0;
- unsigned int ddr_clk_hope_test=0;
- ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
- //ddr_pll=ddr_pll_org;
- unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
- ddr_clk_org=ddr_clk;
- printf("\nddr_clk== %dMHz\n", ddr_clk);
- printf("\nstart_freq== %dMHz\n", start_freq);
- printf("\nend_freq== %dMHz\n", end_freq);
- ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
- // {
- // wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
- // ddr_udelay(2000);
- //}
-
-
- unsigned int freq_table_test_value[(DDR_TEST_MAX_FREQ)/24]; // step =0 init ,1 test fail, ,2 test pass,3 test skip;
- // char char_freq_name_table[30];
- // const char *p_char_freq_table;
-
- // const char *p_char_ddr_test_step;
- // const char * p_char_freq_org;
- char char_freq_org[30];
- int ddr_feq_test_step=0; // step =0 init ,1 going ,2 done;
-
- // const char * p_char_freq_name_table;
- char char_freq_name_table[30];
- char char_cmd_table[100];
- //char * p_char_store_boot;
- // char char_freq_store_boot[200];
-
- //const char *p_freq_table_int;
- //char char_ddr_feq_test_step[]="ddr_feq_test_step";
- // const char *varname;
- // const char *varvalue;
- unsigned int temp_count=0;
- unsigned int temp_count_sub=0;
-
-
-
- unsigned int str_to_numarry[64];
- unsigned int *num_arry;
-
- num_arry = (unsigned int *)(&str_to_numarry);
- //int i;
-
- unsigned int lcdlr_temp_count=0;
- {
- {
-
- sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
-
- for (i = 0; i < 63; i++) {
- dmc_sticky[i]=rd_reg(sticky_reg_base_add+(i<<2));
- //printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
-
- for (i = 0; i < 63; i++) {
- num_arry[i]=dmc_sticky[i];
- printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
- }
-
- }
- }
-
-#define DDR_FEQ_TEST_STEP_OFFSET 8
- //#define DDR_FEQ_TEST_STEP_OFFSET 8
- unsigned int test_arg_0_cmd0 =0; //master cmd
- unsigned int test_arg_1_cmd1 =0; //min cmd
- unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
- unsigned int test_arg_3_freq =0;
- unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- // unsigned int lane_step= 0;
- //char str[24];
- unsigned int boot_times=0;
-
- test_arg_0_cmd0=num_arry[0];
- test_arg_1_cmd1=num_arry[1];
- test_arg_2_step=num_arry[2];
- test_arg_3_freq=num_arry[3];
- test_arg_4_step_status=num_arry[4];
- boot_times=num_arry[5];
- lcdlr_temp_count=num_arry[6];
- printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
- printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
- printf("test_arg_2_step==%d\n",test_arg_2_step);
- printf("test_arg_3_freq==%d\n",test_arg_3_freq);
- printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
- printf("test_arg_5 boottimes=%d\n",num_arry[5]);
- printf("test_arg_6 lcdlr_temp_count=%d\n",num_arry[6]);
- printf("test_arg_7=%d\n",num_arry[7]);
-
- if((num_arry[7]==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
- {boot_times++;
-
- }
- else
- {boot_times=0;
- printf("test_sticky is not magic nummber,boot times==%d\n",boot_times);
- // writel(DMC_STICKY_MAGIC_0,(sticky_reg_base_add+(6<<2)));
- writel(DMC_STICKY_MAGIC_1,(sticky_reg_base_add+(7<<2)));
- test_arg_2_step=0;
- num_arry[6]=0;
- lcdlr_temp_count=0;
- //return 1;
- }
- num_arry[5]=boot_times;
-
- writel(num_arry[5],(sticky_reg_base_add+(5<<2)));
-
-
-
- if(test_arg_2_step==0)
- {
-
- test_arg_0_cmd0=0x28;
- test_arg_1_cmd1=0;
- test_arg_2_step=1;
- test_arg_3_freq=global_ddr_clk;
- test_arg_4_step_status=0;
- lcdlr_temp_count=0;
- num_arry[0]=test_arg_0_cmd0;
- num_arry[1]=test_arg_1_cmd1;
- num_arry[2]=test_arg_2_step;
- num_arry[3]=test_arg_3_freq;
- num_arry[4]=test_arg_4_step_status;
- num_arry[5]=boot_times;
- lcdlr_temp_count=num_arry[6];
- num_arry[6]=lcdlr_temp_count;
- num_arry[7]=DMC_STICKY_MAGIC_1;
- for (i = 8; i < 63; i++) {
- num_arry[i]=0;
- }
- }
-
- for (i = 0; i < 63; i++) {
-
- writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
- }
-
-
- ddr_feq_test_step=rd_reg(sticky_reg_base_add+(8<<2));
- //
- //p_char_ddr_test_step= getenv("ddr_feq_test_step");
- // if (p_char_ddr_test_step)
- {
- // printf("%s",p_char_ddr_test_step);
-
- // ddr_feq_test_step = simple_strtoull_ddr(p_char_ddr_test_step, &endp, 0);
- printf("ddr_feq_test_step=%d\n",ddr_feq_test_step);
- }
- if (ddr_feq_test_step) {
- //p_char_freq_org= getenv("ddr_feq_org");
- //if (p_char_freq_org)
- {
- //printf("%s",p_char_freq_org);
-
- // ddr_clk_org = simple_strtoull_ddr(p_char_freq_org, &endp, 10); //must use 10 ,freq 0792 maybe not read sussceful use 0 auto read
- ddr_clk_org=rd_reg(sticky_reg_base_add+(9<<2));
- printf("ddr_clk_org=%d\n",ddr_clk_org);
- }
- }
- if (ddr_feq_test_step == 0)
- {
- ddr_feq_test_step=1;
- ddr_clk_org=ddr_clk;
- sprintf(char_freq_org,"%04d",ddr_clk);
- printf("\nddr_org_freq=%s\n",char_freq_org);
- //setenv("ddr_feq_org", char_freq_org);
- writel(ddr_clk,(sticky_reg_base_add+(9<<2)));
-
-
- temp_count=(start_freq/24);
- while (temp_count<(DDR_TEST_MAX_FREQ/24)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- //setenv(char_freq_name_table, "0");
- //setenv("ddr_feq_test_step", "1");
- writel(0,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
- writel(1,(sticky_reg_base_add+(8<<2)));
- temp_count++;
- }
- temp_count=(start_freq/24);
- while (temp_count<((start_freq)/24)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- //setenv(char_freq_name_table, "3");
- //setenv("ddr_feq_test_step", "1");
- writel(3,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
- writel(1,(sticky_reg_base_add+(8<<2)));
- temp_count++;
- }
- while (temp_count>((end_freq)/24)) {
-
- // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- //setenv(char_freq_name_table, "3");
- //setenv("ddr_feq_test_step", "1");
- writel(3,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
- writel(1,(sticky_reg_base_add+(8<<2)));
- temp_count++;
- }
-
- //p_char_store_boot= getenv("storeboot");
- //if (p_char_store_boot)
- //printf("storeboot %s\n",p_char_store_boot);
- // sprintf(char_cmd_table,"ddr_test_cmd 0x1c 0x%08x %d %d %d;%s;",ddr_test_size,start_freq,end_freq,test_loops,p_char_store_boot);
- // setenv("storeboot", char_cmd_table);
-
- // run_command("save",0);
-
-
-
- {
- }
-
- }
-
- if (ddr_feq_test_step == 1)
- {
-
- temp_count=(start_freq/24);
- while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- ddr_feq_test_step=rd_reg(sticky_reg_base_add+(8<<2));
- // p_char_freq_name_table= getenv(char_freq_name_table);
- // if (p_char_freq_name_table)
- {
- // printf("%s\n",p_char_freq_name_table);
-
- // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
- printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
-
-
- }
- temp_count++;
- }
-
- temp_count=(start_freq/24);
- while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
- ddr_clk_hope_test=(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24)));
- if (freq_table_test_value[temp_count] ==1)
- {
- temp_count_sub=temp_count+1;
- while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*24))) ==
- (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))))
- {temp_count_sub=temp_count_sub+1;
- }
- while (temp_count_sub<((DDR_TEST_MAX_FREQ)/24)) {
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- // freq_table_test_value[temp_count_sub] =1;
- // setenv(char_freq_name_table, "3");
- writel(3,(sticky_reg_base_add+((10+temp_count_sub-(start_freq/24))<<2)));
-
- temp_count_sub++;
- }
- {
- ddr_feq_test_step++;
- //setenv("ddr_feq_test_step", "2");
- // run_command("save",0);
- writel(2,(sticky_reg_base_add+(8<<2)));
-
- }
- {ddr_clk_hope_test=ddr_clk_org;
- }
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
-
- }
- if (freq_table_test_value[temp_count] ==0)
- {
- if ((ddr_clk_hope_test) != (ddr_clk))
- {
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
- }
- if ((ddr_clk_hope_test) == (ddr_clk))
- {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- freq_table_test_value[temp_count] =1;
- // setenv(char_freq_name_table, "1");
- // run_command("save",0);
- writel(1,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
-
-
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- while (test_loops--) {
- temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
- //temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
- if (temp_test_error)
- {
- freq_table_test_value[temp_count] =1;
- // setenv(char_freq_name_table, "1");
- writel(1,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
- }
- else
- {
- freq_table_test_value[temp_count] =2;
- // setenv(char_freq_name_table, "2");
- writel(2,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
- }
- // run_command("save",0);
-
- ddr_clk_hope_test=(temp_count*24)+24;
- while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(ddr_clk_hope_test))) ==
- (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))))
- {ddr_clk_hope_test=ddr_clk_hope_test+24;
- }
- if (temp_test_error)
- {ddr_clk_hope_test=ddr_clk_org;
- }
- sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
- printf("\nchar_cmd_table=%s\n",char_cmd_table);
- run_command(char_cmd_table,0);
- }
-
- }
-
-
-
-
-
- temp_count++;
- }
- ddr_feq_test_step++;
- //setenv("ddr_feq_test_step", "2");
- //run_command("save",0);
- writel(2,(sticky_reg_base_add+(8<<2)));
-
- }
-
- if (ddr_feq_test_step >= 2)
- {
- printf("\nfinish test ddr_feq_test_step=%d\n",ddr_feq_test_step);
- temp_count=(start_freq/24);
- while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
-
- // p_char_freq_name_table= getenv(char_freq_name_table);
- // if (p_char_freq_name_table)
- {
- // printf("%s\n",p_char_freq_name_table);
-
- // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
- printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
- }
- temp_count++;
- }
-
- printf("\nprint test ddr_feq_test_result!!!\n");
- temp_count=(start_freq/24);
- while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
-
- sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
- // p_char_freq_name_table= getenv(char_freq_name_table);
- // if (p_char_freq_name_table)
- {
- // printf("%s\n",p_char_freq_name_table);
-
- // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
- freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
-
- //printf("%d\n",freq_table_test_value[temp_count]);
- if ( (freq_table_test_value[temp_count]) == 0) {
- printf("%04d no init %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) == 1) {
- printf("%04d fail %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) == 2) {
- printf("%04d pass %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
- }
- if ( (freq_table_test_value[temp_count]) >= 3) {
- printf("%04d skip test %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
- }
- temp_count++;
- }
- }
-
- }
- //sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
- // printf("\nstr=%s\n",str);
-
- //sprintf(str, "%lx", value);
- // setenv("env_ddrtest", str);
-
- //run_command("save",0);
- //*/
- return 1;
-
-}
-
-
-int do_ddr4_test_bist_test_use_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
-#define DDR_TEST_CMD_TEST_ZQ 0
-#define DDR_TEST_CMD_TEST_AC_BIT_SETUP 1
-#define DDR_TEST_CMD_TEST_AC_BIT_HOLD 2
-#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_SETUP 3
-#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_HOLD 4
-#define DDR_TEST_CMD_TEST_DATA_READ_BIT_SETUP 5
-#define DDR_TEST_CMD_TEST_DATA_READ_BIT_HOLD 6
-#define DDR_TEST_CMD_TEST_DATA_VREF 7
-#define DDR_TEST_CMD_TEST_CLK_INVETER 8
-
-#define DDR_TEST_CMD_TEST_FULLTEST 0xffffffff
- char *endp;
- unsigned int pll, zqcr;
- unsigned int zqpr_soc_dram=0;
- unsigned int ddr_test_cmd_soc_vref=0;
- unsigned int ddr_test_cmd_dram_vref=0;//0x3f;
- unsigned int ddr_test_cmd_zq_vref=0;//0x3f;
-
-
- unsigned int ddr_full_test_enable=0;
- /*
-#define DDR3_DRV_40OHM 0
-#define DDR3_DRV_34OHM 1
-#define DDR3_ODT_0OHM 0
-#define DDR3_ODT_60OHM 1
-#define DDR3_ODT_120OHM 2
-#define DDR3_ODT_40OHM 3
-#define DDR3_ODT_20OHM 4
-#define DDR3_ODT_30OHM 5
-
- // lpddr2 drv odt
-#define LPDDR2_DRV_34OHM 1
-#define LPDDR2_DRV_40OHM 2
-#define LPDDR2_DRV_48OHM 3
-#define LPDDR2_DRV_60OHM 4
-#define LPDDR2_DRV_80OHM 6
-#define LPDDR2_DRV_120OHM 7
-#define LPDDR2_ODT_0OHM 0
-
- // lpddr3 drv odt
-#define LPDDR3_DRV_34OHM 1
-#define LPDDR3_DRV_40OHM 2
-#define LPDDR3_DRV_48OHM 3
-#define LPDDR3_DRV_60OHM 4
-#define LPDDR3_DRV_80OHM 6
-#define LPDDR3_DRV_34_40OHM 9
-#define LPDDR3_DRV_40_48OHM 10
-#define LPDDR3_DRV_34_48OHM 11
-#define LPDDR3_ODT_0OHM 0
-#define LPDDR3_ODT_60OHM 1
-#define LPDDR3_ODT_12OHM 2
-#define LPDDR3_ODT_240HM 3
-
-#define DDR4_DRV_34OHM 0
-#define DDR4_DRV_48OHM 1
-#define DDR4_ODT_0OHM 0
-#define DDR4_ODT_60OHM 1
-#define DDR4_ODT_120OHM 2
-#define DDR4_ODT_40OHM 3
-#define DDR4_ODT_240OHM 4
-#define DDR4_ODT_48OHM 5
-#define DDR4_ODT_80OHM 6
-#define DDR4_ODT_34OHM 7
-*/
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- unsigned int soc_data_drv_odt = 0;
- unsigned int bist_test_dq_index = 0xff;
- //unsigned int dram_drv = 0;
- //unsigned int dram_odt = 0;
- /* need at least two arguments */
- if (argc < 2)
- goto usage;
-
- pll = simple_strtoull_ddr(argv[1], &endp,0);
- if (*argv[1] == 0 || *endp != 0) {
- printf ("Error: Wrong format parament!\n");
- return 1;
- }
- if (argc >2)
- {
- zqcr = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0) {
- zqcr = 0;
- }
- }
- else
- {
- zqcr = 0;
- }
- bist_test_dq_index=0xff;
- if(zqcr==0xffffffff)
- {
- ddr_full_test_enable=1;
- zqcr=0;}
-
- else if(zqcr>>24)
- {
- bist_test_dq_index=0+(zqcr>>24);
- zqcr=zqcr&0x00ffffff;
- }
-
- printf("bist_test_dq_index[%d],\n", bist_test_dq_index);
-
- if (argc >3)
- {
- // soc_data_drv_odt=zqpr_soc_dram&0xfffff;
- // dram_drv=(zqpr_soc_dram>>20)&0xf;
- // dram_odt=(zqpr_soc_dram>>24)&0xf;
- //bit28 enable soc_zqpr ,bit 29 enabe dram_drv bit 30 enabel dram_odt
- zqpr_soc_dram = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0) {
- zqpr_soc_dram = 0;
- }
- }
- else
- {
- zqpr_soc_dram = 0;
- }
-
- if (argc >4)
- {
- ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- ddr_test_cmd_soc_vref = 0;
- }
- }
- else
- {
- ddr_test_cmd_soc_vref = 0;
- }
- if (argc >5)
- {
- ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- ddr_test_cmd_dram_vref = 0;
- }
- }
- unsigned int soc_dram_hex_dec=0;
- if (argc >6)
- {
- soc_dram_hex_dec = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0) {
- soc_dram_hex_dec = 0;
- }
- }
- if (argc >7)
- {
- ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0) {
- ddr_test_cmd_zq_vref = 0;
- }
- }
- unsigned int soc_dram_drv_odt_use_vlaue=0;
- unsigned int soc_ac_drv=0;
- unsigned int soc_ac_odt=0;
- unsigned int soc_data_drv=0;
- unsigned int soc_data_odt=0;
- unsigned int dram_drv=0;
- unsigned int dram_odt=0;
- unsigned int soc_data_drv_odt_adj_enable=0;
- unsigned int dram_data_drv_adj_enable=0;
- unsigned int dram_data_odt_adj_enable=0;
-
- unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
- unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
- unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
-#define DDR_TYPE_LPDDR2 0
-#define DDR_TYPE_LPDDR3 1
-#define DDR_TYPE_DDR3 3
-#define DDR_TYPE_DDR4 4
- unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
- // unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
- if (argc >8)
- {
- soc_dram_drv_odt_use_vlaue = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0) {
- soc_dram_drv_odt_use_vlaue = 0;
- }
- }
- if(soc_dram_drv_odt_use_vlaue)
- {if(zqcr)
- {printf("zqcr[0x%08x],\n", zqcr);
- {
- soc_ac_drv=zqcr%100;
- if(soc_ac_drv>100)
- {soc_ac_drv=0;}
- if(soc_ac_drv==0)
- {soc_ac_drv=1;}
- soc_ac_drv=(480/soc_ac_drv)-1;
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(soc_ac_drv>0xf)
- {soc_ac_drv=zq0pr_org&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(soc_ac_drv>0xf)
- {soc_ac_drv=(zq0pr_org>>8)&0xf;}
- }
- }
-
-
- {
- soc_ac_odt=zqcr/100;
- if(soc_ac_odt>240)
- {soc_ac_odt=480;}
- if(soc_ac_odt==0)
- {soc_ac_odt=1;}
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- soc_ac_odt=(360/soc_ac_odt)-1;
- if(soc_ac_odt>0xf)
- {soc_ac_odt=(zq0pr_org>>4)&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- soc_ac_odt=(480/soc_ac_odt)-1;
- if(soc_ac_odt>0xf)
- {soc_ac_odt=(zq0pr_org>>16)&0xf;}
- }
- }
-
- zqcr=(soc_ac_odt<<16)|(soc_ac_drv<<12)|(soc_ac_drv<<8)|(soc_ac_odt<<4)|(soc_ac_drv);
- printf("zqcr[0x%08x],soc_ac_odt [0x%08x],soc_ac_drv [0x%08x]\n", zqcr,soc_ac_odt,soc_ac_drv);
- }
- if(zqpr_soc_dram)
- {printf("zqpr_soc_dram[0x%08x],\n", zqpr_soc_dram);
- {
- soc_data_drv=zqpr_soc_dram%100;
- printf("soc_data_drv[%d],\n", soc_data_drv);
- if(soc_data_drv>100)
- {soc_data_drv=0;
-
- }
- if(soc_data_drv==0)
- {soc_data_drv=1;
- //soc_data_drv_odt_adj_enable=0;
- }
- else
- {//soc_data_drv_odt_adj_enable=1;
- }
- soc_data_drv=(480/soc_data_drv)-1;
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(soc_data_drv>0xf)
- {soc_data_drv=zq1pr_org&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(soc_data_drv>0xf)
- {soc_data_drv=(zq1pr_org>>8)&0xf;}
- }
- }
-
-
- {
- soc_data_odt=(zqpr_soc_dram/100)%1000;
- printf("soc_data_odt[%d],\n", soc_data_odt);
- if(soc_data_odt>240)
- {soc_data_odt=360;}
- if(soc_data_odt==0)
- {soc_data_odt=1;}
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- soc_data_odt=(360/soc_data_odt)-1;
- if(soc_data_odt>0xf)
- {soc_data_odt=(zq1pr_org>>4)&0xf;}
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- soc_data_odt=(480/soc_data_odt)-1;
- if(soc_data_odt>0xf)
- {soc_data_odt=(zq1pr_org>>16)&0xf;}
- }
-
- }
-
- soc_data_drv_odt_adj_enable=1;
-
- {
- dram_drv=(zqpr_soc_dram/100000)%100;
- printf("dram_drv[%d],\n", dram_drv);
-
- if(dram_drv>100)
- {dram_drv=0;}
- if(dram_drv==0)
- {
- dram_data_drv_adj_enable=0;}
- else
- {dram_data_drv_adj_enable=1;
- }
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(dram_drv>=40)
- {dram_drv=0;}
-
- else
- {dram_drv=1;
- }
- }
-
-
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(dram_drv<48)
- {dram_drv=0;}
-
- else
- {dram_drv=1;
- }
- }
- }
-
-
- {
- dram_odt=(zqpr_soc_dram/100000)/100;
- printf("dram_odt[%d],\n", dram_odt);
- if(dram_odt>240)
- {dram_odt=480;}
- if(dram_odt==0)
- {
- dram_data_odt_adj_enable=0;
- }
- else
- {dram_data_odt_adj_enable=1;
- }
-
-
- if(ddr_type==DDR_TYPE_DDR3)
- {
- if(dram_odt>160)
- {dram_odt=0;}
- else if (dram_odt>90)
- {dram_odt=2;}
- else if (dram_odt>50)
- {dram_odt=1;}
- else if (dram_odt>35)
- {dram_odt=3;}
- else if (dram_odt>25)
- {dram_odt=5;}
- else if (dram_odt<=25)
- {dram_odt=4;}
-
- }
- if(ddr_type==DDR_TYPE_DDR4)
- {
- if(dram_odt>280)
- {dram_odt=0;}
- else if (dram_odt>180)
- {dram_odt=4;}
- else if (dram_odt>100)
- {dram_odt=2;}
- else if (dram_odt>70)
- {dram_odt=6;}
- else if (dram_odt>54)
- {dram_odt=1;}
- else if (dram_odt>44)
- {dram_odt=5;}
- else if (dram_odt>37)
- {dram_odt=3;}
- else if (dram_odt<=34)
- {dram_odt=7;}
-
- }
-
-
-
- }
-
- zqpr_soc_dram=(dram_data_odt_adj_enable<<30)|(dram_data_drv_adj_enable<<29)|(soc_data_drv_odt_adj_enable<<28)|
- (dram_odt<<24)|(dram_drv<<20)|(soc_data_odt<<16)|(soc_data_drv<<12)|(soc_data_drv<<8)|(soc_data_odt<<4)|(soc_data_drv);
- }
- }
-
-
- if (soc_dram_hex_dec)
- {
- if (argc >4)
- {
- ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- ddr_test_cmd_soc_vref = 0;
- }
- }
- else
- {
- ddr_test_cmd_soc_vref = 0;
- }
- if (argc >5)
- {
- ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- ddr_test_cmd_dram_vref = 0;
- }
- }
- if (argc >7)
- {
- ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0) {
- ddr_test_cmd_zq_vref = 0;
- }
- }
- if (ddr_test_cmd_soc_vref)
- {
- if (ddr_test_cmd_soc_vref<45)
- ddr_test_cmd_soc_vref=45;
- if (ddr_test_cmd_soc_vref>88)
- ddr_test_cmd_soc_vref=88;
- ddr_test_cmd_soc_vref=(ddr_test_cmd_soc_vref*100-4407)/70;
- }
-
- if (ddr_test_cmd_dram_vref)
- {
- if (ddr_test_cmd_dram_vref<45)
- ddr_test_cmd_dram_vref=45;
- if (ddr_test_cmd_dram_vref>92)
- ddr_test_cmd_dram_vref=92;
- if (ddr_test_cmd_dram_vref>60) {
- ddr_test_cmd_dram_vref=(ddr_test_cmd_dram_vref*100-6000)/65;
- }
- else{
- ddr_test_cmd_dram_vref=((ddr_test_cmd_dram_vref*100-4500)/65)|(1<<6);
- }
- }
-
-
- printf("\nSet ddr_test_cmd_dram_vref [0x%08x]\n",ddr_test_cmd_dram_vref);
- if (ddr_test_cmd_zq_vref == 0)
- ddr_test_cmd_zq_vref=0;
- if (ddr_test_cmd_zq_vref) {
- if (ddr_test_cmd_zq_vref<45)
- ddr_test_cmd_zq_vref=45;
- if (ddr_test_cmd_zq_vref>88)
- ddr_test_cmd_zq_vref=88;
- ddr_test_cmd_zq_vref=(ddr_test_cmd_zq_vref*100-4407)/70;
- }
- }
-
- //if(ddr_test_cmd_type==DDR_TEST_CMD_TEST_AC_BIT_HOLD)
- //{if (ddr_test_cmd_clk_seed ==0)
- //ddr_test_cmd_clk_seed = 0x3f;
- //if (ddr_test_cmd_acbdl_x_seed ==0)
- //ddr_test_cmd_acbdl_x_seed = 0x3f;
- //}
-
-#if defined(CONFIG_M6TV) || defined(CONFIG_M6TVD)
- writel(zqcr | (0x3c << 24), PREG_STICKY_REG0);
-#else
- writel(zqcr | (0xf14 << 20), PREG_STICKY_REG0);
-#endif
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- writel((ddr_test_cmd_zq_vref<<24)|(ddr_test_cmd_soc_vref<<8)|ddr_test_cmd_dram_vref , PREG_STICKY_REG9);
- writel((zqpr_soc_dram<<0) , PREG_STICKY_REG8);
- soc_data_drv_odt=zqpr_soc_dram&0xfffff;
- dram_drv=(zqpr_soc_dram>>20)&0xf;
- dram_odt=(zqpr_soc_dram>>24)&0xf;
- printf("setting zqpr_soc_dram [0x%08x],..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n", zqpr_soc_dram);
- printf("soc_data_drv_odt [0x%08x],dram_drv [0x%08x],dram_odt [0x%08x]\n", soc_data_drv_odt,dram_drv,dram_odt);
- pll=pll|(bist_test_dq_index<<12);
-
- if(ddr_full_test_enable)
- {
- pll=(ddr_full_test_enable<<21)|pll;
- printf("ddr_full_test_enable %08x,set sticky reg1 bit 21 1\n", ddr_full_test_enable);
- }
-
-#endif
-
-
- writel(pll, PREG_STICKY_REG1);
-
- printf("Set pll done [0x%08x]\n", readl(PREG_STICKY_REG1));
- printf("STICKY_REG1 pll bit 12-19 use for bist dq index test 0xff is all 1 --> dq0 ,2--->dq1 \n");
- printf("Set STICKY_REG0 [0x%08x]\n", readl(PREG_STICKY_REG0));
- printf("Set STICKY_REG1 [0x%08x]\n", readl(PREG_STICKY_REG1));
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- printf("Set STICKY_REG9 [0x%08x]\n", readl(PREG_STICKY_REG9));
- printf("Set STICKY_REG8 [0x%08x]\n", readl(PREG_STICKY_REG8));
-
-#endif
- printf("\nbegin reset 111...........\n");
- printf("\nbegin reset 2...........\n");
- printf("\nbegin reset 3...........\n");
-
-#ifdef CONFIG_M8B
- printf(" t1 \n");
- writel(0xf080000 | 2000, WATCHDOG_TC);
-#else
- printf(" t2 \n");
- // writel(WATCHDOG_TC, 0xf400000 | 2000);
- // *P_WATCHDOG_RESET = 0;
- ddr_test_watchdog_reset_system();
-#endif
- while(1);
- return 0;
-
-usage:
-
- printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
- printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
- printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
- printf("or ddr_test_cmd 0x17 1200 6034 60346034 0 0 0 0 1 \n");
- printf("setting zqpr_soc_dram ,..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n");
- printf("setting zqpr_soc_dram ,bit0-bit19 soc_data_drv_odt,bit20-bit24 dram_drv , bit24-bit28 dram_odt\n");
- printf("setting zqpr_soc_dram ,bit0-bit19 bit 0-7 use for ddr3,bit8-19 use for ddr4,odt_down_up\n");
- printf("setting zqpr_soc_dram ,soc_drv=(480/((setting)+1));ddr4---soc_odt=(480/(setting)+1));ddr3---soc_odt=(360/(setting)+1));\n");
-
- printf(" DDR3_DRV_40OHM 0\n");
- printf(" DDR3_DRV_34OHM 1\n\n");
-
- printf(" DDR3_ODT_0OHM 0\n");
- printf(" DDR3_ODT_60OHM 1\n");
- printf(" DDR3_ODT_120OHM 2\n");
- printf(" DDR3_ODT_40OHM 3\n");
- printf(" DDR3_ODT_20OHM 4\n");
- printf(" DDR3_ODT_30OHM 5\n\n\n");
-
- printf(" LPDDR2_DRV_34OHM 1\n");
- printf(" LPDDR2_DRV_40OHM 2\n");
- printf(" LPDDR2_DRV_48OHM 3\n");
- printf(" LPDDR2_DRV_60OHM 4\n");
- printf(" LPDDR2_DRV_80OHM 6\n");
- printf(" LPDDR2_DRV_120OHM 7\n\n");
-
- printf(" LPDDR2_ODT_0OHM 0\n\n\n");
-
-
- printf(" LPDDR3_DRV_34OHM 1\n");
- printf(" LPDDR3_DRV_40OHM 2\n");
- printf(" LPDDR3_DRV_48OHM 3\n");
- printf(" LPDDR3_DRV_60OHM 4\n");
- printf(" LPDDR3_DRV_80OHM 6\n");
- printf(" LPDDR3_DRV_34_40OHM 9\n");
- printf(" LPDDR3_DRV_40_48OHM 10\n");
- printf(" LPDDR3_DRV_34_48OHM 11\n\n");
-
- printf(" LPDDR3_ODT_0OHM 0\n");
- printf(" LPDDR3_ODT_60OHM 1\n");
- printf(" LPDDR3_ODT_12OHM 2\n");
- printf(" LPDDR3_ODT_240HM 3\n\n\n");
-
- printf(" DDR4_DRV_34OHM 0\n");
- printf(" DDR4_DRV_48OHM 1\n\n");
-
- printf(" DDR4_ODT_0OHM 0\n");
- printf(" DDR4_ODT_60OHM 1\n");
- printf(" DDR4_ODT_120OHM 2\n");
- printf(" DDR4_ODT_40OHM 3\n");
- printf(" DDR4_ODT_240OHM 4\n");
- printf(" DDR4_ODT_48OHM 5\n");
- printf(" DDR4_ODT_80OHM 6\n");
- printf(" DDR4_ODT_34OHM 7\n\n\n\n");
-
-
- cmd_usage(cmdtp);
- return 1;
-}
-
-
-int do_ddr_set_bist_test_size_use_sticky_6(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- char *endp;
-
- unsigned int ddr_bist_test_size=0;
-
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- ddr_bist_test_size = simple_strtoull_ddr(argv[1], &endp,0);
- ddr_bist_test_size=ddr_bist_test_size&0xffffffe0;
- if (*argv[1] == 0 || *endp != 0) {
- ddr_bist_test_size=0x3f0*2;
- }
-
- printf("ddr_bist_test_size 0x[%08x],\n", ddr_bist_test_size);
-
-#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
- writel((ddr_bist_test_size<<0) , PREG_STICKY_REG6);
- printf("Set STICKY_REG6 [0x%08x]\n", readl(PREG_STICKY_REG6));
-#endif
-
- return 1;
-}
-
-unsigned int do_ddr_read_write_ddr_add__data_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
-{
- unsigned reg_add=0;
-
- if(add_index==0)
- reg_add=(DDR0_PUB_ACLCDLR);
- if(add_index==1)
- reg_add=(DDR0_PUB_ACBDLR0);
- {
- if(read_write_flag==DDR_PARAMETER_READ)
- {
- lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
- wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
- }
-
- }
- printf("lcdlr %d %08x,%08x\n", add_index,reg_add,
- (readl(reg_add)));
- return lcdlr_value;
-}
-
-#endif
-//ouyang
-
-#define dwc_ddrphy_apb_wr(addr, dat) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))=((uint16_t)dat)
-#define dwc_ddrphy_apb_rd(addr) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))
-#define ACX_MAX 0x80
-
-//dwc_ddrphy_apb_wr((0<<20)|(2<<16)|(0<<12)|(0xb0),0);
-//dwc_ddrphy_apb_wr(0xd0000,0);
-//dwc_ddrphy_apb_wr(0xd0000,1);
-
-//*(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);
-//dwc_ddrphy_apb_wr((ps<<20)|(0<<16)|(instance_num<<12)|(0x80),);
-
-//ddr_test_acx_g12a a length step test_mode ACx
-//ddr_test_acx_g12a a 0x8000000 1 0 0x1
-//argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]
-//argv[1],a
-//argv[2],test length
-//argv[3],test step
-//argv[4],test_mode,direction,0,up; 1,down; 2,down first,up follow;
-//argv[5],ACx;0-AC0,1-AC1,2-AC2...,9-AC9
-
-#if 0
-int do_ddr_test_acx_g12a(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nEnter test ddr ac bit window function\n");
- printf("\nargc== 0x%08x\n", argc);
- //unsigned int ddl_100step_ps= 0;
-
- unsigned int temp_test_error= 0;
- unsigned int temp_count= 0;
- //unsigned int temp_reg_value[40];
-
- char *endp;
- unsigned int test_mode=0;
- unsigned int test_ACx=0;
- unsigned int reg_add=0;
- unsigned int reg_base_adj=0;
-
- unsigned int acbdlr_x_reg_org=0;
- unsigned int acbdlr_x_reg_min=0;
- unsigned int acbdlr_x_reg_max=0;
-
- uint16_t dq_lcd_bdl_temp_reg_value=0;
- uint16_t test_step=1;
- unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
-
- if (argc <= 2)
- {
- goto usage;
- }
- else
- {
- ddr_test_size = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- {
- ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
- }
- }
- if (argc >3)
- {
- test_step = simple_strtoull_ddr(argv[3], &endp, 16);
- if (*argv[3] == 0 || *endp != 0)
- {
- test_step = 1;
- }
- }
- if (argc >4)
- {
- test_mode = simple_strtoull_ddr(argv[4], &endp, 16); //测试方向
- if (*argv[4] == 0 || *endp != 0)
- {
- test_mode = 0;
- }
- if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
- {
- test_mode = 2;
- }
- }
- if (test_mode >2) test_mode = 2;
-
- test_ACx =0;
- if (argc >5)
- {
-
- test_ACx= simple_strtoull_ddr(argv[5], &endp, 16);
- if (*argv[5] == 0 || *endp != 0)
- {
- test_ACx = 0;
- }
- if (test_ACx>9)
- test_ACx =0;//default test AC0
- }
-
- printf("ddr_test_size = 0x%08x\n", ddr_test_size);
- printf("test_mode = 0x%08x\n", test_mode);
- printf("test_ACx = 0x%08x\n", test_ACx);
- dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
- reg_base_adj=0xfe000000;
- reg_add=(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj;
-
- {
-
- {
- printf("test AC%d window start\n ",test_ACx);
-
- if ((test_mode == 1) || (test_mode == 2))
- {
- dq_lcd_bdl_temp_reg_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
- reg_add=((((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj);
- acbdlr_x_reg_org=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));;
- while (dq_lcd_bdl_temp_reg_value>0)
- {
- temp_test_error=0;
- for(temp_count=0;temp_count < test_step;temp_count++)
- {
- if(dq_lcd_bdl_temp_reg_value==0) break;
- dq_lcd_bdl_temp_reg_value--;
- };
- dq_lcd_bdl_temp_reg_value--;
- printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
- dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
- {
- dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),dq_lcd_bdl_temp_reg_value);
- }
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- dq_lcd_bdl_temp_reg_value++;
- temp_test_error = 0;
- break;
- }
- }
- printf("\n left edge detect ,reg==0x%08x\n",reg_add);
- printf("\n org==0x%08x,left edge==0x%08x\n ",acbdlr_x_reg_org,dq_lcd_bdl_temp_reg_value);
-
- acbdlr_x_reg_min= (int)dq_lcd_bdl_temp_reg_value;
- printf("acbdlr_x_reg_min==0x%08x\n",acbdlr_x_reg_min);
-
- dq_lcd_bdl_temp_reg_value=0;
- //恢复默认值
- dwc_ddrphy_apb_wr((0<<20)|(0<<16)|(test_ACx<<12)|(0x80),(uint16_t)acbdlr_x_reg_org);
- }
-
- if ((test_mode == 0) || (test_mode == 2))
- {
- dq_lcd_bdl_temp_reg_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
- reg_add=((((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj);
- acbdlr_x_reg_org=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
- while (dq_lcd_bdl_temp_reg_value<ACX_MAX)
- {
- temp_test_error = 0;
- for(temp_count=0;temp_count < test_step;temp_count++)
- {
- if(dq_lcd_bdl_temp_reg_value>=ACX_MAX) break;
- dq_lcd_bdl_temp_reg_value++;
- };
- printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
- dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
- {
- dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),dq_lcd_bdl_temp_reg_value);
- }
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
-
- if (temp_test_error)
- {
- dq_lcd_bdl_temp_reg_value--;
- temp_test_error = 0;
- break;
- }
- }
- printf("right edge detect ,reg = 0x%08x\n",reg_add);
- printf("org = 0x%08x,right edge = 0x%08x,value = 0x%08x\n ",acbdlr_x_reg_org,dq_lcd_bdl_temp_reg_value,
- dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
-
- acbdlr_x_reg_max=(int)dq_lcd_bdl_temp_reg_value;
- printf("acbdlr_x_reg_max = 0x%08x\n",acbdlr_x_reg_max);
-
- dq_lcd_bdl_temp_reg_value=0;
- //恢复默认值
- dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),(uint)acbdlr_x_reg_org);
- }
- if (test_mode == 2)
- {
- //先往下测,再往上测,测试结束,打印结果
- printf("test AC%d window finish\n ",test_ACx);
- printf("acbdlr_x_reg_min = 0x%08x\n",acbdlr_x_reg_min);
- printf("acbdlr_x_reg_max = 0x%08x\n",acbdlr_x_reg_max);
- }
- }
- dwc_ddrphy_apb_wr(0xd0000,1);
- return dq_lcd_bdl_temp_reg_value;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
- }
-
-}
-
-U_BOOT_CMD(
- ddr_test_acx_g12a, 8, 1, do_ddr_test_acx_g12a,
- "ddr_test_acx_g12a a length step direction ACx",
- "ddr_test_acx_g12a a 0x8000000 1 0 0 \n"
-);
-
-//ddr_read_write_acx_g12a a rd/wr AC0 AC1 AC2 AC3 AC4 AC5 AC6 AC7 AC8 AC9
-//ddr_test_acx_g12a a 0 1 0 0x1
-//argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]
-//argv[1],a ,no use,reserve,just for flag
-//argv[2],rd/wr,0=read,1=write
-//argv[3],AC0
-//argv[4],AC1
-//argv[5],AC2;...,9-AC9
-
-int do_ddr_read_write_acx_g12a(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- unsigned int read_write_flag= 0;
- //unsigned int temp_test_error= 0;
- unsigned int temp_count= 0;
- //unsigned int temp_reg_value[40];
- uint16_t ACx[10];
- char *endp;
-
- printf("Enter ddr_read_write_acx_g12a function\n");
- printf("argc== 0x%08x\n", argc);
-
- if (argc <= 2)
- {
- goto usage;
- }
- else
- {
- read_write_flag = simple_strtoull_ddr(argv[2], &endp, 16);
- if (*argv[2] == 0 || *endp != 0)
- {
- read_write_flag = 0;
- }
- }
- if ((argc >12) && (read_write_flag == 1))
- {
- for(temp_count=0;temp_count < 10;temp_count++)
- {
- //read AC0-AC9 to ACx[0-9]
- ACx[temp_count] = simple_strtoull_ddr(argv[temp_count+3], &endp, 16);
- }
- }
- else
- {
- read_write_flag = 0;
- }
-
- dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
- //0xfe000000;
- //(((0<<20)|(0<<16)|(test_acbdl<<12)|(0x80))<<1) + 0xfe000000;
- {
- if (read_write_flag == 0)
- {
- for(temp_count=0;temp_count < 10;temp_count++)
- {
- ACx[temp_count]=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(temp_count<<12)|(0x80));
- printf("Read: AC%d[0x%08x]==0x%08x\n",temp_count,(((0<<20)|(0<<16)|(temp_count<<12)|(0x80))<<1) + 0xfe000000,ACx[temp_count]);
- };
- }
-
- if (read_write_flag == 1)
- {
-
- for(temp_count=0;temp_count < 10;temp_count++)
- {
- dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(temp_count<<12)|(0x80)),ACx[temp_count]);
- printf("Write: AC%d[0x%08x]==0x%08x\n",temp_count,(((0<<20)|(0<<16)|(temp_count<<12)|(0x80))<<1) + 0xfe000000,dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(temp_count<<12)|(0x80)));
- };
- }
- dwc_ddrphy_apb_wr(0xd0000,1);
- return 0;
-
-usage:
- cmd_usage(cmdtp);
- return 1;
- }
-}
-
-U_BOOT_CMD(
- ddr_read_write_acx_g12a, 18, 1, do_ddr_read_write_acx_g12a,
- "ddr_read_write_acx_g12a a rd/wr ac0-ac9",
- "ddr_read_write_acx_g12a a 0 3 3 3 \n"
-);
-#endif
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#define G12_DATA_READ_OFFSET_MAX (0X3F)
-#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
-
-#define DMC_TEST_WINDOW_INDEX_ATXDLY 1
-#define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
-#define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
-#define DMC_TEST_WINDOW_INDEX_TXDQDLY 4
-#define DMC_TEST_WINDOW_INDEX_RXPBDLY 5
-#define DMC_TEST_WINDOW_INDEX_RXENDLY 6
-
+ // ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_put_hex(count,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_put_hex(rd_reg((uint64_t)(p_dev->p_ddrs) + count),32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // count=count+4;
+ printf("\n reg_add_offset: %08x %08x %08x",count,rd_reg((uint64_t)(G12_DMC_STICKY_0) + count),((G12_DMC_STICKY_0) + count));
+ }
+ }
+
+ {
+ uint32_t loop_max = 0;
+ loop_max=sizeof(ddr_set_t);
+ uint32_t count = 0;
+ for (count = 0; count < loop_max; ) {
+ // ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_put_hex(count,32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_puts(": ",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // ddr_log_serial_put_hex(rd_reg((uint64_t)(p_dev->p_ddrs) + count),32,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ printf("\n%08x %08x",count,rd_reg((uint64_t)(ddr_set_t_p) + count));
+ count=count+4;
+ //printf("\n reg_add_offset: %08x %08x %08x",count,rd_reg((uint64_t)(G12_DMC_STICKY_0) + count),((G12_DMC_STICKY_0) + count));
+ }
+ }
+ // ddr_log_serial_puts("\n",p_dev->ddr_gloabl_message.stick_ddr_log_level);
+}
+
+ printf("\n ");
+
+
+ //ddr_set_t *ddr_set_t_p;
+ //ddr_set_t_p= (ddr_set_t *)G12_DMC_STICKY_0;
+ //{
+ //ddr_set_t_p->ddr_func;
+ //system reserve,do not modify
+ /* align8 */
+
+ //unsigned long rsv_long0[2];
+ /* v1 end */
+ // /*
+
+ // ddr_set_t_p->read_dqs_delay[16];
+ // ddr_set_t_p->read_dq_bit_delay[72];
+ // ddr_set_t_p->write_dqs_delay[16];
+ // */
+ // ddr_set_t_p->write_dq_bit_delay[72];
+ // ddr_set_t_p->read_dqs_gate_delay[16];
+ // ddr_set_t_p->soc_bit_vref[32];
+ // ddr_set_t_p->dram_bit_vref[32];
+ ///*
+ // ddr_set_t_p->dq_dqs_delay_flag;//read_dqs read_dq,write_dqs, write_dq
+ // ddr_set_t_p->dfi_mrl;
+ // ddr_set_t_p->dfi_hwtmrl;
+ // ddr_set_t_p->ARdPtrInitVal;
+ //}
+ uint32_t temp_count=0;
+ {
+ printf("\n.magic=0x%08x,// %d",ddr_set_t_p->magic,ddr_set_t_p->magic);
+ for( temp_count=0;temp_count<4;temp_count++)
+ printf("\n.fast_boot[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->fast_boot[temp_count],ddr_set_t_p->fast_boot[temp_count]);
+ //printf("\n.rsv_int0=0x%08x,// %d",ddr_set_t_p->rsv_int0,ddr_set_t_p->rsv_int0);
+ printf("\n.board_id=0x%08x,// %d",ddr_set_t_p->board_id,ddr_set_t_p->board_id);
+ printf("\n.version=0x%08x,// %d",ddr_set_t_p->version,ddr_set_t_p->version);
+ printf("\n.DramType=0x%08x,// %d",ddr_set_t_p->DramType,ddr_set_t_p->DramType);
+ printf("\n.DisabledDbyte=0x%08x,// %d",ddr_set_t_p->DisabledDbyte,ddr_set_t_p->DisabledDbyte);
+ printf("\n.Is2Ttiming=0x%08x,// %d",ddr_set_t_p->Is2Ttiming,ddr_set_t_p->Is2Ttiming);
+ printf("\n.HdtCtrl=0x%08x,// %d",ddr_set_t_p->HdtCtrl,ddr_set_t_p->HdtCtrl);
+ printf("\n.dram_rank_config=0x%08x,// %d",ddr_set_t_p->dram_rank_config,ddr_set_t_p->dram_rank_config);
+ printf("\n.diagnose=0x%08x,// %d",ddr_set_t_p->diagnose,ddr_set_t_p->diagnose);
+ printf("\n.imem_load_addr=0x%08x,// %d",ddr_set_t_p->imem_load_addr,ddr_set_t_p->imem_load_addr);
+ printf("\n.dmem_load_addr=0x%08x,// %d",ddr_set_t_p->dmem_load_addr,ddr_set_t_p->dmem_load_addr);
+ printf("\n.imem_load_size=0x%08x,// %d",ddr_set_t_p->imem_load_size,ddr_set_t_p->imem_load_size);
+ printf("\n.dmem_load_size=0x%08x,// %d",ddr_set_t_p->dmem_load_size,ddr_set_t_p->dmem_load_size);
+ printf("\n.ddr_base_addr=0x%08x,// %d",ddr_set_t_p->ddr_base_addr,ddr_set_t_p->ddr_base_addr);
+ printf("\n.ddr_start_offset=0x%08x,// %d",ddr_set_t_p->ddr_start_offset,ddr_set_t_p->ddr_start_offset);
+ printf("\n.dram_cs0_size_MB=0x%08x,// %d",ddr_set_t_p->dram_cs0_size_MB,ddr_set_t_p->dram_cs0_size_MB);
+ printf("\n.dram_cs1_size_MB=0x%08x,// %d",ddr_set_t_p->dram_cs1_size_MB,ddr_set_t_p->dram_cs1_size_MB);
+ printf("\n.training_SequenceCtrl[0]=0x%08x,// %d",ddr_set_t_p->training_SequenceCtrl[0],ddr_set_t_p->training_SequenceCtrl[0]);
+ printf("\n.training_SequenceCtrl[1]=0x%08x,// %d",ddr_set_t_p->training_SequenceCtrl[1],ddr_set_t_p->training_SequenceCtrl[1]);
+ printf("\n.phy_odt_config_rank[0]=0x%08x,// %d",ddr_set_t_p->phy_odt_config_rank[0],ddr_set_t_p->phy_odt_config_rank[0]);
+ printf("\n.phy_odt_config_rank[1]=0x%08x,// %d",ddr_set_t_p->phy_odt_config_rank[1],ddr_set_t_p->phy_odt_config_rank[1]);
+ printf("\n.rever1=0x%08x,// %d",ddr_set_t_p->rever1,ddr_set_t_p->rever1);
+ printf("\n.rever2=0x%08x,// %d",ddr_set_t_p->rever2,ddr_set_t_p->rever2);
+ // unsigned char phy_odt_config_rank[2];
+ // unsigned char ddr_fast_boot_function;
+ // unsigned char dqs_offset_value;
+ printf("\n.dfi_odt_config=0x%08x,// %d",ddr_set_t_p->dfi_odt_config,ddr_set_t_p->dfi_odt_config);
+ printf("\n.DRAMFreq[0]=0x%08x,// %d",ddr_set_t_p->DRAMFreq[0],ddr_set_t_p->DRAMFreq[0]);
+ printf("\n.DRAMFreq[1]=0x%08x,// %d",ddr_set_t_p->DRAMFreq[1],ddr_set_t_p->DRAMFreq[1]);
+ printf("\n.DRAMFreq[2]=0x%08x,// %d",ddr_set_t_p->DRAMFreq[2],ddr_set_t_p->DRAMFreq[2]);
+ printf("\n.DRAMFreq[3]=0x%08x,// %d",ddr_set_t_p->DRAMFreq[3],ddr_set_t_p->DRAMFreq[3]);
+ printf("\n.PllBypassEn=0x%08x,// %d",ddr_set_t_p->PllBypassEn,ddr_set_t_p->PllBypassEn);
+ printf("\n.ddr_rdbi_wr_enable=0x%08x,// %d",ddr_set_t_p->ddr_rdbi_wr_enable,ddr_set_t_p->ddr_rdbi_wr_enable);
+ printf("\n.ddr_rfc_type=0x%08x,// %d",ddr_set_t_p->ddr_rfc_type,ddr_set_t_p->ddr_rfc_type);
+ printf("\n.enable_lpddr4x_mode=0x%08x,// %d",ddr_set_t_p->enable_lpddr4x_mode,ddr_set_t_p->enable_lpddr4x_mode);
+ printf("\n.pll_ssc_mode=0x%08x,// %d",ddr_set_t_p->pll_ssc_mode,ddr_set_t_p->pll_ssc_mode);
+ printf("\n.clk_drv_ohm=0x%08x,// %d",ddr_set_t_p->clk_drv_ohm,ddr_set_t_p->clk_drv_ohm);
+ printf("\n.cs_drv_ohm=0x%08x,// %d",ddr_set_t_p->cs_drv_ohm,ddr_set_t_p->cs_drv_ohm);
+ printf("\n.ac_drv_ohm=0x%08x,// %d",ddr_set_t_p->ac_drv_ohm,ddr_set_t_p->ac_drv_ohm);
+ printf("\n.soc_data_drv_ohm_p=0x%08x,// %d",ddr_set_t_p->soc_data_drv_ohm_p,ddr_set_t_p->soc_data_drv_ohm_p);
+ printf("\n.soc_data_drv_ohm_n=0x%08x,// %d",ddr_set_t_p->soc_data_drv_ohm_n,ddr_set_t_p->soc_data_drv_ohm_n);
+ printf("\n.soc_data_odt_ohm_p=0x%08x,// %d",ddr_set_t_p->soc_data_odt_ohm_p,ddr_set_t_p->soc_data_odt_ohm_p);
+ printf("\n.soc_data_odt_ohm_n=0x%08x,// %d",ddr_set_t_p->soc_data_odt_ohm_n,ddr_set_t_p->soc_data_odt_ohm_n);
+ printf("\n.dram_data_drv_ohm=0x%08x,// %d",ddr_set_t_p->dram_data_drv_ohm,ddr_set_t_p->dram_data_drv_ohm);
+ printf("\n.dram_data_odt_ohm=0x%08x,// %d",ddr_set_t_p->dram_data_odt_ohm,ddr_set_t_p->dram_data_odt_ohm);
+ printf("\n.dram_ac_odt_ohm=0x%08x,// %d",ddr_set_t_p->dram_ac_odt_ohm,ddr_set_t_p->dram_ac_odt_ohm);
+ printf("\n.soc_clk_slew_rate=0x%08x,// %d",ddr_set_t_p->soc_clk_slew_rate,ddr_set_t_p->soc_clk_slew_rate);
+ printf("\n.soc_cs_slew_rate=0x%08x,// %d",ddr_set_t_p->soc_cs_slew_rate,ddr_set_t_p->soc_cs_slew_rate);
+ printf("\n.soc_ac_slew_rate=0x%08x,// %d",ddr_set_t_p->soc_ac_slew_rate,ddr_set_t_p->soc_ac_slew_rate);
+ printf("\n.soc_data_slew_rate=0x%08x,// %d",ddr_set_t_p->soc_data_slew_rate,ddr_set_t_p->soc_data_slew_rate);
+ printf("\n.vref_output_permil =0x%08x,// %d",ddr_set_t_p->vref_output_permil ,ddr_set_t_p->vref_output_permil );
+ printf("\n.vref_receiver_permil =0x%08x,// %d",ddr_set_t_p->vref_receiver_permil ,ddr_set_t_p->vref_receiver_permil );
+ printf("\n.vref_dram_permil=0x%08x,// %d",ddr_set_t_p->vref_dram_permil,ddr_set_t_p->vref_dram_permil);
+ printf("\n.max_core_timmming_frequency=0x%08x,// %d",ddr_set_t_p->max_core_timmming_frequency,ddr_set_t_p->max_core_timmming_frequency);
+ printf("\n.ac_trace_delay[0]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[0],ddr_set_t_p->ac_trace_delay[0]);
+ printf("\n.ac_trace_delay[1]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[1],ddr_set_t_p->ac_trace_delay[1]);
+ printf("\n.ac_trace_delay[2]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[2],ddr_set_t_p->ac_trace_delay[2]);
+ printf("\n.ac_trace_delay[3]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[3],ddr_set_t_p->ac_trace_delay[3]);
+ printf("\n.ac_trace_delay[4]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[4],ddr_set_t_p->ac_trace_delay[4]);
+ printf("\n.ac_trace_delay[5]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[5],ddr_set_t_p->ac_trace_delay[5]);
+ printf("\n.ac_trace_delay[6]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[6],ddr_set_t_p->ac_trace_delay[6]);
+ printf("\n.ac_trace_delay[7]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[7],ddr_set_t_p->ac_trace_delay[7]);
+ printf("\n.ac_trace_delay[8]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[8],ddr_set_t_p->ac_trace_delay[8]);
+ printf("\n.ac_trace_delay[9]=0x%08x,// %d",ddr_set_t_p->ac_trace_delay[9],ddr_set_t_p->ac_trace_delay[9]);
+ printf("\n.lpddr4_dram_vout_voltage_1_3_2_5_setting=0x%08x,// %d",ddr_set_t_p->lpddr4_dram_vout_voltage_1_3_2_5_setting,ddr_set_t_p->lpddr4_dram_vout_voltage_1_3_2_5_setting);
+ printf("\n.lpddr4_x8_mode=0x%08x,// %d",ddr_set_t_p->lpddr4_x8_mode,ddr_set_t_p->lpddr4_x8_mode);
+ printf("\n.ac_pinmux[0]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[0],ddr_set_t_p->ac_pinmux[0]);
+ printf("\n.ac_pinmux[1]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[1],ddr_set_t_p->ac_pinmux[1]);
+ printf("\n.ac_pinmux[2]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[2],ddr_set_t_p->ac_pinmux[2]);
+ printf("\n.ac_pinmux[3]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[3],ddr_set_t_p->ac_pinmux[3]);
+ printf("\n.ac_pinmux[4]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[4],ddr_set_t_p->ac_pinmux[4]);
+ printf("\n.ac_pinmux[5]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[5],ddr_set_t_p->ac_pinmux[5]);
+ printf("\n.ac_pinmux[6]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[6],ddr_set_t_p->ac_pinmux[6]);
+ printf("\n.ac_pinmux[7]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[7],ddr_set_t_p->ac_pinmux[7]);
+ printf("\n.ac_pinmux[8]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[8],ddr_set_t_p->ac_pinmux[8]);
+ printf("\n.ac_pinmux[9]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[9],ddr_set_t_p->ac_pinmux[9]);
+ printf("\n.ac_pinmux[10]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[10],ddr_set_t_p->ac_pinmux[10]);
+ printf("\n.ac_pinmux[11]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[11],ddr_set_t_p->ac_pinmux[11]);
+ printf("\n.ac_pinmux[12]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[12],ddr_set_t_p->ac_pinmux[12]);
+ printf("\n.ac_pinmux[13]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[13],ddr_set_t_p->ac_pinmux[13]);
+ printf("\n.ac_pinmux[14]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[14],ddr_set_t_p->ac_pinmux[14]);
+ printf("\n.ac_pinmux[15]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[15],ddr_set_t_p->ac_pinmux[15]);
+ printf("\n.ac_pinmux[16]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[16],ddr_set_t_p->ac_pinmux[16]);
+ printf("\n.ac_pinmux[17]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[17],ddr_set_t_p->ac_pinmux[17]);
+ printf("\n.ac_pinmux[18]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[18],ddr_set_t_p->ac_pinmux[18]);
+ printf("\n.ac_pinmux[19]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[19],ddr_set_t_p->ac_pinmux[19]);
+ printf("\n.ac_pinmux[20]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[20],ddr_set_t_p->ac_pinmux[20]);
+ printf("\n.ac_pinmux[21]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[21],ddr_set_t_p->ac_pinmux[21]);
+ printf("\n.ac_pinmux[22]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[22],ddr_set_t_p->ac_pinmux[22]);
+ printf("\n.ac_pinmux[23]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[23],ddr_set_t_p->ac_pinmux[23]);
+ printf("\n.ac_pinmux[24]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[24],ddr_set_t_p->ac_pinmux[24]);
+ printf("\n.ac_pinmux[25]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[25],ddr_set_t_p->ac_pinmux[25]);
+ printf("\n.ac_pinmux[26]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[26],ddr_set_t_p->ac_pinmux[26]);
+ printf("\n.ac_pinmux[27]=0x%08x,// %d",ddr_set_t_p->ac_pinmux[27],ddr_set_t_p->ac_pinmux[27]);
+ printf("\n.dfi_pinmux[0]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[0],ddr_set_t_p->dfi_pinmux[0]);
+ printf("\n.dfi_pinmux[1]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[1],ddr_set_t_p->dfi_pinmux[1]);
+ printf("\n.dfi_pinmux[2]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[2],ddr_set_t_p->dfi_pinmux[2]);
+ printf("\n.dfi_pinmux[3]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[3],ddr_set_t_p->dfi_pinmux[3]);
+ printf("\n.dfi_pinmux[4]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[4],ddr_set_t_p->dfi_pinmux[4]);
+ printf("\n.dfi_pinmux[5]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[5],ddr_set_t_p->dfi_pinmux[5]);
+ printf("\n.dfi_pinmux[6]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[6],ddr_set_t_p->dfi_pinmux[6]);
+ printf("\n.dfi_pinmux[7]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[7],ddr_set_t_p->dfi_pinmux[7]);
+ printf("\n.dfi_pinmux[8]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[8],ddr_set_t_p->dfi_pinmux[8]);
+ printf("\n.dfi_pinmux[9]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[9],ddr_set_t_p->dfi_pinmux[9]);
+ printf("\n.dfi_pinmux[10]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[10],ddr_set_t_p->dfi_pinmux[10]);
+ printf("\n.dfi_pinmux[11]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[11],ddr_set_t_p->dfi_pinmux[11]);
+ printf("\n.dfi_pinmux[12]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[12],ddr_set_t_p->dfi_pinmux[12]);
+ printf("\n.dfi_pinmux[13]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[13],ddr_set_t_p->dfi_pinmux[13]);
+ printf("\n.dfi_pinmux[14]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[14],ddr_set_t_p->dfi_pinmux[14]);
+ printf("\n.dfi_pinmux[15]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[15],ddr_set_t_p->dfi_pinmux[15]);
+ printf("\n.dfi_pinmux[16]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[16],ddr_set_t_p->dfi_pinmux[16]);
+ printf("\n.dfi_pinmux[17]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[17],ddr_set_t_p->dfi_pinmux[17]);
+ printf("\n.dfi_pinmux[18]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[18],ddr_set_t_p->dfi_pinmux[18]);
+ printf("\n.dfi_pinmux[19]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[19],ddr_set_t_p->dfi_pinmux[19]);
+ printf("\n.dfi_pinmux[20]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[20],ddr_set_t_p->dfi_pinmux[20]);
+ printf("\n.dfi_pinmux[21]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[21],ddr_set_t_p->dfi_pinmux[21]);
+ printf("\n.dfi_pinmux[22]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[22],ddr_set_t_p->dfi_pinmux[22]);
+ printf("\n.dfi_pinmux[23]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[23],ddr_set_t_p->dfi_pinmux[23]);
+ printf("\n.dfi_pinmux[24]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[24],ddr_set_t_p->dfi_pinmux[24]);
+ printf("\n.dfi_pinmux[25]=0x%08x,// %d",ddr_set_t_p->dfi_pinmux[25],ddr_set_t_p->dfi_pinmux[25]);
+ printf("\n.slt_test_function[0] =0x%08x,// %d",ddr_set_t_p->slt_test_function[0] ,ddr_set_t_p->slt_test_function[0] );
+ printf("\n.slt_test_function[1] =0x%08x,// %d",ddr_set_t_p->slt_test_function[1] ,ddr_set_t_p->slt_test_function[1] );
+ printf("\n.tdqs2dq=0x%08x,// %d",ddr_set_t_p->tdqs2dq,ddr_set_t_p->tdqs2dq);
+ printf("\n.dram_data_wr_odt_ohm=0x%08x,// %d",ddr_set_t_p->dram_data_wr_odt_ohm,ddr_set_t_p->dram_data_wr_odt_ohm);
+ printf("\n.bitTimeControl_2d=0x%08x,// %d",ddr_set_t_p->bitTimeControl_2d,ddr_set_t_p->bitTimeControl_2d);
+ printf("\n.ddr_dmc_remap[0]=0x%08x,// %d",ddr_set_t_p->ddr_dmc_remap[0],ddr_set_t_p->ddr_dmc_remap[0]);
+ printf("\n.ddr_dmc_remap[1]=0x%08x,// %d",ddr_set_t_p->ddr_dmc_remap[1],ddr_set_t_p->ddr_dmc_remap[1]);
+ printf("\n.ddr_dmc_remap[2]=0x%08x,// %d",ddr_set_t_p->ddr_dmc_remap[2],ddr_set_t_p->ddr_dmc_remap[2]);
+ printf("\n.ddr_dmc_remap[3]=0x%08x,// %d",ddr_set_t_p->ddr_dmc_remap[3],ddr_set_t_p->ddr_dmc_remap[3]);
+ printf("\n.ddr_dmc_remap[4]=0x%08x,// %d",ddr_set_t_p->ddr_dmc_remap[4],ddr_set_t_p->ddr_dmc_remap[4]);
+ printf("\n.ddr_lpddr34_ca_remap[0]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_ca_remap[0],ddr_set_t_p->ddr_lpddr34_ca_remap[0]);
+ printf("\n.ddr_lpddr34_ca_remap[1]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_ca_remap[1],ddr_set_t_p->ddr_lpddr34_ca_remap[1]);
+ printf("\n.ddr_lpddr34_ca_remap[2]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_ca_remap[2],ddr_set_t_p->ddr_lpddr34_ca_remap[2]);
+ printf("\n.ddr_lpddr34_ca_remap[3]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_ca_remap[3],ddr_set_t_p->ddr_lpddr34_ca_remap[3]);
+ printf("\n.ddr_lpddr34_dq_remap[0]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[0],ddr_set_t_p->ddr_lpddr34_dq_remap[0]);
+ printf("\n.ddr_lpddr34_dq_remap[1]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[1],ddr_set_t_p->ddr_lpddr34_dq_remap[1]);
+ printf("\n.ddr_lpddr34_dq_remap[2]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[2],ddr_set_t_p->ddr_lpddr34_dq_remap[2]);
+ printf("\n.ddr_lpddr34_dq_remap[3]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[3],ddr_set_t_p->ddr_lpddr34_dq_remap[3]);
+ printf("\n.ddr_lpddr34_dq_remap[4]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[4],ddr_set_t_p->ddr_lpddr34_dq_remap[4]);
+ printf("\n.ddr_lpddr34_dq_remap[5]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[5],ddr_set_t_p->ddr_lpddr34_dq_remap[5]);
+ printf("\n.ddr_lpddr34_dq_remap[6]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[6],ddr_set_t_p->ddr_lpddr34_dq_remap[6]);
+ printf("\n.ddr_lpddr34_dq_remap[7]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[7],ddr_set_t_p->ddr_lpddr34_dq_remap[7]);
+ printf("\n.ddr_lpddr34_dq_remap[8]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[8],ddr_set_t_p->ddr_lpddr34_dq_remap[8]);
+ printf("\n.ddr_lpddr34_dq_remap[9]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[9],ddr_set_t_p->ddr_lpddr34_dq_remap[9]);
+ printf("\n.ddr_lpddr34_dq_remap[10]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[10],ddr_set_t_p->ddr_lpddr34_dq_remap[10]);
+ printf("\n.ddr_lpddr34_dq_remap[11]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[11],ddr_set_t_p->ddr_lpddr34_dq_remap[11]);
+ printf("\n.ddr_lpddr34_dq_remap[12]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[12],ddr_set_t_p->ddr_lpddr34_dq_remap[12]);
+ printf("\n.ddr_lpddr34_dq_remap[13]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[13],ddr_set_t_p->ddr_lpddr34_dq_remap[13]);
+ printf("\n.ddr_lpddr34_dq_remap[14]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[14],ddr_set_t_p->ddr_lpddr34_dq_remap[14]);
+ printf("\n.ddr_lpddr34_dq_remap[15]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[15],ddr_set_t_p->ddr_lpddr34_dq_remap[15]);
+ printf("\n.ddr_lpddr34_dq_remap[16]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[16],ddr_set_t_p->ddr_lpddr34_dq_remap[16]);
+ printf("\n.ddr_lpddr34_dq_remap[17]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[17],ddr_set_t_p->ddr_lpddr34_dq_remap[17]);
+ printf("\n.ddr_lpddr34_dq_remap[18]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[18],ddr_set_t_p->ddr_lpddr34_dq_remap[18]);
+ printf("\n.ddr_lpddr34_dq_remap[19]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[19],ddr_set_t_p->ddr_lpddr34_dq_remap[19]);
+ printf("\n.ddr_lpddr34_dq_remap[20]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[20],ddr_set_t_p->ddr_lpddr34_dq_remap[20]);
+ printf("\n.ddr_lpddr34_dq_remap[21]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[21],ddr_set_t_p->ddr_lpddr34_dq_remap[21]);
+ printf("\n.ddr_lpddr34_dq_remap[22]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[22],ddr_set_t_p->ddr_lpddr34_dq_remap[22]);
+ printf("\n.ddr_lpddr34_dq_remap[23]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[23],ddr_set_t_p->ddr_lpddr34_dq_remap[23]);
+ printf("\n.ddr_lpddr34_dq_remap[24]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[24],ddr_set_t_p->ddr_lpddr34_dq_remap[24]);
+ printf("\n.ddr_lpddr34_dq_remap[25]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[25],ddr_set_t_p->ddr_lpddr34_dq_remap[25]);
+ printf("\n.ddr_lpddr34_dq_remap[26]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[26],ddr_set_t_p->ddr_lpddr34_dq_remap[26]);
+ printf("\n.ddr_lpddr34_dq_remap[27]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[27],ddr_set_t_p->ddr_lpddr34_dq_remap[27]);
+ printf("\n.ddr_lpddr34_dq_remap[28]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[28],ddr_set_t_p->ddr_lpddr34_dq_remap[28]);
+ printf("\n.ddr_lpddr34_dq_remap[29]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[29],ddr_set_t_p->ddr_lpddr34_dq_remap[29]);
+ printf("\n.ddr_lpddr34_dq_remap[30]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[30],ddr_set_t_p->ddr_lpddr34_dq_remap[30]);
+ printf("\n.ddr_lpddr34_dq_remap[31]=0x%08x,// %d",ddr_set_t_p->ddr_lpddr34_dq_remap[31],ddr_set_t_p->ddr_lpddr34_dq_remap[31]);
+ printf("\n.dram_rtt_nom_wr_park[0]=0x%08x,// %d",ddr_set_t_p->dram_rtt_nom_wr_park[0],ddr_set_t_p->dram_rtt_nom_wr_park[0]);
+ printf("\n.dram_rtt_nom_wr_park[1]=0x%08x,// %d",ddr_set_t_p->dram_rtt_nom_wr_park[1],ddr_set_t_p->dram_rtt_nom_wr_park[1]);
+ printf("\n.ddr_func=0x%08x,// %d",ddr_set_t_p->ddr_func,ddr_set_t_p->ddr_func);
+
+ /*
+ printf("\n.read_dqs_delay[0]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[0],ddr_set_t_p->read_dqs_delay[0]);
+ printf("\n.read_dqs_delay[1]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[1],ddr_set_t_p->read_dqs_delay[1]);
+ printf("\n.read_dqs_delay[2]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[2],ddr_set_t_p->read_dqs_delay[2]);
+ printf("\n.read_dqs_delay[3]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[3],ddr_set_t_p->read_dqs_delay[3]);
+ printf("\n.read_dqs_delay[4]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[4],ddr_set_t_p->read_dqs_delay[4]);
+ printf("\n.read_dqs_delay[5]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[5],ddr_set_t_p->read_dqs_delay[5]);
+ printf("\n.read_dqs_delay[6]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[6],ddr_set_t_p->read_dqs_delay[6]);
+ printf("\n.read_dqs_delay[7]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[7],ddr_set_t_p->read_dqs_delay[7]);
+ printf("\n.read_dqs_delay[8]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[8],ddr_set_t_p->read_dqs_delay[8]);
+ printf("\n.read_dqs_delay[9]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[9],ddr_set_t_p->read_dqs_delay[9]);
+ printf("\n.read_dqs_delay[10]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[10],ddr_set_t_p->read_dqs_delay[10]);
+ printf("\n.read_dqs_delay[11]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[11],ddr_set_t_p->read_dqs_delay[11]);
+ printf("\n.read_dqs_delay[12]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[12],ddr_set_t_p->read_dqs_delay[12]);
+ printf("\n.read_dqs_delay[13]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[13],ddr_set_t_p->read_dqs_delay[13]);
+ printf("\n.read_dqs_delay[14]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[14],ddr_set_t_p->read_dqs_delay[14]);
+ printf("\n.read_dqs_delay[15]=0x%08x,// %d",ddr_set_t_p->read_dqs_delay[15],ddr_set_t_p->read_dqs_delay[15]);
+ printf("\n.read_dq_bit_delay[72]=0x%08x,// %d",ddr_set_t_p->read_dq_bit_delay[72],ddr_set_t_p->read_dq_bit_delay[72]);
+ printf("\n.write_dqs_delay[16]=0x%08x,// %d",ddr_set_t_p->write_dqs_delay[16],ddr_set_t_p->write_dqs_delay[16]);
+ printf("\n.write_dq_bit_delay[72]=0x%08x,// %d",ddr_set_t_p->write_dq_bit_delay[72],ddr_set_t_p->write_dq_bit_delay[72]);
+ printf("\n.read_dqs_gate_delay[16]=0x%08x,// %d",ddr_set_t_p->read_dqs_gate_delay[16],ddr_set_t_p->read_dqs_gate_delay[16]);
+ printf("\n.soc_bit_vref[32]=0x%08x,// %d",ddr_set_t_p->soc_bit_vref[32],ddr_set_t_p->soc_bit_vref[32]);
+ printf("\n.dram_bit_vref[32]=0x%08x,// %d",ddr_set_t_p->dram_bit_vref[32],ddr_set_t_p->dram_bit_vref[32]);
+ printf("\n.dq_dqs_delay_flag=0x%08x,// %d",ddr_set_t_p->dq_dqs_delay_flag,ddr_set_t_p->dq_dqs_delay_flag);
+ printf("\n.dfi_mrl=0x%08x,// %d",ddr_set_t_p->dfi_mrl,ddr_set_t_p->dfi_mrl);
+ printf("\n.dfi_hwtmrl=0x%08x,// %d",ddr_set_t_p->dfi_hwtmrl,ddr_set_t_p->dfi_hwtmrl);
+ printf("\n.ARdPtrInitVal=0x%08x,// %d",ddr_set_t_p->ARdPtrInitVal,ddr_set_t_p->ARdPtrInitVal);
+ */
+
+ //printf("\n.read_dq_bit_delay[72]=%d,",ddr_set_t_p->read_dq_bit_delay[72]);
+ //printf("\n.write_dqs_delay[16]=%d,",ddr_set_t_p->write_dqs_delay[16]);
+ //printf("\n.write_dq_bit_delay[72]=%d,",ddr_set_t_p->write_dq_bit_delay[72]);
+ //printf("\n.read_dqs_gate_delay[16]=%d,",ddr_set_t_p->read_dqs_gate_delay[16]);
+ //printf("\n.soc_bit_vref[32]=%d,",ddr_set_t_p->soc_bit_vref[32]);
+ //printf("\n.dram_bit_vref[32]=%d,",ddr_set_t_p->dram_bit_vref[32]);
+ //printf("\n.dq_dqs_delay_flag=%d,",ddr_set_t_p->dq_dqs_delay_flag);
+ //printf("\n.dfi_mrl=%d,",ddr_set_t_p->dfi_mrl);
+ //printf("\n.dfi_hwtmrl=%d,",ddr_set_t_p->dfi_hwtmrl);
+ //printf("\n.ARdPtrInitVal=%d,",ddr_set_t_p->ARdPtrInitVal);
+
+ for( temp_count=0;temp_count<16;temp_count++)
+ printf("\n.read_dqs_delay[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->read_dqs_delay[temp_count],ddr_set_t_p->read_dqs_delay[temp_count]);
+ for( temp_count=0;temp_count<72;temp_count++)
+ printf("\n.read_dq_bit_delay[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->read_dq_bit_delay[temp_count],ddr_set_t_p->read_dq_bit_delay[temp_count]);
+ for( temp_count=0;temp_count<16;temp_count++)
+ //printf("\n.write_dqs_delay[%d]=%d,",temp_count,ddr_set_t_p->write_dqs_delay[temp_count]);
+ printf("\n.write_dqs_delay[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->write_dqs_delay[temp_count],ddr_set_t_p->write_dqs_delay[temp_count]);
+ for( temp_count=0;temp_count<72;temp_count++)
+ //printf("\n.write_dq_bit_delay[%d]=%d,",temp_count,ddr_set_t_p->write_dq_bit_delay[temp_count]);
+ printf("\n.write_dq_bit_delay[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->write_dq_bit_delay[temp_count],ddr_set_t_p->write_dq_bit_delay[temp_count]);
+ for( temp_count=0;temp_count<16;temp_count++)
+ //printf("\n.read_dqs_gate_delay[%d]=%d,",temp_count,ddr_set_t_p->read_dqs_gate_delay[temp_count]);
+ printf("\n.read_dqs_gate_delay[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->read_dqs_gate_delay[temp_count],ddr_set_t_p->read_dqs_gate_delay[temp_count]);
+ for( temp_count=0;temp_count<32;temp_count++)
+ //printf("\n.soc_bit_vref[%d]=%d,",temp_count,ddr_set_t_p->soc_bit_vref[temp_count]);
+ printf("\n.soc_bit_vref[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->soc_bit_vref[temp_count],ddr_set_t_p->soc_bit_vref[temp_count]);
+ for( temp_count=0;temp_count<32;temp_count++)
+ //printf("\n.dram_bit_vref[%d]=%d,",temp_count,ddr_set_t_p->dram_bit_vref[temp_count]);
+ printf("\n.dram_bit_vref[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->dram_bit_vref[temp_count],ddr_set_t_p->dram_bit_vref[temp_count]);
+
+ //ddr_set_t_p->dq_dqs_delay_flag=0xff;
+ printf("\n.rever3=0x%08x,// %d",ddr_set_t_p->rever3,ddr_set_t_p->rever3);
+ printf("\n.dfi_mrl=0x%08x,// %d",ddr_set_t_p->dfi_mrl,ddr_set_t_p->dfi_mrl);
+ printf("\n.dfi_hwtmrl=0x%08x,// %d",ddr_set_t_p->dfi_hwtmrl,ddr_set_t_p->dfi_hwtmrl);
+ printf("\n.ARdPtrInitVal=0x%08x,// %d",ddr_set_t_p->ARdPtrInitVal,ddr_set_t_p->ARdPtrInitVal);
+
+ for( temp_count=0;temp_count<16;temp_count++)
+ //printf("\n.dram_bit_vref[%d]=%d,",temp_count,ddr_set_t_p->dram_bit_vref[temp_count]);
+ printf("\n.retraining[%d]=0x%08x,// %d",temp_count,ddr_set_t_p->retraining[temp_count],ddr_set_t_p->retraining[temp_count]);
+
+ printf("\n");
+/*
+ printf("\nddr_set_t_p->magic:%08x",ddr_set_t_p->magic);
+ printf("\nddr_set_t_p->rsv_int0:%08x",ddr_set_t_p->rsv_int0);
+ printf("\nddr_set_t_p->board_id:%08x",ddr_set_t_p->board_id);
+ printf("\nddr_set_t_p->version:%08x",ddr_set_t_p->version);
+ printf("\nddr_set_t_p->DramType:%08x",ddr_set_t_p->DramType);
+ printf("\nddr_set_t_p->DisabledDbyte:%08x",ddr_set_t_p->DisabledDbyte);
+ printf("\nddr_set_t_p->Is2Ttiming:%08x",ddr_set_t_p->Is2Ttiming);
+ printf("\nddr_set_t_p->HdtCtrl:%08x",ddr_set_t_p->HdtCtrl);
+ printf("\nddr_set_t_p->dram_rank_config:%08x",ddr_set_t_p->dram_rank_config);
+ printf("\nddr_set_t_p->diagnose:%08x",ddr_set_t_p->diagnose);
+ printf("\nddr_set_t_p->imem_load_addr:%08x",ddr_set_t_p->imem_load_addr);
+ printf("\nddr_set_t_p->dmem_load_addr:%08x",ddr_set_t_p->dmem_load_addr);
+ printf("\nddr_set_t_p->imem_load_size:%08x",ddr_set_t_p->imem_load_size);
+ printf("\nddr_set_t_p->dmem_load_size:%08x",ddr_set_t_p->dmem_load_size);
+ printf("\nddr_set_t_p->ddr_base_addr:%08x",ddr_set_t_p->ddr_base_addr);
+ printf("\nddr_set_t_p->ddr_start_offset:%08x",ddr_set_t_p->ddr_start_offset);
+ printf("\nddr_set_t_p->dram_cs0_size_MB:%08x",ddr_set_t_p->dram_cs0_size_MB);
+ printf("\nddr_set_t_p->dram_cs1_size_MB:%08x",ddr_set_t_p->dram_cs1_size_MB);
+ printf("\nddr_set_t_p->training_SequenceCtrl[0]:%08x",ddr_set_t_p->training_SequenceCtrl[0]);
+ printf("\nddr_set_t_p->training_SequenceCtrl[1]:%08x",ddr_set_t_p->training_SequenceCtrl[1]);
+ printf("\nddr_set_t_p->phy_odt_config_rank[0]:%08x",ddr_set_t_p->phy_odt_config_rank[0]);
+ printf("\nddr_set_t_p->phy_odt_config_rank[1]:%08x",ddr_set_t_p->phy_odt_config_rank[1]);
+ printf("\nddr_set_t_p->phy_odt_config_rank[2]:%08x",ddr_set_t_p->phy_odt_config_rank[2]);
+ printf("\nddr_set_t_p->phy_odt_config_rank[3]:%08x",ddr_set_t_p->phy_odt_config_rank[3]);
+ printf("\nddr_set_t_p->dfi_odt_config:%08x",ddr_set_t_p->dfi_odt_config);
+ printf("\nddr_set_t_p->DRAMFreq[0]:%08x",ddr_set_t_p->DRAMFreq[0]);
+ printf("\nddr_set_t_p->DRAMFreq[1]:%08x",ddr_set_t_p->DRAMFreq[1]);
+ printf("\nddr_set_t_p->DRAMFreq[2]:%08x",ddr_set_t_p->DRAMFreq[2]);
+ printf("\nddr_set_t_p->DRAMFreq[3]:%08x",ddr_set_t_p->DRAMFreq[3]);
+ printf("\nddr_set_t_p->PllBypassEn:%08x",ddr_set_t_p->PllBypassEn);
+ printf("\nddr_set_t_p->ddr_rdbi_wr_enable:%08x",ddr_set_t_p->ddr_rdbi_wr_enable);
+ printf("\nddr_set_t_p->ddr_rfc_type:%08x",ddr_set_t_p->ddr_rfc_type);
+ printf("\nddr_set_t_p->enable_lpddr4x_mode:%08x",ddr_set_t_p->enable_lpddr4x_mode);
+ printf("\nddr_set_t_p->pll_ssc_mode:%08x",ddr_set_t_p->pll_ssc_mode);
+ printf("\nddr_set_t_p->clk_drv_ohm:%08x",ddr_set_t_p->clk_drv_ohm);
+ printf("\nddr_set_t_p->cs_drv_ohm:%08x",ddr_set_t_p->cs_drv_ohm);
+ printf("\nddr_set_t_p->ac_drv_ohm:%08x",ddr_set_t_p->ac_drv_ohm);
+ printf("\nddr_set_t_p->soc_data_drv_ohm_p:%08x",ddr_set_t_p->soc_data_drv_ohm_p);
+ printf("\nddr_set_t_p->soc_data_drv_ohm_n:%08x",ddr_set_t_p->soc_data_drv_ohm_n);
+ printf("\nddr_set_t_p->soc_data_odt_ohm_p:%08x",ddr_set_t_p->soc_data_odt_ohm_p);
+ printf("\nddr_set_t_p->soc_data_odt_ohm_n:%08x",ddr_set_t_p->soc_data_odt_ohm_n);
+ printf("\nddr_set_t_p->dram_data_drv_ohm:%08x",ddr_set_t_p->dram_data_drv_ohm);
+ printf("\nddr_set_t_p->dram_data_odt_ohm:%08x",ddr_set_t_p->dram_data_odt_ohm);
+ printf("\nddr_set_t_p->dram_ac_odt_ohm:%08x",ddr_set_t_p->dram_ac_odt_ohm);
+ printf("\nddr_set_t_p->soc_clk_slew_rate:%08x",ddr_set_t_p->soc_clk_slew_rate);
+ printf("\nddr_set_t_p->soc_cs_slew_rate:%08x",ddr_set_t_p->soc_cs_slew_rate);
+ printf("\nddr_set_t_p->soc_ac_slew_rate:%08x",ddr_set_t_p->soc_ac_slew_rate);
+ printf("\nddr_set_t_p->soc_data_slew_rate:%08x",ddr_set_t_p->soc_data_slew_rate);
+ printf("\nddr_set_t_p->vref_output_permil:%08x",ddr_set_t_p->vref_output_permil);
+ printf("\nddr_set_t_p->vref_receiver_permil:%08x",ddr_set_t_p->vref_receiver_permil);
+ printf("\nddr_set_t_p->vref_dram_permil:%08x",ddr_set_t_p->vref_dram_permil);
+ printf("\nddr_set_t_p->max_core_timmming_frequency:%08x",ddr_set_t_p->max_core_timmming_frequency);
+ printf("\nddr_set_t_p->ac_trace_delay[0]:%08x",ddr_set_t_p->ac_trace_delay[0]);
+ printf("\nddr_set_t_p->ac_trace_delay[1]:%08x",ddr_set_t_p->ac_trace_delay[1]);
+ printf("\nddr_set_t_p->ac_trace_delay[2]:%08x",ddr_set_t_p->ac_trace_delay[2]);
+ printf("\nddr_set_t_p->ac_trace_delay[3]:%08x",ddr_set_t_p->ac_trace_delay[3]);
+ printf("\nddr_set_t_p->ac_trace_delay[4]:%08x",ddr_set_t_p->ac_trace_delay[4]);
+ printf("\nddr_set_t_p->ac_trace_delay[5]:%08x",ddr_set_t_p->ac_trace_delay[5]);
+ printf("\nddr_set_t_p->ac_trace_delay[6]:%08x",ddr_set_t_p->ac_trace_delay[6]);
+ printf("\nddr_set_t_p->ac_trace_delay[7]:%08x",ddr_set_t_p->ac_trace_delay[7]);
+ printf("\nddr_set_t_p->ac_trace_delay[8]:%08x",ddr_set_t_p->ac_trace_delay[8]);
+ printf("\nddr_set_t_p->ac_trace_delay[9]:%08x",ddr_set_t_p->ac_trace_delay[9]);
+ printf("\nddr_set_t_p->lpddr4_dram_vout_voltage_1_3_2_5_setting:%08x",ddr_set_t_p->lpddr4_dram_vout_voltage_1_3_2_5_setting);
+ printf("\nddr_set_t_p->lpddr4_x8_mode:%08x",ddr_set_t_p->lpddr4_x8_mode);
+ //printf("\nddr_set_t_p->ac_pinmux[26]:%08x",ddr_set_t_p->ac_pinmux[26]);
+ //printf("\nddr_set_t_p->dfi_pinmux[28]:%08x",ddr_set_t_p->dfi_pinmux[28]);
+ //printf("\nddr_set_t_p->slt_test_function[2]:%08x",ddr_set_t_p->slt_test_function[2]);
+ printf("\nddr_set_t_p->dq_bdlr_org:%08x",ddr_set_t_p->dq_bdlr_org);
+ printf("\nddr_set_t_p->dram_data_wr_odt_ohm:%08x",ddr_set_t_p->dram_data_wr_odt_ohm);
+ printf("\nddr_set_t_p->bitTimeControl_2d:%08x",ddr_set_t_p->bitTimeControl_2d);
+ printf("\nddr_set_t_p->ddr_dmc_remap[0]:%08x",ddr_set_t_p->ddr_dmc_remap[0]);
+ printf("\nddr_set_t_p->ddr_dmc_remap[1]:%08x",ddr_set_t_p->ddr_dmc_remap[1]);
+ printf("\nddr_set_t_p->ddr_dmc_remap[2]:%08x",ddr_set_t_p->ddr_dmc_remap[2]);
+ printf("\nddr_set_t_p->ddr_dmc_remap[3]:%08x",ddr_set_t_p->ddr_dmc_remap[3]);
+ printf("\nddr_set_t_p->ddr_dmc_remap[4]:%08x",ddr_set_t_p->ddr_dmc_remap[4]);
+ printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[0]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[0]);
+ printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[1]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[1]);
+ printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[2]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[2]);
+ printf("\nddr_set_t_p->ddr_lpddr34_ca_remap[3]:%08x",ddr_set_t_p->ddr_lpddr34_ca_remap[3]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[0]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[0]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[1]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[1]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[2]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[2]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[3]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[3]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[4]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[4]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[5]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[5]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[6]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[6]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[7]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[7]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[8]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[8]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[9]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[9]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[10]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[10]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[11]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[11]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[12]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[12]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[13]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[13]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[14]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[14]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[15]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[15]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[16]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[16]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[17]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[17]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[18]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[18]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[19]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[19]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[20]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[20]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[21]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[21]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[22]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[22]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[23]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[23]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[24]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[24]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[25]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[25]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[26]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[26]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[27]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[27]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[28]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[28]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[29]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[29]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[30]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[30]);
+ printf("\nddr_set_t_p->ddr_lpddr34_dq_remap[31]:%08x",ddr_set_t_p->ddr_lpddr34_dq_remap[31]);
+ printf("\nddr_set_t_p->dram_rtt_nom_wr_park[0]:%08x",ddr_set_t_p->dram_rtt_nom_wr_park[0]);
+ printf("\nddr_set_t_p->dram_rtt_nom_wr_park[1]:%08x",ddr_set_t_p->dram_rtt_nom_wr_park[1]);
+ printf("\nddr_set_t_p->ddr_func:%08x",ddr_set_t_p->ddr_func);
+ //printf("\nddr_set_t_p->rsv_long0[2]:%08x",ddr_set_t_p->rsv_long0[2]);
+ //printf("\nddr_set_t_p->dqs_adjust[16]:%08x",ddr_set_t_p->dqs_adjust[16]);
+ //printf("\nddr_set_t_p->dq_bit_delay[72]:%08x",ddr_set_t_p->dq_bit_delay[72]);
+*/
+ }
+ return 1;
+}
+
+
+int do_ddr_fastboot_config(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ int i=0;
+ int count=0;
+ char *endp;
+ unsigned int enable_ddr_fast_boot=0; // 0 pause 1,resume
+
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ if (argc == 1)
+ printf("\nplease read help\n");
+ else if (argc > 1)
+ {
+ count=0;
+ enable_ddr_fast_boot= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ enable_ddr_fast_boot = 0;
+ }
+ // count++;
+ }
+ if(!enable_ddr_fast_boot)
+ return 1;
+
+ ddr_set_t *ddr_set_t_p=NULL;
+ ddr_set_t_p=(ddr_set_t *)(ddr_set_t_p_arrary);
+ //ddr_set_t_p= (ddr_set_t *)G12_DMC_STICKY_0;
+ //if (sizeof(ddr_set_t)<loop_max)
+ uint32_t ddr_set_add=0;
+ uint32_t ddr_set_size=0;
+ ddr_set_add=(uint32_t)(uint64_t)(ddr_set_t_p);
+ ddr_set_size=sizeof(ddr_set_t);
+ printf("\nddr_set_t_p==0x%08x\n",ddr_set_add);
+ uint32_t loop=0;
+ uint32_t loop_max = (4+(0x3f<<2));//((DMC_STICKY_63-DMC_STICKY_0));
+ // loop_max=sizeof(ddr_set_t);
+ for (loop = 0; loop <loop_max; loop+=4) {
+ wr_reg(((uint64_t)(ddr_set_t_p) + loop), rd_reg(G12_DMC_STICKY_0 + loop));
+ }
+
+{
+ uint16_t dq_bit_delay[72];
+ unsigned char t_count=0;
+ uint16_t delay_org=0;
+ uint16_t delay_temp=0;
+ uint32_t add_offset=0;
+ dwc_ddrphy_apb_wr(0xd0000,0x0);
+
+ char dmc_test_worst_window_rx=0;
+ char dmc_test_worst_window_tx=0;
+
+ {
+ dwc_ddrphy_apb_wr((0<<20)|(0xd<<16)|(0<<12)|(0x0),0); // DWC_DDRPHYA_APBONLY0_MicroContMuxSel
+
+ dmc_test_worst_window_tx=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0x0c2));
+ dmc_test_worst_window_rx=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0x0c3));
+ if(dmc_test_worst_window_tx>30)
+ dmc_test_worst_window_tx=30;
+ if(dmc_test_worst_window_rx>30)
+ dmc_test_worst_window_rx=30;
+// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x1c2),t4_write_worst_margin_rank1);
+// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x1c3),t4_read_worst_margin_rank1);
+ ddr_set_t_p->fast_boot[1]=(((dmc_test_worst_window_tx/2)<<4))|(((dmc_test_worst_window_rx/2)));
+ }
+
+ {
+ //printf("\n ARdPtrInitVal");
+ add_offset=((0<<20)|(0<<16)|(0<<12)|(0x2e));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->ARdPtrInitVal=delay_org;
+ //printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+
+ //printf("\n dfimrl0 dfimrl1 dfimrl2 dfimrl3 HwtMRL");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->dfi_mrl=delay_org;
+ //printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(1<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ //printf("\n t_count: %04d %04d %08x %08x",1,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(2<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ //printf("\n t_count: %04d %04d %08x %08x",2,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(3<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ //printf("\n t_count: %04d %04d %08x %08x",3,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(2<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+
+ ddr_set_t_p->dfi_hwtmrl=delay_org;
+ //printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ }
+ {
+ //printf("\n count_index delay_value register_add register_value \n ");
+ //printf("\n address delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<10;t_count++)
+ {
+ add_offset=((0<<20)|(0<<16)|(t_count<<12)|(0x80));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->ac_trace_delay[t_count]=delay_temp;
+ //printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n tdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-9 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0xd0+(t_count/8)+((t_count%2)<<8)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dqs_delay[t_count]=delay_temp;
+
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n rxdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI,no coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x8c+(t_count/8)+((t_count%2)<<8)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->read_dqs_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n write dq_bit delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-8 is coarse --step==1U",ui_1_32_100step);
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dq_bit_delay[t_count]=delay_temp;
+
+
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n read dq_bit delay * BDLRx100==%d ps bit0-4 fine tune --step==bdlr step size about 5ps,no coarse",bdlr_100step);
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0x68+((t_count%9)<<8)+(t_count/36)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=((delay_org&0x3f));
+
+ ddr_set_t_p->read_dq_bit_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n read dqs gate delay * 1/32UIx100==%d ps bit0-4 fine tune ,bit 6-10 is coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x80+(t_count/8)+((t_count%2)<<8)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->read_dqs_gate_delay[t_count]=delay_temp;
+
+
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+
+ // printf("\n soc vref : lpddr4-- VREF = VDDQ*(0.047 + VrefDAC0[6:0]*0.00367 DDR4 --VREF = VDDQ*(0.510 + VrefDAC0[6:0]*0.00345");
+ //((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value)
+ uint32_t vref_t_count=0;
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(((t_count%36)%9)<<8)|(0x40));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=((delay_org));
+
+ if(t_count<35)
+ {
+ vref_t_count=((((t_count%36)/9)*8)+(t_count%9));
+ ddr_set_t_p->soc_bit_vref[vref_t_count]=delay_temp;
+ }
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ //printf("\n dram vref : lpddr4-- VREF = VDDQ*(0. + VrefDAC0[6:0]*0. DDR4 --VREF = VDDQ*(0. + VrefDAC0[6:0]*0.");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x082));
+ delay_temp=dwc_ddrphy_apb_rd(add_offset);
+ for(t_count=0;t_count<32;t_count++)
+ {
+ ddr_set_t_p->dram_bit_vref[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ // printf("\n t_count: %04d %04d %08x %08x",0,delay_temp,((((add_offset) << 1)+0xfe000000)),delay_temp);
+
+ for(t_count=0;t_count<4;t_count++)
+ {//p_dev->p_ddrs->tdqs2dq=lpddr4_tdqs2dq;
+ //ddr_set_t_p->retraining[0]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaa)); //PptCtlStatic
+ //ddr_set_t_p->retraining[1]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0
+ //ddr_set_t_p->retraining[2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1
+ ddr_set_t_p->retraining[4*t_count+0]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))&0xff; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+1]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))>>8; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0 lane 0-3
+ ddr_set_t_p->retraining[4*t_count+3]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1 lane 0-3
+ }
+ }
+}
+
+ char str[1024]="";
+ //store ddr_parameter write 0x77f81cf0 0x300
+ //printf("\n ");
+
+ if(enable_ddr_fast_boot==1)
+ ddr_set_t_p->fast_boot[0]=0xff;
+
+ if(enable_ddr_fast_boot==2)
+ ddr_set_t_p->fast_boot[0]=0;
+
+ {
+ #if 1
+ printf("&ddr_sha.ddrs : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.ddrs);
+ printf("&ddr_sha.sha2 : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.sha2);
+ printf("ddr_set_add : 0x%x\n", (uint32_t)(uint64_t)ddr_set_add);
+
+ sha256_csum_wd((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ //sha2((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ printf("print sha\n");
+ sprintf(str,"md %08x 0x100", (uint32_t)(uint64_t)(ddr_set_add-32));
+ run_command(str,0);
+ #endif
+ #ifdef USE_FOR_UBOOT_2018
+ sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #else
+ sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #endif
+ // sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ // sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+
+ return 1;
+}
+#else
+int do_ddr_display_ddr_information(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+
+ // char *endp;
+
+ unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
+ unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
+ unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
+ unsigned int soc_ac_drv3=0;
+ unsigned int soc_ac_drv4_up=0;
+ unsigned int soc_ac_drv4_down=0;
+ unsigned int soc_ac_odt3=0;
+ unsigned int soc_ac_odt4=0;
+ unsigned int soc_data01_drv3=0;
+ unsigned int soc_data01_drv4_up=0;
+ unsigned int soc_data01_drv4_down=0;
+ unsigned int soc_data01_odt3=0;
+ unsigned int soc_data01_odt4=0;
+
+ unsigned int soc_data23_drv3=0;
+ unsigned int soc_data23_drv4_up=0;
+ unsigned int soc_data23_drv4_down=0;
+ unsigned int soc_data23_odt3=0;
+ unsigned int soc_data23_odt4=0;
+ unsigned int dram_drv=0;
+ unsigned int dram_odt=0;
+ unsigned int dram_ddr4_drv=0;
+ unsigned int dram_ddr4_odt=0;
+ //unsigned int soc_zq_odt_div=480;
+
+ unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
+ unsigned int pub_mr1= rd_reg(DDR0_PUB_MR1);
+ unsigned int reg_value=0;
+ #define DDR_TYPE_LPDDR2 0
+ #define DDR_TYPE_LPDDR3 1
+ #define DDR_TYPE_DDR3 3
+ #define DDR_TYPE_DDR4 4
+ unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
+
+ {
+ if (ddr_type==0)
+ printf("\nddr_type==lpddr2\n");
+ if (ddr_type==1)
+ printf("\nddr_type==lpddr3\n");
+ if (ddr_type==DDR_TYPE_DDR3)
+ printf("\nddr_type==ddr3\n");
+ if (ddr_type==DDR_TYPE_DDR4)
+ printf("\nddr_type==ddr4\n");
+
+ soc_ac_drv3=zq0pr_org&0xf;
+ soc_ac_odt3=(zq0pr_org>>4)&0xf;
+ soc_ac_drv4_up=(zq0pr_org>>8)&0xf;
+ soc_ac_drv4_down=(zq0pr_org>>12)&0xf;
+ soc_ac_odt4=(zq0pr_org>>16)&0xf;
+
+ soc_data01_drv3=zq1pr_org&0xf;
+ soc_data01_odt3=(zq1pr_org>>4)&0xf;
+ soc_data01_drv4_up=(zq1pr_org>>8)&0xf;
+ soc_data01_drv4_down=(zq1pr_org>>12)&0xf;
+ soc_data01_odt4=(zq1pr_org>>16)&0xf;
+
+ soc_data23_drv3=zq2pr_org&0xf;
+ soc_data23_odt3=(zq2pr_org>>4)&0xf;
+ soc_data23_drv4_up=(zq2pr_org>>8)&0xf;
+ soc_data23_drv4_down=(zq2pr_org>>12)&0xf;
+ soc_data23_odt4=(zq2pr_org>>16)&0xf;
+
+
+ reg_value=pub_mr1;
+ if((((reg_value>>5)&1)==0))
+ {
+ if(((reg_value>>1)&1)==0)
+ {
+ dram_drv=40;
+ dram_ddr4_drv=34;
+ }
+ else
+ {
+ dram_drv=34;
+ dram_ddr4_drv=48;
+ }
+ }
+
+ if(((reg_value>>8)&7)==0)
+ {
+ dram_ddr4_odt=0;
+ }
+ if(((reg_value>>8)&7))
+ {
+ dram_ddr4_odt=240/(((reg_value>>10)&1)|(((reg_value>>9)&1)<<1)|(((reg_value>>8)&1)<<2));
+ }
+ reg_value=(((reg_value>>9)&1)<<2)|(((reg_value>>6)&1)<<1)|(((reg_value>>2)&1)<<0);
+ if(reg_value==1)
+ {
+ dram_odt=60;
+ }
+ if(reg_value==2)
+ {
+ dram_odt=120;
+ }
+ if(reg_value==3)
+ {
+ dram_odt=40;
+ }
+ if(reg_value==4)
+ {
+ dram_odt=20;
+ }
+ if(reg_value==5)
+ {
+ dram_odt=30;
+ }
+
+ printf("zq0pr_org==%x,zq1pr_org==%x,zq2pr_org==%x,\n",zq0pr_org,zq1pr_org,zq2pr_org);
+ printf("soc_ac_drv3==%d,soc_ac_odt3==%d,\n",480/(soc_ac_drv3+1),360/(soc_ac_odt3+1));
+ printf("soc_data01_drv3==%d,soc_data01_odt3==%d,\n",480/(soc_data01_drv3+1),360/(soc_data01_odt3+1));
+ printf("soc_data23_drv3==%d,soc_data23_odt3==%d,\n",480/(soc_data23_drv3+1),360/(soc_data23_odt3+1));
+ printf("dram_drv3==%d,dram_odt3==%d,\n\n\n",dram_drv,dram_odt);
+
+ printf("soc_ac_drv4_up==%d,soc_ac_drv4_down==%d,soc_ac_odt4==%d,\n",480/(soc_ac_drv4_up+1),480/(soc_ac_drv4_down+1),480/(soc_ac_odt4+1));
+ printf("soc_data01_drv4_up==%d,soc_data01_drv4_down==%d,soc_data01_odt4==%d,\n",480/(soc_data01_drv4_up+1),480/(soc_data01_drv4_down+1),480/(soc_data01_odt4+1));
+ printf("soc_data23_drv4_up==%d,soc_data23_drv4_down==%d,soc_data23_odt4==%d,\n",480/(soc_data23_drv4_up+1),480/(soc_data23_drv4_down+1),480/(soc_data23_odt4+1));
+
+
+ printf("dram_ddr4_drv==%d,dram_ddr4_odt==%d,\n",dram_ddr4_drv,dram_ddr4_odt);
+
+
+ }
+ unsigned int dtedr0[2][4];
+ unsigned int dtedr1[2][4];
+ //unsigned int vtdr[2][4];
+ unsigned int lcdlr_w_setting[2][4];
+ unsigned int lcdlr_r_setting[2][4];
+ unsigned int delay_line_100step=0;
+ if (1) {
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ /*
+ bl2_print("DDR0_PUB_ACLCDLR: 0x",rd_reg(DDR0_PUB_ACLCDLR), VALUE_HEX, "....\n");
+ bl2_print("DDR0_PUB_ACBDLR0: 0x", rd_reg(DDR0_PUB_ACBDLR0), VALUE_HEX, "....\n");
+ bl2_print("DDR0_MDLR: ", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF), VALUE_DEC ,"....\n");
+ bl2_print("DDR0_CLK: ", p_ddr_set->ddr_clk, VALUE_DEC, "MHz\n");
+ bl2_print("delay_line_10step:", (1000*1000*10/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF), VALUE_DEC, "....\n");
+ */
+ //printf("DDR0_MDLR:%8d, CLK:%8dMhz, delay_line_10step:%8d ps\n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
+ //p_ddr_set->ddr_clk ,(1000*1000/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
+ wr_reg(DDR0_PUB_RANKIDR, ((0<<0)|((0<<16))));
+ ///*
+ unsigned int i=0;
+ unsigned int rank=0;
+ for(rank=0;rank<2;(rank++))
+ {
+ printf("DDR0_RANK0==%d,\n",rank);
+ //bl2_print("DDR0_RANK0: 0x", rank, VALUE_HEX, "\n\n");
+ wr_reg(DDR0_PUB_RANKIDR, ((rank<<0)|((rank<<16))));
+ for(i=0;i<4;(i++))
+ {
+ //change dtcr0 lane reg map
+ wr_reg(DDR0_PUB_DTCR0,(((rank<<24)|(i<<16)))|((rd_reg(DDR0_PUB_DTCR0))&(~((1<<11)|(0xf<<16)))));//
+
+ printf("DDR0_LANE0: 0x %d\n", i);
+ // bl2_print("DDR0_PUB_DTEDR0: 0x", rd_reg(DDR0_PUB_DTEDR0), VALUE_HEX, "\n")
+ // bl2_print("DDR0_PUB_DTEDR1: 0x", rd_reg(DDR0_PUB_DTEDR1), VALUE_HEX, "\n")
+
+ // bl2_print("DDR0_PUB_DTEDR2: 0x", rd_reg(DDR0_PUB_DTEDR2), VALUE_HEX, "\n")
+ dtedr0[rank][i]=(rd_reg(DDR0_PUB_DTEDR0));
+ dtedr1[rank][i]=(rd_reg(DDR0_PUB_DTEDR1));
+ //vtdr[rank][i]=(rd_reg(DDR0_PUB_VTDR));
+ printf("DDR0_PUB_W_Min:%d \n", (rd_reg(DDR0_PUB_DTEDR0))&0x1ff);
+
+ printf("DDR0_PUB_W_Max: %d\n", ((rd_reg(DDR0_PUB_DTEDR0))>>9)&0x1ff);
+
+ // bl2_print("DDR0_PUB_W_Max: ", ((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1))), VALUE_DEC, "\n\n")
+ lcdlr_w_setting[rank][i]=((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)))));
+ printf("DDR0_PUB_W_SETTING:%d \n", ((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR1+i*(DDR0_PUB_DX1LCDLR1-DDR0_PUB_DX0LCDLR1)))))&0x1ff);
+
+
+
+ printf("DDR0_PUB_R_Min: %d\n", (rd_reg(DDR0_PUB_DTEDR1))&0x1ff);
+
+ printf("DDR0_PUB_R_Max:%d\n", ((rd_reg(DDR0_PUB_DTEDR1))>>9)&0x1ff);
+
+ printf("DDR0_PUB_R_SETTING: %d\n", ((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR3+i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))))&0x1ff);
+ lcdlr_r_setting[rank][i]=((rd_reg((uint64_t)(DDR0_PUB_DX0LCDLR3+i*(DDR0_PUB_DX1LCDLR3-DDR0_PUB_DX0LCDLR3)))));
+ printf("DDR0_PUB_VTDR: 0x%x\n", (rd_reg(DDR0_PUB_VTDR)));
+ }
+ }
+ wr_reg(DDR0_PUB_RANKIDR, ((0<<0)|((0<<16))));
+
+ unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
+ unsigned int ddr_clk =pll_convert_to_ddr_clk(ddr_pll);
+ ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
+
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+ global_ddr_clk=ddr_clk;
+ printf("DDR0_PUB_ACBDLR0: 0x%x\n", (rd_reg(DDR0_PUB_ACBDLR0)));
+ printf("DDR0_PUB_ACLCDLR: 0x%x\n", (rd_reg(DDR0_PUB_ACLCDLR)));
+
+ //printf("DDR0_MDLR:%d \n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
+ //printf("DDR0_CLK:%d MHz \n", p_ddr_set->ddr_clk");
+ //printf("delay_line_10step:%d \n", (1000*1000*10/(2*p_ddr_set->ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF)");
+
+ printf("DDR0_MDLR:%8d, CLK:%8dMhz, delay_line_10step:%8d ps,delay_line_100step:%8d ps,\n", ((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
+ global_ddr_clk ,(10000*1000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF),
+ (1000*100000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF));
+ delay_line_100step=(1000*100000/(2*global_ddr_clk))/((rd_reg(DDR0_PUB_ACMDLR0)>>16)&0X1FF);
+ for(rank=0;rank<2;(rank++))
+ {
+ printf("DDR0_RANK0==%d,\n",rank);
+
+ for(i=0;i<4;(i++))
+ {
+ //dtedr0[rank][i]=(rd_reg(DDR0_PUB_DTEDR0));
+ //dtedr1[rank][i]=(rd_reg(DDR0_PUB_DTEDR1));
+ //vtdr[rank][i]=(rd_reg(DDR0_PUB_VTDR));
+ printf("%4d ", ((((dtedr0[rank][i])>>9)&0x1ff)-lcdlr_w_setting[rank][i])*delay_line_100step/100
+ );
+ printf("%4d ", ((lcdlr_w_setting[rank][i])-(((dtedr0[rank][i])>>0)&0x1ff))*delay_line_100step/100
+ );
+
+ printf("%4d ", ((lcdlr_r_setting[rank][i])-(((dtedr1[rank][i])>>0)&0x1ff))*delay_line_100step/100
+ );
+ printf("%4d ", ((((dtedr1[rank][i])>>9)&0x1ff)-lcdlr_r_setting[rank][i])*delay_line_100step/100
+ );
+ }
+ printf("\n");
+ }
+ printf("\nend==%d,\n",rank);
+#endif
+ }
+
+ CLOSE_CHANNEL_A_PHY_CLK();
+ CLOSE_CHANNEL_B_PHY_CLK();
+ return 1;
+}
+
+
+int do_ddr_offset_ddr_lcdlr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
+#if (CONFIG_DDR_PHY > P_DDR_PHY_DEFAULT)
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ char *endp;
+ unsigned int resume_ddl=0; // 0 pause 1,resume
+ unsigned int offset_id=0; // 0 left 1 right
+ unsigned int count=0;
+ unsigned int reg_add=0;
+ unsigned int reg_value=0;
+ unsigned int offset_value[10]={0,0,0,0,0,0,0,0,0,0} ; // ac w clk w lane 0 w r lane 1 w r lane2 w r lane3 w r
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ if (argc == 1)
+ printf("\nplease read help\n");
+ else if (argc > 1)
+ {
+ count=0;
+ resume_ddl= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ resume_ddl = 0;
+ }
+ // count++;
+ if (argc > 2)
+ {
+ count=1;
+ offset_id= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ offset_id = 0;
+ }
+ // count++;
+ }
+
+ if (argc > 3)
+ {
+ count=2;
+ while(count<(argc-1))
+ {
+ offset_value[count-2]= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ offset_value[count-2] = 0;
+ }
+ count++;
+ }
+ }
+
+ }
+
+ printf("resume_ddl=%d,\n",resume_ddl);
+ if(offset_id)
+ printf("offset right ++%d,\n",offset_id);
+ else
+ printf("offset left --%d,\n",offset_id);
+
+ for (i = 0;i<10;i++)
+ {
+ printf("offset_value[%d]=%d\n",i,offset_value[i]);
+ }
+
+ {
+ //writel((0), 0xc8836c00);
+ OPEN_CHANNEL_A_PHY_CLK();
+ }
+
+ {
+ OPEN_CHANNEL_B_PHY_CLK();
+ //writel((0), 0xc8836c00);
+ }
+
+
+ printf("\nshould pause ddl pir== 0x%08x,if no pause ddl ,write lcdlr some time may occour error\n", readl(DDR0_PUB_REG_BASE+4));
+ writel((readl(DDR0_PUB_REG_BASE+4))|(1<<29),(DDR0_PUB_REG_BASE+4));
+ printf("\n pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+
+
+ //if (vref_lcdlr_offset)
+ for (i = 0;i<10;i++)
+ {
+ if(i==0)
+ reg_add = DDR0_PUB_ACLCDLR;
+ if(i==1)
+ reg_add = DDR0_PUB_ACBDLR0;
+ if(i>1)
+ {
+ if(i%2){
+ reg_add = DDR0_PUB_DX0LCDLR3 + ((DDR0_PUB_DX1LCDLR3 - DDR0_PUB_DX0LCDLR3)*((i-2)/2));}
+ else{
+ reg_add = DDR0_PUB_DX0LCDLR1 + ((DDR0_PUB_DX1LCDLR3 - DDR0_PUB_DX0LCDLR3)*((i-2)/2));}
+ }
+
+ printf("\n org reg_add 0x%08x== 0x%08x\n ",(reg_add),
+ rd_reg(reg_add));
+ if(offset_id) //offset +
+ {
+ wr_reg(reg_add, ( rd_reg(reg_add)+offset_value[i]));
+ if(i>1)
+ {if(i%2){wr_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3),
+ ( rd_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3))+offset_value[i]));
+ }
+ }
+
+
+
+ }
+ else
+ {
+ reg_value=rd_reg(reg_add);
+ reg_value=( reg_value>offset_value[i])?( reg_value-offset_value[i]):0;
+ wr_reg(reg_add, reg_value);
+ if(i>1)
+ {if(i%2){wr_reg((reg_add+DDR0_PUB_DX0LCDLR4-DDR0_PUB_DX0LCDLR3),
+ ( reg_value));
+ }
+ }
+
+
+
+ }
+
+ printf("\n mod reg_add 0x%08x== 0x%08x\n ",(reg_add),
+ rd_reg(reg_add));
+ // /*
+ {
+
+
+
+ }
+ //*/
+ }
+ // printf("\n read reg==0x%08x\n ",(readl(reg_add)));
+ printf("\nend pause ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ if(resume_ddl){
+ writel(((readl(DDR0_PUB_REG_BASE+4))&(~(1<<29))),(DDR0_PUB_REG_BASE+4));
+ printf("\n resume ddl pir== 0x%08x\n", readl(DDR0_PUB_REG_BASE+4));
+ }
+
+
+
+
+
+#endif
+ return 1;
+}
+
+
+#endif
+int do_ddr_set_watchdog_value(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ if (argc == 1)
+ printf("\nplease read help\n");
+
+ else if (argc > 1)
+ {
+ {
+ watchdog_time_s = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ watchdog_time_s= 20;
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ }
+
+ return 1;
+}
+
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ #define G12_DATA_READ_OFFSET_MAX (0X3F)
+ #define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
+
+ #define DMC_TEST_WINDOW_INDEX_ATXDLY 1
+ #define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
+ #define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
+ #define DMC_TEST_WINDOW_INDEX_TXDQDLY 4
+ #define DMC_TEST_WINDOW_INDEX_RXPBDLY 5
+ #define DMC_TEST_WINDOW_INDEX_RXENDLY 6
+
+ #define DMC_TEST_WINDOW_INDEX_EE_VOLTAGE 0x11
+ #define DMC_TEST_WINDOW_INDEX_SOC_VREF 0x12
+ #define DMC_TEST_WINDOW_INDEX_DRAM_VREF 0x13
+
+ typedef struct training_delay_information{
+ uint16_t ac_delay[10];
+ uint16_t txdqs_delay[16];
+ uint16_t rxdqs_delay[16];
+ uint16_t txdq_delay[72];
+ uint16_t rxdq_delay[72];
+ uint16_t gate_rxdq_delay[72];
+
+ } training_delay_t;
+ training_delay_t training_delay_t_p;
+
+ uint16_t lcd_bdl_value[72][4]; //org min max status
+ // #define LCD_BDLR_ORG 0
+ #define LCD_BDLR_MIN 0
+ #define LCD_BDLR_MAX 1
+ #define LCD_BDLR_STATUS 2
+
+ //BYTE0-3
+ #define TEST_ARG_0_DMC_STICKY_MAGIC 0
+ #define TEST_ARG_1_CMD0 1
+ #define TEST_ARG_2_STEP 2 // 0 init 1 test ac 2 test tdqs_write
+ #define TEST_ARG_3_ALL_TOGHTER 3
+
+ //BYTE4-7
+ #define TEST_ARG_FREQ_NIBBLE_L 4
+ #define TEST_ARG_FREQ_NIBBLE_H 5
+
+ //BYTE8-11
+ #define TEST_ARG_BOOT_TIMES_L 6
+ #define TEST_ARG_BOOT_TIMES_H 7
+
+ //BYTE12-15
+ #define TEST_ARG_ERROR_FLAG 8 //take 4 byte for kernel test flag
+ //#define TEST_ARG_ERROR_FLAG 63*4 //take 4 byte for kernel test flag
+
+ //BYTE16-19
+ //#define TEST_ARG_16_LCDLR_TEMP_COUNT 16
+ #define TEST_ARG_CS0_TEST_START_INDEX 12
+ #define TEST_ARG_CS0_TEST_SIZE_INDEX 16
+ #define TEST_ARG_CS1_TEST_START_INDEX 20
+ #define TEST_ARG_CS1_TEST_SIZE_INDEX 24
+
+ #define TEST_ARG_WATCHDOG_TIME_SIZE_INDEX 28
+ #define TEST_ARG_TEST_INDEX_ENALBE_INDEX 30
+ //#define TEST_ARG_NIBBLE_MASK0_ENALBE_INDEX 32
+
+ #define TEST_ARG_ERROR_FLAG_NULL 0
+ #define TEST_ARG_ERROR_FLAG_FAIL 1
+ #define TEST_ARG_ERROR_FLAG_PASS 2
+
+ #define TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE 32 // 32BYTE
+ #define TEST_ARG_NIBBLE_WIDTH_BYTE 3 //3///BYTE
+
+int do_ddr_test_dqs_window_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_dqs_window function ddr_test_cmd 0x27 0x1080000 0x800000 0x40000000 0x800000 15 0x6 0 0 0 0 0 0 1/config\n");
+ printf("\nddr_test_cmd 0x27 cs0_test_start cs0_test_size cs1_test_start cs1_test_size ns test_index_enable nibble_mask0 nibble_mask1 nibble_mask2 dram_type channel_mode config_register all_togther--- watchdog should >15s\n");
+ printf("\n ac write_dqs read_dqs can test togther test_index_enable can enable kernel test \n");
+ // unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+ unsigned int temp_test_error=0;
+ unsigned int nibble_save_offset= 0;
+ unsigned int nibble_step= 0;
+ unsigned int nibble_max= 16;
+ unsigned int test_index_enable= 0;
+ unsigned int test_index= 0;
+ unsigned int test_index_max= 6;
+ unsigned int reg_value= 0;
+ unsigned int dram_type= 0;
+ unsigned int channel_mode= 0;
+ unsigned int kernel_watchdog_s= 20;//240;
+ // unsigned int finish_clear_flag= 0;
+ unsigned int config_register= 0;
+ unsigned int all_toghter_enable=0;
+ unsigned int error_flag_reg_add=0;
+ char *string_print_flag= " uboot-window-loop \n";
+ //int argc2;
+ //char * argv2[30];
+ char *endp;
+ char *buf;
+ buf="";
+
+ unsigned int cs0_test_start= 0x1080000;
+ unsigned int cs0_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ unsigned int cs1_test_start= 0;
+ unsigned int cs1_test_size= 0;
+ unsigned int enable_kernel_test=0;
+ if (argc >1) {
+ cs0_test_start = simple_strtoull_ddr(argv[1], &endp, 16);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ cs0_test_start = 0x1080000;
+ }
+ }
+
+ if (argc >2) {
+ cs0_test_size = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ cs0_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+
+ if (argc >3) {
+ cs1_test_start = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ cs1_test_start = 0;
+ }
+ }
+ if (argc >4) {
+ cs1_test_size = simple_strtoull_ddr(argv[4], &endp, 16);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ cs1_test_size = 0;
+ }
+ }
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = cs0_test_size;
+ if (argc >5) {
+ watchdog_time_s = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 20;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+
+ if (argc >6) {
+ test_index_enable = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_index_enable= 0;
+ }
+ }
+ printf("test_index_enable==0x%08x\n",test_index_enable);
+ enable_kernel_test=(test_index_enable>>7)&1;
+ if(enable_kernel_test){
+ printf("enable kernel window test\n");
+ }
+
+ unsigned int nibble_mask[3]= {0,0,0};
+ if (argc >7) {
+ nibble_mask[0] = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ nibble_mask[0]= 0;
+ }
+ }
+ printf("nibble_mask[0]==0x%08x\n",nibble_mask[0]);
+ if (argc >8) {
+ nibble_mask[1] = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ nibble_mask[1]= 0;
+ }
+ }
+ printf("nibble_mask[1]==0x%08x\n",nibble_mask[1]);
+ if (argc >9) {
+ nibble_mask[2] = simple_strtoull_ddr(argv[9], &endp, 0);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ nibble_mask[2]= 0;
+ }
+ }
+ printf("nibble_mask[2]==0x%08x\n",nibble_mask[2]);
+
+ if (argc >10) {
+ dram_type = simple_strtoull_ddr(argv[10], &endp, 0);
+ if (*argv[10] == 0 || *endp != 0)
+ {
+ dram_type= 0;
+ }
+ }
+ if (argc >11) {
+ channel_mode = simple_strtoull_ddr(argv[11], &endp, 0);
+ if (*argv[11] == 0 || *endp != 0)
+ {
+ channel_mode= 0;
+ }
+ }
+ ///*
+ if (argc >12) {
+ config_register = simple_strtoull_ddr(argv[12], &endp, 0);
+ if (*argv[12] == 0 || *endp != 0)
+ {
+ config_register= 0;
+ }
+ }//*/
+ ///*
+ if (argc >13) {
+ all_toghter_enable = simple_strtoull_ddr(argv[13], &endp, 0);
+ if (*argv[13] == 0 || *endp != 0)
+ {
+ all_toghter_enable= 0;
+ }
+ }//*/
+ printf("all_toghter_enable==0x%08x\n",all_toghter_enable);
+
+ if (argc >14) {
+ error_flag_reg_add = simple_strtoull_ddr(argv[14], &endp, 0);
+ if (*argv[14] == 0 || *endp != 0)
+ {
+ error_flag_reg_add= 0;
+ }
+ }
+ printf("error_flag_reg_add==0x%08x\n",error_flag_reg_add);
+ printf("\ntest use uboot sticky register\n");
+
+ //DMC_STICKY_0
+ char str[1024]="";
+ //char str_temp1[1024]="";
+ //char str_temp2[1024]="";
+ volatile uint16_t *num_arry=NULL;
+ //volatile uint16_t *p_num_arry;
+ int i;
+ //unsigned int stick_base_add=0;
+ //uint32_t ddr_wr_8_16bit_on_32reg(uint32_t base_addr,uint32_t size,uint32_t offset_index,uint32_t value)
+
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_G12A_0)&0xffff);
+ //num_arry = (uint16_t *)(uint64_t )(sticky_reg_base_add);
+ //num_arry=p_num_arry;
+ for (i = 0; i < 64*4; i++) {
+ num_arry[i]=ddr_rd_8_16bit_on_32reg(sticky_reg_base_add,8,i);
+ if((i==0)||(i==32)||(i==(32+10*3))||(i==(32+10*3+16*3))||(i==(32+10*3+16*3+16*3)))
+ {
+ printf("\n numarry[%d]" ,i);
+ }
+ printf(" %d ",num_arry[i]);
+ }
+
+ /*
+ #define TEST_ARG_1_CMD0 1
+ //#define TEST_ARG_1_CMD1 1
+ #define TEST_ARG_2_STEP 2
+ #define TEST_ARG_3_FREQ 3
+ #define TEST_ARG_4_STEP_STATUS 4
+ #define TEST_ARG_5_BOOT_TIMES 5
+ #define TEST_ARG_6_LCDLR_TEMP_COUNT 6
+ #define TEST_ARG_7_DMC_STICKY_MAGIC 7
+ */
+
+ uint16_t test_left_max_init_value =32;
+ uint16_t test_right_max_init_value =32;
+ uint16_t test_boot_times =0;
+ uint16_t test_ddr_frequency =0;
+ //uint16_t temp_sub_value_a =0;
+ /*
+ uint16_t test_arg_1_cmd0 =1; //master cmd
+ uint16_t test_arg_1_cmd1 =0; //min cmd
+ uint16_t test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ uint16_t test_arg_3_freq =0;
+ uint16_t test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ test_arg_0_cmd0=num_arry[0];
+ test_arg_1_cmd1=num_arry[1];
+ test_arg_2_step=num_arry[2];
+ test_arg_3_freq=num_arry[3];
+ test_arg_4_step_status=num_arry[4];
+ //boot_times=num_arry[5];
+ //lcdlr_temp_count=num_arry[6];
+ */
+ printf("\nTEST_ARG_0_DMC_STICKY_MAGIC==0x%08x\n",num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]);
+ printf("\nTEST_ARG_1_CMD0==0x%08x\n",num_arry[TEST_ARG_1_CMD0]);
+ printf("TEST_ARG_2_STEP==0x%08x\n",num_arry[TEST_ARG_2_STEP]);
+ printf("TEST_ARG_3_ALL_TOGHTER==0x%08x\n",num_arry[TEST_ARG_3_ALL_TOGHTER]);
+ printf("TEST_ARG_FREQ_NIBBLE_L==0x%08x\n",num_arry[TEST_ARG_FREQ_NIBBLE_L]);
+ printf("TEST_ARG_FREQ_NIBBLE_H==0x%08x\n",num_arry[TEST_ARG_FREQ_NIBBLE_H]);
+ printf("TEST_ARG_BOOT_TIMES_L==0x%08x\n",num_arry[TEST_ARG_BOOT_TIMES_L]);
+ printf("TEST_ARG_BOOT_TIMES_H==0x%08x\n",num_arry[TEST_ARG_BOOT_TIMES_H]);
+ printf("TEST_ARG_ERROR_FLAG==0x%08x\n",num_arry[TEST_ARG_ERROR_FLAG]);
+
+ printf("TEST_ARG_FREQ==%dM\n",(num_arry[TEST_ARG_FREQ_NIBBLE_H]<<8)|(num_arry[TEST_ARG_FREQ_NIBBLE_L]<<0));
+ printf("TEST_ARG_BOOT_TIMES==%d\n",(num_arry[TEST_ARG_BOOT_TIMES_H]<<8)|(num_arry[TEST_ARG_BOOT_TIMES_L]<<0));
+ test_boot_times=(num_arry[TEST_ARG_BOOT_TIMES_H]<<8)|(num_arry[TEST_ARG_BOOT_TIMES_L]<<0);
+ test_ddr_frequency=(num_arry[TEST_ARG_FREQ_NIBBLE_H]<<8)|(num_arry[TEST_ARG_FREQ_NIBBLE_L]<<0);
+ if((num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]==(DMC_STICKY_UBOOT_WINDOW_MAGIC_1&0xff))&&
+ (num_arry[TEST_ARG_1_CMD0]==(DMC_STICKY_UBOOT_WINDOW_MAGIC_1&0xff)) ) //for check magic number make sume enter test command
+ {
+ //num_arry[TEST_ARG_5_BOOT_TIMES]++;
+ test_boot_times++;
+ num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
+ num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
+
+ if( test_ddr_frequency!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_ddr_frequency);
+ sprintf(str,"d2pll %d",test_ddr_frequency);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ else
+ {
+ test_boot_times=0;
+ num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
+ num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
+ num_arry[TEST_ARG_2_STEP]=0;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
+ }
+ printf("test_sticky is not magic nummber,boot times==%d\n",test_boot_times);
+
+ //if(config_register==1)
+ {
+ wr_reg((sticky_reg_base_add+TEST_ARG_CS0_TEST_START_INDEX), cs0_test_start);
+ wr_reg((sticky_reg_base_add+TEST_ARG_CS0_TEST_SIZE_INDEX), cs0_test_size);
+ wr_reg((sticky_reg_base_add+TEST_ARG_CS1_TEST_START_INDEX), cs1_test_start);
+ wr_reg((sticky_reg_base_add+TEST_ARG_CS1_TEST_SIZE_INDEX), cs1_test_size);
+ {
+ num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX]=watchdog_time_s&0xff;
+ num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1]=(watchdog_time_s>>8)&0xff;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_WATCHDOG_TIME_SIZE_INDEX,num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,(TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1),num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1]);
+ }
+ num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX]=test_index_enable;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_TEST_INDEX_ENALBE_INDEX,num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX]);
+ if (config_register == 1)
+ {
+ num_arry[TEST_ARG_2_STEP]=0;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
+ }
+ num_arry[TEST_ARG_3_ALL_TOGHTER]=all_toghter_enable;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_3_ALL_TOGHTER,num_arry[TEST_ARG_3_ALL_TOGHTER]);
+ }
+
+ if(( num_arry[TEST_ARG_2_STEP])==0)
+ {
+ {
+ num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]=DMC_STICKY_UBOOT_WINDOW_MAGIC_1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_0_DMC_STICKY_MAGIC,num_arry[TEST_ARG_0_DMC_STICKY_MAGIC]);
+ num_arry[TEST_ARG_1_CMD0]=DMC_STICKY_UBOOT_WINDOW_MAGIC_1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_1_CMD0,num_arry[TEST_ARG_1_CMD0]);
+ num_arry[TEST_ARG_2_STEP]=1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP,num_arry[TEST_ARG_2_STEP]);
+ {
+ test_boot_times=0;
+ num_arry[TEST_ARG_BOOT_TIMES_L]=test_boot_times&0xff;
+ num_arry[TEST_ARG_BOOT_TIMES_H]=(test_boot_times>>8)&0xff;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_L,num_arry[TEST_ARG_BOOT_TIMES_L]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_BOOT_TIMES_H,num_arry[TEST_ARG_BOOT_TIMES_H]);
+ }
+ {
+ test_ddr_frequency=global_ddr_clk;
+ num_arry[TEST_ARG_FREQ_NIBBLE_L]=test_ddr_frequency&0xff;
+ num_arry[TEST_ARG_FREQ_NIBBLE_H]=(test_ddr_frequency>>8)&0xff;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_FREQ_NIBBLE_L,num_arry[TEST_ARG_FREQ_NIBBLE_L]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_FREQ_NIBBLE_H,num_arry[TEST_ARG_FREQ_NIBBLE_H]);
+ }
+
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_ERROR_FLAG,num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+
+
+ for (nibble_step = 0; nibble_step < 72; nibble_step++)
+ {
+ //if(lane_step%2)
+ {
+ //num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_ORG]=0xffff;
+ test_left_max_init_value=16;
+ test_right_max_init_value=16;
+ if(nibble_step<10)
+ {
+ test_left_max_init_value=32;
+ test_right_max_init_value=32;
+ }
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN]=test_left_max_init_value;
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX]=test_right_max_init_value;
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS]=0;//0
+ //ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,i,num_arry[i]);
+ }
+
+ {
+ if (nibble_step<32)
+ {
+ if(((nibble_mask[0])>>nibble_step)&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ else if (nibble_step<64)
+ {
+ if(((nibble_mask[1])>>(nibble_step-32))&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ else if (nibble_step<96)
+ {
+ if(((nibble_mask[2])>>(nibble_step-64))&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ if(all_toghter_enable)
+ {
+ if((nibble_step==0)||(nibble_step==10)||(nibble_step==(10+16)))
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=0;
+ else
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ }
+ //num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS]=0xffff;//0
+ }
+
+ {
+ //printf("..num_arry[TEST_ARG_1_CMD0]=%d\n",num_arry[TEST_ARG_1_CMD0]);
+ for (i = TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE; i < 72*TEST_ARG_NIBBLE_WIDTH_BYTE; i++) {
+ // num_arry[i]=0;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,i,num_arry[i]);
+ // ddr_wr_16bit_on_32reg((sticky_reg_base_add+(i<<1)),num_arry[i]);
+ // printf("num_arry[0x%08x] ==0x%08x\n",i,num_arry[i]);
+ }
+
+ num_arry[TEST_ARG_2_STEP]=1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
+ }
+
+ }
+
+if (all_toghter_enable)
+{
+ for (nibble_step = 0; nibble_step < 72; nibble_step++)
+ {
+ if ((nibble_step == 0) || (nibble_step == 10) || (nibble_step == (10+16)))
+ {
+ //num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=0;
+ }
+ else
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+nibble_step*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+}
+
+if(config_register==1)
+{
+ num_arry[TEST_ARG_2_STEP]=0;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
+}
+
+if(( num_arry[TEST_ARG_2_STEP]))
+{
+for(test_index=num_arry[TEST_ARG_2_STEP];test_index<test_index_max ;test_index++ )
+{
+ printf("\ntest_index=%d\n",test_index);
+ if((((test_index_enable)>>(test_index-1))&1)==0)
+ {
+ num_arry[TEST_ARG_2_STEP]=((num_arry[TEST_ARG_2_STEP])+1);//why can not use ++
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
+ continue;
+ }
+ {
+ if(test_index==DMC_TEST_WINDOW_INDEX_ATXDLY)
+ {
+ nibble_save_offset=0;
+ nibble_max=10;
+ nibble_mask[0]= 0x30;
+ if((dram_type==CONFIG_DDR_TYPE_LPDDR3))
+ {
+ nibble_mask[0]= 0x3e3;
+ }
+ if((dram_type==CONFIG_DDR_TYPE_LPDDR4))
+ {
+ nibble_mask[0]= 0x273;
+ if((channel_mode==CONFIG_DDR0_32BIT_RANK01_CH0))
+ nibble_mask[0]= 0x3f3;
+ }
+ test_left_max_init_value=64;
+ test_right_max_init_value=64;
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
+ {
+ nibble_save_offset=10;
+ nibble_max=16;
+ if((cs1_test_size==0))
+ {
+ nibble_mask[0]= 0xff00;
+ }
+ test_left_max_init_value=16;
+ test_right_max_init_value=16;
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_RXCLKDLY)
+ {
+ nibble_save_offset=(10)+(16);
+ if((cs1_test_size==0))
+ {
+ nibble_mask[0]= 0xff00;
+ }
+ nibble_max=16;
+ test_left_max_init_value=16;
+ test_right_max_init_value=16;
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_TXDQDLY)
+ {
+ nibble_save_offset=0;
+ nibble_max=72;
+ if((cs1_test_size==0))
+ {
+ nibble_mask[1]= 0xfffffff0;
+ nibble_mask[2]= 0xffffffff;
+ }
+ test_left_max_init_value=16;
+ test_right_max_init_value=16;
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_RXPBDLY)
+ {
+ nibble_save_offset=0;
+ nibble_max=72;
+ if((cs1_test_size==0))
+ {
+ nibble_mask[1]= 0xfffffff0;
+ nibble_mask[2]= 0xffffffff;
+ }
+
+ test_left_max_init_value=64;
+ test_right_max_init_value=64;}
+ //nibble_max=8;//
+ // if(nibble_max>30) can not over sticky register size
+ // nibble_max=30;
+ for ((nibble_step=0);(nibble_step<nibble_max);(nibble_step++))
+ {
+ if (nibble_step<32)
+ {
+ if(((nibble_mask[0])>>nibble_step)&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ else if (nibble_step<64)
+ {
+ if(((nibble_mask[1])>>(nibble_step-32))&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ else if (nibble_step<96)
+ {
+ if(((nibble_mask[2])>>(nibble_step-64))&1)
+ num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+(nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE+LCD_BDLR_STATUS]=4;
+ }
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ }
+ }
+
+{
+ for ((nibble_step=0);(nibble_step<nibble_max);(nibble_step++))
+ {
+ if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==4)
+ continue;
+ printf("nibble_step ==%d\n",nibble_step);
+
+ if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
+ {
+ if(nibble_step%2)
+ {
+ //nibble_save_offset
+ //num_arry[TEST_ARG_2_STEP]=1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step-1+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ //nibble_step++;
+ continue;
+ }
+ }
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ if(test_index==DMC_TEST_WINDOW_INDEX_ATXDLY)
+ {
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ }
+
+ if(test_index==DMC_TEST_WINDOW_INDEX_TXDQSDLY)
+ {
+ if(nibble_step>7)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ }
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_RXCLKDLY)
+ {
+ if(nibble_step>7)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ }
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_TXDQDLY)
+ {
+ if(nibble_step>35)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ }
+ }
+ if(test_index==DMC_TEST_WINDOW_INDEX_RXPBDLY)
+ {
+ if(nibble_step>35)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ }
+ }
+ {
+ if (nibble_step<32)
+ {
+ nibble_mask[0]=((0xffffffff)&(~(1<<nibble_step)));
+ nibble_mask[1]=((0xffffffff));
+ nibble_mask[2]=((0xffffffff));
+ }
+ else if (nibble_step<64)
+ {
+ nibble_mask[0]=((0xffffffff));
+ nibble_mask[1]=((0xffffffff)&(~(1<<(nibble_step-32))));
+ nibble_mask[2]=((0xffffffff));
+ }
+ else if (nibble_step<96)
+ {
+ nibble_mask[0]=((0xffffffff));
+ nibble_mask[1]=((0xffffffff));
+ nibble_mask[2]=((0xffffffff)&(~(1<<(nibble_step-64))));
+ }
+ }
+ if (all_toghter_enable)
+ {
+ if (test_index == DMC_TEST_WINDOW_INDEX_ATXDLY)
+ {
+ nibble_save_offset=0;
+ nibble_max=10;
+ nibble_mask[0]= 0x30;
+ nibble_mask[1]= 0;
+ nibble_mask[2]= 0;
+ if ((dram_type == CONFIG_DDR_TYPE_LPDDR3))
+ {
+ nibble_mask[0]= 0x3e3;
+ }
+ if ((dram_type == CONFIG_DDR_TYPE_LPDDR4))
+ {
+ nibble_mask[0]= 0x273;
+ if ((channel_mode == CONFIG_DDR0_32BIT_RANK01_CH0))
+ nibble_mask[0]= 0x3f3;
+ }
+ }
+ else
+ {
+ nibble_mask[0]= 0;
+ nibble_mask[1]= 0;
+ nibble_mask[2]= 0;
+ }
+ }
+
+ ddr_test_watchdog_enable(watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",watchdog_time_s);
+ if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0xffff)
+ ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0)
+ ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==1) )
+ {
+ printf("\nnibble_step ==%d ", nibble_step);
+ if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0xffff)
+ ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==0))
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+
+ if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]==0)
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ }
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]=
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]-1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
+ }
+
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+
+ //if(all_toghter_enable)
+ // sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_LEFT,
+ // num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
+ //else
+ sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_LEFT,
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
+ printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (all_toghter_enable && cs1_test_size)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ if(temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ //
+ if(!enable_kernel_test)
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_enable(kernel_watchdog_s); //s
+ printf("\nenable %ds watchdog \n",kernel_watchdog_s);
+ run_command("run storeboot",0);
+ }
+ /*
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ */
+ }
+ }
+ else if (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==1)
+ {//go on find left edge
+
+ if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]==0)
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ }
+
+ if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_PASS)
+ {
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ }
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+ run_command("reset",0);
+ }
+ if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_FAIL)
+ {
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]=
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]-1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]);
+ }
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+ sprintf(buf, "0x%08x", ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
+ printf( "%s", buf);
+ // if(all_toghter_enable)
+ // sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_LEFT,
+ // ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
+ // else
+ sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_LEFT,
+ ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)]));
+ printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (all_toghter_enable && cs1_test_size)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ if(temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ //
+ if(!enable_kernel_test)
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_enable(kernel_watchdog_s); //s
+ printf("\nenable %ds watchdog \n",kernel_watchdog_s);
+ run_command("run storeboot",0);
+ }
+ /*
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ */
+ }
+ }
+ }
+ // run_command("reset",0);
+ }
+
+ if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2)||
+ (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==3))
+ {
+ printf("\nnibble_step ==%d ", nibble_step);
+ if((num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2)
+ ||(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==2))
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=3;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+
+ if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]==0)
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ }
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]=
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]-1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
+ }
+
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+ // if(all_toghter_enable)
+ // sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_RIGHT,
+ // num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
+ // else
+ sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_RIGHT,
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
+ printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (all_toghter_enable && cs1_test_size)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ // temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ // temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if(temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ //
+ if(!enable_kernel_test)
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_enable(kernel_watchdog_s); //s
+ printf("\nenable %ds watchdog \n",kernel_watchdog_s);
+ run_command("run storeboot",0);
+ }
+ /*
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ */
+ }
+ }
+ else if (num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]==3)
+ {//go on find left edge
+ if(num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]==0)
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ }
+
+ if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_PASS)
+ {
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=4;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ }
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_NULL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+ run_command("reset",0);
+ }
+ if((num_arry[TEST_ARG_ERROR_FLAG])==TEST_ARG_ERROR_FLAG_FAIL)
+ {
+ {
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]=
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]-1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]);
+ }
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_FAIL;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ }
+ sprintf(buf, "0x%08x", ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]));
+ printf( "%s", buf);
+ // if(all_toghter_enable)
+ // sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,0,0,0,DDR_PARAMETER_RIGHT,
+ // ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]));
+ // else
+ sprintf(str,"ddr_g12_offset_data %d 0x%08x 0x%08x 0x%08x %d %d",test_index,nibble_mask[0],nibble_mask[1],nibble_mask[2],DDR_PARAMETER_RIGHT,
+ ( num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)]));
+ printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if (all_toghter_enable && cs1_test_size)
+ {
+ test_start_addr=cs1_test_start;
+ ddr_test_size=cs1_test_size;
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ test_start_addr=cs0_test_start;
+ ddr_test_size=cs0_test_size;
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ //temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ if(temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ if(!enable_kernel_test)
+ {
+ num_arry[TEST_ARG_ERROR_FLAG]=TEST_ARG_ERROR_FLAG_PASS;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ TEST_ARG_ERROR_FLAG,
+ num_arry[TEST_ARG_ERROR_FLAG]);
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_enable(kernel_watchdog_s); //s
+ printf("\nenable %ds watchdog \n",kernel_watchdog_s);
+ run_command("run storeboot",0);
+ }
+
+ /*
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]=2;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,
+ (TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS),
+ num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_STATUS)]);
+ run_command("reset",0);
+ */
+ }
+ }
+ }
+ // run_command("reset",0);
+ }
+
+ ddr_test_watchdog_disable(); //s
+ {
+ printf("close watchdog\n");
+ }
+ }
+
+ printf("11num_arry[TEST_ARG_2_STEP]==%d\n",num_arry[TEST_ARG_2_STEP]);
+ num_arry[TEST_ARG_2_STEP]=(num_arry[TEST_ARG_2_STEP])+1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
+ printf("22num_arry[TEST_ARG_2_STEP]==%d\n",num_arry[TEST_ARG_2_STEP]);
+ //}
+
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+ //}
+ //for(test_index=1;test_index<test_index_max ;test_index++ )
+ {
+ unsigned int ui_1_32_100step= 0;
+ unsigned int bdlr_100step= 0;
+ ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
+ bdlr_100step=get_bdlr_100step(global_ddr_clk);
+ //if((((test_index_enable)>>(test_index-1))&1)==0)
+
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,bdlr_100step=%d ps,ui_1_32_100step=%d ps,\n",0,0,global_ddr_clk,
+ bdlr_100step,ui_1_32_100step);
+
+ printf("\n test result index==");
+ printf("%08d",test_index);
+
+ if (test_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
+ printf(" ac window:");
+ printf(" step_size ps==");
+ printf("%08d",ui_1_32_100step);
+ printf("/100 ps ");
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
+ printf(" txdqs window:");
+ printf(" step_size ps==");
+ printf("%08d",ui_1_32_100step);
+ printf("/100 ps ");
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
+ printf(" rx_clk_window:");
+ printf(" step_size ps==");
+ printf("%08d",ui_1_32_100step);
+ printf("/100 ps ");
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
+ printf(" tx_bit_dq_window:");
+ printf(" step_size ps==");
+ printf("%08d",ui_1_32_100step);
+ printf("/100 ps ");
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
+ printf(" rx_bit_dq_window");
+ printf(" step_size ps==");
+ printf("%08d",bdlr_100step);//480ps
+ printf("/100 ps ");
+ }
+ printf("ddr clk frequency : ");
+ printf("%08d",(global_ddr_clk));
+ printf("Mhz ");
+ printf(string_print_flag);
+ printf("index org min max left right dec vref_range vref_count");
+ printf(string_print_flag);
+
+ char delay_left_margin=0;
+ char delay_right_margin=0;
+ if (all_toghter_enable == 1)
+ {
+ nibble_max=1;
+ }
+ for ( nibble_step=0;nibble_step<nibble_max;nibble_step++)
+ {
+ //serial_put_dec_out_align(delay_martix[count].add_index,8);
+ printf("%08d",nibble_step);
+ printf(" ");
+ printf("%08d",0);
+ //serial_puts(" ");
+ //if ((test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) )
+ {
+ {
+ printf(" ");
+ printf("%08d",0//num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN]
+ );
+ }
+ }
+ {
+ {
+ printf(" ");
+ printf("%08d",0//num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]
+ );
+ }
+ }
+
+ // delay_left_margin=((num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]>num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN])?
+ // (num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]-num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MIN]):0);
+ // delay_right_margin=((num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]>num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG])?
+ // (num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_MAX]-num_arry[TEST_ARG_NIBBLE_SAVE_OFFSET+nibble_step*TEST_ARG_NIBBLE_WIDTH+LCD_BDLR_ORG]):0);
+ delay_left_margin=num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MIN)];
+ delay_right_margin=num_arry[(TEST_ARG_NIBBLE_SAVE_OFFSET_BYTE+((nibble_step+nibble_save_offset)*TEST_ARG_NIBBLE_WIDTH_BYTE)+LCD_BDLR_MAX)];
+ printf(" ");
+ printf("%08d",delay_left_margin);
+
+ //serial_put_dec_out_align((delay_martix[count].delay_org>delay_martix[count].delay_min)?(delay_martix[count].delay_org-delay_martix[count].delay_min):0,8);
+ printf(" ");
+ printf("%08d",delay_right_margin);
+ //serial_put_dec_out_align((delay_martix[count].delay_max>delay_martix[count].delay_org)?(delay_martix[count].delay_max-delay_martix[count].delay_org):0,8);
+ printf(" ");
+ printf("%08d",0);
+ printf(" ");
+ printf("%08d",0);
+ printf(" 2d-eye"); //p_dev->cur_type
+ printf(" dramtype ");
+ printf("%08d",0);
+ printf(" ");
+ printf("%08d",(global_ddr_clk));
+ printf(" M bdl ");
+ printf("%08d",bdlr_100step);//480ps
+ printf(" /100 ps ");
+ printf("1/32step== ");
+ printf("%08d",ui_1_32_100step);
+ printf(" /100 ps ");
+ //serial_puts("bit_init_value ");
+ //serial_put_dec_out_align((p_dev->ddr_gloabl_message.stick_dmc_ddr_window_test_read_per_bit_init_value),4);
+ //if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY){
+ //serial_puts("txdqsdly_second_tune_min_value ");
+ //serial_put_dec_out_align(txdqsdly_second_tune_value[count],4);
+ //}
+ printf(string_print_flag);
+ //serial_puts("\n");
+ }
+ }
+}
+}
+}
+
+ if(config_register==1)
+ {
+ if(num_arry[TEST_ARG_2_STEP]==0)
+ {
+ num_arry[TEST_ARG_2_STEP]=1;
+ ddr_wr_8_16bit_on_32reg(sticky_reg_base_add,8,TEST_ARG_2_STEP, num_arry[TEST_ARG_2_STEP]);
+ }
+ }
+
+ if ((enable_kernel_test) && (num_arry[TEST_ARG_2_STEP]>1))
+ run_command("run storeboot",0);
+ return reg_value;
+}
+#else
+int do_ddr_test_dqs_window_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnterddr_test_dqs_window function\n");
+ printf("\nddr_test_cmd 0x27 a 0 0x80000 ns lane_disable add_test_size --- watchdog should >15s\n");
+ unsigned int channel_a_en = 0;
+ unsigned int channel_b_en = 0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_base_adj=0;
+
+ unsigned int lane_step= 0;
+ unsigned int reg_value= 0;
+ //int argc2;
+ //char * argv2[30];
+ char *endp;
+ char *buf;
+ buf="";
+
+ if (argc == 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ else if ((strcmp(argv[1], "b") == 0)||(strcmp(argv[1], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+
+
+ }
+ if (argc > 2)
+ {
+ if ((strcmp(argv[1], "a") == 0) || (strcmp(argv[1], "A") == 0) || (strcmp(argv[2], "a") == 0) || (strcmp(argv[2], "A") == 0))
+
+ {channel_a_en = 1;
+ }
+ if ((strcmp(argv[1], "b") == 0) || (strcmp(argv[1], "B") == 0) || (strcmp(argv[2], "b") == 0) || (strcmp(argv[2], "B") == 0))
+
+ {channel_b_en = 1;
+ }
+ }
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ if (argc >3) {
+ ddr_test_size = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+
+
+
+ if (argc >4) {
+ watchdog_time_s = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 20;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+
+ unsigned int lane_disable= 0;
+
+ if (argc >5) {
+ lane_disable = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ unsigned int add_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ if (argc >6) {
+ add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ add_test_size= ddr_test_size;
+ }
+ }
+ printf("add_test_size==0x%08x\n",add_test_size);
+ //argc2=5;
+ //for(i = 1;i<(argc);i++)
+ {
+ //argv2[i-1]=argv[i];
+ }
+
+ //argv2[0]=argv[1];
+ //argv2[1]=argv[2];
+ //argv2[2]=argv[3];
+ //#include <stdio.h>
+ // unsigned int wr_adj_per[24] ;
+ //if(1)
+
+ printf("\ntest use uboot sticky register\n");
+
+ //DMC_STICKY_0
+
+
+ char str[1024]="";
+ char str_temp1[1024]="";
+ char str_temp2[1024]="";
+ //const char *s;
+ unsigned int str_to_numarry[48];
+ //str_buf = (char *)malloc(sizeof(char)*1024);
+
+ unsigned int *num_arry;
+ //unsigned int *num_arry_temp;
+ //unsigned int *num_arry_lane0=NULL;
+ //unsigned int *num_arry_lane1=NULL;
+ //unsigned int *num_arry_lane2=NULL;
+ //unsigned int *num_arry_lane3=NULL;
+ //char *name_lane0;
+ //char *name_lane1;
+ //char *name_lane2;
+ //char *name_lane3;
+ num_arry = (unsigned int *)(&str_to_numarry);
+ int i;
+ //char *varname; char *env_lcdlr_temp_count;
+ unsigned int lcdlr_temp_count=0;
+ // const char *temp_s;const char *temp_s1;
+ // int value=0;
+
+ //#define DMC_STICKY_0 ((0x0000 << 2) + 0xff639800)
+ //#define DMC_STICKY_MAGIC_0 0x12345678
+ //#define DMC_STICKY_MAGIC_1 0xabcdbead
+ //unsigned int dmc_sticky[64];
+ //unsigned int sticky_reg_base_add=0;
+ //varname="env_ddrtest_data_lane";
+ //name_lane0="ddr_test_data_lane0";
+ //name_lane1="ddr_test_data_lane1";
+ //name_lane2="ddr_test_data_lane2";
+ //name_lane3="ddr_test_data_lane3";
+ //env_lcdlr_temp_count="lcdlr_temp_count";
+
+
+ {//i=0;
+ //while(s_temp)
+ {
+
+
+
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ for (i = 0; i < 63; i++) {
+ dmc_sticky[i]=rd_reg(sticky_reg_base_add+(i<<2));
+ //printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+
+ for (i = 0; i < 48; i++) {
+ num_arry[i]=dmc_sticky[i];
+ printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+
+ //lcdlr_temp_count=num_arry[5];
+
+
+
+ }
+ }
+
+
+
+
+ ///*
+ //if(1)
+
+ unsigned int test_arg_0_cmd0 =0; //master cmd
+ unsigned int test_arg_1_cmd1 =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ // unsigned int lane_step= 0;
+ //char str[24];
+ unsigned int boot_times=0;
+
+ test_arg_0_cmd0=num_arry[0];
+ test_arg_1_cmd1=num_arry[1];
+ test_arg_2_step=num_arry[2];
+ test_arg_3_freq=num_arry[3];
+ test_arg_4_step_status=num_arry[4];
+ boot_times=num_arry[5];
+ lcdlr_temp_count=num_arry[6];
+ printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
+ printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5 boottimes=%d\n",num_arry[5]);
+ printf("test_arg_6 lcdlr_temp_count=%d\n",num_arry[6]);
+ printf("test_arg_7=%d\n",num_arry[7]);
+
+ if((num_arry[7]==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {boot_times++;
+
+ }
+ else
+ {boot_times=0;
+ printf("test_sticky is not magic nummber,boot times==%d\n",boot_times);
+ // writel(DMC_STICKY_MAGIC_0,(sticky_reg_base_add+(6<<2)));
+ writel(DMC_STICKY_MAGIC_1,(sticky_reg_base_add+(7<<2)));
+ test_arg_2_step=0;
+ num_arry[6]=0;
+ lcdlr_temp_count=0;
+ //return 1;
+ }
+ num_arry[5]=boot_times;
+
+ writel(num_arry[5],(sticky_reg_base_add+(5<<2)));
+
+ //if(test_arg_2_step)
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+ test_arg_0_cmd0=0x22;
+ test_arg_1_cmd1=0;
+ test_arg_2_step=1;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ lcdlr_temp_count=0;
+ num_arry[0]=test_arg_0_cmd0;
+ num_arry[1]=test_arg_1_cmd1;
+ num_arry[2]=test_arg_2_step;
+ num_arry[3]=test_arg_3_freq;
+ num_arry[4]=test_arg_4_step_status;
+ num_arry[5]=boot_times;
+ lcdlr_temp_count=num_arry[6];
+ num_arry[6]=lcdlr_temp_count;
+ num_arry[7]=DMC_STICKY_MAGIC_1;
+ for (i = 8; i < 48; i++) {
+ num_arry[i]=0;
+ }
+
+ for (lane_step = 0; lane_step < 4; lane_step++)
+ {
+ //if(lane_step%2)
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0xff);
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))>>8)&0xff);
+#else
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0x1ff);
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=(((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff);
+
+ printf("lcdlr1 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1),
+ ((readl((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1))&0x1ff),dq_lcd_bdl_value_wdq_org_a[lane_step]);
+ printf("lcdlr3 %d %08x,%08x,%08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3),
+ (((readl((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ DDR0_PUB_DX0LCDLR3)
+ +DDR0_PUB_DX0LCDLR3))>>0)&0x1ff),dq_lcd_bdl_value_rdqs_org_a[lane_step]);
+#endif
+
+ //printf("lcdlr1 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR1-
+ //DDR0_PUB_DX0LCDLR1)
+ //+DDR0_PUB_DX0LCDLR1));
+ //printf("lcdlr3 %d %08x\n", lane_step,((lane_step)*(DDR0_PUB_DX1LCDLR3-
+ //DDR0_PUB_DX0LCDLR3)
+ //+DDR0_PUB_DX0LCDLR3));
+ //dq_lcd_bdl_value_rdqs_org_a[lane_step]=0;
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ }
+ //else
+ {
+ //dq_lcd_bdl_value_wdq_org_a[lane_step]=0;
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=0xffff;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ }
+ }
+
+ {
+ dq_lcd_bdl_value_aclcdlr_org_a=((readl(DDR0_PUB_ACLCDLR))&ACLCDLR_MAX);
+ dq_lcd_bdl_value_aclcdlr_min_a=0xffff;
+ dq_lcd_bdl_value_aclcdlr_max_a=0xffff;
+ dq_lcd_bdl_value_aclcdlr_status_a=0;
+ dq_lcd_bdl_value_bdlr0_org_a=((readl(DDR0_PUB_ACBDLR0))&ACBDLR_MAX);
+ dq_lcd_bdl_value_bdlr0_min_a=0xffff;
+ dq_lcd_bdl_value_bdlr0_max_a=0xffff;
+ dq_lcd_bdl_value_bdlr0_status_a=0;
+ }
+
+
+
+#if 1 //( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ dq_lcd_bdl_value_wdq_status_a[0]=4;
+ dq_lcd_bdl_value_rdqs_status_a[0]=4;
+ }
+ if(lane_disable&0x2){
+ dq_lcd_bdl_value_wdq_status_a[1]=4;
+ dq_lcd_bdl_value_rdqs_status_a[1]=4;
+ }
+ if(lane_disable&0x4){
+ dq_lcd_bdl_value_wdq_status_a[2]=4;
+ dq_lcd_bdl_value_rdqs_status_a[2]=4;
+ }
+ if(lane_disable&0x8){
+ dq_lcd_bdl_value_wdq_status_a[3]=4;
+ dq_lcd_bdl_value_rdqs_status_a[3]=4;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+ printf("dq_lcd_bdl_value_aclcdlr_status_a==%x\n",dq_lcd_bdl_value_aclcdlr_status_a);
+ }
+ if(lane_disable&0x20){
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+ printf("dq_lcd_bdl_value_bdlr0_status_a==%x\n",dq_lcd_bdl_value_bdlr0_status_a);
+
+ }
+ }
+
+ {
+ for (lane_step = 0; lane_step < 4; lane_step++)
+
+
+ {
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ }
+
+
+
+
+ lane_step=4;
+ {
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ }
+ }
+
+
+
+ }
+
+
+
+
+ for (i = 0; i < 48; i++) {
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ //setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+
+
+ }
+
+ test_arg_2_step++;
+ num_arry[2]=test_arg_2_step;
+ sprintf(str, "0x%08x", num_arry[0]);
+ printf("%d %d\n", 0,num_arry[0]);
+ for (i = 1; i < 48; i++) {
+ //num_arry[i]=0;
+ sprintf(str, "%s;0x%08x", str,num_arry[i]);
+ printf("%d %d\n", i,num_arry[i]);
+
+ }
+ //sprintf(str, "%lx", value);
+ printf("%s", str);
+ // setenv(varname, str);
+ //run_command("save",0);
+
+ for (i = 0; i < 48; i++) {
+
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+
+ for (i = 8; i < 48; i++) {
+ num_arry[i]=readl((sticky_reg_base_add+(i<<2)));
+ printf("ddr_test_data_num_%04d==%d\n",i,num_arry[i]);
+ }
+
+ ///*
+ {
+ for (lane_step = 0; lane_step < 4; lane_step++)
+ {
+ {
+ dq_lcd_bdl_value_wdq_org_a[lane_step]=num_arry[8+lane_step*4*2+0];
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=num_arry[8+lane_step*4*2+1];
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=num_arry[8+lane_step*4*2+2];
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=num_arry[8+lane_step*4*2+3];
+ }
+ {
+ dq_lcd_bdl_value_rdqs_org_a[lane_step]=num_arry[8+lane_step*4*2+4];
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=num_arry[8+lane_step*4*2+5];
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=num_arry[8+lane_step*4*2+6];
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=num_arry[8+lane_step*4*2+7];
+ }
+
+
+ }
+ lane_step=4;
+ {
+ dq_lcd_bdl_value_aclcdlr_org_a=num_arry[8+lane_step*4*2+0];
+ dq_lcd_bdl_value_aclcdlr_min_a=num_arry[8+lane_step*4*2+1];
+ dq_lcd_bdl_value_aclcdlr_max_a=num_arry[8+lane_step*4*2+2];
+ dq_lcd_bdl_value_aclcdlr_status_a=num_arry[8+lane_step*4*2+3];
+ dq_lcd_bdl_value_bdlr0_org_a=num_arry[8+lane_step*4*2+4];
+ dq_lcd_bdl_value_bdlr0_min_a=num_arry[8+lane_step*4*2+5];
+ dq_lcd_bdl_value_bdlr0_max_a=num_arry[8+lane_step*4*2+6];
+ dq_lcd_bdl_value_bdlr0_status_a=num_arry[8+lane_step*4*2+7];
+ }
+ }
+ //*/
+
+
+
+
+ if (channel_a_en)
+ {
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane a\n");
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ ddr_test_watchdog_enable(watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",watchdog_time_s);
+
+ /*
+ {
+ lcdlr_temp_count=dq_lcd_bdl_temp_reg_value;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ setenv(env_lcdlr_temp_count, buf);
+ run_command("save",0);
+ }
+ */
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
+ )
+ {
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_wdq_status_a[lane_step]==0))
+ { dq_lcd_bdl_value_wdq_status_a[lane_step]=1;
+ {
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+0),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
+
+ }
+ else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==1)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ //
+ // }
+ lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_wdq_min_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=2;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+1;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_wdq_status_a[lane_step]==2)||
+ (dq_lcd_bdl_value_wdq_status_a[lane_step]==3))
+ {
+ // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
+ // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ // num_to_env(varname,num_arry);
+ // run_command("reset",0);
+ // }
+
+ {
+ if(dq_lcd_bdl_value_wdq_status_a[lane_step]==2)
+ { dq_lcd_bdl_value_wdq_status_a[lane_step]=3;
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+0),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
+
+ }
+ else if (dq_lcd_bdl_value_wdq_status_a[lane_step]==3)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ //
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_wdq_max_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_wdq_status_a[lane_step]=4;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_wdq_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_wdq_status_a[lane_step];
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+2;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ run_command("reset",0);
+ }
+
+ }
+
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
+ )
+ {
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)
+ ||(dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ { dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ //i=6;
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+
+ }
+ else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_rdqs_min_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+5;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3))
+ {
+
+ {
+ if(dq_lcd_bdl_value_rdqs_status_a[lane_step]==2)
+ {
+
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d 1",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
+
+ }
+ else if (dq_lcd_bdl_value_rdqs_status_a[lane_step]==3)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_rdqs_max_a[lane_step]=lcdlr_temp_count;
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=4;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ //ddr_udelay(1000000);
+ // num_to_env(varname,num_arry);
+
+ {
+ i=8+lane_step*8+6;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ run_command("reset",0);
+ }
+
+ }
+
+ /*
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+ */
+
+
+ ddr_test_watchdog_disable(); //s
+ {printf("close watchdog\n");
+ }
+
+
+ }
+
+
+
+ }
+
+ if (channel_a_en)
+ {
+
+ //*(char *)(argv2[0])="a";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest lcdlr ac bdlr window lane a...\n");
+
+ {
+ ddr_test_watchdog_enable(watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",watchdog_time_s);
+ printf("\ndq_lcd_bdl_value_aclcdlr_status_a %d \n",dq_lcd_bdl_value_aclcdlr_status_a);
+ lane_step=4;
+ //env_lcdlr_temp_count="lcdlr_temp_count_a";
+ if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==0)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==1)
+ )
+ {
+ if((dq_lcd_bdl_value_aclcdlr_status_a>=0xffff)
+ ||(dq_lcd_bdl_value_aclcdlr_status_a==0))
+ { dq_lcd_bdl_value_aclcdlr_status_a=1;
+ {
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ i=8+lane_step*8+3;
+ printf("aclcdlr_status_a==0x%08x\n",num_arry[i]);
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+
+ }
+ printf("\n222test lcdlr ac bdlr window lane a...\n");
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ printf("\n333test lcdlr ac bdlr window lane a...\n");
+ //ddr_tune_aclcdlr_step
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 0),2);
+ printf("\nstr=%s\n",str);
+ printf("aclcdlr_status_a1==0x%08x\n",num_arry[i]);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_aclcdlr_status_a=2;
+
+ }
+ else if (dq_lcd_bdl_value_aclcdlr_status_a==1)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ //lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count=readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_aclcdlr_min_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_aclcdlr_status_a=2;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_aclcdlr_min_a;
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_wdq_max_a[lane_step];
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+1;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_aclcdlr_status_a==2)||
+ (dq_lcd_bdl_value_aclcdlr_status_a==3))
+ {
+ // if((dq_lcd_bdl_value_wdq_min_a[lane_step])==0xffff)
+ // {dq_lcd_bdl_value_wdq_status_a[lane_step]=0;
+ // num_to_env(varname,num_arry);
+ // run_command("reset",0);
+ // }
+
+ {
+ if(dq_lcd_bdl_value_aclcdlr_status_a==2)
+ { dq_lcd_bdl_value_aclcdlr_status_a=3;
+ {
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 0),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+
+ }
+ else if (dq_lcd_bdl_value_aclcdlr_status_a==3)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_aclcdlr_max_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_aclcdlr_status_a=4;
+ }
+
+ num_arry[8+lane_step*4*2+0]=dq_lcd_bdl_value_aclcdlr_org_a;
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_wdq_min_a[lane_step];
+ num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_aclcdlr_max_a;
+ num_arry[8+lane_step*4*2+3]=dq_lcd_bdl_value_aclcdlr_status_a;
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+2;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+3;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ run_command("reset",0);
+ }
+
+ }
+
+
+ if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==0)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==1)
+ )
+ {
+ if((dq_lcd_bdl_value_bdlr0_status_a==0xffff)
+ ||(dq_lcd_bdl_value_bdlr0_status_a==0))
+ { dq_lcd_bdl_value_bdlr0_status_a=1;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_bdlr0_status_a=2;
+
+ }
+ else if (dq_lcd_bdl_value_bdlr0_status_a==1)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_bdlr0_min_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_bdlr0_status_a=2;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_bdlr0_min_a;
+ //num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ //ddr_udelay(1000000);
+ //num_to_env(varname,num_arry);
+ {
+ i=8+lane_step*8+5;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_bdlr0_status_a==2)||
+ (dq_lcd_bdl_value_bdlr0_status_a==3))
+ {
+
+ {
+ if(dq_lcd_bdl_value_bdlr0_status_a==2)
+ {
+
+ dq_lcd_bdl_value_bdlr0_status_a=3;
+ {
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+ {
+ lcdlr_temp_count=0;
+ sprintf(buf, "0x%08x", lcdlr_temp_count);
+ printf( "%s", buf);
+ // setenv(env_lcdlr_temp_count, buf);
+ // run_command("save",0);
+ writel(num_arry[6],(sticky_reg_base_add+(6<<2)));
+ }
+
+ sprintf(str,"ddr_tune_aclcdlr_step a 0 0x%08x %d %d 1",add_test_size,( 1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ ddr_udelay(2000000);
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+
+ }
+ else if (dq_lcd_bdl_value_bdlr0_status_a==3)
+ {
+ // temp_s= getenv(env_lcdlr_temp_count);
+ // if(temp_s)
+ // {
+ // lcdlr_temp_count= simple_strtoull_ddr(temp_s, &endp, 0);
+ // }
+ lcdlr_temp_count= readl((sticky_reg_base_add+(6<<2)));
+ dq_lcd_bdl_value_bdlr0_max_a=lcdlr_temp_count;
+ dq_lcd_bdl_value_bdlr0_status_a=4;
+ }
+
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_bdlr0_org_a;
+ //num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_bdlr0_max_a;
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_bdlr0_status_a;
+ //ddr_udelay(1000000);
+ // num_to_env(varname,num_arry);
+
+ {
+ i=8+lane_step*8+6;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ //run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ i=8+lane_step*8+7;
+ sprintf(str_temp1,"ddr_test_data_num_%04d",i);
+ sprintf(str_temp2,"0x%08x",num_arry[i]);
+ // setenv(str_temp1, str_temp2);
+ // run_command("save",0);
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+ run_command("reset",0);
+ }
+
+ }
+
+ /*
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==0xffff)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==0))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=0;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),2);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=1;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ num_arry[8+lane_step*4*2+5]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ //num_arry[8+lane_step*4*2+2]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+
+ if((dq_lcd_bdl_value_rdqs_status_a[lane_step]==1)||
+ (dq_lcd_bdl_value_rdqs_status_a[lane_step]==2))
+ {dq_lcd_bdl_value_rdqs_status_a[lane_step]=2;
+ sprintf(str,"ddr_tune_dqs_step a 0 0x%08x %d %d",ddr_test_size,( lane_step*2+1),1);
+ printf("\nstr=%s\n",str);
+ //sprintf(str,"ddr_tune_dqs_step b 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ ddr_test_watchdog_clear();
+ run_command(str,0);
+ ddr_test_watchdog_clear();
+ dq_lcd_bdl_value_rdqs_status_a[lane_step]=3;
+ num_arry[8+lane_step*4*2+4]=dq_lcd_bdl_value_rdqs_org_a[lane_step];
+ //num_arry[8+lane_step*4*2+1]=dq_lcd_bdl_value_rdqs_min_a[lane_step];
+ num_arry[8+lane_step*4*2+6]=dq_lcd_bdl_value_rdqs_max_a[lane_step];
+ num_arry[8+lane_step*4*2+7]=dq_lcd_bdl_value_rdqs_status_a[lane_step];
+ num_to_env(varname,num_arry);
+ run_command("reset",0);
+ }
+ */
+
+
+ ddr_test_watchdog_disable(); //s
+ {printf("close watchdog\n");
+ }
+
+
+ }
+
+
+
+ }
+
+ if (channel_b_en)
+ {//*(char *)(argv2[0])="b";
+ // run_command("ddr_test_cmd 11 a 0 0x80000 ",0);
+ printf("\ntest dqs window lane b\n");
+ for ((lane_step=0);(lane_step<8);(lane_step++))
+ {
+ //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ sprintf(str,"ddr_tune_dqs_step b 0 0x%08x %d 1",ddr_test_size,( lane_step));
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+
+ }
+ }
+
+ unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+ if (channel_a_en)
+ {
+ acmdlr=((readl((DDR0_PUB_ACMDLR)))&ACLCDLR_MAX);
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_a[lane_step],
+ dq_lcd_bdl_value_wdq_min_a[lane_step],dq_lcd_bdl_value_wdq_max_a[lane_step],
+ dq_lcd_bdl_value_rdqs_org_a[lane_step],
+ dq_lcd_bdl_value_rdqs_min_a[lane_step],dq_lcd_bdl_value_rdqs_max_a[lane_step]);
+ }
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ dq_lcd_bdl_value_aclcdlr_org_a,
+ dq_lcd_bdl_value_aclcdlr_min_a,dq_lcd_bdl_value_aclcdlr_max_a,
+ dq_lcd_bdl_value_bdlr0_org_a,
+ dq_lcd_bdl_value_bdlr0_min_a,dq_lcd_bdl_value_bdlr0_max_a);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ dq_lcd_bdl_value_aclcdlr_org_a,
+ (((dq_lcd_bdl_value_aclcdlr_max_a-dq_lcd_bdl_value_aclcdlr_org_a)*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_aclcdlr_org_a-dq_lcd_bdl_value_aclcdlr_min_a)*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
+ 2*dq_lcd_bdl_value_aclcdlr_org_a));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ dq_lcd_bdl_value_bdlr0_org_a,
+ 0,
+ 0,
+ (((dq_lcd_bdl_value_bdlr0_org_a-dq_lcd_bdl_value_bdlr0_min_a)*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_bdlr0_max_a-dq_lcd_bdl_value_bdlr0_org_a)*delay_step_x100
+ )/100),
+
+ 100*(dq_lcd_bdl_value_aclcdlr_max_a+dq_lcd_bdl_value_aclcdlr_min_a)/(
+ 2*dq_lcd_bdl_value_bdlr0_org_a));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ dq_lcd_bdl_value_wdq_org_a[lane_step],
+ (((dq_lcd_bdl_value_wdq_max_a[lane_step]-dq_lcd_bdl_value_wdq_org_a[lane_step])*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_wdq_org_a[lane_step]-dq_lcd_bdl_value_wdq_min_a[lane_step])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(dq_lcd_bdl_value_wdq_max_a[lane_step]+dq_lcd_bdl_value_wdq_min_a[lane_step])/(
+ 2*dq_lcd_bdl_value_wdq_org_a[lane_step]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ dq_lcd_bdl_value_rdqs_org_a[lane_step],
+ 0,
+ 0,
+
+ (((dq_lcd_bdl_value_rdqs_org_a[lane_step]-dq_lcd_bdl_value_rdqs_min_a[lane_step])*delay_step_x100
+ )/100),
+ (((dq_lcd_bdl_value_rdqs_max_a[lane_step]-dq_lcd_bdl_value_rdqs_org_a[lane_step])*delay_step_x100
+ )/100),
+ 100*(dq_lcd_bdl_value_rdqs_max_a[lane_step]+dq_lcd_bdl_value_rdqs_min_a[lane_step])/(
+ 2*dq_lcd_bdl_value_rdqs_org_a[lane_step]));
+
+
+
+ }
+ }
+
+
+
+ if (channel_b_en)
+ {
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {;
+ }
+ }
+
+ return reg_value;
+}
+
+
+unsigned int do_ddr_uboot_window_init(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+ unsigned temp_count=0;
+ for(;temp_count<argc;temp_count++)
+ {
+ printf("arg[%d]==%s;\n",argc,argv[temp_count]);
+ }
+
+ if (argc >1) {
+ g_ddr_test_struct->ddr_data_source = simple_strtoull_ddr(argv[1], &endp, 16);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ g_ddr_test_struct->ddr_data_source = DDR_PARAMETER_SOURCE_FROM_DMC_STICKY;
+ }
+ }
+ if (argc >2) {
+ g_ddr_test_struct->ddr_data_source = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ g_ddr_test_struct->ddr_data_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+ /*
+ g_ddr_test_struct->ddr_data_source =
+ g_ddr_test_struct->ddr_data_test_size =
+ g_ddr_test_struct->ddr_address_test_size =
+ g_ddr_test_struct->ddr_test_watchdog_times_s =
+ g_ddr_test_struct->ddr_test_lane_disable =
+ g_ddr_test_struct->ddr_address_test_size =
+ g_ddr_test_struct->ddr_address_test_size =
+ */
+
+ return 1;
+}
+
+unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_index,unsigned int lcdlr_value,unsigned int read_write_flag )
+{
+ //char *endp;
+ unsigned read_value=0;
+
+ //return read_value;
+
+#if 1
+ unsigned reg_add=0;
+ {
+#if ( CONFIG_DDR_PHY<P_DDR_PHY_905X)
+ {
+ reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1);
+ if((data_index%2)==0)
+ {
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+ lcdlr_value=((readl(reg_add))&0xff);
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+ wr_reg(reg_add, ((readl(reg_add))&0xffffff00)|(lcdlr_value&0xff));
+ }
+ }
+ if((data_index%2)==1)
+ {
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+ lcdlr_value=(((readl(reg_add))>>8)&0xff);
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+ wr_reg(reg_add, ((readl(reg_add))&0xffff00ff)|((lcdlr_value&0xff)<<8));
+ }
+ }
+ }
+
+#else
+
+ if((data_index%2)==0)
+ {
+ reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR1);
+
+ }
+ if((data_index%2)==1)
+ {
+ reg_add=((data_index>>1)*(DDR0_PUB_DX1LCDLR1-
+ DDR0_PUB_DX0LCDLR1)
+ +DDR0_PUB_DX0LCDLR3);
+
+ }
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+ lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+ wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
+ }
+
+#endif
+ }
+
+
+
+ printf("lcdlr %d %08x,%08x\n", data_index,reg_add,
+ (readl(reg_add)));
+ read_value=lcdlr_value;
+
+ return read_value;
+
+#endif
+}
+unsigned int do_ddr_read_acmdlr(void )
+{
+
+ unsigned reg_value=0;
+#if ( CONFIG_DDR_PHY<=P_DDR_PHY_905X)
+ reg_value=(readl(DDR0_PUB_ACMDLR0));
+ reg_value=(reg_value>>16)&0x1ff;
+#endif
+ return reg_value;
+}
+unsigned int do_ddr_read_write_ddr_add_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
+{
+ unsigned reg_add=0;
+
+ if(add_index==0)
+ reg_add=(DDR0_PUB_ACLCDLR);
+ if(add_index==1)
+ reg_add=(DDR0_PUB_ACBDLR0);
+ {
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+ lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+ wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
+ }
+
+ }
+ printf("lcdlr %d %08x,%08x\n", add_index,reg_add,
+ (readl(reg_add)));
+ return lcdlr_value;
+}
+
+int do_ddr_uboot_window_use_source_quick_method(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ //setenv bootcmd "ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000"
+ printf("\nsetenv bootcmd ddr_test_cmd 0x32 2 6 20 0 0x100000 0x4000000 \n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+#define DDR_TEST_NULL 0
+#define DDR_TEST_PASS 1
+#define DDR_TEST_FAIL 2
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+
+ unsigned int address_test_watchdog_time_s=15;
+ unsigned int test_watchdog_time_s=15;
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ address_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=100;
+ unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ unsigned int lcdlr_min=0;
+ unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ char str[1024]="";
+
+ if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ ddr_test_data_array_max=64;
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int test_arg_0_ab_best_lcdlr_value =0; //best_lcdlr_value
+ unsigned int test_arg_1_test_error_flag =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_5_ab_edge_lcdlr_value =0;
+ unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_arg_7_magic_number =0;
+ unsigned int org_lcdlr_value_temp=0;
+ unsigned int acmdlr=0;
+ acmdlr=do_ddr_read_acmdlr();
+
+ test_arg_0_ab_best_lcdlr_value=num_array[0];
+ test_arg_1_test_error_flag=num_array[1];
+ test_arg_2_step=num_array[2];
+ test_arg_3_freq=num_array[3];
+ test_arg_4_step_status=num_array[4];
+ test_arg_5_ab_edge_lcdlr_value=num_array[5];
+ test_arg_6_lcdlr_temp_count=num_array[6];
+ test_arg_7_magic_number=num_array[7];
+ printf("test_arg_0_ab_best_lcdlr_value==%d\n",test_arg_0_ab_best_lcdlr_value);
+ printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
+ printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
+ printf("test_arg_7_magic_number=%d\n",num_array[7]);
+
+
+
+ if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {
+ }
+ else
+ {
+
+ test_arg_0_ab_best_lcdlr_value=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_2_step=0;
+ test_arg_6_lcdlr_temp_count=0;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ }
+ //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
+ num_array[0] = test_arg_0_ab_best_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+ test_arg_0_ab_best_lcdlr_value=0;
+ test_arg_1_test_error_flag=0;
+ test_arg_2_step=1;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_6_lcdlr_temp_count=lcdlr_min;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ num_array[0] = test_arg_0_ab_best_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ //for (temp_count = 8; temp_count< 48;temp_count++) {
+ // num_array[temp_count]=0;
+ //}
+
+ for (temp_count = 8; temp_count < (32+8); temp_count++) //data
+ {
+ //printf("1temp_count=%d\n",temp_count);
+
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //printf("2temp_count=%d\n",temp_count);
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ //temp_count=temp_count+4;
+ }
+
+
+
+ }
+
+ for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
+ {
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ }
+
+
+ }
+
+
+
+
+#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ num_array[8+3]=0xffff;
+ num_array[8+4+3]=0xffff;
+ }
+ if(lane_disable&0x2){
+ num_array[8+3+8]=0xffff;
+ num_array[8+4+3+8]=0xffff;
+ }
+ if(lane_disable&0x4){
+ num_array[8+3+8+8]=0xffff;
+ num_array[8+4+3+8+8]=0xffff;
+ }
+ if(lane_disable&0x8){
+ num_array[8+3+8+8+8]=0xffff;
+ num_array[8+4+3+8+8+8]=0xffff;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ num_array[8+3+8+8+8+8]=0xffff;
+ }
+ if(lane_disable&0x20){
+ num_array[8+4+3+8+8+8+8]=0xffff;
+
+ }
+ }
+
+
+ }
+
+
+
+
+ for (temp_count= 0; temp_count< 48;temp_count++) {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ test_arg_2_step++;
+ num_array[2]=test_arg_2_step;
+ for (temp_count = 1; temp_count < 48; temp_count++)
+ {
+ printf("%d %d\n", temp_count,num_array[temp_count]);
+ }
+ temp_count=2;
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ //for (i = 0; i < 48; i++) {
+
+ // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
+ //}
+
+
+ //for (i = 8; i < 48; i++) {
+ //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
+ //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
+ //}
+
+ ///*
+ unsigned int lane_step=0;
+
+ printf("\nstart loop test\n");
+
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+ if((num_array[(lane_step<<2)+3+8]<0x4))
+ {break;
+ }
+ }
+ printf("\nstart test lane_step =%d\n",lane_step);
+ if(lane_step<10)
+ {
+ if(lane_step<8)
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+ //lcdlr_min=0;
+ //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
+ }
+ else
+ {
+ test_watchdog_time_s=address_test_watchdog_time_s;
+ ddr_test_size=ddr_add_test_size;
+ //lcdlr_min=0;
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+
+ if((num_array[8+(lane_step<<2)+3]==0)) //test left edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+ // test_arg_0_ab_best_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_ab_best_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=1;
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==1)) //test left edge ongoing -loop
+ {
+
+ if((num_array[5]+1)>=(num_array[6]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+
+
+ num_array[8+(lane_step<<2)+3]=2; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // test_arg_0_ab_best_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_ab_best_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+
+ }
+ }
+
+
+ }
+
+ else if((num_array[8+(lane_step<<2)+3]==2)) //test right edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=3;
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==3)) //test right edge ongoing -loop
+ {
+
+ if((num_array[6]+1)>=(num_array[5]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ num_array[8+(lane_step<<2)+3]=4; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+
+ }
+ }
+
+
+ }
+ }
+
+ if(lane_step>=10) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+ }
+
+ // unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ lane_step=4;
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+
+
+
+ }
+ }
+
+ test_arg_2_step=0x10000;
+ num_array[2]=test_arg_2_step;
+
+
+
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ return 1;
+}
+
+int do_ddr_uboot_window_use_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ //setenv bootcmd "ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000"
+ printf("\nsetenv bootcmd ddr_test_cmd 0x31 2 6 20 0 0x100000 0x4000000 \n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+
+ unsigned int address_test_watchdog_time_s=15;
+ unsigned int test_watchdog_time_s=15;
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ address_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=100;
+ unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ unsigned int lcdlr_min=0;
+ unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ char str[1024]="";
+
+ if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ ddr_test_data_array_max=64;
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int test_arg_0_cmd0 =0; //master cmd
+ unsigned int test_arg_1_cmd1 =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_5_boottimes =0;
+ unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_arg_7_magic_number =0;
+ unsigned int org_lcdlr_value_temp=0;
+ unsigned int acmdlr=0;
+ acmdlr=do_ddr_read_acmdlr();
+
+ test_arg_0_cmd0=num_array[0];
+ test_arg_1_cmd1=num_array[1];
+ test_arg_2_step=num_array[2];
+ test_arg_3_freq=num_array[3];
+ test_arg_4_step_status=num_array[4];
+ test_arg_5_boottimes=num_array[5];
+ test_arg_6_lcdlr_temp_count=num_array[6];
+ test_arg_7_magic_number=num_array[7];
+ printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
+ printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5_boottimes=%d\n",num_array[5]);
+ printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
+ printf("test_arg_7_magic_number=%d\n",num_array[7]);
+
+
+
+ if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {test_arg_5_boottimes++;
+
+ }
+ else
+ {test_arg_5_boottimes=0;
+ test_arg_2_step=0;
+ test_arg_6_lcdlr_temp_count=0;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ }
+ printf("boot times==%d\n",test_arg_5_boottimes);
+ num_array[0] = test_arg_0_cmd0 ;
+ num_array[1] = test_arg_1_cmd1 ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_boottimes ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+ test_arg_0_cmd0=0X31;//DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW;
+ test_arg_1_cmd1=0;
+ test_arg_2_step=1;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ test_arg_6_lcdlr_temp_count=lcdlr_min;
+ num_array[0] = test_arg_0_cmd0 ;
+ num_array[1] = test_arg_1_cmd1 ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_boottimes ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ //for (temp_count = 8; temp_count< 48;temp_count++) {
+ // num_array[temp_count]=0;
+ //}
+
+ for (temp_count = 8; temp_count < (32+8); temp_count++) //data
+ {
+ //printf("1temp_count=%d\n",temp_count);
+ if((temp_count%4)==0) //org
+ {
+ //printf("2temp_count=%d\n",temp_count);
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+
+ }
+ if((temp_count%4)==1) //min
+ {
+ num_array[temp_count]=0;
+ }
+ if((temp_count%4)==2) //max
+ {
+ num_array[temp_count]=acmdlr;
+ }
+ if((temp_count%4)==3) //status
+ {
+ num_array[temp_count]=0;
+ }
+
+
+ }
+
+ for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
+ {
+ if((temp_count%4)==0) //org
+ {
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+
+ }
+ if((temp_count%4)==1) //min
+ {
+ num_array[temp_count]=0;
+ }
+ if((temp_count%4)==2) //max
+ {
+ num_array[temp_count]=acmdlr*3;
+ if(temp_count==(32+8+4+2))
+ num_array[temp_count]=0x3f;//bdlr0 max value
+ }
+ if((temp_count%4)==3) //status
+ {
+ num_array[temp_count]=0;
+ }
+
+
+ }
+
+
+
+
+#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ num_array[8+3]=0xffff;
+ num_array[8+4+3]=0xffff;
+ }
+ if(lane_disable&0x2){
+ num_array[8+3+8]=0xffff;
+ num_array[8+4+3+8]=0xffff;
+ }
+ if(lane_disable&0x4){
+ num_array[8+3+8+8]=0xffff;
+ num_array[8+4+3+8+8]=0xffff;
+ }
+ if(lane_disable&0x8){
+ num_array[8+3+8+8+8]=0xffff;
+ num_array[8+4+3+8+8+8]=0xffff;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ num_array[8+3+8+8+8+8]=0xffff;
+ }
+ if(lane_disable&0x20){
+ num_array[8+4+3+8+8+8+8]=0xffff;
+
+ }
+ }
+
+
+ }
+
+
+
+
+ for (temp_count= 0; temp_count< 48;temp_count++) {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ test_arg_2_step++;
+ num_array[2]=test_arg_2_step;
+ for (temp_count = 1; temp_count < 48; temp_count++)
+ {
+ printf("%d %d\n", temp_count,num_array[temp_count]);
+ }
+ temp_count=2;
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ //for (i = 0; i < 48; i++) {
+
+ // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
+ //}
+
+
+ //for (i = 8; i < 48; i++) {
+ //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
+ //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
+ //}
+
+ ///*
+ unsigned int lane_step=0;
+
+ printf("\nstart loop test\n");
+
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+ if((num_array[(lane_step<<2)+3+8]<0x4))
+ {break;
+ }
+ }
+ printf("\nstart test lane_step =%d\n",lane_step);
+ if(lane_step<10)
+ {
+ if(lane_step<8)
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+ lcdlr_min=0;
+ lcdlr_max=(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
+ }
+ else
+ {
+ test_watchdog_time_s=address_test_watchdog_time_s;
+ ddr_test_size=ddr_add_test_size;
+ lcdlr_min=0;
+ lcdlr_max=(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ }
+
+ if((num_array[8+(lane_step<<2)+3]==0)) //test left edge begin
+ {
+ num_array[8+(lane_step<<2)+3]=1;
+ test_arg_6_lcdlr_temp_count=lcdlr_min;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+
+ num_array[8+(lane_step<<2)+3]=2; //left finish
+
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ temp_count=8+(lane_step<<2)+1;
+ num_array[temp_count]=test_arg_6_lcdlr_temp_count;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+
+
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==1)) //test left edge ongoing -loop
+ {
+ num_array[8+(lane_step<<2)+3]=1;
+ test_arg_6_lcdlr_temp_count++;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=2; //left finish
+
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ temp_count=8+(lane_step<<2)+1;
+ num_array[temp_count]=test_arg_6_lcdlr_temp_count;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+
+
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==2)) //test right edge begin
+ {
+ num_array[8+(lane_step<<2)+3]=3;
+ test_arg_6_lcdlr_temp_count=lcdlr_max;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=4; //right finish
+
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ temp_count=8+(lane_step<<2)+2;
+ num_array[temp_count]=test_arg_6_lcdlr_temp_count;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+
+
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==3)) //test right edge ongoing -loop
+ {
+ num_array[8+(lane_step<<2)+3]=3;
+ test_arg_6_lcdlr_temp_count--;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=4; //right finish
+
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ temp_count=8+(lane_step<<2)+2;
+ num_array[temp_count]=test_arg_6_lcdlr_temp_count;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0;
+ num_array[6]=test_arg_6_lcdlr_temp_count;
+
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+
+
+
+ }
+ }
+ }
+
+ if(lane_step>=10) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+ }
+
+ // unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ lane_step=4;
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+
+
+
+ }
+ }
+
+ test_arg_2_step=0x10000;
+ num_array[2]=test_arg_2_step;
+
+
+
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ return 1;
+}
+
+
+int do_ddr_uboot_kernel_window_use_source_quick_method(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ //setenv storeboot "ddr_test_cmd 0x33 2 6 20 0 0x100000 0x4000000"
+ printf("\nsetenv bootcmd ddr_test_cmd 0x33 2 6 20 0 0x100000 0x4000000 \n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+#define DDR_TEST_NULL 0
+#define DDR_TEST_PASS 1
+#define DDR_TEST_FAIL 2
+
+#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+ //PREG_STICKY_REG5
+
+
+#define DDR_TEST_STATUS_UBOOT_ONGOING 1
+#define DDR_TEST_STATUS_UBOOT_FINISH 2
+#define DDR_TEST_STATUS_KERNEL_ONGING 3
+#define DDR_TEST_STATUS_KERNEL_FINISH 4
+
+#define DDR_TEST_METHOD_DIVIDER_2 1 //AB METHOD A is failing B is passing value
+#define DDR_TEST_METHOD_DECREASE 2
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_method=DDR_TEST_METHOD_DIVIDER_2;
+ unsigned int ddr_add_test_method=DDR_TEST_METHOD_DIVIDER_2;
+ unsigned int ddr_test_method=DDR_TEST_METHOD_DIVIDER_2;
+
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+
+ unsigned int address_test_watchdog_time_s=15;
+ unsigned int test_watchdog_time_s=15;
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ address_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+ if (argc >7) {
+ ddr_data_test_method = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ ddr_data_test_method= DDR_TEST_METHOD_DIVIDER_2;
+ }
+ }
+ printf("ddr_data_test_method==0x%08x\n",ddr_data_test_method);
+ if (argc >8) {
+ ddr_add_test_method = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ ddr_add_test_method= DDR_TEST_METHOD_DIVIDER_2;
+ }
+ }
+ printf("ddr_add_test_method==0x%08x\n",ddr_add_test_method);
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=100;
+ unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ unsigned int lcdlr_min=0;
+ unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ char str[1024]="";
+
+ if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ ddr_test_data_array_max=64;
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int test_arg_0_ab_best_lcdlr_value =0; //best_lcdlr_value
+ unsigned int test_arg_1_test_error_flag =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 UBOOT ONGOING 2 UBOOT FINISH 3 KERNEL ONGOING 4 KERNEL FINISH
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_5_ab_edge_lcdlr_value =0;
+ unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_arg_7_magic_number =0;
+ unsigned int org_lcdlr_value_temp=0;
+ unsigned int acmdlr=0;
+ acmdlr=do_ddr_read_acmdlr();
+
+ test_arg_0_ab_best_lcdlr_value=num_array[0];
+ test_arg_1_test_error_flag=num_array[1];
+ test_arg_2_step=num_array[2];
+ test_arg_3_freq=num_array[3];
+ test_arg_4_step_status=num_array[4];
+ test_arg_5_ab_edge_lcdlr_value=num_array[5];
+ test_arg_6_lcdlr_temp_count=num_array[6];
+ test_arg_7_magic_number=num_array[7];
+ printf("test_arg_0_ab_best_lcdlr_value==%d\n",test_arg_0_ab_best_lcdlr_value);
+ printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
+ printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
+ printf("test_arg_7_magic_number=%d\n",num_array[7]);
+
+
+
+ if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {
+ }
+ else
+ {
+
+ test_arg_0_ab_best_lcdlr_value=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_2_step=0;
+ test_arg_6_lcdlr_temp_count=0;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ }
+ //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
+ num_array[0] = test_arg_0_ab_best_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+
+
+
+ test_arg_0_ab_best_lcdlr_value=0;
+ test_arg_1_test_error_flag=0;
+ test_arg_2_step=DDR_TEST_STATUS_UBOOT_ONGOING;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_6_lcdlr_temp_count=lcdlr_min;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ num_array[0] = test_arg_0_ab_best_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ //for (temp_count = 8; temp_count< 48;temp_count++) {
+ // num_array[temp_count]=0;
+ //}
+
+ for (temp_count = 8; temp_count < (32+8); temp_count++) //data
+ {
+ //printf("1temp_count=%d\n",temp_count);
+
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //printf("2temp_count=%d\n",temp_count);
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ //temp_count=temp_count+4;
+ }
+
+
+
+ }
+
+ for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
+ {
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ }
+
+
+ }
+
+
+
+
+#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ num_array[8+3]=0xffff;
+ num_array[8+4+3]=0xffff;
+ }
+ if(lane_disable&0x2){
+ num_array[8+3+8]=0xffff;
+ num_array[8+4+3+8]=0xffff;
+ }
+ if(lane_disable&0x4){
+ num_array[8+3+8+8]=0xffff;
+ num_array[8+4+3+8+8]=0xffff;
+ }
+ if(lane_disable&0x8){
+ num_array[8+3+8+8+8]=0xffff;
+ num_array[8+4+3+8+8+8]=0xffff;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ num_array[8+3+8+8+8+8]=0xffff;
+ }
+ if(lane_disable&0x20){
+ num_array[8+4+3+8+8+8+8]=0xffff;
+
+ }
+ }
+
+
+ }
+
+
+
+
+ for (temp_count= 0; temp_count< 48;temp_count++) {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ //test_arg_2_step++;
+ num_array[2]=test_arg_2_step;
+ for (temp_count = 1; temp_count < 48; temp_count++)
+ {
+ printf("%d %d\n", temp_count,num_array[temp_count]);
+ }
+ temp_count=2;
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ //for (i = 0; i < 48; i++) {
+
+ // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
+ //}
+
+
+ //for (i = 8; i < 48; i++) {
+ //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
+ //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
+ //}
+
+ ///*
+ unsigned int lane_step=0;
+
+ printf("\nstart loop test\n");
+
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+ if(test_arg_2_step<DDR_TEST_STATUS_KERNEL_ONGING)
+ {
+ if((num_array[(lane_step<<2)+3+8]<(0x4)))
+ {break;
+ }
+ }
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_ONGOING)
+ {if(lane_step>9)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_UBOOT_FINISH;
+ printf("uboot test result: \n");
+ }
+ }
+
+ if(test_arg_2_step>DDR_TEST_STATUS_UBOOT_FINISH)
+ {
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+
+ {
+ if((num_array[(lane_step<<2)+3+8]<(0x4+4)))
+ {break;
+ }
+ }
+ }
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ //test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
+ }
+ else
+ {
+ printf("\nstart test lane_step =%d\n",lane_step);
+ if(lane_step<10)
+ {
+ if(lane_step<8)
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+ ddr_test_method=ddr_data_test_method;
+ //lcdlr_min=0;
+ //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
+ }
+ else
+ {
+ test_watchdog_time_s=address_test_watchdog_time_s;
+ ddr_test_size=ddr_add_test_size;
+ ddr_test_method=ddr_add_test_method;
+ //lcdlr_min=0;
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+
+ if(num_array[8+(lane_step<<2)+3]>4) //from kernel
+ {
+ num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ if(((num_array[8+(lane_step<<2)+3]==0))||((num_array[8+(lane_step<<2)+3]==4))) //test left edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+ // test_arg_0_ab_best_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_ab_best_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ read_write_window_test_flag(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=(num_array[8+(lane_step<<2)+3]+1);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ {
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ }
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ //if( num_array[8+(lane_step<<2)+3]>4)
+
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==1)||((num_array[8+(lane_step<<2)+3]==5))) //test left edge begin) //test left edge ongoing -loop
+ {
+
+ if((num_array[6]+1)>=(num_array[8+(lane_step<<2)+1]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+
+
+ num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ // num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ // test_arg_0_ab_best_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_ab_best_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ // num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ // num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ }
+ }
+
+
+ }
+
+ else if((num_array[8+(lane_step<<2)+3]==2)||((num_array[8+(lane_step<<2)+3]==6))) //test right edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ //test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=num_array[8+(lane_step<<2)+3]+1;
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==3)||(num_array[8+(lane_step<<2)+3]==7)) //test right edge ongoing -loop
+ {
+
+ if((num_array[8+(lane_step<<2)+2]+1)>=(num_array[6]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ // num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ // num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+
+ }
+ }
+
+
+ }
+ }
+ }
+ if(lane_step>=10) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+ }
+
+ // unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ lane_step=4;
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+
+
+
+ }
+ }
+
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
+ num_array[2]=test_arg_2_step;
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_KERNEL_ONGING)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_KERNEL_FINISH;
+ num_array[2]=test_arg_2_step;
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL;
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ }
+
+
+
+
+
+
+ // if( num_array[8+(lane_step<<2)+3]>4)
+
+
+
+ return 1;
+}
+
+
+int do_ddr_uboot_kernel_window_use_source_quick_methods(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ //setenv storeboot "ddr_test_cmd 0x34 2 6 20 0 0x100000 0x4000000"
+ printf("\nsetenv bootcmd ddr_test_cmd 0x34 2 6 20 0 0x100000 0x4000000 \n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+#define DDR_TEST_NULL 0
+#define DDR_TEST_PASS 1
+#define DDR_TEST_FAIL 2
+
+#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+ //PREG_STICKY_REG5
+
+
+#define DDR_TEST_STATUS_UBOOT_ONGOING 1
+#define DDR_TEST_STATUS_UBOOT_FINISH 2
+#define DDR_TEST_STATUS_KERNEL_ONGING 3
+#define DDR_TEST_STATUS_KERNEL_FINISH 4
+
+#define DDR_TEST_METHOD_DIVIDER_2 1 //AB METHOD A is failing B is passing value
+#define DDR_TEST_METHOD_DECREASE 2
+#define DDR_TEST_METHOD_DECREASE_ALL_SAMETIME 3
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_method=DDR_TEST_METHOD_DIVIDER_2;
+ unsigned int ddr_add_test_method=DDR_TEST_METHOD_DIVIDER_2;
+ unsigned int ddr_test_method=DDR_TEST_METHOD_DIVIDER_2;
+
+ unsigned int ddr_enable_kernel_window_test_flag=0;
+
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+ unsigned int ddr_lcdlr_test_offset=0;
+ //unsigned int ddr_lcdlr_test_org_save=0;
+ unsigned int ddr_lcdlr_test_temp_value=0;
+
+ unsigned int address_test_watchdog_time_s=15;
+ unsigned int test_watchdog_time_s=15;
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ address_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ address_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("address_test_watchdog_time_s==%d\n",address_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+ if (argc >7) {
+ ddr_data_test_method = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ ddr_data_test_method= DDR_TEST_METHOD_DIVIDER_2;
+ }
+ }
+ printf("ddr_data_test_method==0x%08x\n",ddr_data_test_method);
+ if (argc >8) {
+ ddr_add_test_method = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ ddr_add_test_method= DDR_TEST_METHOD_DIVIDER_2;
+ }
+ }
+ printf("ddr_add_test_method==0x%08x\n",ddr_add_test_method);
+
+ if (argc >9) {
+ ddr_enable_kernel_window_test_flag = simple_strtoull_ddr(argv[9], &endp, 0);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ ddr_enable_kernel_window_test_flag= 0;
+ }
+ }
+ printf("ddr_enable_kernel_window_test_flag==0x%08x\n",ddr_enable_kernel_window_test_flag);
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=100;
+ unsigned int num_array[100];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ unsigned int lcdlr_min=0;
+ unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ char str[1024]="";
+
+ if(data_source==DDR_PARAMETER_SOURCE_FROM_DMC_STICKY)
+ ddr_test_data_array_max=64;
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int test_arg_0_orgt_store_lcdlr_value =0; //best_lcdlr_value
+ unsigned int test_arg_1_test_error_flag =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 UBOOT ONGOING 2 UBOOT FINISH 3 KERNEL ONGOING 4 KERNEL FINISH
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_5_ab_edge_lcdlr_value =0;
+ unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_arg_7_magic_number =0;
+ unsigned int org_lcdlr_value_temp=0;
+ unsigned int acmdlr=0;
+ acmdlr=do_ddr_read_acmdlr();
+
+ test_arg_0_orgt_store_lcdlr_value=num_array[0];
+ test_arg_1_test_error_flag=num_array[1];
+ test_arg_2_step=num_array[2];
+ test_arg_3_freq=num_array[3];
+ test_arg_4_step_status=num_array[4];
+ test_arg_5_ab_edge_lcdlr_value=num_array[5];
+ test_arg_6_lcdlr_temp_count=num_array[6];
+ test_arg_7_magic_number=num_array[7];
+ printf("test_arg_0_orgt_store_lcdlr_value==%d\n",test_arg_0_orgt_store_lcdlr_value);
+ printf("test_arg_1_test_error_flag==%d\n",test_arg_1_test_error_flag);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5_ab_edge_lcdlr_value=%d\n",num_array[5]);
+ printf("test_arg_6_lcdlr_temp_count=%d\n",num_array[6]);
+ printf("test_arg_7_magic_number=%d\n",num_array[7]);
+
+
+
+ if((test_arg_7_magic_number==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {
+ }
+ else
+ {
+
+ test_arg_0_orgt_store_lcdlr_value=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_2_step=0;
+ test_arg_6_lcdlr_temp_count=0;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ }
+ //printf("boot times==%d\n",test_arg_5_ab_edge_lcdlr_value);
+ num_array[0] = test_arg_0_orgt_store_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+
+ if(test_arg_2_step)
+ {
+ if(test_arg_3_freq!=global_ddr_clk) //
+ {
+ printf("running ddr freq==%d,but test freq is%d,will reboot use d2pll \n",global_ddr_clk,test_arg_3_freq);
+ sprintf(str,"d2pll %d",test_arg_3_freq);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ while(1);
+ }
+ }
+ if(test_arg_2_step==0)
+ {
+ {
+
+
+
+ test_arg_0_orgt_store_lcdlr_value=0;
+ test_arg_1_test_error_flag=0;
+ test_arg_2_step=DDR_TEST_STATUS_UBOOT_ONGOING;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ test_arg_5_ab_edge_lcdlr_value=0;
+ test_arg_6_lcdlr_temp_count=lcdlr_min;
+ test_arg_7_magic_number=DMC_STICKY_MAGIC_1;
+ num_array[0] = test_arg_0_orgt_store_lcdlr_value ;
+ num_array[1] = test_arg_1_test_error_flag ;
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ //for (temp_count = 8; temp_count< 48;temp_count++) {
+ // num_array[temp_count]=0;
+ //}
+
+ for (temp_count = 8; temp_count < (32+8); temp_count++) //data
+ {
+ //printf("1temp_count=%d\n",temp_count);
+
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //printf("2temp_count=%d\n",temp_count);
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,((temp_count-8)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ //temp_count=temp_count+4;
+ }
+
+
+
+ }
+
+ for (temp_count = 32+8; temp_count < (32+8+8); temp_count++) //add
+ {
+ if((temp_count%4)==0) //org
+ {
+ if(((temp_count-8)/4)<8)
+ {
+ lcdlr_min=0;
+ lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ else if(((temp_count-8)/4)<10)
+ {
+ lcdlr_min=0;
+ lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ if(((temp_count-8)/4)==9)
+ lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+ //num_array[temp_count]=0;
+ //unsigned int do_ddr_read_write_ddr_data_window_lcdlr(unsigned int rank_index,unsigned int data_add_index,unsigned int lcdlr_value,unsigned int read_write_flag ))
+ num_array[temp_count]=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,((temp_count-8-32)>>2),num_array[temp_count],DDR_PARAMETER_READ);
+ num_array[temp_count+1]=lcdlr_min;
+ num_array[temp_count+2]=lcdlr_max;//num_array[temp_count];
+ num_array[temp_count+3]=0;
+ }
+
+
+ }
+
+
+
+
+#if (CONFIG_DDR_PHY<=P_DDR_PHY_905X)
+ printf("DDR0_PUB_DX0GCR0==%x\n",(readl(DDR0_PUB_DX0GCR0)));
+ printf("DDR0_PUB_DX1GCR0==%x\n",(readl(DDR0_PUB_DX1GCR0)));
+ printf("DDR0_PUB_DX2GCR0==%x\n",(readl(DDR0_PUB_DX2GCR0)));
+ printf("DDR0_PUB_DX3GCR0==%x\n",(readl(DDR0_PUB_DX3GCR0)));
+ if(((readl(DDR0_PUB_DX0GCR0))&1)==0)
+ lane_disable= lane_disable|1;
+ if(((readl(DDR0_PUB_DX1GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<1);
+ if(((readl(DDR0_PUB_DX2GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<2);
+ if(((readl(DDR0_PUB_DX3GCR0))&1)==0)
+ lane_disable= lane_disable|(1<<3);
+
+#endif
+ if(lane_disable)
+ {if(lane_disable&0x1){
+ num_array[8+3]=0xffff;
+ num_array[8+4+3]=0xffff;
+ }
+ if(lane_disable&0x2){
+ num_array[8+3+8]=0xffff;
+ num_array[8+4+3+8]=0xffff;
+ }
+ if(lane_disable&0x4){
+ num_array[8+3+8+8]=0xffff;
+ num_array[8+4+3+8+8]=0xffff;
+ }
+ if(lane_disable&0x8){
+ num_array[8+3+8+8+8]=0xffff;
+ num_array[8+4+3+8+8+8]=0xffff;
+ }
+ printf("lane_disable==%x\n",lane_disable);
+ if(lane_disable&0x10){
+ num_array[8+3+8+8+8+8]=0xffff;
+ }
+ if(lane_disable&0x20){
+ num_array[8+4+3+8+8+8+8]=0xffff;
+
+ }
+ }
+
+
+ }
+
+
+
+
+ for (temp_count= 0; temp_count< 48;temp_count++) {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ //test_arg_2_step++;
+ num_array[2]=test_arg_2_step;
+ for (temp_count = 1; temp_count < 48; temp_count++)
+ {
+ printf("%d %d\n", temp_count,num_array[temp_count]);
+ }
+ temp_count=2;
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ //for (i = 0; i < 48; i++) {
+
+ // writel(num_array[i],(sticky_reg_base_add+(i<<2)));
+ //}
+
+
+ //for (i = 8; i < 48; i++) {
+ //num_array[i]=readl((sticky_reg_base_add+(i<<2)));
+ //printf("ddr_test_data_num_%04d==%d\n",i,num_array[i]);
+ //}
+
+ ///*
+ unsigned int lane_step=0;
+ unsigned int lane_step_count=0;
+
+ printf("\nstart loop test\n");
+
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+ if(ddr_enable_kernel_window_test_flag==0)
+ {
+ if((num_array[(lane_step<<2)+3+8]<(0x4)))
+ {break;
+ }
+ }
+ else if(test_arg_2_step<DDR_TEST_STATUS_KERNEL_ONGING)
+ {
+ if((num_array[(lane_step<<2)+3+8]<(0x4)))
+ {break;
+ }
+ }
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_ONGOING)
+ {if(lane_step>9)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_UBOOT_FINISH;
+ printf("uboot test result: \n");
+ }
+ }
+
+
+ if(ddr_enable_kernel_window_test_flag)
+ {
+ if(test_arg_2_step>DDR_TEST_STATUS_UBOOT_FINISH)
+ {
+ for ((lane_step=0);(lane_step<10);(lane_step++)) //find need test data step
+ {
+
+ {
+ if((num_array[(lane_step<<2)+3+8]<(0x4+4)))
+ {break;
+ }
+ }
+ }
+ }
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ //test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
+ }
+ else
+ {
+ printf("\nstart test lane_step =%d\n",lane_step);
+ if(lane_step<10)
+ {
+ if(lane_step<8)
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+ ddr_test_method=ddr_data_test_method;
+ //lcdlr_min=0;
+ //lcdlr_max=(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);//do_ddr_read_acmdlr();
+ }
+ else
+ {
+ test_watchdog_time_s=address_test_watchdog_time_s;
+ ddr_test_size=ddr_add_test_size;
+ ddr_test_method=ddr_add_test_method;
+ //lcdlr_min=0;
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //lcdlr_max=4*(do_ddr_read_acmdlr());//(num_array[(lane_step<<2)+2+8]);////3*(do_ddr_read_acmdlr());
+ //if(lane_step==9)
+ //lcdlr_max=0x3f;////3*(do_ddr_read_acmdlr());
+ }
+
+ if(num_array[8+(lane_step<<2)+3]>4) //from kernel
+ {
+ num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
+ // read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ if(((num_array[8+(lane_step<<2)+3]==0))||((num_array[8+(lane_step<<2)+3]==4))) //test left edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+ // test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_orgt_store_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+1]);
+ num_array[0]=test_arg_0_orgt_store_lcdlr_value;
+ temp_count=0;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ read_write_window_test_flag(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[5]=(num_array[8+(lane_step<<2)+1]); //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ (num_array[8+(lane_step<<2)+1])=(num_array[8+(lane_step<<2)+0]);
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+0])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=(num_array[8+(lane_step<<2)+3]+1);
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ {
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ }
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//test_arg_0_orgt_store_lcdlr_value;//num_array[8+(lane_step<<2)+1];
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ {
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ else if(lane_step<10)
+ {
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ }
+
+ //here will dead
+
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ //if( num_array[8+(lane_step<<2)+3]>4)
+
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==1)||((num_array[8+(lane_step<<2)+3]==5))) //test left edge begin) //test left edge ongoing -loop
+ {
+
+ if((num_array[6]+1)>=(num_array[8+(lane_step<<2)+1]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+
+
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ //ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
+ for ((lane_step_count=0);(lane_step_count<10);(lane_step_count++))
+ {
+
+ num_array[8+(lane_step_count<<2)+3]= num_array[8+(lane_step_count<<2)+3]+1; //update status
+ lane_step_count=8+(lane_step_count<<2)+3;
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // if(num_array[1]==DDR_TEST_FAIL)
+ // num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
+ // if(num_array[1]==DDR_TEST_PASS)
+ // num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+
+ test_arg_0_orgt_store_lcdlr_value= num_array[0];
+ if(num_array[1]==DDR_TEST_FAIL)
+ {
+ ddr_lcdlr_test_offset=num_array[8+(lane_step<<2)+1]+1-test_arg_0_orgt_store_lcdlr_value;
+ }
+ if(num_array[1]==DDR_TEST_PASS)
+ {
+ ddr_lcdlr_test_offset=num_array[8+(lane_step<<2)+1]+0-test_arg_0_orgt_store_lcdlr_value;
+ }
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {
+ if((num_array[8+(lane_step_count<<2)+2]+ddr_lcdlr_test_offset)>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ read_write_window_test_parameter(data_source,
+ (8+(lane_step_count<<2)+2) ,ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+1]=num_array[6]+1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ // num_array[1]= read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ // DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_READ);
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ // test_arg_0_orgt_store_lcdlr_value=0;//(num_array[8+(lane_step<<2)+0]);
+ // num_array[0]=test_arg_0_orgt_store_lcdlr_value;
+ // temp_count=0;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ // num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+
+ ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//tnum_array[8+(lane_step<<2)+1];
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+
+ }
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ // num_array[8+(lane_step<<2)+3]=1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+1]=num_array[6]; //update min value
+ temp_count=8+(lane_step<<2)+1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])+1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+1])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=test_arg_6_lcdlr_temp_count-num_array[0];//tnum_array[8+(lane_step<<2)+1];
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+1]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]+ddr_lcdlr_test_offset);
+ if(lane_step_count==9)
+ {if (ddr_lcdlr_test_temp_value>0x3f)
+ ddr_lcdlr_test_temp_value=0x3f;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ }
+ }
+
+
+ }
+
+ else if((num_array[8+(lane_step<<2)+3]==2)||((num_array[8+(lane_step<<2)+3]==6))) //test right edge begin
+ {
+ /*
+ num_array[1] = test_arg_1_test_error_flag ;//1 pass 2 error
+ num_array[2] = test_arg_2_step ;
+ num_array[3] = test_arg_3_freq ;
+ num_array[4] = test_arg_4_step_status ;
+ num_array[5] = test_arg_5_ab_edge_lcdlr_value ;
+ num_array[6] = test_arg_6_lcdlr_temp_count ;
+ num_array[7] = test_arg_7_magic_number ;
+ */
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ test_arg_0_orgt_store_lcdlr_value=(num_array[8+(lane_step<<2)+2]);
+ num_array[0]=test_arg_0_orgt_store_lcdlr_value;
+ temp_count=0;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ num_array[5]=num_array[8+(lane_step<<2)+2];//lcdlr_max; //edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[8+(lane_step<<2)+0];//
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ //test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ num_array[6]=test_arg_6_lcdlr_temp_count; //temp_lcdlr
+ temp_count=6;
+ read_write_window_test_parameter(data_source, //temp_lcdlr
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+3]=num_array[8+(lane_step<<2)+3]+1;
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source, //lane status
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
+ ddr_lcdlr_test_temp_value=0;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ // {if ((num_array[8+(lane_step_count<<2)+2]<ddr_lcdlr_test_offset)
+ // ddr_lcdlr_test_temp_value=0;
+ // }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ else if((num_array[8+(lane_step<<2)+3]==3)||(num_array[8+(lane_step<<2)+3]==7)) //test right edge ongoing -loop
+ {
+
+ if((num_array[8+(lane_step<<2)+2]+1)>=(num_array[6]))
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ //ddr_lcdlr_test_offset=0;//test_arg_6_lcdlr_temp_count-num_array[8+(lane_step<<2)+1];
+ for ((lane_step_count=0);(lane_step_count<10);(lane_step_count++))
+ {
+
+ num_array[8+(lane_step_count<<2)+3]= num_array[8+(lane_step_count<<2)+3]+1; //update status
+ lane_step_count=8+(lane_step_count<<2)+3;
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ num_array[8+(lane_step<<2)+3]= num_array[8+(lane_step<<2)+3]+1; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ num_array[5]=0; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // if(num_array[1]==DDR_TEST_FAIL)
+ // num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
+ // if(num_array[1]==DDR_TEST_PASS)
+ // num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
+ // temp_count=8+(lane_step<<2)+2;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+
+ test_arg_0_orgt_store_lcdlr_value= num_array[0];
+ if(num_array[1]==DDR_TEST_FAIL)
+ {
+ ddr_lcdlr_test_offset=test_arg_0_orgt_store_lcdlr_value-num_array[8+(lane_step<<2)+2]+1;
+ }
+ if(num_array[1]==DDR_TEST_PASS)
+ {
+ ddr_lcdlr_test_offset=test_arg_0_orgt_store_lcdlr_value-num_array[8+(lane_step<<2)+2]+0;
+ }
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
+ if(num_array[8+(lane_step_count<<2)+2]<ddr_lcdlr_test_offset)
+ ddr_lcdlr_test_temp_value=0;
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ read_write_window_test_parameter(data_source,
+ (8+(lane_step_count<<2)+2) ,ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_FAIL)
+ num_array[8+(lane_step<<2)+2]=num_array[6]-1; //update B
+ if(num_array[1]==DDR_TEST_PASS)
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update B
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ test_arg_6_lcdlr_temp_count=0; //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if(num_array[1]==DDR_TEST_NULL)
+ {printf("default value not stable ,or recovery sticky?\n");
+ }
+ else if(num_array[1]==DDR_TEST_FAIL)
+ {
+
+
+
+ {
+ // num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ num_array[5]=num_array[6]; //update edge lcdlr
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; //--update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ // num_array[8+(lane_step<<2)+1]=num_array[8+(lane_step<<2)+1]; //update B
+ // temp_count=8+(lane_step<<2)+1;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
+ ddr_lcdlr_test_temp_value=0;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ // {if ((num_array[8+(lane_step_count<<2)+0]<ddr_lcdlr_test_offset)
+ // ddr_lcdlr_test_temp_value=0;
+ // }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+ }
+ }
+
+ else if(num_array[1]==DDR_TEST_PASS)
+ {
+ // num_array[8+(lane_step<<2)+3]=3; //update status
+ temp_count=8+(lane_step<<2)+3;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[8+(lane_step<<2)+2]=num_array[6]; //update max value
+ temp_count=8+(lane_step<<2)+2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if(ddr_test_method==DDR_TEST_METHOD_DIVIDER_2)
+ test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ else if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ test_arg_6_lcdlr_temp_count=((num_array[5])-1);
+ // test_arg_6_lcdlr_temp_count=((num_array[5]+num_array[8+(lane_step<<2)+2])>>1); //curren_test +B //(A+B)/2
+ num_array[6]=test_arg_6_lcdlr_temp_count; // --update curent
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ num_array[1]=DDR_TEST_FAIL; //1 //pass 2 error
+ temp_count=1; //update test error flag
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=num_array[0]-test_arg_6_lcdlr_temp_count;
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,0,
+ (num_array[0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ for ((lane_step_count=1);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+2]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ {if ((num_array[8+(lane_step_count<<2)+2])<(ddr_lcdlr_test_offset))
+ ddr_lcdlr_test_temp_value=0;
+ }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ test_arg_6_lcdlr_temp_count=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,test_arg_6_lcdlr_temp_count,DDR_PARAMETER_WRITE);
+ }
+ //here will dead
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ if( num_array[8+(lane_step<<2)+3]>4)
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ org_lcdlr_value_temp=num_array[8+(lane_step<<2)+0];
+ if(ddr_test_method==DDR_TEST_METHOD_DECREASE_ALL_SAMETIME)
+ {
+ ddr_lcdlr_test_offset=0;//num_array[8+(lane_step<<2)+2]-test_arg_6_lcdlr_temp_count;
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset),DDR_PARAMETER_WRITE);
+ }
+ for ((lane_step_count=8);(lane_step_count<10);(lane_step_count++))
+ {
+ ddr_lcdlr_test_temp_value=(num_array[8+(lane_step_count<<2)+0]-ddr_lcdlr_test_offset);
+ //if(lane_step_count==9)
+ // {if ((num_array[8+(lane_step_count<<2)+0]<ddr_lcdlr_test_offset)
+ // ddr_lcdlr_test_temp_value=0;
+ // }
+ if(num_array[8+(lane_step_count<<2)+3]<9)
+ do_ddr_read_write_ddr_add_window_lcdlr( rank_index,(lane_step_count-8),
+ ddr_lcdlr_test_temp_value,DDR_PARAMETER_WRITE);
+ }
+ }
+ else
+ {
+ if(lane_step<8)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ else if(lane_step<10)
+ org_lcdlr_value_temp=do_ddr_read_write_ddr_add_window_lcdlr( rank_index,lane_step-8,org_lcdlr_value_temp,DDR_PARAMETER_WRITE);
+ }
+ num_array[1]=DDR_TEST_PASS; //pass 2 error 1
+ temp_count=1;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ if(num_array[8+(lane_step<<2)+3]>4)
+ {
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ }
+
+ run_command("reset",0);
+ while(1);
+ }
+
+ }
+
+ }
+ }
+
+
+ }
+ }
+ }
+ if(lane_step>=10) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+ }
+
+ // unsigned int acmdlr= 0;
+ unsigned int delay_step_x100= 0;
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x|wdq_org 0x%08x |wdq_min 0x%08x |wdq_max 0x%08x ::|rdqs_org 0x%08x |rdqs_min 0x%08x |rdqs_max 0x%08x \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ lane_step=4;
+ {
+ printf("\nac_lane_0x%08x|lcd_org 0x%08x |lcd_min 0x%08x |lcd_max 0x%08x ::|bdlr_org 0x%08x |bdlr_min 0x%08x |bdlr_max 0x%08x \n",
+ 4,
+ num_array[8+(lane_step)*8+0],num_array[8+(lane_step)*8+1],num_array[8+(lane_step)*8+2],
+ num_array[8+(lane_step)*8+4],num_array[8+(lane_step)*8+5],num_array[8+(lane_step)*8+6]);
+ }
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+ {
+ printf("\n ac_lane_0x0000000| lcdlr_org |lcdlr_set ps|lcdlr_hold ps:|\
+ clk_setup ps| clk_hold ps|adj_percent[100]\n");
+
+ printf("\n ac_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+ printf("\n ck_lane0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ 4,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+ }
+ printf("\n a_lane_0x00000000| wrdq_org 0x0|w_setup x ps|w_hold x ps::|\
+ rd_setup ps|rd_hold x ps|adj_percent[100]\n");
+
+
+ for ((lane_step=0);(lane_step<4);(lane_step++))
+ {
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+0],
+ (((num_array[8+(lane_step)*8+2]-num_array[8+(lane_step)*8+0])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+0]-num_array[8+(lane_step)*8+1])*delay_step_x100
+ )/100),
+
+ 0,
+ 0,
+ 100*(num_array[8+(lane_step)*8+2]+num_array[8+(lane_step)*8+1])/(
+ 2*num_array[8+(lane_step)*8+0]));
+
+ printf("\n a_lane_0x%08x| 0x%08x | %08d | %08d ::| %08d | %08d | %08d \n",
+ lane_step,
+ num_array[8+(lane_step)*8+4],
+ 0,
+ 0,
+
+ (((num_array[8+(lane_step)*8+4]-num_array[8+(lane_step)*8+5])*delay_step_x100
+ )/100),
+ (((num_array[8+(lane_step)*8+6]-num_array[8+(lane_step)*8+4])*delay_step_x100
+ )/100),
+ 100*(num_array[8+(lane_step)*8+6]+num_array[8+(lane_step)*8+5])/(
+ 2*num_array[8+(lane_step)*8+4]));
+
+
+
+ }
+ }
+
+
+ if(test_arg_2_step==DDR_TEST_STATUS_UBOOT_FINISH)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_KERNEL_ONGING;
+ num_array[2]=test_arg_2_step;
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+
+ if(test_arg_2_step==DDR_TEST_STATUS_KERNEL_ONGING)//||(test_arg_2_step==DDR_TEST_STATUS_KERNEL_FINISH)
+ {
+ test_arg_2_step=DDR_TEST_STATUS_KERNEL_FINISH;
+ num_array[2]=test_arg_2_step;
+ temp_count=2;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET ,test_arg_2_step,DDR_PARAMETER_WRITE);
+ num_array[1]=DDR_TEST_NULL;
+ read_write_window_test_flag(DDR_PARAMETER_SOURCE_FROM_ORG_STICKY,
+ DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET ,num_array[1],DDR_PARAMETER_WRITE);
+ {
+ ddr_test_watchdog_disable(); //s
+ run_command("run storeboot",0);
+ while(1);
+ }
+ }
+
+
+
+
+
+
+ // if( num_array[8+(lane_step<<2)+3]>4)
+
+
+
+ return 1;
+}
+
+int do_ddr_uboot_window_use_source_all_same_increase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nsetenv bootcmd ddr_test_cmd 0x35 4 6 60 0 0x100000 0x4000000 0 0x100010 0\n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+
+#define DDR_TEST_NULL 0
+#define DDR_TEST_PASS 1
+#define DDR_TEST_FAIL 2
+
+
+#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+ //PREG_STICKY_REG4
+ //PREG_STICKY_REG5
+
+#define DDR_TEST_STATUS_UBOOT_ONGOING 1
+#define DDR_TEST_STATUS_UBOOT_FINISH 2
+#define DDR_TEST_STATUS_KERNEL_ONGING 3
+#define DDR_TEST_STATUS_KERNEL_FINISH 4
+ //#define DDR_TEST_FAIL 2
+
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+
+ unsigned int ddr_test_clear_flag=0;
+ unsigned int ddr_test_init_offset=0;
+ unsigned int ddr_test_uboot_kernel_enable_mask=0;
+
+ unsigned int ddr_test_uboot_loop=0;
+
+ unsigned int kernel_test_watchdog_time_s=60;
+ unsigned int test_watchdog_time_s=15;
+
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ kernel_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ kernel_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("kernel_test_watchdog_time_s==%d\n",kernel_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+
+ if (argc >7) {
+ ddr_test_clear_flag = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ ddr_test_clear_flag= 0x10000000;
+ }
+ }
+ printf("ddr_test_clear_flag==0x%08x\n",ddr_test_clear_flag);
+
+ if (argc >8) {
+ ddr_test_init_offset = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ ddr_test_init_offset= 0;
+ }
+ }
+ printf("ddr_test_init_offset==0x%08x\n",ddr_test_init_offset);
+
+ if (argc >9) {
+ ddr_test_uboot_kernel_enable_mask = simple_strtoull_ddr(argv[9], &endp, 0);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ ddr_test_uboot_kernel_enable_mask= 0;
+ }
+ }
+ printf("ddr_test_uboot_kernel_enable_mask==0x%08x\n",ddr_test_uboot_kernel_enable_mask);
+
+ if (argc >10) {
+ ddr_test_uboot_loop = simple_strtoull_ddr(argv[10], &endp, 0);
+ if (*argv[10] == 0 || *endp != 0)
+ {
+ ddr_test_uboot_loop= 0;
+ }
+ }
+ printf("ddr_test_uboot_loop==0x%08x\n",ddr_test_uboot_loop);
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=10;
+ unsigned int num_array[10];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ //unsigned int lcdlr_min=0;
+ //unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ //char str[1024]="";
+
+
+ ddr_test_data_array_max=10;
+
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int reg_def_value_data[4]; //write_lcdlr_value+read_lcdlr_value<<16;
+
+ //#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+ //#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+
+ unsigned int test_arg_4_step_flag_add_sticky_offset =0; //use for kernel
+ unsigned int test_arg_5_pass_fail_flag_add_sticky_offset =0; //use for kernel
+
+ unsigned int test_arg_6_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_7_lcdlr_offset =0; //left_lcdlr+right_lcdlr<<16
+ unsigned int test_arg_7_lcdlr_offset_l =0; //left_lcdlr
+ unsigned int test_arg_7_lcdlr_offset_r=0; //right_lcdlr
+ unsigned int delay_step_x100= 0;
+
+ //unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_lcdlr_temp_value1 =0;
+ unsigned int test_lcdlr_temp_value2 =0;
+ unsigned int test_lcdlr_temp_value =0;
+ unsigned int test_lcdlr_reach_lcdlr_limited_flag =0;
+
+ unsigned int acmdlr=0;
+ acmdlr=do_ddr_read_acmdlr();
+
+ test_lcdlr_reach_lcdlr_limited_flag=0;
+ reg_def_value_data[0]=num_array[0];
+ reg_def_value_data[1]=num_array[1];
+ reg_def_value_data[2]=num_array[2];
+ reg_def_value_data[3]=num_array[3];
+ test_arg_4_step_flag_add_sticky_offset=num_array[4];
+ test_arg_5_pass_fail_flag_add_sticky_offset=num_array[5];
+ test_arg_6_step_status=num_array[6];
+ test_arg_7_lcdlr_offset=num_array[7];
+
+
+
+ printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
+ printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
+ printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
+ printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
+ printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
+ printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
+ printf("test_arg_6_step_status=%d\n",num_array[6]);
+ printf("\ntest_arg_7_lcdlr_offset=0x%08x\n",num_array[7]);
+
+
+
+
+ //for (temp_count= 0;temp_count < 8; temp_count++)
+ // {
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ //}
+
+
+ if(ddr_test_clear_flag)
+ { test_arg_6_step_status=0;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ printf("\n clear sticky register should reset,then over write ....\n");
+ run_command("reset",0);
+ while(1);
+ }
+
+ if(test_arg_6_step_status==0)
+ {
+ {
+
+ //test_arg_6_step_status=1;
+
+
+ for (temp_count = 0; temp_count < (8); temp_count++) //data
+ {
+ test_lcdlr_temp_value1=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
+ temp_count=temp_count+1;
+ test_lcdlr_temp_value2=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
+ reg_def_value_data[temp_count/2]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
+ printf("num_array[%d]=%08x\n",temp_count/2,num_array[temp_count/2]);
+ }
+
+ }
+ test_arg_4_step_flag_add_sticky_offset=0;
+ test_arg_5_pass_fail_flag_add_sticky_offset=0;
+ test_arg_6_step_status=0;
+ test_arg_7_lcdlr_offset=0;
+ if(ddr_test_init_offset)
+ {test_arg_7_lcdlr_offset=ddr_test_init_offset;
+ }
+ num_array[0] = reg_def_value_data[0] ;
+ num_array[1] = reg_def_value_data[1] ;
+ num_array[2] = reg_def_value_data[2] ;
+ num_array[3] = reg_def_value_data[3] ;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ; //use for kernel
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;//use for kernel
+ num_array[6] = test_arg_6_step_status ;
+ num_array[7] = test_arg_7_lcdlr_offset ;
+
+
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ for (temp_count = 0; temp_count < (8); temp_count++) //data
+ {
+ test_lcdlr_temp_value1=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
+ temp_count=temp_count+1;
+ test_lcdlr_temp_value2=do_ddr_read_write_ddr_data_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
+ reg_def_value_data[temp_count/2]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
+ num_array[temp_count/2]=reg_def_value_data[temp_count/2];
+ printf("re-num_array[%d]=%08x\n",temp_count/2,num_array[temp_count/2]);
+ }
+ }
+
+ if(ddr_test_uboot_kernel_enable_mask&1)
+ {printf("skip uboot test should init kernel offset value==0x%08x\n",num_array[7]);
+ }
+
+ test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ unsigned int lane_step_count=0;
+ {
+
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+
+ }
+
+ printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
+ printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
+ printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
+ printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
+ printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
+ printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
+ printf("test_arg_6_step_status=%d\n",num_array[6]);
+ printf("test_arg_7_lcdlr_offset=%d\n",num_array[7]);
+
+ if(test_arg_6_step_status==4) //uboot finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+
+ // unsigned int acmdlr= 0;
+
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
+
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+
+
+ }
+ if(ddr_test_uboot_kernel_enable_mask&2)
+ {
+ if(ddr_test_uboot_loop)
+ {
+ { test_arg_6_step_status=0;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ printf("\n clear sticky register should reset,then over write ....\n");
+ run_command("reset",0);
+ while(1);
+ }
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ return 1;
+ }
+ }
+
+
+
+ //if((test_arg_6_step_status==0)) //0 test left edge begin 1 test left edge ongoing 2//left_finish 3 right edge ongoing 4 right finish //5 kernel left edge ongoing 6 kernel left finish 7 kernel right ongoing
+ // uboot find from pass to fail offset 0->max
+ //kernel find from fail to pass offset from max ->0
+ if((test_arg_6_step_status<4)) //// uboot find from pass to fail offset 0->max
+ {
+ if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
+ ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
+ )
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
+ {
+ if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+
+ }
+
+
+
+
+ }
+ if(test_lcdlr_reach_lcdlr_limited_flag)
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ else if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL) //pass 1 error 2
+ {
+
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+
+
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l+1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r+1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ }
+
+ if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
+
+ }
+ }
+
+
+
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ //here will dead
+ if(test_arg_6_step_status>4)
+ {
+ //ddr_test_watchdog_disable(); //s
+ ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ // temp_count=5;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("run storeboot",0);
+ while(1);
+ } else
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+
+
+
+ {
+ //write org value
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
+ }
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+
+
+
+
+ }
+ }
+
+
+ if((test_arg_6_step_status==4)||(test_arg_6_step_status==6))
+ {
+ test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_UBOOT_FINISH;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
+ temp_count=4;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;//DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ }
+ if((test_arg_6_step_status>=4)) ////kernel find from fail to pass offset from max ->0
+ {
+ if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
+ ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
+ )
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
+ {
+ if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+
+ }
+
+
+
+
+ }
+ // if(test_lcdlr_reach_lcdlr_limited_flag)
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ else if((test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL)
+ //||(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL))//pass 2 error 1
+ )
+ {
+
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ }
+ else if (test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)//pass 2 error 1
+ {printf("\nfind drop power,test_arg_5_pass_fail_flag_add_sticky_offset=%d \n",test_arg_5_pass_fail_flag_add_sticky_offset);
+ }
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ }
+
+ if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
+
+ }
+ }
+
+
+
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ //here will dead
+ if(test_arg_6_step_status>4)
+ {
+ //ddr_test_watchdog_disable(); //s
+ ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ // temp_count=5;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("run storeboot",0);
+ while(1);
+ } else
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ {
+ //write org value
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
+ }
+ do_ddr_read_write_ddr_data_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+ }
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ }
+ }
+
+ if(test_arg_6_step_status>=8) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+
+
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+
+ test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_KERNEL_FINISH;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
+ temp_count=4;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ test_arg_6_step_status=0xffff;
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ ddr_test_watchdog_disable(); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ run_command("run storeboot",0);
+ while(1);
+ return 1;
+}
+
+
+int do_ddr4_test_dram_clk_use_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ///*
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ char *endp;
+
+#define TEST_DRAM_CLK_USE_ENV 1
+ printf("\ntune ddr CLK use uboot sticky register\n");
+
+#define DDR_CORSS_TALK_TEST_SIZE 0x20000
+#define DDR_TEST_MIN_FREQ_LIMITED 50
+#define DDR_TEST_MIN_FREQ 300
+ // #define DDR_TEST_MAX_FREQ 3000
+
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ unsigned int start_freq=DDR_TEST_MIN_FREQ;
+ unsigned int end_freq=DDR_TEST_MAX_FREQ;
+ unsigned int test_loops=1;
+ if (argc == 1)
+ {
+ printf("\nplease read help\n");
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ start_freq=DDR_TEST_MIN_FREQ;
+ end_freq=DDR_TEST_MAX_FREQ;
+
+ }
+
+ if (argc == 2)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq=DDR_TEST_MIN_FREQ;
+ end_freq=DDR_TEST_MAX_FREQ;
+ }
+ if (argc== 3)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=DDR_TEST_MAX_FREQ;
+
+ }
+ if (argc== 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
+
+ }
+ if (argc> 4)
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[1], &endp, 0);
+ start_freq= simple_strtoull_ddr(argv[2], &endp, 0);
+ end_freq=simple_strtoull_ddr(argv[3], &endp, 0);
+ test_loops=simple_strtoull_ddr(argv[4], &endp, 0);
+ }
+ unsigned int temp_test_error=0x0;
+ unsigned int ddr_pll=0;
+ unsigned int ddr_clk_org=0;
+ unsigned int ddr_clk_hope_test=0;
+ ddr_pll = rd_reg(AM_DDR_PLL_CNTL);
+ //ddr_pll=ddr_pll_org;
+ unsigned int ddr_clk = pll_convert_to_ddr_clk(ddr_pll);
+ ddr_clk_org=ddr_clk;
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+ printf("\nstart_freq== %dMHz\n", start_freq);
+ printf("\nend_freq== %dMHz\n", end_freq);
+ ddr_pll = ddr_clk_convert_to_pll(ddr_clk);
+ // {
+ // wr_reg(AM_DDR_PLL_CNTL, (((rd_reg(AM_DDR_PLL_CNTL))&(~(0xfffff)))|(ddr_pll)));
+ // ddr_udelay(2000);
+ //}
+
+
+ unsigned int freq_table_test_value[(DDR_TEST_MAX_FREQ)/24]; // step =0 init ,1 test fail, ,2 test pass,3 test skip;
+ // char char_freq_name_table[30];
+ // const char *p_char_freq_table;
+
+ // const char *p_char_ddr_test_step;
+ // const char * p_char_freq_org;
+ char char_freq_org[30];
+ int ddr_feq_test_step=0; // step =0 init ,1 going ,2 done;
+
+ // const char * p_char_freq_name_table;
+ char char_freq_name_table[30];
+ char char_cmd_table[100];
+ //char * p_char_store_boot;
+ // char char_freq_store_boot[200];
+
+ //const char *p_freq_table_int;
+ //char char_ddr_feq_test_step[]="ddr_feq_test_step";
+ // const char *varname;
+ // const char *varvalue;
+ unsigned int temp_count=0;
+ unsigned int temp_count_sub=0;
+
+
+
+ unsigned int str_to_numarry[64];
+ unsigned int *num_arry;
+
+ num_arry = (unsigned int *)(&str_to_numarry);
+ //int i;
+
+ unsigned int lcdlr_temp_count=0;
+ {
+ {
+
+ sticky_reg_base_add=(DDR0_PUB_REG_BASE&0xffff0000)+((DMC_STICKY_0)&0xffff);
+
+ for (i = 0; i < 63; i++) {
+ dmc_sticky[i]=rd_reg(sticky_reg_base_add+(i<<2));
+ //printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+
+ for (i = 0; i < 63; i++) {
+ num_arry[i]=dmc_sticky[i];
+ printf("str_to_numarry[%d]==%d\n",i,num_arry[i]);
+ }
+
+ }
+ }
+
+#define DDR_FEQ_TEST_STEP_OFFSET 8
+ //#define DDR_FEQ_TEST_STEP_OFFSET 8
+ unsigned int test_arg_0_cmd0 =0; //master cmd
+ unsigned int test_arg_1_cmd1 =0; //min cmd
+ unsigned int test_arg_2_step =0; //step 0 init -1 lane0 w min -2 lane0 w max -3 lane0 r min 4 lane0 r max -----5 lane1 w min ...
+ unsigned int test_arg_3_freq =0;
+ unsigned int test_arg_4_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ // unsigned int lane_step= 0;
+ //char str[24];
+ unsigned int boot_times=0;
+
+ test_arg_0_cmd0=num_arry[0];
+ test_arg_1_cmd1=num_arry[1];
+ test_arg_2_step=num_arry[2];
+ test_arg_3_freq=num_arry[3];
+ test_arg_4_step_status=num_arry[4];
+ boot_times=num_arry[5];
+ lcdlr_temp_count=num_arry[6];
+ printf("test_arg_0_cmd0==%d\n",test_arg_0_cmd0);
+ printf("test_arg_0_cmd1==%d\n",test_arg_1_cmd1);
+ printf("test_arg_2_step==%d\n",test_arg_2_step);
+ printf("test_arg_3_freq==%d\n",test_arg_3_freq);
+ printf("test_arg_4_step_status==%d\n",test_arg_4_step_status);
+ printf("test_arg_5 boottimes=%d\n",num_arry[5]);
+ printf("test_arg_6 lcdlr_temp_count=%d\n",num_arry[6]);
+ printf("test_arg_7=%d\n",num_arry[7]);
+
+ if((num_arry[7]==DMC_STICKY_MAGIC_1)) //for check magic number make sume enter test command
+ {boot_times++;
+
+ }
+ else
+ {boot_times=0;
+ printf("test_sticky is not magic nummber,boot times==%d\n",boot_times);
+ // writel(DMC_STICKY_MAGIC_0,(sticky_reg_base_add+(6<<2)));
+ writel(DMC_STICKY_MAGIC_1,(sticky_reg_base_add+(7<<2)));
+ test_arg_2_step=0;
+ num_arry[6]=0;
+ lcdlr_temp_count=0;
+ //return 1;
+ }
+ num_arry[5]=boot_times;
+
+ writel(num_arry[5],(sticky_reg_base_add+(5<<2)));
+
+
+
+ if(test_arg_2_step==0)
+ {
+
+ test_arg_0_cmd0=0x28;
+ test_arg_1_cmd1=0;
+ test_arg_2_step=1;
+ test_arg_3_freq=global_ddr_clk;
+ test_arg_4_step_status=0;
+ lcdlr_temp_count=0;
+ num_arry[0]=test_arg_0_cmd0;
+ num_arry[1]=test_arg_1_cmd1;
+ num_arry[2]=test_arg_2_step;
+ num_arry[3]=test_arg_3_freq;
+ num_arry[4]=test_arg_4_step_status;
+ num_arry[5]=boot_times;
+ lcdlr_temp_count=num_arry[6];
+ num_arry[6]=lcdlr_temp_count;
+ num_arry[7]=DMC_STICKY_MAGIC_1;
+ for (i = 8; i < 63; i++) {
+ num_arry[i]=0;
+ }
+ }
+
+ for (i = 0; i < 63; i++) {
+
+ writel(num_arry[i],(sticky_reg_base_add+(i<<2)));
+ }
+
+
+ ddr_feq_test_step=rd_reg(sticky_reg_base_add+(8<<2));
+ //
+ //p_char_ddr_test_step= getenv("ddr_feq_test_step");
+ // if (p_char_ddr_test_step)
+ {
+ // printf("%s",p_char_ddr_test_step);
+
+ // ddr_feq_test_step = simple_strtoull_ddr(p_char_ddr_test_step, &endp, 0);
+ printf("ddr_feq_test_step=%d\n",ddr_feq_test_step);
+ }
+ if (ddr_feq_test_step) {
+ //p_char_freq_org= getenv("ddr_feq_org");
+ //if (p_char_freq_org)
+ {
+ //printf("%s",p_char_freq_org);
+
+ // ddr_clk_org = simple_strtoull_ddr(p_char_freq_org, &endp, 10); //must use 10 ,freq 0792 maybe not read sussceful use 0 auto read
+ ddr_clk_org=rd_reg(sticky_reg_base_add+(9<<2));
+ printf("ddr_clk_org=%d\n",ddr_clk_org);
+ }
+ }
+ if (ddr_feq_test_step == 0)
+ {
+ ddr_feq_test_step=1;
+ ddr_clk_org=ddr_clk;
+ sprintf(char_freq_org,"%04d",ddr_clk);
+ printf("\nddr_org_freq=%s\n",char_freq_org);
+ //setenv("ddr_feq_org", char_freq_org);
+ writel(ddr_clk,(sticky_reg_base_add+(9<<2)));
+
+
+ temp_count=(start_freq/24);
+ while (temp_count<(DDR_TEST_MAX_FREQ/24)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ //setenv(char_freq_name_table, "0");
+ //setenv("ddr_feq_test_step", "1");
+ writel(0,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+ writel(1,(sticky_reg_base_add+(8<<2)));
+ temp_count++;
+ }
+ temp_count=(start_freq/24);
+ while (temp_count<((start_freq)/24)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ //setenv(char_freq_name_table, "3");
+ //setenv("ddr_feq_test_step", "1");
+ writel(3,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+ writel(1,(sticky_reg_base_add+(8<<2)));
+ temp_count++;
+ }
+ while (temp_count>((end_freq)/24)) {
+
+ // sprintf(freq_table,"%s%04d %01d %01d ",freq_table,(temp_count*12),0,0);
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ //setenv(char_freq_name_table, "3");
+ //setenv("ddr_feq_test_step", "1");
+ writel(3,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+ writel(1,(sticky_reg_base_add+(8<<2)));
+ temp_count++;
+ }
+
+ //p_char_store_boot= getenv("storeboot");
+ //if (p_char_store_boot)
+ //printf("storeboot %s\n",p_char_store_boot);
+ // sprintf(char_cmd_table,"ddr_test_cmd 0x1c 0x%08x %d %d %d;%s;",ddr_test_size,start_freq,end_freq,test_loops,p_char_store_boot);
+ // setenv("storeboot", char_cmd_table);
+
+ // run_command("save",0);
+
+
+
+ {
+ }
+
+ }
+
+ if (ddr_feq_test_step == 1)
+ {
+
+ temp_count=(start_freq/24);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ ddr_feq_test_step=rd_reg(sticky_reg_base_add+(8<<2));
+ // p_char_freq_name_table= getenv(char_freq_name_table);
+ // if (p_char_freq_name_table)
+ {
+ // printf("%s\n",p_char_freq_name_table);
+
+ // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
+ printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
+
+
+ }
+ temp_count++;
+ }
+
+ temp_count=(start_freq/24);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
+ ddr_clk_hope_test=(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24)));
+ if (freq_table_test_value[temp_count] ==1)
+ {
+ temp_count_sub=temp_count+1;
+ while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*24))) ==
+ (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))))
+ {temp_count_sub=temp_count_sub+1;
+ }
+ while (temp_count_sub<((DDR_TEST_MAX_FREQ)/24)) {
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count_sub*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ // freq_table_test_value[temp_count_sub] =1;
+ // setenv(char_freq_name_table, "3");
+ writel(3,(sticky_reg_base_add+((10+temp_count_sub-(start_freq/24))<<2)));
+
+ temp_count_sub++;
+ }
+ {
+ ddr_feq_test_step++;
+ //setenv("ddr_feq_test_step", "2");
+ // run_command("save",0);
+ writel(2,(sticky_reg_base_add+(8<<2)));
+
+ }
+ {ddr_clk_hope_test=ddr_clk_org;
+ }
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+
+ }
+ if (freq_table_test_value[temp_count] ==0)
+ {
+ if ((ddr_clk_hope_test) != (ddr_clk))
+ {
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+ }
+ if ((ddr_clk_hope_test) == (ddr_clk))
+ {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ freq_table_test_value[temp_count] =1;
+ // setenv(char_freq_name_table, "1");
+ // run_command("save",0);
+ writel(1,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+
+
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ while (test_loops--) {
+ temp_test_error=temp_test_error+ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+ //temp_test_error=temp_test_error+ddr_test_s_add_cross_talk_pattern(ddr_test_size);
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+ if (temp_test_error)
+ {
+ freq_table_test_value[temp_count] =1;
+ // setenv(char_freq_name_table, "1");
+ writel(1,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+ }
+ else
+ {
+ freq_table_test_value[temp_count] =2;
+ // setenv(char_freq_name_table, "2");
+ writel(2,(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2)));
+ }
+ // run_command("save",0);
+
+ ddr_clk_hope_test=(temp_count*24)+24;
+ while ((pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(ddr_clk_hope_test))) ==
+ (pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))))
+ {ddr_clk_hope_test=ddr_clk_hope_test+24;
+ }
+ if (temp_test_error)
+ {ddr_clk_hope_test=ddr_clk_org;
+ }
+ sprintf(char_cmd_table,"ddr_test_cmd 0x17 %d 0 0 0",ddr_clk_hope_test);
+ printf("\nchar_cmd_table=%s\n",char_cmd_table);
+ run_command(char_cmd_table,0);
+ }
+
+ }
+
+
+
+
+
+ temp_count++;
+ }
+ ddr_feq_test_step++;
+ //setenv("ddr_feq_test_step", "2");
+ //run_command("save",0);
+ writel(2,(sticky_reg_base_add+(8<<2)));
+
+ }
+
+ if (ddr_feq_test_step >= 2)
+ {
+ printf("\nfinish test ddr_feq_test_step=%d\n",ddr_feq_test_step);
+ temp_count=(start_freq/24);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ printf("\nchar_freq_name_table=%s\n",char_freq_name_table);
+
+ // p_char_freq_name_table= getenv(char_freq_name_table);
+ // if (p_char_freq_name_table)
+ {
+ // printf("%s\n",p_char_freq_name_table);
+
+ // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
+ printf("%s | %d\n",char_freq_name_table,freq_table_test_value[temp_count]);
+ }
+ temp_count++;
+ }
+
+ printf("\nprint test ddr_feq_test_result!!!\n");
+ temp_count=(start_freq/24);
+ while (temp_count<((DDR_TEST_MAX_FREQ)/24)) {
+
+ sprintf(char_freq_name_table,"ddr_fre_%04d",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))));
+ // p_char_freq_name_table= getenv(char_freq_name_table);
+ // if (p_char_freq_name_table)
+ {
+ // printf("%s\n",p_char_freq_name_table);
+
+ // freq_table_test_value[temp_count] = simple_strtoull_ddr(p_char_freq_name_table, &endp, 0);
+ freq_table_test_value[temp_count] =rd_reg(sticky_reg_base_add+((10+temp_count-(start_freq/24))<<2));
+
+ //printf("%d\n",freq_table_test_value[temp_count]);
+ if ( (freq_table_test_value[temp_count]) == 0) {
+ printf("%04d no init %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) == 1) {
+ printf("%04d fail %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) == 2) {
+ printf("%04d pass %d\n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
+ }
+ if ( (freq_table_test_value[temp_count]) >= 3) {
+ printf("%04d skip test %d \n",(pll_convert_to_ddr_clk(ddr_clk_convert_to_pll(temp_count*24))),freq_table_test_value[temp_count]);
+ }
+ temp_count++;
+ }
+ }
+
+ }
+ //sprintf(str,"ddr_test_ac_bit_setup_hold_window a 0 0x%08x %d 0x%08x",ddr_test_size,test_ac_setup_hold,( lane_step));
+ // printf("\nstr=%s\n",str);
+
+ //sprintf(str, "%lx", value);
+ // setenv("env_ddrtest", str);
+
+ //run_command("save",0);
+ //*/
+ return 1;
+
+}
+
+
+int do_ddr4_test_bist_test_use_sticky(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+#define DDR_TEST_CMD_TEST_ZQ 0
+#define DDR_TEST_CMD_TEST_AC_BIT_SETUP 1
+#define DDR_TEST_CMD_TEST_AC_BIT_HOLD 2
+#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_SETUP 3
+#define DDR_TEST_CMD_TEST_DATA_WRITE_BIT_HOLD 4
+#define DDR_TEST_CMD_TEST_DATA_READ_BIT_SETUP 5
+#define DDR_TEST_CMD_TEST_DATA_READ_BIT_HOLD 6
+#define DDR_TEST_CMD_TEST_DATA_VREF 7
+#define DDR_TEST_CMD_TEST_CLK_INVETER 8
+
+#define DDR_TEST_CMD_TEST_FULLTEST 0xffffffff
+ char *endp;
+ unsigned int pll, zqcr;
+ unsigned int zqpr_soc_dram=0;
+ unsigned int ddr_test_cmd_soc_vref=0;
+ unsigned int ddr_test_cmd_dram_vref=0;//0x3f;
+ unsigned int ddr_test_cmd_zq_vref=0;//0x3f;
+
+
+ unsigned int ddr_full_test_enable=0;
+ /*
+#define DDR3_DRV_40OHM 0
+#define DDR3_DRV_34OHM 1
+#define DDR3_ODT_0OHM 0
+#define DDR3_ODT_60OHM 1
+#define DDR3_ODT_120OHM 2
+#define DDR3_ODT_40OHM 3
+#define DDR3_ODT_20OHM 4
+#define DDR3_ODT_30OHM 5
+
+ // lpddr2 drv odt
+#define LPDDR2_DRV_34OHM 1
+#define LPDDR2_DRV_40OHM 2
+#define LPDDR2_DRV_48OHM 3
+#define LPDDR2_DRV_60OHM 4
+#define LPDDR2_DRV_80OHM 6
+#define LPDDR2_DRV_120OHM 7
+#define LPDDR2_ODT_0OHM 0
+
+ // lpddr3 drv odt
+#define LPDDR3_DRV_34OHM 1
+#define LPDDR3_DRV_40OHM 2
+#define LPDDR3_DRV_48OHM 3
+#define LPDDR3_DRV_60OHM 4
+#define LPDDR3_DRV_80OHM 6
+#define LPDDR3_DRV_34_40OHM 9
+#define LPDDR3_DRV_40_48OHM 10
+#define LPDDR3_DRV_34_48OHM 11
+#define LPDDR3_ODT_0OHM 0
+#define LPDDR3_ODT_60OHM 1
+#define LPDDR3_ODT_12OHM 2
+#define LPDDR3_ODT_240HM 3
+
+#define DDR4_DRV_34OHM 0
+#define DDR4_DRV_48OHM 1
+#define DDR4_ODT_0OHM 0
+#define DDR4_ODT_60OHM 1
+#define DDR4_ODT_120OHM 2
+#define DDR4_ODT_40OHM 3
+#define DDR4_ODT_240OHM 4
+#define DDR4_ODT_48OHM 5
+#define DDR4_ODT_80OHM 6
+#define DDR4_ODT_34OHM 7
+*/
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ unsigned int soc_data_drv_odt = 0;
+ unsigned int bist_test_dq_index = 0xff;
+ //unsigned int dram_drv = 0;
+ //unsigned int dram_odt = 0;
+ /* need at least two arguments */
+ if (argc < 2)
+ goto usage;
+
+ pll = simple_strtoull_ddr(argv[1], &endp,0);
+ if (*argv[1] == 0 || *endp != 0) {
+ printf ("Error: Wrong format parament!\n");
+ return 1;
+ }
+ if (argc >2)
+ {
+ zqcr = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0) {
+ zqcr = 0;
+ }
+ }
+ else
+ {
+ zqcr = 0;
+ }
+ bist_test_dq_index=0xff;
+ if(zqcr==0xffffffff)
+ {
+ ddr_full_test_enable=1;
+ zqcr=0;}
+
+ else if(zqcr>>24)
+ {
+ bist_test_dq_index=0+(zqcr>>24);
+ zqcr=zqcr&0x00ffffff;
+ }
+
+ printf("bist_test_dq_index[%d],\n", bist_test_dq_index);
+
+ if (argc >3)
+ {
+ // soc_data_drv_odt=zqpr_soc_dram&0xfffff;
+ // dram_drv=(zqpr_soc_dram>>20)&0xf;
+ // dram_odt=(zqpr_soc_dram>>24)&0xf;
+ //bit28 enable soc_zqpr ,bit 29 enabe dram_drv bit 30 enabel dram_odt
+ zqpr_soc_dram = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0) {
+ zqpr_soc_dram = 0;
+ }
+ }
+ else
+ {
+ zqpr_soc_dram = 0;
+ }
+
+ if (argc >4)
+ {
+ ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ }
+ else
+ {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ if (argc >5)
+ {
+ ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ ddr_test_cmd_dram_vref = 0;
+ }
+ }
+ unsigned int soc_dram_hex_dec=0;
+ if (argc >6)
+ {
+ soc_dram_hex_dec = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0) {
+ soc_dram_hex_dec = 0;
+ }
+ }
+ if (argc >7)
+ {
+ ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0) {
+ ddr_test_cmd_zq_vref = 0;
+ }
+ }
+ unsigned int soc_dram_drv_odt_use_vlaue=0;
+ unsigned int soc_ac_drv=0;
+ unsigned int soc_ac_odt=0;
+ unsigned int soc_data_drv=0;
+ unsigned int soc_data_odt=0;
+ unsigned int dram_drv=0;
+ unsigned int dram_odt=0;
+ unsigned int soc_data_drv_odt_adj_enable=0;
+ unsigned int dram_data_drv_adj_enable=0;
+ unsigned int dram_data_odt_adj_enable=0;
+
+ unsigned int zq0pr_org = rd_reg(DDR0_PUB_ZQ0PR);
+ unsigned int zq1pr_org = rd_reg(DDR0_PUB_ZQ1PR);
+ unsigned int pub_dcr= rd_reg(DDR0_PUB_DCR);
+#define DDR_TYPE_LPDDR2 0
+#define DDR_TYPE_LPDDR3 1
+#define DDR_TYPE_DDR3 3
+#define DDR_TYPE_DDR4 4
+ unsigned int ddr_type= pub_dcr&0x7; //0 -lpddr2 | 1- lpddr3 | 2- rev | 3 -ddr3 | 4- ddr4
+ // unsigned int zq2pr_org = rd_reg(DDR0_PUB_ZQ2PR);
+ if (argc >8)
+ {
+ soc_dram_drv_odt_use_vlaue = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0) {
+ soc_dram_drv_odt_use_vlaue = 0;
+ }
+ }
+ if(soc_dram_drv_odt_use_vlaue)
+ {if(zqcr)
+ {printf("zqcr[0x%08x],\n", zqcr);
+ {
+ soc_ac_drv=zqcr%100;
+ if(soc_ac_drv>100)
+ {soc_ac_drv=0;}
+ if(soc_ac_drv==0)
+ {soc_ac_drv=1;}
+ soc_ac_drv=(480/soc_ac_drv)-1;
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(soc_ac_drv>0xf)
+ {soc_ac_drv=zq0pr_org&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(soc_ac_drv>0xf)
+ {soc_ac_drv=(zq0pr_org>>8)&0xf;}
+ }
+ }
+
+
+ {
+ soc_ac_odt=zqcr/100;
+ if(soc_ac_odt>240)
+ {soc_ac_odt=480;}
+ if(soc_ac_odt==0)
+ {soc_ac_odt=1;}
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ soc_ac_odt=(360/soc_ac_odt)-1;
+ if(soc_ac_odt>0xf)
+ {soc_ac_odt=(zq0pr_org>>4)&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ soc_ac_odt=(480/soc_ac_odt)-1;
+ if(soc_ac_odt>0xf)
+ {soc_ac_odt=(zq0pr_org>>16)&0xf;}
+ }
+ }
+
+ zqcr=(soc_ac_odt<<16)|(soc_ac_drv<<12)|(soc_ac_drv<<8)|(soc_ac_odt<<4)|(soc_ac_drv);
+ printf("zqcr[0x%08x],soc_ac_odt [0x%08x],soc_ac_drv [0x%08x]\n", zqcr,soc_ac_odt,soc_ac_drv);
+ }
+ if(zqpr_soc_dram)
+ {printf("zqpr_soc_dram[0x%08x],\n", zqpr_soc_dram);
+ {
+ soc_data_drv=zqpr_soc_dram%100;
+ printf("soc_data_drv[%d],\n", soc_data_drv);
+ if(soc_data_drv>100)
+ {soc_data_drv=0;
+
+ }
+ if(soc_data_drv==0)
+ {soc_data_drv=1;
+ //soc_data_drv_odt_adj_enable=0;
+ }
+ else
+ {//soc_data_drv_odt_adj_enable=1;
+ }
+ soc_data_drv=(480/soc_data_drv)-1;
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(soc_data_drv>0xf)
+ {soc_data_drv=zq1pr_org&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(soc_data_drv>0xf)
+ {soc_data_drv=(zq1pr_org>>8)&0xf;}
+ }
+ }
+
+
+ {
+ soc_data_odt=(zqpr_soc_dram/100)%1000;
+ printf("soc_data_odt[%d],\n", soc_data_odt);
+ if(soc_data_odt>240)
+ {soc_data_odt=360;}
+ if(soc_data_odt==0)
+ {soc_data_odt=1;}
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ soc_data_odt=(360/soc_data_odt)-1;
+ if(soc_data_odt>0xf)
+ {soc_data_odt=(zq1pr_org>>4)&0xf;}
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ soc_data_odt=(480/soc_data_odt)-1;
+ if(soc_data_odt>0xf)
+ {soc_data_odt=(zq1pr_org>>16)&0xf;}
+ }
+
+ }
+
+ soc_data_drv_odt_adj_enable=1;
+
+ {
+ dram_drv=(zqpr_soc_dram/100000)%100;
+ printf("dram_drv[%d],\n", dram_drv);
+
+ if(dram_drv>100)
+ {dram_drv=0;}
+ if(dram_drv==0)
+ {
+ dram_data_drv_adj_enable=0;}
+ else
+ {dram_data_drv_adj_enable=1;
+ }
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(dram_drv>=40)
+ {dram_drv=0;}
+
+ else
+ {dram_drv=1;
+ }
+ }
+
+
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(dram_drv<48)
+ {dram_drv=0;}
+
+ else
+ {dram_drv=1;
+ }
+ }
+ }
+
+
+ {
+ dram_odt=(zqpr_soc_dram/100000)/100;
+ printf("dram_odt[%d],\n", dram_odt);
+ if(dram_odt>240)
+ {dram_odt=480;}
+ if(dram_odt==0)
+ {
+ dram_data_odt_adj_enable=0;
+ }
+ else
+ {dram_data_odt_adj_enable=1;
+ }
+
+
+ if(ddr_type==DDR_TYPE_DDR3)
+ {
+ if(dram_odt>160)
+ {dram_odt=0;}
+ else if (dram_odt>90)
+ {dram_odt=2;}
+ else if (dram_odt>50)
+ {dram_odt=1;}
+ else if (dram_odt>35)
+ {dram_odt=3;}
+ else if (dram_odt>25)
+ {dram_odt=5;}
+ else if (dram_odt<=25)
+ {dram_odt=4;}
+
+ }
+ if(ddr_type==DDR_TYPE_DDR4)
+ {
+ if(dram_odt>280)
+ {dram_odt=0;}
+ else if (dram_odt>180)
+ {dram_odt=4;}
+ else if (dram_odt>100)
+ {dram_odt=2;}
+ else if (dram_odt>70)
+ {dram_odt=6;}
+ else if (dram_odt>54)
+ {dram_odt=1;}
+ else if (dram_odt>44)
+ {dram_odt=5;}
+ else if (dram_odt>37)
+ {dram_odt=3;}
+ else if (dram_odt<=34)
+ {dram_odt=7;}
+
+ }
+
+
+
+ }
+
+ zqpr_soc_dram=(dram_data_odt_adj_enable<<30)|(dram_data_drv_adj_enable<<29)|(soc_data_drv_odt_adj_enable<<28)|
+ (dram_odt<<24)|(dram_drv<<20)|(soc_data_odt<<16)|(soc_data_drv<<12)|(soc_data_drv<<8)|(soc_data_odt<<4)|(soc_data_drv);
+ }
+ }
+
+
+ if (soc_dram_hex_dec)
+ {
+ if (argc >4)
+ {
+ ddr_test_cmd_soc_vref = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ }
+ else
+ {
+ ddr_test_cmd_soc_vref = 0;
+ }
+ if (argc >5)
+ {
+ ddr_test_cmd_dram_vref = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ ddr_test_cmd_dram_vref = 0;
+ }
+ }
+ if (argc >7)
+ {
+ ddr_test_cmd_zq_vref = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0) {
+ ddr_test_cmd_zq_vref = 0;
+ }
+ }
+ if (ddr_test_cmd_soc_vref)
+ {
+ if (ddr_test_cmd_soc_vref<45)
+ ddr_test_cmd_soc_vref=45;
+ if (ddr_test_cmd_soc_vref>88)
+ ddr_test_cmd_soc_vref=88;
+ ddr_test_cmd_soc_vref=(ddr_test_cmd_soc_vref*100-4407)/70;
+ }
+
+ if (ddr_test_cmd_dram_vref)
+ {
+ if (ddr_test_cmd_dram_vref<45)
+ ddr_test_cmd_dram_vref=45;
+ if (ddr_test_cmd_dram_vref>92)
+ ddr_test_cmd_dram_vref=92;
+ if (ddr_test_cmd_dram_vref>60) {
+ ddr_test_cmd_dram_vref=(ddr_test_cmd_dram_vref*100-6000)/65;
+ }
+ else{
+ ddr_test_cmd_dram_vref=((ddr_test_cmd_dram_vref*100-4500)/65)|(1<<6);
+ }
+ }
+
+
+ printf("\nSet ddr_test_cmd_dram_vref [0x%08x]\n",ddr_test_cmd_dram_vref);
+ if (ddr_test_cmd_zq_vref == 0)
+ ddr_test_cmd_zq_vref=0;
+ if (ddr_test_cmd_zq_vref) {
+ if (ddr_test_cmd_zq_vref<45)
+ ddr_test_cmd_zq_vref=45;
+ if (ddr_test_cmd_zq_vref>88)
+ ddr_test_cmd_zq_vref=88;
+ ddr_test_cmd_zq_vref=(ddr_test_cmd_zq_vref*100-4407)/70;
+ }
+ }
+
+ //if(ddr_test_cmd_type==DDR_TEST_CMD_TEST_AC_BIT_HOLD)
+ //{if (ddr_test_cmd_clk_seed ==0)
+ //ddr_test_cmd_clk_seed = 0x3f;
+ //if (ddr_test_cmd_acbdl_x_seed ==0)
+ //ddr_test_cmd_acbdl_x_seed = 0x3f;
+ //}
+
+#if defined(CONFIG_M6TV) || defined(CONFIG_M6TVD)
+ writel(zqcr | (0x3c << 24), PREG_STICKY_REG0);
+#else
+ writel(zqcr | (0xf14 << 20), PREG_STICKY_REG0);
+#endif
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ writel((ddr_test_cmd_zq_vref<<24)|(ddr_test_cmd_soc_vref<<8)|ddr_test_cmd_dram_vref , PREG_STICKY_REG9);
+ writel((zqpr_soc_dram<<0) , PREG_STICKY_REG8);
+ soc_data_drv_odt=zqpr_soc_dram&0xfffff;
+ dram_drv=(zqpr_soc_dram>>20)&0xf;
+ dram_odt=(zqpr_soc_dram>>24)&0xf;
+ printf("setting zqpr_soc_dram [0x%08x],..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n", zqpr_soc_dram);
+ printf("soc_data_drv_odt [0x%08x],dram_drv [0x%08x],dram_odt [0x%08x]\n", soc_data_drv_odt,dram_drv,dram_odt);
+ pll=pll|(bist_test_dq_index<<12);
+
+ if(ddr_full_test_enable)
+ {
+ pll=(ddr_full_test_enable<<21)|pll;
+ printf("ddr_full_test_enable %08x,set sticky reg1 bit 21 1\n", ddr_full_test_enable);
+ }
+
+#endif
+
+
+ writel(pll, PREG_STICKY_REG1);
+
+ printf("Set pll done [0x%08x]\n", readl(PREG_STICKY_REG1));
+ printf("STICKY_REG1 pll bit 12-19 use for bist dq index test 0xff is all 1 --> dq0 ,2--->dq1 \n");
+ printf("Set STICKY_REG0 [0x%08x]\n", readl(PREG_STICKY_REG0));
+ printf("Set STICKY_REG1 [0x%08x]\n", readl(PREG_STICKY_REG1));
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ printf("Set STICKY_REG9 [0x%08x]\n", readl(PREG_STICKY_REG9));
+ printf("Set STICKY_REG8 [0x%08x]\n", readl(PREG_STICKY_REG8));
+
+#endif
+ printf("\nbegin reset 111...........\n");
+ printf("\nbegin reset 2...........\n");
+ printf("\nbegin reset 3...........\n");
+
+#ifdef CONFIG_M8B
+ printf(" t1 \n");
+ writel(0xf080000 | 2000, WATCHDOG_TC);
+#else
+ printf(" t2 \n");
+ // writel(WATCHDOG_TC, 0xf400000 | 2000);
+ // *P_WATCHDOG_RESET = 0;
+ ddr_test_watchdog_reset_system();
+#endif
+ while(1);
+ return 0;
+
+usage:
+
+ printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
+ printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
+ printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
+ printf("or ddr_test_cmd 0x17 1200 6034 60346034 0 0 0 0 1 \n");
+ printf("setting zqpr_soc_dram ,..bit28 enable soc_zqpr , bit 29 enabe dram_drv, bit 30 enabel dram_odt\n");
+ printf("setting zqpr_soc_dram ,bit0-bit19 soc_data_drv_odt,bit20-bit24 dram_drv , bit24-bit28 dram_odt\n");
+ printf("setting zqpr_soc_dram ,bit0-bit19 bit 0-7 use for ddr3,bit8-19 use for ddr4,odt_down_up\n");
+ printf("setting zqpr_soc_dram ,soc_drv=(480/((setting)+1));ddr4---soc_odt=(480/(setting)+1));ddr3---soc_odt=(360/(setting)+1));\n");
+
+ printf(" DDR3_DRV_40OHM 0\n");
+ printf(" DDR3_DRV_34OHM 1\n\n");
+
+ printf(" DDR3_ODT_0OHM 0\n");
+ printf(" DDR3_ODT_60OHM 1\n");
+ printf(" DDR3_ODT_120OHM 2\n");
+ printf(" DDR3_ODT_40OHM 3\n");
+ printf(" DDR3_ODT_20OHM 4\n");
+ printf(" DDR3_ODT_30OHM 5\n\n\n");
+
+ printf(" LPDDR2_DRV_34OHM 1\n");
+ printf(" LPDDR2_DRV_40OHM 2\n");
+ printf(" LPDDR2_DRV_48OHM 3\n");
+ printf(" LPDDR2_DRV_60OHM 4\n");
+ printf(" LPDDR2_DRV_80OHM 6\n");
+ printf(" LPDDR2_DRV_120OHM 7\n\n");
+
+ printf(" LPDDR2_ODT_0OHM 0\n\n\n");
+
+
+ printf(" LPDDR3_DRV_34OHM 1\n");
+ printf(" LPDDR3_DRV_40OHM 2\n");
+ printf(" LPDDR3_DRV_48OHM 3\n");
+ printf(" LPDDR3_DRV_60OHM 4\n");
+ printf(" LPDDR3_DRV_80OHM 6\n");
+ printf(" LPDDR3_DRV_34_40OHM 9\n");
+ printf(" LPDDR3_DRV_40_48OHM 10\n");
+ printf(" LPDDR3_DRV_34_48OHM 11\n\n");
+
+ printf(" LPDDR3_ODT_0OHM 0\n");
+ printf(" LPDDR3_ODT_60OHM 1\n");
+ printf(" LPDDR3_ODT_12OHM 2\n");
+ printf(" LPDDR3_ODT_240HM 3\n\n\n");
+
+ printf(" DDR4_DRV_34OHM 0\n");
+ printf(" DDR4_DRV_48OHM 1\n\n");
+
+ printf(" DDR4_ODT_0OHM 0\n");
+ printf(" DDR4_ODT_60OHM 1\n");
+ printf(" DDR4_ODT_120OHM 2\n");
+ printf(" DDR4_ODT_40OHM 3\n");
+ printf(" DDR4_ODT_240OHM 4\n");
+ printf(" DDR4_ODT_48OHM 5\n");
+ printf(" DDR4_ODT_80OHM 6\n");
+ printf(" DDR4_ODT_34OHM 7\n\n\n\n");
+
+
+ cmd_usage(cmdtp);
+ return 1;
+}
+
+
+int do_ddr_set_bist_test_size_use_sticky_6(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char *endp;
+
+ unsigned int ddr_bist_test_size=0;
+
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ ddr_bist_test_size = simple_strtoull_ddr(argv[1], &endp,0);
+ ddr_bist_test_size=ddr_bist_test_size&0xffffffe0;
+ if (*argv[1] == 0 || *endp != 0) {
+ ddr_bist_test_size=0x3f0*2;
+ }
+
+ printf("ddr_bist_test_size 0x[%08x],\n", ddr_bist_test_size);
+
+#if ( CONFIG_DDR_PHY>=P_DDR_PHY_905X)
+ writel((ddr_bist_test_size<<0) , PREG_STICKY_REG6);
+ printf("Set STICKY_REG6 [0x%08x]\n", readl(PREG_STICKY_REG6));
+#endif
+
+ return 1;
+}
+
+unsigned int do_ddr_read_write_ddr_add__data_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
+{
+ unsigned reg_add=0;
+
+ if(add_index==0)
+ reg_add=(DDR0_PUB_ACLCDLR);
+ if(add_index==1)
+ reg_add=(DDR0_PUB_ACBDLR0);
+ {
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+ lcdlr_value=(((readl(reg_add))>>0)&0x1ff);
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+ wr_reg(reg_add, ((lcdlr_value&0x1ff)<<0));
+ }
+
+ }
+ printf("lcdlr %d %08x,%08x\n", add_index,reg_add,
+ (readl(reg_add)));
+ return lcdlr_value;
+}
+
+#endif
+//ouyang
+
+#define dwc_ddrphy_apb_wr(addr, dat) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))=((uint16_t)dat)
+#define dwc_ddrphy_apb_rd(addr) *(volatile uint16_t *)(int_convter_p(((addr) << 1)+0xfe000000))
+#define ACX_MAX 0x80
+
+//dwc_ddrphy_apb_wr((0<<20)|(2<<16)|(0<<12)|(0xb0),0);
+//dwc_ddrphy_apb_wr(0xd0000,0);
+//dwc_ddrphy_apb_wr(0xd0000,1);
+
+//*(volatile uint32_t *)(int_convter_p(test_addr))=des_pattern(temp_i,2,temp_k,temp_i);
+//dwc_ddrphy_apb_wr((ps<<20)|(0<<16)|(instance_num<<12)|(0x80),);
+
+//ddr_test_acx_g12a a length step test_mode ACx
+//ddr_test_acx_g12a a 0x8000000 1 0 0x1
+//argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]
+//argv[1],a
+//argv[2],test length
+//argv[3],test step
+//argv[4],test_mode,direction,0,up; 1,down; 2,down first,up follow;
+//argv[5],ACx;0-AC0,1-AC1,2-AC2...,9-AC9
+
+#if 0
+int do_ddr_test_acx_g12a(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nEnter test ddr ac bit window function\n");
+ printf("\nargc== 0x%08x\n", argc);
+ //unsigned int ddl_100step_ps= 0;
+
+ unsigned int temp_test_error= 0;
+ unsigned int temp_count= 0;
+ //unsigned int temp_reg_value[40];
+
+ char *endp;
+ unsigned int test_mode=0;
+ unsigned int test_ACx=0;
+ unsigned int reg_add=0;
+ unsigned int reg_base_adj=0;
+
+ unsigned int acbdlr_x_reg_org=0;
+ unsigned int acbdlr_x_reg_min=0;
+ unsigned int acbdlr_x_reg_max=0;
+
+ uint16_t dq_lcd_bdl_temp_reg_value=0;
+ uint16_t test_step=1;
+ unsigned int ddr_test_size= DDR_CORSS_TALK_TEST_SIZE;
+
+ if (argc <= 2)
+ {
+ goto usage;
+ }
+ else
+ {
+ ddr_test_size = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ ddr_test_size = DDR_CORSS_TALK_TEST_SIZE;
+ }
+ }
+ if (argc >3)
+ {
+ test_step = simple_strtoull_ddr(argv[3], &endp, 16);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ test_step = 1;
+ }
+ }
+ if (argc >4)
+ {
+ test_mode = simple_strtoull_ddr(argv[4], &endp, 16); //测试方向
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ test_mode = 0;
+ }
+ if ((strcmp(argv[4], "l") == 0) || (strcmp(argv[4], "L") == 0))
+ {
+ test_mode = 2;
+ }
+ }
+ if (test_mode >2) test_mode = 2;
+
+ test_ACx =0;
+ if (argc >5)
+ {
+
+ test_ACx= simple_strtoull_ddr(argv[5], &endp, 16);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ test_ACx = 0;
+ }
+ if (test_ACx>9)
+ test_ACx =0;//default test AC0
+ }
+
+ printf("ddr_test_size = 0x%08x\n", ddr_test_size);
+ printf("test_mode = 0x%08x\n", test_mode);
+ printf("test_ACx = 0x%08x\n", test_ACx);
+ dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
+ reg_base_adj=0xfe000000;
+ reg_add=(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj;
+
+ {
+
+ {
+ printf("test AC%d window start\n ",test_ACx);
+
+ if ((test_mode == 1) || (test_mode == 2))
+ {
+ dq_lcd_bdl_temp_reg_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
+ reg_add=((((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj);
+ acbdlr_x_reg_org=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));;
+ while (dq_lcd_bdl_temp_reg_value>0)
+ {
+ temp_test_error=0;
+ for(temp_count=0;temp_count < test_step;temp_count++)
+ {
+ if(dq_lcd_bdl_temp_reg_value==0) break;
+ dq_lcd_bdl_temp_reg_value--;
+ };
+ dq_lcd_bdl_temp_reg_value--;
+ printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
+ dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
+ {
+ dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),dq_lcd_bdl_temp_reg_value);
+ }
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ dq_lcd_bdl_temp_reg_value++;
+ temp_test_error = 0;
+ break;
+ }
+ }
+ printf("\n left edge detect ,reg==0x%08x\n",reg_add);
+ printf("\n org==0x%08x,left edge==0x%08x\n ",acbdlr_x_reg_org,dq_lcd_bdl_temp_reg_value);
+
+ acbdlr_x_reg_min= (int)dq_lcd_bdl_temp_reg_value;
+ printf("acbdlr_x_reg_min==0x%08x\n",acbdlr_x_reg_min);
+
+ dq_lcd_bdl_temp_reg_value=0;
+ //恢复默认值
+ dwc_ddrphy_apb_wr((0<<20)|(0<<16)|(test_ACx<<12)|(0x80),(uint16_t)acbdlr_x_reg_org);
+ }
+
+ if ((test_mode == 0) || (test_mode == 2))
+ {
+ dq_lcd_bdl_temp_reg_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
+ reg_add=((((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj);
+ acbdlr_x_reg_org=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(test_ACx<<12)|(0x80));
+ while (dq_lcd_bdl_temp_reg_value<ACX_MAX)
+ {
+ temp_test_error = 0;
+ for(temp_count=0;temp_count < test_step;temp_count++)
+ {
+ if(dq_lcd_bdl_temp_reg_value>=ACX_MAX) break;
+ dq_lcd_bdl_temp_reg_value++;
+ };
+ printf("\n reg_add==0x%08x,right temp==0x%08x\n,value==0x%08x",reg_add,dq_lcd_bdl_temp_reg_value,
+ dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
+ {
+ dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),dq_lcd_bdl_temp_reg_value);
+ }
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+
+ if (temp_test_error)
+ {
+ dq_lcd_bdl_temp_reg_value--;
+ temp_test_error = 0;
+ break;
+ }
+ }
+ printf("right edge detect ,reg = 0x%08x\n",reg_add);
+ printf("org = 0x%08x,right edge = 0x%08x,value = 0x%08x\n ",acbdlr_x_reg_org,dq_lcd_bdl_temp_reg_value,
+ dq_lcd_bdl_temp_reg_value-acbdlr_x_reg_org);
+
+ acbdlr_x_reg_max=(int)dq_lcd_bdl_temp_reg_value;
+ printf("acbdlr_x_reg_max = 0x%08x\n",acbdlr_x_reg_max);
+
+ dq_lcd_bdl_temp_reg_value=0;
+ //恢复默认值
+ dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80)),(uint)acbdlr_x_reg_org);
+ }
+ if (test_mode == 2)
+ {
+ //先往下测,再往上测,测试结束,打印结果
+ printf("test AC%d window finish\n ",test_ACx);
+ printf("acbdlr_x_reg_min = 0x%08x\n",acbdlr_x_reg_min);
+ printf("acbdlr_x_reg_max = 0x%08x\n",acbdlr_x_reg_max);
+ }
+ }
+ dwc_ddrphy_apb_wr(0xd0000,1);
+ return dq_lcd_bdl_temp_reg_value;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+ }
+
+}
+
+U_BOOT_CMD(
+ ddr_test_acx_g12a, 8, 1, do_ddr_test_acx_g12a,
+ "ddr_test_acx_g12a a length step direction ACx",
+ "ddr_test_acx_g12a a 0x8000000 1 0 0 \n"
+);
+
+//ddr_read_write_acx_g12a a rd/wr AC0 AC1 AC2 AC3 AC4 AC5 AC6 AC7 AC8 AC9
+//ddr_test_acx_g12a a 0 1 0 0x1
+//argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]
+//argv[1],a ,no use,reserve,just for flag
+//argv[2],rd/wr,0=read,1=write
+//argv[3],AC0
+//argv[4],AC1
+//argv[5],AC2;...,9-AC9
+
+int do_ddr_read_write_acx_g12a(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ unsigned int read_write_flag= 0;
+ //unsigned int temp_test_error= 0;
+ unsigned int temp_count= 0;
+ //unsigned int temp_reg_value[40];
+ uint16_t ACx[10];
+ char *endp;
+
+ printf("Enter ddr_read_write_acx_g12a function\n");
+ printf("argc== 0x%08x\n", argc);
+
+ if (argc <= 2)
+ {
+ goto usage;
+ }
+ else
+ {
+ read_write_flag = simple_strtoull_ddr(argv[2], &endp, 16);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ read_write_flag = 0;
+ }
+ }
+ if ((argc >12) && (read_write_flag == 1))
+ {
+ for(temp_count=0;temp_count < 10;temp_count++)
+ {
+ //read AC0-AC9 to ACx[0-9]
+ ACx[temp_count] = simple_strtoull_ddr(argv[temp_count+3], &endp, 16);
+ }
+ }
+ else
+ {
+ read_write_flag = 0;
+ }
+
+ dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
+ //0xfe000000;
+ //(((0<<20)|(0<<16)|(test_acbdl<<12)|(0x80))<<1) + 0xfe000000;
+ {
+ if (read_write_flag == 0)
+ {
+ for(temp_count=0;temp_count < 10;temp_count++)
+ {
+ ACx[temp_count]=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(temp_count<<12)|(0x80));
+ printf("Read: AC%d[0x%08x]==0x%08x\n",temp_count,(((0<<20)|(0<<16)|(temp_count<<12)|(0x80))<<1) + 0xfe000000,ACx[temp_count]);
+ };
+ }
+
+ if (read_write_flag == 1)
+ {
+
+ for(temp_count=0;temp_count < 10;temp_count++)
+ {
+ dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(temp_count<<12)|(0x80)),ACx[temp_count]);
+ printf("Write: AC%d[0x%08x]==0x%08x\n",temp_count,(((0<<20)|(0<<16)|(temp_count<<12)|(0x80))<<1) + 0xfe000000,dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(temp_count<<12)|(0x80)));
+ };
+ }
+ dwc_ddrphy_apb_wr(0xd0000,1);
+ return 0;
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+ }
+}
+
+U_BOOT_CMD(
+ ddr_read_write_acx_g12a, 18, 1, do_ddr_read_write_acx_g12a,
+ "ddr_read_write_acx_g12a a rd/wr ac0-ac9",
+ "ddr_read_write_acx_g12a a 0 3 3 3 \n"
+);
+#endif
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#define G12_DATA_READ_OFFSET_MAX (0X3F)
+#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
+
+#define DMC_TEST_WINDOW_INDEX_ATXDLY 1
+#define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
+#define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
+#define DMC_TEST_WINDOW_INDEX_TXDQDLY 4
+#define DMC_TEST_WINDOW_INDEX_RXPBDLY 5
+#define DMC_TEST_WINDOW_INDEX_RXENDLY 6
+
#define DMC_TEST_WINDOW_INDEX_EE_VOLTAGE 0x11
#define DMC_TEST_WINDOW_INDEX_SOC_VREF 0x12
-#define DMC_TEST_WINDOW_INDEX_DRAM_VREF 0x13
-
+#define DMC_TEST_WINDOW_INDEX_DRAM_VREF 0x13
+
uint32_t ddr_cacl_phy_delay_all_step(char test_index,uint32_t value)
-{
+{
//#define DMC_TEST_WINDOW_INDEX_ATXDLY 1
//#define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
//#define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
@@ -32863,10 +33852,10 @@ uint32_t ddr_cacl_phy_delay_all_step(char test_index,uint32_t value)
result=value;
}
return result;
-}
-
+}
+
uint32_t ddr_cacl_phy_over_ride_back_reg(char test_index,uint32_t value )
-{
+{
//#define DMC_TEST_WINDOW_INDEX_ATXDLY
//#define DMC_TEST_WINDOW_INDEX_TXDQSDLY 2
//#define DMC_TEST_WINDOW_INDEX_RXCLKDLY 3
@@ -32921,30 +33910,69 @@ uint32_t ddr_cacl_phy_over_ride_back_reg(char test_index,uint32_t value )
}
return result;
-}
-
-unsigned int do_ddr_g12_read_write_ddr_add_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
-{
- dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
- // reg_base_adj=0xfe000000;
- // reg_add=(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj;
- if(read_write_flag==DDR_PARAMETER_READ)
- {
-
- lcdlr_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(add_index<<12)|(0x80));
- }
- if(read_write_flag==DDR_PARAMETER_WRITE)
- {
-
- dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(add_index<<12)|(0x80)), lcdlr_value);
- }
-
- printf("rank_index %d add_index %d lcdlr== %d \n", rank_index,add_index,lcdlr_value);
- return lcdlr_value;
-}
-
-void dwc_window_reg_after_training_update(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_value)
-{
+}
+
+unsigned int do_ddr_g12_read_write_ddr_add_window_lcdlr(unsigned int rank_index,unsigned int add_index,unsigned int lcdlr_value,unsigned int read_write_flag )
+{
+ dwc_ddrphy_apb_wr(0xd0000,0);//mw fe1a0000 0
+ // reg_base_adj=0xfe000000;
+ // reg_add=(((0<<20)|(0<<16)|(test_ACx<<12)|(0x80))<<1) + reg_base_adj;
+ if(read_write_flag==DDR_PARAMETER_READ)
+ {
+
+ lcdlr_value=dwc_ddrphy_apb_rd((0<<20)|(0<<16)|(add_index<<12)|(0x80));
+ }
+ if(read_write_flag==DDR_PARAMETER_WRITE)
+ {
+
+ dwc_ddrphy_apb_wr(((0<<20)|(0<<16)|(add_index<<12)|(0x80)), lcdlr_value);
+ }
+
+ printf("rank_index %d add_index %d lcdlr== %d \n", rank_index,add_index,lcdlr_value);
+ return lcdlr_value;
+}
+
+void dwc_window_reg_after_training_update_increas_dq(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_increase_decrease,
+ uint32_t step_value)
+{
+ uint32_t delay_old_value=0;
+ uint32_t delay_reg_value=0;
+
+ uint64_t reg_add=0;
+ if (!over_ride_index)
+ return;
+
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>255)
+ delay_reg_value=255;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ // dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
+
+ }
+
+printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
+ delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
+ (unsigned int)ddr_cacl_phy_delay_all_step(over_ride_index, dwc_ddrphy_apb_rd(reg_add)));
+
+}
+
+void dwc_window_reg_after_training_update(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_value)
+{
uint32_t delay_old_value=0;
uint32_t delay_reg_value=0;
uint64_t reg_add=0;
@@ -32974,7 +34002,7 @@ void dwc_window_reg_after_training_update(char over_ride_index,uint32_t over_rid
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0xd0+(over_ride_sub_index/4)),delay_reg_value);
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value|(delay_old_value&0xffc0));
// {enable_bit5=(delay_old_value>>5)&1;}
@@ -32984,8 +34012,8 @@ void dwc_window_reg_after_training_update(char over_ride_index,uint32_t over_rid
if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
delay_old_value=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
//dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x18c+(over_ride_sub_index/4)),(delay_reg_value|(delay_old_value&0xffc0))-p_dev->ddr_gloabl_message.stick_phy_read_dqs_nibble_offset);
//dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x90+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)),(delay_reg_value|(delay_old_value&0xffc0)));
//dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x190+(over_ride_sub_index/4)),(delay_reg_value|(delay_old_value&0xffc0))-p_dev->ddr_gloabl_message.stick_phy_read_dqs_nibble_offset);
@@ -32999,548 +34027,572 @@ void dwc_window_reg_after_training_update(char over_ride_index,uint32_t over_rid
if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
}
if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXENDLY) {
- reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
+ reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x180+(over_ride_sub_index/4)),delay_reg_value|(delay_old_value&0xffc0));
}
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
- // delay_old_value= init_soc_vref(p_dev->cur_type ,(over_ride_value>>8)&0xff, over_ride_value, over_ride_sub_index ,p_dev->ddr_gloabl_message.stick_ddr_log_level);
- // set_soc_vref( p_dev->cur_type , (over_ride_value>>8)&0xff, over_ride_value, over_ride_sub_index );
- dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
- }
-
- printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
- delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
- (unsigned int)ddr_cacl_phy_delay_all_step(over_ride_index, delay_reg_value));
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
+ // delay_old_value= init_soc_vref(p_dev->cur_type ,(over_ride_value>>8)&0xff, over_ride_value, over_ride_sub_index ,p_dev->ddr_gloabl_message.stick_ddr_log_level);
+ // set_soc_vref( p_dev->cur_type , (over_ride_value>>8)&0xff, over_ride_value, over_ride_sub_index );
+ dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
+ }
+
+ printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
+ delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
+ (unsigned int)ddr_cacl_phy_delay_all_step(over_ride_index, delay_reg_value));
}
-
-void dwc_window_reg_after_training_update_increas_sub(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_increase_decrease,
- uint32_t step_value)
-{
- uint32_t delay_old_value=0;
- uint32_t delay_reg_value=0;
-
- uint64_t reg_add=0;
- if (!over_ride_index)
- return;
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
-
- reg_add=((0<<20)|(0<<16)|(over_ride_sub_index<<12)|(0x80));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+step_value;
- if(delay_reg_value>95)
- delay_reg_value=95;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=step_value)
- delay_reg_value=delay_reg_value-step_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr((reg_add),delay_reg_value);
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
+
+void dwc_window_reg_after_training_update_increas_sub(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_increase_decrease,
+ uint32_t step_value)
+{
+ uint32_t delay_old_value=0;
+ uint32_t delay_reg_value=0;
+
+ uint64_t reg_add=0;
+ if (!over_ride_index)
+ return;
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
+
+ reg_add=((0<<20)|(0<<16)|(over_ride_sub_index<<12)|(0x80));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>95)
+ delay_reg_value=95;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>=step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr((reg_add),delay_reg_value);
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0xd0+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
delay_old_value=dwc_ddrphy_apb_rd(reg_add);
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0xd0+(over_ride_sub_index/4)),delay_reg_value);
- // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value);
- if(over_ride_increase_decrease==0)
- // if(over_ride_value>ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value))
- {dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)+step_value)|(delay_old_value&0xffc0));
- if(((delay_old_value&0x3f)+step_value)>0x3f)
- dwc_ddrphy_apb_wr(reg_add,0x3f|(delay_old_value&0xffc0));
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value);
+
+
+//some case will happen tdqs from 0x1f to 0x0 or 0x0 to 0x1f ,then fast boot write back will happen error ,because
+// fast boot write back will re-calculate coarse UI,then result dq phase fail.
+/*
+ if(over_ride_increase_decrease==0)
+ // if(over_ride_value>ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value))
+ {dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)+step_value)|(delay_old_value&0xffc0));
+ if(((delay_old_value&0x3f)+step_value)>0x3f)
+ dwc_ddrphy_apb_wr(reg_add,0x3f|(delay_old_value&0xffc0));
}
- else
- {dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)-step_value)|(delay_old_value&0xffc0));
- if(((delay_old_value&0x3f)<step_value))
- dwc_ddrphy_apb_wr(reg_add,(delay_old_value&0xffc0));
- }
+ else
+ {//dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)-step_value)|(delay_old_value&0xffc0));
+ if(((delay_old_value&0x3f)<step_value))
+ dwc_ddrphy_apb_wr(reg_add,(delay_old_value&0xffc0));
+ else
+ dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)-step_value)|(delay_old_value&0xffc0));
+ }
+
+*/
+ if((over_ride_sub_index%2)==0)
+ {
+ char temp_test_index=DMC_TEST_WINDOW_INDEX_TXDQDLY;
+ char temp_count=0;
+ // if(over_ride_increase_decrease==0)
+ {
+ for ( temp_count=0;temp_count<9;temp_count++)
+ {
+ dwc_window_reg_after_training_update_increas_dq(temp_test_index
+ ,(((over_ride_sub_index)>>1)*9+temp_count), (!over_ride_increase_decrease),step_value) ;
+ }
+ }
+ }
+
+
// dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value|(delay_old_value&0xffc0));
// {enable_bit5=(delay_old_value>>5)&1;}
//delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value,enable_bit5);
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+step_value;
- if(delay_reg_value>255)
- delay_reg_value=255;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>step_value)
- delay_reg_value=delay_reg_value-step_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- // dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
-
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+step_value;
- if(delay_reg_value>95)
- delay_reg_value=95;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>step_value)
- delay_reg_value=delay_reg_value-step_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
-
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+step_value;
- if(delay_reg_value>63)
- delay_reg_value=63;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>step_value)
- delay_reg_value=delay_reg_value-step_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXENDLY) {
- ///*
- reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- // if(over_ride_value>ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value))
- {
- dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)+step_value)|(delay_old_value&0xffc0));
- if(((delay_old_value&0x3f)+step_value)>0x3f)
- dwc_ddrphy_apb_wr(reg_add,0x3f|(delay_old_value&0xffc0));
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>255)
+ delay_reg_value=255;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ // dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
+
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>95)
+ delay_reg_value=95;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value);
+
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>63)
+ delay_reg_value=63;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXENDLY) {
+ ///*
+ reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ // if(over_ride_value>ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value))
+ {
+ dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)+step_value)|(delay_old_value&0xffc0));
+ if(((delay_old_value&0x3f)+step_value)>0x3f)
+ dwc_ddrphy_apb_wr(reg_add,0x3f|(delay_old_value&0xffc0));
}
- else
- {
- dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)-step_value)|(delay_old_value&0xffc0));
- if(((delay_old_value&0x3f)<step_value))
- dwc_ddrphy_apb_wr(reg_add,(delay_old_value&0xffc0));
- }
- // delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- // dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
- //*/
- }
-
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
- //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
- //reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- delay_reg_value=delay_old_value;
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+step_value;
- if(delay_reg_value>127)
- delay_reg_value=127;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=step_value)
- delay_reg_value=delay_reg_value-step_value;
- else
- delay_reg_value=0;
- }
-//delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- }
- printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
- delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
- (unsigned int)ddr_cacl_phy_delay_all_step(over_ride_index, dwc_ddrphy_apb_rd(reg_add)));
-
-}
-
-
-void dwc_window_reg_after_training_update_increas(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_increase_decrease,
- uint32_t offset_value)
-{
- uint32_t delay_old_value=0;
- //uint32_t delay_reg_value=0;
- uint32_t temp_count_3=0;
- // uint32_t delay_old_value_cacl=0;
- // uint32_t delay_reg_value_cacl=0;
- //uint32_t over_ride_value=0;
- // if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY)
- //p_dev->ddr_gloabl_message.stick_ddr_log_level=0;
- //serial_puts("\nstick_test_ddr_window_delay_override_before_after_training_setting==");
- //serial_put_dec(p_dev->ddr_gloabl_message.stick_test_ddr_window_delay_override_before_after_training_setting);
- //serial_puts("\n");
- uint64_t reg_add=0;
- if (!over_ride_index) {
- return;
- }
-
- //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value);
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
- reg_add=((0<<20)|(0<<16)|(over_ride_sub_index<<12)|(0x80));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
- }
-
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0xd0+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0xd0+(over_ride_sub_index/4)),delay_reg_value);
- // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value);
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>96)
- delay_reg_value=96;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
- //dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value|(delay_old_value&0xffc0));
-
- // {enable_bit5=(delay_old_value>>5)&1;}
- //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value,enable_bit5);
- */
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>96)
- delay_reg_value=96;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_old_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
- dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value|(delay_old_value&0xffc0));
- */
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
-
- /*
- delay_old_value=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x18c+(over_ride_sub_index/8)));
- if(over_ride_increase_decrease==0)
- delay_reg_value=delay_old_value+1;
- if(over_ride_increase_decrease==1)
- delay_reg_value=delay_old_value-1;
- dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x18c+(over_ride_sub_index/8)),delay_reg_value|(delay_old_value&0xffc0));
- dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x190+(over_ride_sub_index/8)),delay_reg_value|(delay_old_value&0xffc0));
- */
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>96)
- delay_reg_value=96;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
- //delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value)+1;
- //if(over_ride_increase_decrease==1)
- //delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value)-1;
- //dwc_ddrphy_apb_wr(((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36))),delay_reg_value|(delay_old_value&0xffc0));
-delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- */
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
-
- }
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- delay_reg_value=delay_old_value;
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>96)
- delay_reg_value=96;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
-delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
- */
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
- }
-
- if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXENDLY) {
-
- reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>96)
- delay_reg_value=96;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
- delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
- */
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
- }
-
-
-if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
-
- //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
- //reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
- reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40));
- delay_old_value=dwc_ddrphy_apb_rd(reg_add);
- /*
- delay_reg_value=delay_old_value;
- if(over_ride_increase_decrease==0)
- {
- delay_reg_value=delay_reg_value+offset_value;
- if(delay_reg_value>127)
- delay_reg_value=127;
- }
- if(over_ride_increase_decrease==1)
- {
- if(delay_reg_value>=offset_value)
- delay_reg_value=delay_reg_value-offset_value;
- else
- delay_reg_value=0;
- }
-//delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
- dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
-*/
- for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
- {
- dwc_window_reg_after_training_update_increas_sub(over_ride_index
- ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
- }
- }
-
-printf("over_ride_increase_decrease==%d\n",over_ride_increase_decrease);
-
-if(over_ride_increase_decrease==1)
-{
-unsigned int org_cacl_value=(delay_old_value)&0x3f;
-printf("org_cacl_value==%d\n",org_cacl_value);
-printf("offset_value==%d\n",offset_value);
- if((org_cacl_value&0x3f)<offset_value){
-
- char temp_test_index_2=0;
- char temp_count_4=0;
- char temp_count_2=0;
- if(over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY)
- {
- temp_test_index_2=DMC_TEST_WINDOW_INDEX_TXDQDLY;
- if(over_ride_sub_index%2==0){
- for(temp_count_2=0;temp_count_2<9;temp_count_2++)
- {for(temp_count_4=0;temp_count_4<(offset_value-org_cacl_value);temp_count_4++)
+ else
+ {
+ dwc_ddrphy_apb_wr(reg_add,((delay_old_value&0x3f)-step_value)|(delay_old_value&0xffc0));
+ if(((delay_old_value&0x3f)<step_value))
+ dwc_ddrphy_apb_wr(reg_add,(delay_old_value&0xffc0));
+ }
+ // delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ // dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
+ //*/
+ }
+
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
+ //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
+ //reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ delay_reg_value=delay_old_value;
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+step_value;
+ if(delay_reg_value>127)
+ delay_reg_value=127;
+ }
+ if(over_ride_increase_decrease!=0)
+ {
+ if(delay_reg_value>=step_value)
+ delay_reg_value=delay_reg_value-step_value;
+ else
+ delay_reg_value=0;
+ }
+ //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ }
+ printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
+ delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
+ (unsigned int)ddr_cacl_phy_delay_all_step(over_ride_index, dwc_ddrphy_apb_rd(reg_add)));
+
+}
+
+
+void dwc_window_reg_after_training_update_increas(char over_ride_index,uint32_t over_ride_sub_index,uint32_t over_ride_increase_decrease,
+ uint32_t offset_value)
+{
+ uint32_t delay_old_value=0;
+ //uint32_t delay_reg_value=0;
+ uint32_t temp_count_3=0;
+ // uint32_t delay_old_value_cacl=0;
+ // uint32_t delay_reg_value_cacl=0;
+ //uint32_t over_ride_value=0;
+ // if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY)
+ //p_dev->ddr_gloabl_message.stick_ddr_log_level=0;
+ //serial_puts("\nstick_test_ddr_window_delay_override_before_after_training_setting==");
+ //serial_put_dec(p_dev->ddr_gloabl_message.stick_test_ddr_window_delay_override_before_after_training_setting);
+ //serial_puts("\n");
+ uint64_t reg_add=0;
+ if (!over_ride_index) {
+ return;
+ }
+
+ //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value);
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
+ reg_add=((0<<20)|(0<<16)|(over_ride_sub_index<<12)|(0x80));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+ }
+
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0xd0+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0xd0+(over_ride_sub_index/4)),delay_reg_value);
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%4)<<12)|(0x1d0+(over_ride_sub_index/4)),delay_reg_value);
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>96)
+ delay_reg_value=96;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_reg_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
+ //dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value|(delay_old_value&0xffc0));
+
+ // {enable_bit5=(delay_old_value>>5)&1;}
+ //delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, over_ride_value,enable_bit5);
+ */
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%8)>>1)<<12)|(0x8c+(over_ride_sub_index/8)+((over_ride_sub_index%2)<<8)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>96)
+ delay_reg_value=96;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_old_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
+ dwc_ddrphy_apb_wr(reg_add+4,delay_reg_value|(delay_old_value&0xffc0));
+ */
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+
+ /*
+ delay_old_value=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x18c+(over_ride_sub_index/8)));
+ if(over_ride_increase_decrease==0)
+ delay_reg_value=delay_old_value+1;
+ if(over_ride_increase_decrease==1)
+ delay_reg_value=delay_old_value-1;
+ dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x18c+(over_ride_sub_index/8)),delay_reg_value|(delay_old_value&0xffc0));
+ dwc_ddrphy_apb_wr((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x190+(over_ride_sub_index/8)),delay_reg_value|(delay_old_value&0xffc0));
+ */
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>96)
+ delay_reg_value=96;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_reg_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+ //delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value)+1;
+ //if(over_ride_increase_decrease==1)
+ //delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index,delay_old_value)-1;
+ //dwc_ddrphy_apb_wr(((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0xc0+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36))),delay_reg_value|(delay_old_value&0xffc0));
+delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ */
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+
+ }
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ delay_reg_value=delay_old_value;
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>96)
+ delay_reg_value=96;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_reg_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+ */
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+ }
+
+ if (over_ride_index == DMC_TEST_WINDOW_INDEX_RXENDLY) {
+
+ reg_add=((0<<20)|(1<<16)|((over_ride_sub_index%8)<<12)|(0x80+(over_ride_sub_index/8)));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ delay_reg_value=ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value);
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>96)
+ delay_reg_value=96;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_reg_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+ delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value|(delay_old_value&0xffc0));
+ */
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+ }
+
+
+if (over_ride_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
+
+ //dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value);
+ //reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(0x68+((over_ride_sub_index%9)<<8)+(over_ride_sub_index/36)));
+ reg_add=((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40));
+ delay_old_value=dwc_ddrphy_apb_rd(reg_add);
+ /*
+ delay_reg_value=delay_old_value;
+ if(over_ride_increase_decrease==0)
+ {
+ delay_reg_value=delay_reg_value+offset_value;
+ if(delay_reg_value>127)
+ delay_reg_value=127;
+ }
+ if(over_ride_increase_decrease==1)
+ {
+ if(delay_reg_value>=offset_value)
+ delay_reg_value=delay_reg_value-offset_value;
+ else
+ delay_reg_value=0;
+ }
+//delay_reg_value=ddr_cacl_phy_over_ride_back_reg(over_ride_index, delay_reg_value);
+ dwc_ddrphy_apb_wr(reg_add,delay_reg_value);
+*/
+ for( temp_count_3=0;temp_count_3<offset_value;temp_count_3++)
+ {
+ dwc_window_reg_after_training_update_increas_sub(over_ride_index
+ ,((over_ride_sub_index)), over_ride_increase_decrease,1) ;
+ }
+ }
+
+printf("over_ride_increase_decrease==%d\n",over_ride_increase_decrease);
+
+if(over_ride_increase_decrease==1)
+{
+unsigned int org_cacl_value=(delay_old_value)&0x3f;
+printf("org_cacl_value==%d\n",org_cacl_value);
+printf("offset_value==%d\n",offset_value);
+ if((org_cacl_value&0x3f)<offset_value){
+
+ char temp_test_index_2=0;
+ char temp_count_4=0;
+ char temp_count_2=0;
+ if(over_ride_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY)
+ {
+ temp_test_index_2=DMC_TEST_WINDOW_INDEX_TXDQDLY;
+ if(over_ride_sub_index%2==0){
+ for(temp_count_2=0;temp_count_2<9;temp_count_2++)
+ {for(temp_count_4=0;temp_count_4<(offset_value-org_cacl_value);temp_count_4++)
{
- dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
- ,((over_ride_sub_index>>1)*9+temp_count_2), 0,1) ;
- }
- }
- }
-/*
- temp_test_index_2=DMC_TEST_WINDOW_INDEX_TXDQSDLY;
- dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
- ,((over_ride_index%2)?
- (over_ride_index-1):
- (over_ride_index+1)), 0) ;
- }
-*/
- }
-if(over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY)
+ dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
+ ,((over_ride_sub_index>>1)*9+temp_count_2), 0,1) ;
+ }
+ }
+ }
+/*
+ temp_test_index_2=DMC_TEST_WINDOW_INDEX_TXDQSDLY;
+ dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
+ ,((over_ride_index%2)?
+ (over_ride_index-1):
+ (over_ride_index+1)), 0) ;
+ }
+*/
+ }
+if(over_ride_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY)
{
- temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXPBDLY;
+ temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXPBDLY;
-for( temp_count_2=0;temp_count_2<4;temp_count_2++)
- for(temp_count_4=0;temp_count_4<(((offset_value-org_cacl_value)*ui_1_32_100step)/bdlr_100step);temp_count_4++)
- {
+for( temp_count_2=0;temp_count_2<4;temp_count_2++)
+ for(temp_count_4=0;temp_count_4<(((offset_value-org_cacl_value)*ui_1_32_100step)/bdlr_100step);temp_count_4++)
+ {
{
- dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
- ,((over_ride_sub_index/2)*9+
- temp_count_2+(over_ride_sub_index%2)*4), 0,1) ;
+ dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
+ ,((over_ride_sub_index/2)*9+
+ temp_count_2+(over_ride_sub_index%2)*4), 0,1) ;
- }
- }
-}
-
- if(over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY)
- {
- temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXPBDLY;
-
- for( temp_count_2=0;temp_count_2<4;temp_count_2++)
- {
- if(temp_count_2==((over_ride_sub_index%9)%4))
- temp_count_2++;
-for(temp_count_4=0;temp_count_4<(offset_value-org_cacl_value);temp_count_4++)
- dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
- ,((over_ride_sub_index/9)*9+
- temp_count_2+(((over_ride_sub_index%9)>3)?4:0)), 0,1) ;
-
- }
- //bdlr_100step (org_cacl_value<offset_value)
- if((((offset_value-org_cacl_value)*bdlr_100step)/ui_1_32_100step))
- {
- temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXCLKDLY;
- for(temp_count_4=0;temp_count_4<(((offset_value-org_cacl_value)*bdlr_100step)/ui_1_32_100step);temp_count_4++)
- dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
- ,(((over_ride_sub_index/9)<<1)+
- (((over_ride_sub_index%9)>3)?1:0)
- ), 0,1) ;
- }
- }
- }
-}
- printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
- delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
- ddr_cacl_phy_delay_all_step(over_ride_index, dwc_ddrphy_apb_rd(reg_add)));
- //ddr_log_serial_puts(" ",0);
- //ddr_log_serial_put_hex(delay_reg_value,16,0);
- //ddr_log_serial_puts(" ",0);
- // ddr_dmc_update_delay_register_after();
-}
-
-int do_ddr2pll_g12_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-#define DMC_WINDOW_CMD 20180010 //g12_d2pll 1584 0 0 0 0 0x8
- //g12_d2pll 1600 5 0 0x10 1
- //g12_d2pll 1600 0 0 0 0 0x10 0 1
- //g12_d2pll 1400 0 0 0 0 0 0 0 0 1 1200 1900 test ddr frequency
- //g12_d2pll 1400 0 0 0 0 0 0 0 0 3 1200 1900 test ddr frequency with EE voltage
- //g12_d2pll 1600 0 0 0 0 0 0 0 1 //full test
- //g12_d2pll 1600 0 0 0 0 0 0 0 1 0 0 0 872 //full test with 872mv EE
- //g12_d2pll 1600 0 0 0 0 0x10 0 3 //only test spec sub_index delay window
- //g12_d2pll 1600 cmd_index cmd_para1 cmd_para2....
- //g12_d2pll 1600 0x1 override_option_ac_data_delay_vref override_index over_ride_value
- //g12_d2pll 1600 0x2 override plus fulltest
- //g12_d2pll 1600 0x3 override plus...other function
- //g12_d2pll 1600 0x11 window_test
- //g12_d2pll 1600 0x21 frequency table test
- //g12_d2pll 1600 0x31 sweep_ee_voltage_frequency table test
-
-
- //g12_d2pll 1800 1 //dmc fulltest
- //g12_d2pll 1800 2 1 1 1 03 2 2 142 0x11 0 950 override after_training_flag override_index sub_index value override_index2 sub_index2 value2 override_index3 sub_index3 value3
- //override 1 2 3 4 5 0x11
- //g12_d2pll 1800 2 1 0x12 0x1 0x0f6 override_soc_vref pin_index (vref_range<<8)|(vref_value)
-
- //g12_d2pll 1800 4 4/5/a //override_training_hdtl_ctl value
-
- //g12_d2pll 1800 0x21 //dmc suspend test
- //g12_d2pll 1800 0x11 0x1f 0 0 0 10 0x20 //dmc window test mask1 mask2 mask3 sub_index read_bit_init_value(use for very high speed)
- //g12_d2pll 1800 0x32 1300 1500 790 820 //dmc sweep freq and ee voltage test frequency_min frequency_max ee_voltage_min ee_voltage_max
- //g12_d2pll 1800 0x41 2 0 0xfe 0 0 1 0x01 0 0 1 2 0x100000 //dmc eye_test_enable init_range_0 range0 _value vref_start vref_end
- //init_range_2 range2_value vref_start2 vref_end2 pin_index_min pin_index_max test_size
-
-
-#define G12_D2PLL_CMD_DMC_FULL_TEST 0x01
+ }
+ }
+}
+
+ if(over_ride_index == DMC_TEST_WINDOW_INDEX_RXPBDLY)
+ {
+ temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXPBDLY;
+
+ for( temp_count_2=0;temp_count_2<4;temp_count_2++)
+ {
+ if(temp_count_2==((over_ride_sub_index%9)%4))
+ temp_count_2++;
+for(temp_count_4=0;temp_count_4<(offset_value-org_cacl_value);temp_count_4++)
+ dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
+ ,((over_ride_sub_index/9)*9+
+ temp_count_2+(((over_ride_sub_index%9)>3)?4:0)), 0,1) ;
+
+ }
+ //bdlr_100step (org_cacl_value<offset_value)
+ if((((offset_value-org_cacl_value)*bdlr_100step)/ui_1_32_100step))
+ {
+ temp_test_index_2=DMC_TEST_WINDOW_INDEX_RXCLKDLY;
+ for(temp_count_4=0;temp_count_4<(((offset_value-org_cacl_value)*bdlr_100step)/ui_1_32_100step);temp_count_4++)
+ dwc_window_reg_after_training_update_increas_sub(temp_test_index_2
+ ,(((over_ride_sub_index/9)<<1)+
+ (((over_ride_sub_index%9)>3)?1:0)
+ ), 0,1) ;
+ }
+ }
+ }
+}
+ printf("reg_add %08x old_value %08x update_to %08x dec %d to %d \n",((unsigned int)(((reg_add) << 1)+0xfe000000)),
+ delay_old_value,dwc_ddrphy_apb_rd(reg_add),ddr_cacl_phy_delay_all_step(over_ride_index, delay_old_value),
+ ddr_cacl_phy_delay_all_step(over_ride_index, dwc_ddrphy_apb_rd(reg_add)));
+ //ddr_log_serial_puts(" ",0);
+ //ddr_log_serial_put_hex(delay_reg_value,16,0);
+ //ddr_log_serial_puts(" ",0);
+ // ddr_dmc_update_delay_register_after();
+}
+
+int do_ddr2pll_g12_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+#define DMC_WINDOW_CMD 20180010 //g12_d2pll 1584 0 0 0 0 0x8
+ //g12_d2pll 1600 5 0 0x10 1
+ //g12_d2pll 1600 0 0 0 0 0x10 0 1
+ //g12_d2pll 1400 0 0 0 0 0 0 0 0 1 1200 1900 test ddr frequency
+ //g12_d2pll 1400 0 0 0 0 0 0 0 0 3 1200 1900 test ddr frequency with EE voltage
+ //g12_d2pll 1600 0 0 0 0 0 0 0 1 //full test
+ //g12_d2pll 1600 0 0 0 0 0 0 0 1 0 0 0 872 //full test with 872mv EE
+ //g12_d2pll 1600 0 0 0 0 0x10 0 3 //only test spec sub_index delay window
+ //g12_d2pll 1600 cmd_index cmd_para1 cmd_para2....
+ //g12_d2pll 1600 0x1 override_option_ac_data_delay_vref override_index over_ride_value
+ //g12_d2pll 1600 0x2 override plus fulltest
+ //g12_d2pll 1600 0x3 override plus...other function
+ //g12_d2pll 1600 0x11 window_test
+ //g12_d2pll 1600 0x21 frequency table test
+ //g12_d2pll 1600 0x31 sweep_ee_voltage_frequency table test
+
+
+ //g12_d2pll 1800 1 //dmc fulltest
+ //g12_d2pll 1800 2 1 1 1 03 2 2 142 0x11 0 950 override after_training_flag override_index sub_index value override_index2 sub_index2 value2 override_index3 sub_index3 value3
+ //override 1 2 3 4 5 0x11
+ //g12_d2pll 1800 2 1 0x12 0x1 0x0f6 override_soc_vref pin_index (vref_range<<8)|(vref_value)
+
+ //g12_d2pll 1800 4 4/5/a //override_training_hdtl_ctl value
+
+ //g12_d2pll 1800 0x21 //dmc suspend test
+ //g12_d2pll 1800 0x11 0x1f 0 0 0 10 0x20 //dmc window test mask1 mask2 mask3 sub_index read_bit_init_value(use for very high speed)
+ //g12_d2pll 1800 0x32 1300 1500 790 820 //dmc sweep freq and ee voltage test frequency_min frequency_max ee_voltage_min ee_voltage_max
+ //g12_d2pll 1800 0x41 2 0 0xfe 0 0 1 0x01 0 0 1 2 0x100000 //dmc eye_test_enable init_range_0 range0 _value vref_start vref_end
+ //init_range_2 range2_value vref_start2 vref_end2 pin_index_min pin_index_max test_size
+
+
+#define G12_D2PLL_CMD_DMC_FULL_TEST 0x01
#define G12_D2PLL_CMD_OVER_RIDE 0x02
#define G12_D2PLL_CMD_OVER_RIDE_PLUS_FULLTEST 0x03
#define G12_D2PLL_CMD_OVER_RIDE_TRAINING_HDTL 0x04
-#define G12_D2PLL_CMD_WINDOW_TEST 0x11
-#define G12_D2PLL_CMD_WINDOW_TEST_AND_STICKY_OVERRIDE 0x12
+#define G12_D2PLL_CMD_WINDOW_TEST 0x11
+#define G12_D2PLL_CMD_WINDOW_TEST_AND_STICKY_OVERRIDE 0x12
#define G12_D2PLL_CMD_SUSPEND_TEST 0x21
//#define G12_D2PLL_CMD_FREQUENCY_TABLE_TEST 0x31
#define G12_D2PLL_CMD_SWEEP_EE_VOLTAGE_FREQUENCY_TABLE_TEST 0x32
-#define G12_D2PLL_CMD_DDR_EYE_TEST 0x41
-#define G12_D2PLL_CMD_DDR_EYE_TEST_AND_STICKY_OVERRIDE 0x42
+#define G12_D2PLL_CMD_DDR_EYE_TEST 0x41
+#define G12_D2PLL_CMD_DDR_EYE_TEST_AND_STICKY_OVERRIDE 0x42
-#define G12_D2PLL_CMD_DDR_DVFS_TEST 0x51
+#define G12_D2PLL_CMD_DDR_DVFS_TEST 0x51
//OVERRIDE_OPTION
#define DMC_TEST_WINDOW_INDEX_ATXDLY 1
@@ -33549,290 +34601,290 @@ int do_ddr2pll_g12_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
#define DMC_TEST_WINDOW_INDEX_TXDQDLY 4
#define DMC_TEST_WINDOW_INDEX_RXPBDLY 5
-#define DMC_TEST_WINDOW_INDEX_EE_VOLTAGE 0x11
-
+#define DMC_TEST_WINDOW_INDEX_EE_VOLTAGE 0x11
+
char *endp;
- unsigned int pll;
- unsigned int window_test_stick_cmd_value=0;
-#if 0
- unsigned int stick_test_cmd_index=0; // 1 override_cmd 2
- unsigned int stick_test_ddr_window_delay_override_enable=0; // bit 0 ac 1 data dqs write 2 data dqs read 3 data bit write 4 data bit read 5//data write vref 6 //data read vref
- unsigned int stick_test_ddr_window_delay_override_index=0;
- unsigned int stick_test_ddr_window_delay_override_value=0;
- unsigned int stick_test_ddr_window_delay_override_before_after_training_setting=0; //0 before ,1 after training
- unsigned int stick_dmc_ddr_window_test_enable=0;
- unsigned int stick_dmc_ddr_window_test_enable_mask=0;
- unsigned int stick_dmc_ddr_window_test_enable_spec_sub_index=0;
- unsigned int stick_dmc_ddr_window_test_dmc_full_test_enable=0;
- unsigned int stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable=0;
-
- unsigned int stick_dmc_ddr_bl2_sweep_frequency_min=0;
- unsigned int stick_dmc_ddr_bl2_sweep_frequency_max=0;
- unsigned int stick_dmc_ddr_bl2_ee_voltage=0;
-#endif
- //if(window_test_stick_value)
- {
- //stick_test_ddr_window_delay_override_enable=((window_test_stick_value>>24)&0xf);//bit 0 ac bit1 write dq bit 2 read dq
- //stick_test_ddr_window_delay_override_index=((window_test_stick_value>>16)&0xff);
- //stick_test_ddr_window_delay_override_value=(window_test_stick_value&0xff);
- }
+ unsigned int pll;
+ unsigned int window_test_stick_cmd_value=0;
+#if 0
+ unsigned int stick_test_cmd_index=0; // 1 override_cmd 2
+ unsigned int stick_test_ddr_window_delay_override_enable=0; // bit 0 ac 1 data dqs write 2 data dqs read 3 data bit write 4 data bit read 5//data write vref 6 //data read vref
+ unsigned int stick_test_ddr_window_delay_override_index=0;
+ unsigned int stick_test_ddr_window_delay_override_value=0;
+ unsigned int stick_test_ddr_window_delay_override_before_after_training_setting=0; //0 before ,1 after training
+ unsigned int stick_dmc_ddr_window_test_enable=0;
+ unsigned int stick_dmc_ddr_window_test_enable_mask=0;
+ unsigned int stick_dmc_ddr_window_test_enable_spec_sub_index=0;
+ unsigned int stick_dmc_ddr_window_test_dmc_full_test_enable=0;
+ unsigned int stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable=0;
+
+ unsigned int stick_dmc_ddr_bl2_sweep_frequency_min=0;
+ unsigned int stick_dmc_ddr_bl2_sweep_frequency_max=0;
+ unsigned int stick_dmc_ddr_bl2_ee_voltage=0;
+#endif
+ //if(window_test_stick_value)
+ {
+ //stick_test_ddr_window_delay_override_enable=((window_test_stick_value>>24)&0xf);//bit 0 ac bit1 write dq bit 2 read dq
+ //stick_test_ddr_window_delay_override_index=((window_test_stick_value>>16)&0xff);
+ //stick_test_ddr_window_delay_override_value=(window_test_stick_value&0xff);
+ }
/* need at least two arguments */
if (argc < 2)
goto usage;
pll = simple_strtoul(argv[1], &endp,0);
if (*argv[1] == 0 || *endp != 0) {
- printf ("Error: Wrong format parament!pll=0x%08x\n",pll);
+ printf ("Error: Wrong format parament!pll=0x%08x\n",pll);
return 1;
- }
- unsigned int argc_count=1;
- unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
- while(argc_count<argc)
- {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
- if (*argv[argc_count] == 0 || *endp != 0) {
- para_meter[argc_count-1] = 0;
- }
- argc_count++;
- }
-
- //if(stick_test_cmd_index==)
-#if 0
- if (argc >4)
- {
- stick_test_ddr_window_delay_override_enable=0;
- stick_test_ddr_window_delay_override_enable = simple_strtoul(argv[2], &endp, 0);
+ }
+ unsigned int argc_count=1;
+ unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
+ while(argc_count<argc)
+ {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
+ if (*argv[argc_count] == 0 || *endp != 0) {
+ para_meter[argc_count-1] = 0;
+ }
+ argc_count++;
+ }
+
+ //if(stick_test_cmd_index==)
+#if 0
+ if (argc >4)
+ {
+ stick_test_ddr_window_delay_override_enable=0;
+ stick_test_ddr_window_delay_override_enable = simple_strtoul(argv[2], &endp, 0);
if (*argv[2] == 0 || *endp != 0) {
- stick_test_ddr_window_delay_override_enable = 0;
- }
- stick_test_ddr_window_delay_override_index = simple_strtoul(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0) {
- stick_test_ddr_window_delay_override_index = 0;
- }
- stick_test_ddr_window_delay_override_value = simple_strtoul(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0) {
- stick_test_ddr_window_delay_override_value = 0;
+ stick_test_ddr_window_delay_override_enable = 0;
+ }
+ stick_test_ddr_window_delay_override_index = simple_strtoul(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0) {
+ stick_test_ddr_window_delay_override_index = 0;
+ }
+ stick_test_ddr_window_delay_override_value = simple_strtoul(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0) {
+ stick_test_ddr_window_delay_override_value = 0;
}
}
else
- { stick_test_ddr_window_delay_override_enable=0;
- stick_test_ddr_window_delay_override_index = 0;
- stick_test_ddr_window_delay_override_value = 0;
- }
-
- if (argc >5)
- {
- stick_test_ddr_window_delay_override_before_after_training_setting = simple_strtoul(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0) {
- stick_test_ddr_window_delay_override_before_after_training_setting = 0;
- }
- }
- if (argc >6)
- {
- stick_dmc_ddr_window_test_enable = simple_strtoul(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0) {
- stick_dmc_ddr_window_test_enable = 0;
- }
- }
- if (argc >7)
- {
- stick_dmc_ddr_window_test_enable_mask = simple_strtoul(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0) {
- stick_dmc_ddr_window_test_enable_mask = 0;
- }
- }
- if (argc >8)
- {
- stick_dmc_ddr_window_test_enable_spec_sub_index = simple_strtoul(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0) {
- stick_dmc_ddr_window_test_enable_spec_sub_index = 0;
- }
- }
- if (argc >9)
- {
- stick_dmc_ddr_window_test_dmc_full_test_enable = simple_strtoul(argv[9], &endp, 0);
- if (*argv[9] == 0 || *endp != 0) {
- stick_dmc_ddr_window_test_dmc_full_test_enable = 0;
- }
- }
- if (argc >10)
- {
- stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable = simple_strtoul(argv[10], &endp, 0);
- if (*argv[10] == 0 || *endp != 0) {
- stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable = 0;
- }
- }
- if (argc >11)
- {
- stick_dmc_ddr_bl2_sweep_frequency_min = simple_strtoul(argv[11], &endp, 0);
- if (*argv[11] == 0 || *endp != 0) {
- stick_dmc_ddr_bl2_sweep_frequency_min = 0;
- }
- }
- if (argc >12)
- {
- stick_dmc_ddr_bl2_sweep_frequency_max = simple_strtoul(argv[12], &endp, 0);
- if (*argv[12] == 0 || *endp != 0) {
- stick_dmc_ddr_bl2_sweep_frequency_max = 0;
- }
- }
- if (argc >13)
- {
- stick_dmc_ddr_bl2_ee_voltage = simple_strtoul(argv[13], &endp, 0);
- if (*argv[13] == 0 || *endp != 0) {
- stick_dmc_ddr_bl2_ee_voltage = 0;
- }
- }
-
-
+ { stick_test_ddr_window_delay_override_enable=0;
+ stick_test_ddr_window_delay_override_index = 0;
+ stick_test_ddr_window_delay_override_value = 0;
+ }
+
+ if (argc >5)
+ {
+ stick_test_ddr_window_delay_override_before_after_training_setting = simple_strtoul(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0) {
+ stick_test_ddr_window_delay_override_before_after_training_setting = 0;
+ }
+ }
+ if (argc >6)
+ {
+ stick_dmc_ddr_window_test_enable = simple_strtoul(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0) {
+ stick_dmc_ddr_window_test_enable = 0;
+ }
+ }
+ if (argc >7)
+ {
+ stick_dmc_ddr_window_test_enable_mask = simple_strtoul(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0) {
+ stick_dmc_ddr_window_test_enable_mask = 0;
+ }
+ }
+ if (argc >8)
+ {
+ stick_dmc_ddr_window_test_enable_spec_sub_index = simple_strtoul(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0) {
+ stick_dmc_ddr_window_test_enable_spec_sub_index = 0;
+ }
+ }
+ if (argc >9)
+ {
+ stick_dmc_ddr_window_test_dmc_full_test_enable = simple_strtoul(argv[9], &endp, 0);
+ if (*argv[9] == 0 || *endp != 0) {
+ stick_dmc_ddr_window_test_dmc_full_test_enable = 0;
+ }
+ }
+ if (argc >10)
+ {
+ stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable = simple_strtoul(argv[10], &endp, 0);
+ if (*argv[10] == 0 || *endp != 0) {
+ stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable = 0;
+ }
+ }
+ if (argc >11)
+ {
+ stick_dmc_ddr_bl2_sweep_frequency_min = simple_strtoul(argv[11], &endp, 0);
+ if (*argv[11] == 0 || *endp != 0) {
+ stick_dmc_ddr_bl2_sweep_frequency_min = 0;
+ }
+ }
+ if (argc >12)
+ {
+ stick_dmc_ddr_bl2_sweep_frequency_max = simple_strtoul(argv[12], &endp, 0);
+ if (*argv[12] == 0 || *endp != 0) {
+ stick_dmc_ddr_bl2_sweep_frequency_max = 0;
+ }
+ }
+ if (argc >13)
+ {
+ stick_dmc_ddr_bl2_ee_voltage = simple_strtoul(argv[13], &endp, 0);
+ if (*argv[13] == 0 || *endp != 0) {
+ stick_dmc_ddr_bl2_ee_voltage = 0;
+ }
+ }
+
+
#if defined(CONFIG_M6TV) || defined(CONFIG_M6TVD)
- wr_reg( PREG_STICKY_REG0,0 | (0x3c << 24));
+ wr_reg( PREG_STICKY_REG0,0 | (0x3c << 24));
#else
- wr_reg(PREG_STICKY_REG0,0 | (0xf13 << 20));
-#endif
-
- if(stick_dmc_ddr_window_test_enable)
- {
- wr_reg(PREG_STICKY_REG0,((stick_dmc_ddr_window_test_enable_spec_sub_index&0xff)<<8)|(stick_dmc_ddr_window_test_enable&0xff) | (0xf12<< 20));
- }
- //wr_reg(PREG_STICKY_REG1,pll | (rd_reg(PREG_STICKY_REG1)));
- wr_reg(PREG_STICKY_REG1,pll );
- wr_reg(PREG_STICKY_REG2,(stick_test_ddr_window_delay_override_value&0xffff) |((stick_test_ddr_window_delay_override_index&0xff)<<16)
- |((stick_test_ddr_window_delay_override_enable&0x7)<<29)
- |((stick_test_ddr_window_delay_override_before_after_training_setting&0x1)<<28));
- if(stick_dmc_ddr_window_test_enable_mask)
- {
- wr_reg(PREG_STICKY_REG3,(stick_dmc_ddr_window_test_enable_mask));
- }
- // if(stick_dmc_ddr_window_test_dmc_full_test_enable)
- {
- wr_reg(PREG_STICKY_REG4,(stick_dmc_ddr_window_test_dmc_full_test_enable<<31)|(stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable<<29));
- }
- if(stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable)
- {
- wr_reg(PREG_STICKY_REG5,(stick_dmc_ddr_bl2_sweep_frequency_min<<0)|(stick_dmc_ddr_bl2_sweep_frequency_max<<16));
- }
- if(stick_dmc_ddr_bl2_ee_voltage)
- {
- wr_reg(PREG_STICKY_REG6,(stick_dmc_ddr_bl2_ee_voltage<<0));
- }
-#endif
- argc_count=2;
- window_test_stick_cmd_value=para_meter[argc_count-1];
- if((window_test_stick_cmd_value==G12_D2PLL_CMD_OVER_RIDE)||(window_test_stick_cmd_value==G12_D2PLL_CMD_OVER_RIDE_PLUS_FULLTEST))
- {
- para_meter[3]=(para_meter[3]<<24)|(para_meter[4]<<16)|(para_meter[5]<<0);
- para_meter[4]=(para_meter[6]<<24)|(para_meter[7]<<16)|(para_meter[8]<<0);
- para_meter[5]=(para_meter[9]<<24)|(para_meter[10]<<16)|(para_meter[11]<<0);
-
- }
- if((window_test_stick_cmd_value==G12_D2PLL_CMD_WINDOW_TEST)||(window_test_stick_cmd_value==G12_D2PLL_CMD_WINDOW_TEST_AND_STICKY_OVERRIDE))
- {
- //para_meter[8] size 9 stick_dmc_ddr_window_test_no_use_dqs_dq_correction 10 disable_scramble_use_define_pattern 11 stick_dmc_window_test_loop_flag window loop test
- //12 if reinit when test dq
- para_meter[5]=(para_meter[9]<<28)|(para_meter[10]<<24)|(para_meter[11]<<20)|(para_meter[12]<<21)|(para_meter[5]<<0);
-
- }
- if((window_test_stick_cmd_value==G12_D2PLL_CMD_DDR_EYE_TEST)||(window_test_stick_cmd_value==G12_D2PLL_CMD_DDR_EYE_TEST_AND_STICKY_OVERRIDE))
- {
-
- para_meter[3]=(para_meter[3]<<0)|(para_meter[4]<<8)|(para_meter[5]<<16)|(para_meter[6]<<24);
- para_meter[4]=(para_meter[7]<<0)|(para_meter[8]<<8)|(para_meter[9]<<16)|(para_meter[10]<<24);
- para_meter[5]=para_meter[11];//(para_meter[11]<<0)|(para_meter[12]<<8)|(para_meter[13]<<16)|(para_meter[14]<<24);
- para_meter[6]=para_meter[12];//para_meter[15];
- para_meter[7]=para_meter[13];//para_meter[16];
- para_meter[8]=para_meter[14];//para_meter[17];
- }
- wr_reg(PREG_STICKY_REG0,(rd_reg(PREG_STICKY_REG0)&0xffff) | (0xf13 << 20));
- argc_count=0;
- printf("P_PREG_STICKY_REG [0x%08x] [0x%08x]==[0x%08x]\n", argc_count,(PREG_STICKY_REG0+(argc_count<<2)),rd_reg(PREG_STICKY_REG0+(argc_count<<2)));
- argc_count=1;
- //while(argc_count<argc)
- while(argc_count<10)
- {
- wr_reg(PREG_STICKY_REG0+(argc_count<<2),para_meter[argc_count-1]);
- printf("P_PREG_STICKY_REG [0x%08x] [0x%08x]==[0x%08x]\n", argc_count,(PREG_STICKY_REG0+(argc_count<<2)),rd_reg(PREG_STICKY_REG0+(argc_count<<2)));
- argc_count++;
- }
- /*
- printf("P_PREG_STICKY_REG0 [0x%08x]\n", rd_reg(PREG_STICKY_REG0));
- printf("P_PREG_STICKY_REG1 [0x%08x]\n", rd_reg(PREG_STICKY_REG1));
- printf("P_PREG_STICKY_REG2 [0x%08x]\n", rd_reg(PREG_STICKY_REG2));
- printf("P_PREG_STICKY_REG3 [0x%08x]\n", rd_reg(PREG_STICKY_REG3));
- printf("P_PREG_STICKY_REG4 [0x%08x]\n", rd_reg(PREG_STICKY_REG4));
- printf("P_PREG_STICKY_REG5 [0x%08x]\n", rd_reg(PREG_STICKY_REG5));
- printf("P_PREG_STICKY_REG6 [0x%08x]\n", rd_reg(PREG_STICKY_REG6));
- */
- printf("reset...\n");
-
- ddr_test_watchdog_reset_system();
-
-
+ wr_reg(PREG_STICKY_REG0,0 | (0xf13 << 20));
+#endif
+
+ if(stick_dmc_ddr_window_test_enable)
+ {
+ wr_reg(PREG_STICKY_REG0,((stick_dmc_ddr_window_test_enable_spec_sub_index&0xff)<<8)|(stick_dmc_ddr_window_test_enable&0xff) | (0xf12<< 20));
+ }
+ //wr_reg(PREG_STICKY_REG1,pll | (rd_reg(PREG_STICKY_REG1)));
+ wr_reg(PREG_STICKY_REG1,pll );
+ wr_reg(PREG_STICKY_REG2,(stick_test_ddr_window_delay_override_value&0xffff) |((stick_test_ddr_window_delay_override_index&0xff)<<16)
+ |((stick_test_ddr_window_delay_override_enable&0x7)<<29)
+ |((stick_test_ddr_window_delay_override_before_after_training_setting&0x1)<<28));
+ if(stick_dmc_ddr_window_test_enable_mask)
+ {
+ wr_reg(PREG_STICKY_REG3,(stick_dmc_ddr_window_test_enable_mask));
+ }
+ // if(stick_dmc_ddr_window_test_dmc_full_test_enable)
+ {
+ wr_reg(PREG_STICKY_REG4,(stick_dmc_ddr_window_test_dmc_full_test_enable<<31)|(stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable<<29));
+ }
+ if(stick_dmc_ddr_bl2_sweep_frequency_ee_voltage_enable)
+ {
+ wr_reg(PREG_STICKY_REG5,(stick_dmc_ddr_bl2_sweep_frequency_min<<0)|(stick_dmc_ddr_bl2_sweep_frequency_max<<16));
+ }
+ if(stick_dmc_ddr_bl2_ee_voltage)
+ {
+ wr_reg(PREG_STICKY_REG6,(stick_dmc_ddr_bl2_ee_voltage<<0));
+ }
+#endif
+ argc_count=2;
+ window_test_stick_cmd_value=para_meter[argc_count-1];
+ if((window_test_stick_cmd_value==G12_D2PLL_CMD_OVER_RIDE)||(window_test_stick_cmd_value==G12_D2PLL_CMD_OVER_RIDE_PLUS_FULLTEST))
+ {
+ para_meter[3]=(para_meter[3]<<24)|(para_meter[4]<<16)|(para_meter[5]<<0);
+ para_meter[4]=(para_meter[6]<<24)|(para_meter[7]<<16)|(para_meter[8]<<0);
+ para_meter[5]=(para_meter[9]<<24)|(para_meter[10]<<16)|(para_meter[11]<<0);
+
+ }
+ if((window_test_stick_cmd_value==G12_D2PLL_CMD_WINDOW_TEST)||(window_test_stick_cmd_value==G12_D2PLL_CMD_WINDOW_TEST_AND_STICKY_OVERRIDE))
+ {
+ //para_meter[8] size 9 stick_dmc_ddr_window_test_no_use_dqs_dq_correction 10 disable_scramble_use_define_pattern 11 stick_dmc_window_test_loop_flag window loop test
+ //12 if reinit when test dq 13 pass_to_fail_flag 14 test_dmc_or_cpu
+ para_meter[5]=(para_meter[9]<<28)|(para_meter[10]<<24)|(para_meter[11]<<20)|(para_meter[12]<<21)|(para_meter[13]<<22)|(para_meter[14]<<25)|(para_meter[5]<<0);
+
+ }
+ if((window_test_stick_cmd_value==G12_D2PLL_CMD_DDR_EYE_TEST)||(window_test_stick_cmd_value==G12_D2PLL_CMD_DDR_EYE_TEST_AND_STICKY_OVERRIDE))
+ {
+
+ para_meter[3]=(para_meter[3]<<0)|(para_meter[4]<<8)|(para_meter[5]<<16)|(para_meter[6]<<24);
+ para_meter[4]=(para_meter[7]<<0)|(para_meter[8]<<8)|(para_meter[9]<<16)|(para_meter[10]<<24);
+ para_meter[5]=para_meter[11];//(para_meter[11]<<0)|(para_meter[12]<<8)|(para_meter[13]<<16)|(para_meter[14]<<24);
+ para_meter[6]=para_meter[12];//para_meter[15];
+ para_meter[7]=para_meter[13];//para_meter[16];
+ para_meter[8]=para_meter[14];//para_meter[17];
+ }
+ wr_reg(PREG_STICKY_REG0,(rd_reg(PREG_STICKY_REG0)&0xffff) | (0xf13 << 20));
+ argc_count=0;
+ printf("P_PREG_STICKY_REG [0x%08x] [0x%08x]==[0x%08x]\n", argc_count,(PREG_STICKY_REG0+(argc_count<<2)),rd_reg(PREG_STICKY_REG0+(argc_count<<2)));
+ argc_count=1;
+ //while(argc_count<argc)
+ while(argc_count<10)
+ {
+ wr_reg(PREG_STICKY_REG0+(argc_count<<2),para_meter[argc_count-1]);
+ printf("P_PREG_STICKY_REG [0x%08x] [0x%08x]==[0x%08x]\n", argc_count,(PREG_STICKY_REG0+(argc_count<<2)),rd_reg(PREG_STICKY_REG0+(argc_count<<2)));
+ argc_count++;
+ }
+ /*
+ printf("P_PREG_STICKY_REG0 [0x%08x]\n", rd_reg(PREG_STICKY_REG0));
+ printf("P_PREG_STICKY_REG1 [0x%08x]\n", rd_reg(PREG_STICKY_REG1));
+ printf("P_PREG_STICKY_REG2 [0x%08x]\n", rd_reg(PREG_STICKY_REG2));
+ printf("P_PREG_STICKY_REG3 [0x%08x]\n", rd_reg(PREG_STICKY_REG3));
+ printf("P_PREG_STICKY_REG4 [0x%08x]\n", rd_reg(PREG_STICKY_REG4));
+ printf("P_PREG_STICKY_REG5 [0x%08x]\n", rd_reg(PREG_STICKY_REG5));
+ printf("P_PREG_STICKY_REG6 [0x%08x]\n", rd_reg(PREG_STICKY_REG6));
+ */
+ printf("reset...\n");
+
+ ddr_test_watchdog_reset_system();
+
+
return 0;
usage:
cmd_usage(cmdtp);
- return 1;
-}
-
-
-U_BOOT_CMD(
- g12_d2pll, 18, 1, do_ddr2pll_g12_cmd,
- "g12_d2pll 1300 1 0x10 0",
- "g12_d2pll clk delay_index delay_value before_after_training_setting\n"
-);
-
-int do_ddr_g12_uboot_dmc_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- return 1;
-
- /*
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
+ return 1;
+}
+
+
+U_BOOT_CMD(
+ g12_d2pll, 18, 1, do_ddr2pll_g12_cmd,
+ "g12_d2pll 1300 1 0x10 0",
+ "g12_d2pll clk delay_index delay_value before_after_training_setting\n"
+);
+
+int do_ddr_g12_uboot_dmc_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ return 1;
+
+ /*
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
if (argc < 2)
goto usage;
-
- unsigned int argc_count=1;
- unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
- while(argc_count<argc)
- {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
- if (*argv[argc_count] == 0 || *endp != 0) {
- para_meter[argc_count-1] = 0;
- }
- argc_count++;
- }
-
- uint32_t dmc_test_start_add=para_meter[0];
- uint32_t dmc_test_start_end=para_meter[1];
- uint32_t test_write_loops=para_meter[2];
- uint32_t test_read_loops=para_meter[3];
-#define DMC_TEST_START_ADD_DEFAULT 1<<20
-#define DMC_TEST_END_ADD_DEFAULT 512<<20
-#define DMC_TEST_WRITE_LOOP_DEFAULT 1
-#define DMC_TEST_READ_LOOP_DEFAULT 1
-dmc_test_start_add=dmc_test_start_add?dmc_test_start_add:DMC_TEST_START_ADD_DEFAULT;
-dmc_test_start_end=dmc_test_start_end?dmc_test_start_end:DMC_TEST_END_ADD_DEFAULT;
-test_write_loops=test_write_loops?test_write_loops:DMC_TEST_WRITE_LOOP_DEFAULT;
-test_read_loops=test_read_loops?test_read_loops:DMC_TEST_READ_LOOP_DEFAULT;
-
+
+ unsigned int argc_count=1;
+ unsigned int para_meter[30]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};
+ while(argc_count<argc)
+ {para_meter[argc_count-1]= simple_strtoul(argv[argc_count], &endp, 0);
+ if (*argv[argc_count] == 0 || *endp != 0) {
+ para_meter[argc_count-1] = 0;
+ }
+ argc_count++;
+ }
+
+ uint32_t dmc_test_start_add=para_meter[0];
+ uint32_t dmc_test_start_end=para_meter[1];
+ uint32_t test_write_loops=para_meter[2];
+ uint32_t test_read_loops=para_meter[3];
+#define DMC_TEST_START_ADD_DEFAULT 1<<20
+#define DMC_TEST_END_ADD_DEFAULT 512<<20
+#define DMC_TEST_WRITE_LOOP_DEFAULT 1
+#define DMC_TEST_READ_LOOP_DEFAULT 1
+dmc_test_start_add=dmc_test_start_add?dmc_test_start_add:DMC_TEST_START_ADD_DEFAULT;
+dmc_test_start_end=dmc_test_start_end?dmc_test_start_end:DMC_TEST_END_ADD_DEFAULT;
+test_write_loops=test_write_loops?test_write_loops:DMC_TEST_WRITE_LOOP_DEFAULT;
+test_read_loops=test_read_loops?test_read_loops:DMC_TEST_READ_LOOP_DEFAULT;
+
while((test_write_loops)||(test_read_loops))
{
if(test_write_loops)
ddr_bist_test_error=dmc_ddr_test(dram_base,1,0,0,test_size,1,0)+ddr_bist_test_error;
-
-
+
+
_udelay(test_delay_time_ms*1000);
-
-
+
+
#ifdef CFG_ENABLE_DDR_DMC_TEST
if(test_read_loops)
@@ -33845,2245 +34897,2607 @@ if(test_write_loops)
test_write_loops--;
if(test_read_loops)
test_read_loops--;
-}
-
-{
-
+}
+
+{
+
uint16_t dq_bit_delay[72];
unsigned char t_count=0;
uint16_t delay_org=0;
uint16_t delay_temp=0;
uint32_t add_offset=0;
-dwc_ddrphy_apb_wr(0xd0000,0x0);
-
- {printf("\n write dq_bit delay * 1/32UI");
+dwc_ddrphy_apb_wr(0xd0000,0x0);
+
+ {printf("\n write dq_bit delay * 1/32UI");
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ printf("\n t_count: %d %d",t_count,delay_temp);
+ }
+ }
+
+}
+
+
+
+
+
+
+
+return 1;
+*/
+
+}
+#endif
+
+#if 0
+int do_ddr_uboot_window_g12a_use_source_test_add_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("\nsetenv bootcmd ddr_test_cmd 0x36 4 6 60 0 0x100000 0x4000000 0 0x100010 0\n");
+ printf("\nEnter do_ddr_uboot_window_use_source function\n");
+ printf("\n--- watchdog should >15s\n");
+
+#define DDR_TEST_NULL 0
+#define DDR_TEST_PASS 1
+#define DDR_TEST_FAIL 2
+
+
+#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+ //PREG_STICKY_REG4
+ //PREG_STICKY_REG5
+
+#define DDR_TEST_STATUS_UBOOT_ONGOING 1
+#define DDR_TEST_STATUS_UBOOT_FINISH 2
+#define DDR_TEST_STATUS_KERNEL_ONGING 3
+#define DDR_TEST_STATUS_KERNEL_FINISH 4
+ //#define DDR_TEST_FAIL 2
+
+
+ char *endp;
+ unsigned int lane_disable= 0;
+ unsigned int data_source= 0;
+ unsigned int ddr_data_test_size=0x1000000;
+ unsigned int ddr_add_test_size=0x10000000;
+ unsigned int ddr_test_size=0x10000000;
+
+ unsigned int ddr_test_clear_flag=0;
+ unsigned int ddr_test_init_offset=0;
+ unsigned int ddr_test_uboot_kernel_enable_mask=0;
+
+ unsigned int ddr_test_uboot_loop=0;
+
+ unsigned int kernel_test_watchdog_time_s=60;
+ unsigned int test_watchdog_time_s=15;
+
+ //uint32_t stick_test_ddr_window_delay_override_enable=0;
+ uint32_t stick_test_ddr_window_delay_override_index=0;
+ uint32_t stick_test_ddr_window_delay_override_value=0;
+
+ char str[1024]="";
+
+ error_outof_count_flag =1; //for quick out of error
+ if (argc >1) {
+ data_source = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ {
+ data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
+ }
+ }
+ if (argc >2) {
+ watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ {
+ watchdog_time_s= 15;
+ }
+ }
+ printf("watchdog_time_s==%d\n",watchdog_time_s);
+ test_watchdog_time_s=watchdog_time_s;
+ //test_watchdog_time_s=address_test_watchdog_time_s;
+ if (argc >3) {
+ kernel_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ {
+ kernel_test_watchdog_time_s= watchdog_time_s;
+ }
+ }
+ printf("kernel_test_watchdog_time_s==%d\n",kernel_test_watchdog_time_s);
+ //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
+ if (argc >4) {
+ lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
+ if (*argv[4] == 0 || *endp != 0)
+ {
+ lane_disable= 0;
+ }
+ }
+ printf("lane_disable==0x%08x\n",lane_disable);
+
+ if (argc >5) {
+ ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
+ if (*argv[5] == 0 || *endp != 0)
+ {
+ ddr_data_test_size= 0x100000;
+ }
+ }
+ printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
+ if (argc >6) {
+ ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
+ if (*argv[6] == 0 || *endp != 0)
+ {
+ ddr_add_test_size= 0x10000000;
+ }
+ }
+ printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
+
+ if (argc >7) {
+ ddr_test_clear_flag = simple_strtoull_ddr(argv[7], &endp, 0);
+ if (*argv[7] == 0 || *endp != 0)
+ {
+ ddr_test_clear_flag= 0x10000000;
+ }
+ }
+ printf("ddr_test_clear_flag==0x%08x\n",ddr_test_clear_flag);
+
+ if (argc >8) {
+ ddr_test_init_offset = simple_strtoull_ddr(argv[8], &endp, 0);
+ if (*argv[8] == 0 || *endp != 0)
+ {
+ ddr_test_init_offset= 0;
+ }
+ }
+ printf("ddr_test_init_offset==0x%08x\n",ddr_test_init_offset);
+
+ if (argc >9) {
+ ddr_test_uboot_kernel_enable_mask = simple_strtoull_ddr(argv[9], &endp, 0);
+ if (*argv[9] == 0 || *endp != 0)
+ {
+ ddr_test_uboot_kernel_enable_mask= 0;
+ }
+ }
+ printf("ddr_test_uboot_kernel_enable_mask==0x%08x\n",ddr_test_uboot_kernel_enable_mask);
+
+ if (argc >10) {
+ ddr_test_uboot_loop = simple_strtoull_ddr(argv[10], &endp, 0);
+ if (*argv[10] == 0 || *endp != 0)
+ {
+ ddr_test_uboot_loop= 0;
+ }
+ }
+ printf("ddr_test_uboot_loop==0x%08x\n",ddr_test_uboot_loop);
+
+ if (argc >11) {
+ stick_test_ddr_window_delay_override_index = simple_strtoull_ddr(argv[11], &endp, 0);
+ if (*argv[11] == 0 || *endp != 0)
+ {
+ stick_test_ddr_window_delay_override_index= 0;
+ }
+ }
+ printf("stick_test_ddr_window_delay_override_index==0x%08x\n",stick_test_ddr_window_delay_override_index);
+
+
+ unsigned int rank_index=0;
+ unsigned int temp_count=0;
+ unsigned int ddr_test_data_array_max=10;
+ unsigned int num_array[10];//8 flag 32_data add_8 32_data add_8
+
+ unsigned int temp_test_error=0;
+ //unsigned int lcdlr_min=0;
+ //unsigned int lcdlr_max=0;
+ memset(num_array, 0, sizeof(num_array));
+ //char str[1024]="";
+
+
+ ddr_test_data_array_max=8;
+
+ for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
+ {
+ num_array[temp_count]= read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
+ printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
+ }
+
+ unsigned int reg_def_value_data[4]; //write_lcdlr_value+read_lcdlr_value<<16;
+
+ //#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
+ //#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
+
+ unsigned int test_arg_4_step_flag_add_sticky_offset =0; //use for kernel
+ unsigned int test_arg_5_pass_fail_flag_add_sticky_offset =0; //use for kernel
+
+ unsigned int test_arg_6_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
+ unsigned int test_arg_7_lcdlr_offset =0; //left_lcdlr+right_lcdlr<<16
+ unsigned int test_arg_7_lcdlr_offset_l =0; //left_lcdlr
+ unsigned int test_arg_7_lcdlr_offset_r=0; //right_lcdlr
+ unsigned int delay_step_x100= 0;
+
+ //unsigned int test_arg_6_lcdlr_temp_count =0;
+ unsigned int test_lcdlr_temp_value1 =0;
+ //unsigned int test_lcdlr_temp_value2 =0;
+ unsigned int test_lcdlr_temp_value =0;
+ unsigned int test_lcdlr_reach_lcdlr_limited_flag =0;
+
+
+ test_lcdlr_reach_lcdlr_limited_flag=0;
+ reg_def_value_data[0]=num_array[0];
+ reg_def_value_data[1]=num_array[1];
+ reg_def_value_data[2]=num_array[2];
+ reg_def_value_data[3]=num_array[3];
+ test_arg_4_step_flag_add_sticky_offset=num_array[4];
+ test_arg_5_pass_fail_flag_add_sticky_offset=num_array[5];
+ test_arg_6_step_status=num_array[6];
+ test_arg_7_lcdlr_offset=num_array[7];
+
+
+
+ printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
+ printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
+ printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
+ printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
+ printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
+ printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
+ printf("test_arg_6_step_status=%d\n",num_array[6]);
+ printf("\ntest_arg_7_lcdlr_offset=0x%08x\n",num_array[7]);
+
+
+
+
+ //for (temp_count= 0;temp_count < 8; temp_count++)
+ // {
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ //}
+
+
+ if(ddr_test_clear_flag)
+ { test_arg_6_step_status=0;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ printf("\n clear sticky register should reset,then over write ....\n");
+ run_command("reset",0);
+ while(1);
+ }
+
+ if(test_arg_6_step_status==0)
+ {
+ {
+
+ //test_arg_6_step_status=1;
+
+
+ //for (temp_count = 0; temp_count < (8); temp_count++) //data
+
+ {
+ temp_count=stick_test_ddr_window_delay_override_index;
+ test_lcdlr_temp_value1=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
+ //reg_def_value_data[3]=test_lcdlr_temp_value1;
+ reg_def_value_data[3]=test_lcdlr_temp_value1;
+ num_array[3] = reg_def_value_data[3] ;
+ printf("num_array[%d]=%08x\n",3,num_array[3]);
+ }
+
+ }
+ test_arg_4_step_flag_add_sticky_offset=0;
+ test_arg_5_pass_fail_flag_add_sticky_offset=0;
+ test_arg_6_step_status=0;
+ test_arg_7_lcdlr_offset=0;
+ if(ddr_test_init_offset)
+ {test_arg_7_lcdlr_offset=ddr_test_init_offset;
+ }
+ //num_array[0] = reg_def_value_data[0] ;
+ //num_array[1] = reg_def_value_data[1] ;
+ //num_array[2] = reg_def_value_data[2] ;
+ num_array[3] = reg_def_value_data[3] ;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ; //use for kernel
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;//use for kernel
+ num_array[6] = test_arg_6_step_status ;
+ num_array[7] = test_arg_7_lcdlr_offset ;
+
+
+
+ for (temp_count= 0;temp_count < 8; temp_count++)
+ {
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+
+ }
+ else
+ {
+ //for (temp_count = 0; temp_count < (8); temp_count++) //data
+ {
+ //temp_count=4;
+ //test_lcdlr_temp_value1=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
+ //temp_count=temp_count+1;
+ //temp_count=5;
+ //test_lcdlr_temp_value2=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
+ //reg_def_value_data[3]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
+ //num_array[3]=reg_def_value_data[3];
+ printf("re-num_array[%d]=%08x\n",3,num_array[3]);
+ }
+ }
+
+ if(ddr_test_uboot_kernel_enable_mask&1)
+ {printf("skip uboot test should init kernel offset value==0x%08x\n",num_array[7]);
+ }
+
+ test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ unsigned int lane_step_count=0;
+ {
+
+ {
+ test_watchdog_time_s=watchdog_time_s;
+ ddr_test_size=ddr_data_test_size;
+
+ }
+
+ printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
+ printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
+ printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
+ printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
+ printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
+ printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
+ printf("test_arg_6_step_status=%d\n",num_array[6]);
+ printf("test_arg_7_lcdlr_offset=%d\n",num_array[7]);
+
+ if(test_arg_6_step_status==4) //uboot finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+
+ // unsigned int acmdlr= 0;
+
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ unsigned int acmdlr=32;
+ delay_step_x100=100*1000000/(2*global_ddr_clk*32); //100*/32 ps
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
+
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+
+
+ }
+ if(ddr_test_uboot_kernel_enable_mask&2)
+ {
+ if(ddr_test_uboot_loop)
+ {
+ { test_arg_6_step_status=0;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ printf("\n clear sticky register should reset,then over write ....\n");
+ run_command("reset",0);
+ while(1);
+ }
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ return 1;
+ }
+ }
+
+
+
+ //if((test_arg_6_step_status==0)) //0 test left edge begin 1 test left edge ongoing 2//left_finish 3 right edge ongoing 4 right finish //5 kernel left edge ongoing 6 kernel left finish 7 kernel right ongoing
+ // uboot find from pass to fail offset 0->max
+ //kernel find from fail to pass offset from max ->0
+ if((test_arg_6_step_status<4)) //// uboot find from pass to fail offset 0->max
+ {
+ if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
+ ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
+ )
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
+ {
+ if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
+ {
+
+ // for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ lane_step_count=6;
+ //if((lane_step_count%2)==0)
+ {
+
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+ /*
+ if((lane_step_count%2)==1)
+ {
+ if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+ */
+
+ }
+
+
+
+
+ }
+ if(test_lcdlr_reach_lcdlr_limited_flag)
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ else if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL) //pass 1 error 2
+ {
+
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+
+ //(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l+1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r+1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+
+ {
+
+ // for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ lane_step_count=6;
+ printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ }
+
+ if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
+
+ }
+ }
+
+
+ {
+ //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
+ //printf("\nstr=%s\n",str);
+ stick_test_ddr_window_delay_override_value=test_lcdlr_temp_value;
+ sprintf(str,"g12_d2pll %d 0x%08x 0x%08x",global_ddr_clk,( stick_test_ddr_window_delay_override_index),
+ stick_test_ddr_window_delay_override_value);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ // run_command("reset",0);
+ while(1);
+
+ }
+ // do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
+ // (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ //here will dead
+ if(test_arg_6_step_status>4)
+ {
+ //ddr_test_watchdog_disable(); //s
+ ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ // temp_count=5;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("run storeboot",0);
+ while(1);
+ } else
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+
+
+
+ {
+ //write org value
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
+ }
+ do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+
+
+
+
+ }
+ }
+
+
+ if((test_arg_6_step_status==4)||(test_arg_6_step_status==6))
+ {
+ test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_UBOOT_FINISH;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
+ temp_count=4;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;//DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ }
+ if((test_arg_6_step_status>=4)) ////kernel find from fail to pass offset from max ->0
+ {
+ if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
+ ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
+ )
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
+ {
+ if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+ if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
+ {
+ test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
+ }
+ }
+
+ }
+
+
+
+
+ }
+ // if(test_lcdlr_reach_lcdlr_limited_flag)
+ {
+ test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+ }
+ }
+
+ else if((test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL)
+ //||(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL))//pass 2 error 1
+ )
+ {
+
+ // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
+ // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
+ }
+ else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
+ }
+ test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
+ num_array[7] = test_arg_7_lcdlr_offset ;
+ temp_count=7;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+
+
+ }
+ else if (test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)//pass 2 error 1
+ {printf("\nfind drop power,test_arg_5_pass_fail_flag_add_sticky_offset=%d \n",test_arg_5_pass_fail_flag_add_sticky_offset);
+ }
+
+ ddr_test_watchdog_enable(test_watchdog_time_s); //s
+ printf("\nenable %ds watchdog \n",test_watchdog_time_s);
+ ddr_test_watchdog_clear();
+
+ {
+
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
+ if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
+ if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
+ {test_lcdlr_temp_value=0;
+ }
+ }
+ }
+
+ if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
+
+ }
+ }
+
+
+
+ do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+
+
+
+ }
+
+ //here will dead
+ if(test_arg_6_step_status>4)
+ {
+ //ddr_test_watchdog_disable(); //s
+ ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ // temp_count=5;
+ // read_write_window_test_parameter(data_source,
+ // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("run storeboot",0);
+ while(1);
+ } else
+ {
+ temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
+ }
+
+ if (temp_test_error)
+ {
+ run_command("reset",0);
+ while(1);
+ }
+ else
+ {
+ ddr_test_watchdog_clear();
+ {
+ //write org value
+ for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
+ {
+ if((lane_step_count%2)==0)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
+ }
+ if((lane_step_count%2)==1)
+ {
+ test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
+ }
+ do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
+ (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
+ }
+
+ }
+
+ test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
+ num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
+ temp_count=5;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ run_command("reset",0);
+ while(1);
+
+ }
+ }
+ }
+ }
+
+ if(test_arg_6_step_status>=8) //finish
+ {
+ ddr_test_watchdog_disable(); //s
+ printf("close watchdog\n");
+
+
+
+ {
+ //acmdlr=do_ddr_read_acmdlr();
+ u_int32_t acmdlr=32;
+ delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
+ printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
+ delay_step_x100/100,delay_step_x100/10,delay_step_x100);
+
+
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
+ printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
+ printf("\n\n-----------------------------------------------------------------------------\n\n");
+
+ test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_KERNEL_FINISH;
+ num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
+ temp_count=4;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ }
+
+ test_arg_6_step_status=0xffff;
+ {
+ // test_arg_6_step_status=test_arg_6_step_status+1;
+ num_array[6] = test_arg_6_step_status ;
+ temp_count=6;
+ read_write_window_test_parameter(data_source,
+ temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
+ }
+ ddr_test_watchdog_disable(); //s
+ // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
+ run_command("run storeboot",0);
+ while(1);
+ return 1;
+}
+#endif
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+
+int do_ddr_g12_override_data(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
+
+ printf("\12nm phy read write register should closd apd and asr funciton\n");
+ writel((0), 0xff638630);
+ writel((0), 0xff638634);
+#define G12_DATA_READ_OFFSET_MAX (0X3F)
+#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
+
+#if 1
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ char *endp;
+ //rank_index dq_index write_read left/right offset_value
+ unsigned int test_index=0; // 1 ac ,0x2, write dqs ,0x4,read dqs,0x8,write dq,0x10 read dq
+ unsigned int dq_index=0; //0-8 rank0 lane0 ,rank0 9-17 lane1,rank0 18-26 lane2, rank0 27-35 lane3, 36+0-8 rank1 lane0 ,rank1 36+9-17 lane1,rank1 36+18-26 lane2, rank1 36+27-35 lane3
+ // unsigned int test_dq_mask_1=0; //each bit mask corresspond with dq_index
+ // unsigned int test_dq_mask_2=0; //each bit mask corresspond with dq_index
+ // unsigned int test_dq_mask_3=0; //each bit mask corresspond with dq_index
+ //unsigned int write_read_flag=0;// 2 write ,1 read #define DDR_PARAMETER_READ 1 #define DDR_PARAMETER_WRITE 2
+ // unsigned int left_right_flag=0;// 1 left ,2 right #define DDR_PARAMETER_LEFT 1 #define DDR_PARAMETER_RIGHT 2
+ unsigned int ovrride_value=0;//
+
+ // unsigned int offset_enable=0;//
+
+ // unsigned int temp_value=0;//
+ unsigned int count=0;
+ // unsigned int count1=0;
+ // unsigned int count_max=0;
+ unsigned int lcdlr_max=0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_value=0;
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else if (argc >4)
+ {//offset_enable=1;
+
+ {
+ count=0;
+ test_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ test_index = 0;
+ }
+
+ }
+ {
+ count++;
+ dq_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ dq_index = 0;
+ }
+
+ }
+
+
+
+ {
+ count++;
+ ovrride_value= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ ovrride_value = 0;
+ }
+
+ }
+
+
+ }
+ else {
+ return 1;
+ }
+ printf("lcdlr_max %d,\n",lcdlr_max);
+
+ {
+
+
+ {
+
+ {
+ dwc_window_reg_after_training_update(test_index,
+ dq_index,
+ ovrride_value);
+ }
+
+ }
+ }
+
+
+#endif
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_g12_override_data, 20, 1, do_ddr_g12_override_data,
+ "ddr_g12_override_data 1 0 0 0 1 3",
+ "ddr_g12_override_data test_index dq_index ovrride_value \n"
+);
+int do_ddr_g12_offset_data(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+
+ //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
+
+
+#define G12_DATA_READ_OFFSET_MAX (0X3F)
+#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
+ printf("\12nm phy read write register should closd apd and asr funciton\n");
+ writel((0), 0xff638630);
+ writel((0), 0xff638634);
+#if 1
+ // if(!argc)
+ // goto DDR_TUNE_DQS_START;
+ int i=0;
+ printf("\nargc== 0x%08x\n", argc);
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+ char *endp;
+ //rank_index dq_index write_read left/right offset_value
+ unsigned int test_index=0; // 1 ac ,0x2, write dqs ,0x4,read dqs,0x8,write dq,0x10 read dq
+ // unsigned int dq_index=0; //0-8 rank0 lane0 ,rank0 9-17 lane1,rank0 18-26 lane2, rank0 27-35 lane3, 36+0-8 rank1 lane0 ,rank1 36+9-17 lane1,rank1 36+18-26 lane2, rank1 36+27-35 lane3
+ unsigned int test_dq_mask_1=0; //each bit mask corresspond with dq_index
+ unsigned int test_dq_mask_2=0; //each bit mask corresspond with dq_index
+ unsigned int test_dq_mask_3=0; //each bit mask corresspond with dq_index
+ //unsigned int write_read_flag=0;// 2 write ,1 read #define DDR_PARAMETER_READ 1 #define DDR_PARAMETER_WRITE 2
+ unsigned int left_right_flag=0;// 1 left ,2 right #define DDR_PARAMETER_LEFT 1 #define DDR_PARAMETER_RIGHT 2
+ unsigned int offset_value=0;//
+
+ // unsigned int offset_enable=0;//
+
+ // unsigned int temp_value=0;//
+ unsigned int count=0;
+ //unsigned int count1=0;
+ unsigned int count_max=0;
+ unsigned int lcdlr_max=0;
+ // unsigned int reg_add=0;
+ // unsigned int reg_value=0;
+
+
+ bdlr_100step=get_bdlr_100step(global_ddr_clk);
+ ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
+
+ if (argc == 1)
+ { printf("\nplease read help\n");
+
+ }
+ else if (argc >6)
+ {//offset_enable=1;
+
+ {
+ count=0;
+ test_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ test_index = 0;
+ }
+
+ }
+ {
+ count++;
+ test_dq_mask_1= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ test_dq_mask_1 = 0;
+ }
+
+ }
+ {
+ count++;
+ test_dq_mask_2= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ test_dq_mask_2 = 0;
+ }
+
+ }
+ {
+ count++;
+ test_dq_mask_3= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ test_dq_mask_3 = 0;
+ }
+
+ }
+ {
+ count++;
+ left_right_flag= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ left_right_flag = 0;
+ }
+
+ }
+ {
+ count++;
+ offset_value= simple_strtoull_ddr(argv[count+1], &endp, 0);
+ if (*argv[count+1] == 0 || *endp != 0)
+ {
+ offset_value = 0;
+ }
+
+ }
+
+
+ }
+ else {
+ return 1;
+ }
+ printf("lcdlr_max %d,\n",lcdlr_max);
+ if(left_right_flag==DDR_PARAMETER_RIGHT)
+ printf("offset right ++ left_right_flag %d,\n",left_right_flag);
+ if(left_right_flag==DDR_PARAMETER_LEFT)
+ printf("offset left --left_right_flag %d,\n",left_right_flag);
+
+ if (test_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
+ count_max=10;
+
+ lcdlr_max=3*32;//0x3ff;
+ }
+
+ if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
+ count_max=16;
+
+ lcdlr_max=16*32;//0x3ff;
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
+ count_max=16;
+ lcdlr_max=96;//0x3f;
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
+ count_max=36*2;
+ lcdlr_max=8*32;//0x1ff;
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
+ count_max=36*2;
+ lcdlr_max=0x3f;
+ }
+ if (test_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
+ count_max=36*1;
+ lcdlr_max=0x3f;
+ printf(" soc vref rank0 and rank1 share vref dac\n");
+ }
+
+
+
+ count=0;
+ for (;count<count_max;count++) {
+ if ((count<32)) {
+ if (test_dq_mask_1&(1<<(count%32))) {
+ continue;
+ }
+ }
+ if ((count>31) && (count<63)) {
+ if (test_dq_mask_2&(1<<(count%32))) {
+ continue;
+ }
+ }
+ if ((count>63)) {
+ if (test_dq_mask_3&(1<<(count%32))) {
+ continue;
+ }
+ }
+
+ // for (count1=0;count1<offset_value;count1++)
+ {
+ if(left_right_flag==DDR_PARAMETER_RIGHT)
+ {
+ dwc_window_reg_after_training_update_increas(test_index,
+ count,
+ 0,offset_value);
+ }
+ if(left_right_flag==DDR_PARAMETER_LEFT)
+ {
+ dwc_window_reg_after_training_update_increas(test_index,
+ count,
+ 1,offset_value);
+ }
+ }
+ }
+
+
+#endif
+ return 1;
+}
+
+
+U_BOOT_CMD(
+ ddr_g12_offset_data, 20, 1, do_ddr_g12_offset_data,
+ "ddr_g12_offset_data 1 0 0 0 1 3",
+ "ddr_g12_offset_data test_index mask1 mask2 mask3 left/right offset_value \n"
+);
+
+#endif
+
+
+#if 0
+U_BOOT_CMD(
+ ddr_g12_offset_data_lcdlr, 10, 1, do_ddr_g12_offset_data_lcdlr,
+ "ddr_g12_offset_data_lcdlr 0 1 2 2 3",
+ "ddr_g12_offset_data_lcdlr rank_index dq_index write_read left/right offset_value \n"
+);
+#endif
+
+char CMD_VER[] = "Ver_10";
+int do_ddr_test_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ //ddr_test_watchdog_init(4000);
+ //printf("\nopen watchdog %dms\n",4000);
+ printf("\n ddr test cmd version== %s\n", CMD_VER);
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+
+ /* need at least two arguments */
+ if (argc < 2)
+ goto usage;
+ if ((strcmp(argv[1], "h") == 0))
+ goto usage;
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ printf("\12nm phy read write register should closd apd and asr funciton\n");
+ writel((0), 0xff638630);
+ writel((0), 0xff638634);
+#else
+ OPEN_CHANNEL_A_PHY_CLK();
+ OPEN_CHANNEL_B_PHY_CLK();
+
+ unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL0);
+ unsigned int ddr_clk =0;
+ //#if( CONFIG_DDR_PHY >=P_DDR_PHY_G12)
+ //ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
+ //#else
+ ddr_clk=pll_convert_to_ddr_clk(ddr_pll);
+ //#endif
+ ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
+
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+ global_ddr_clk=ddr_clk;
+ unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
+ printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
+
+#endif
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+ unsigned int ddr_pll = rd_reg(G12_AM_DDR_PLL_CNTL0);
+ unsigned int ddr_clk =0;
+ //#if( CONFIG_DDR_PHY >=P_DDR_PHY_G12)
+ //ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
+ //#else
+ ddr_clk=pll_convert_to_ddr_clk(ddr_pll);
+ //#endif
+ ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
+
+ printf("\nddr_clk== %dMHz\n", ddr_clk);
+ global_ddr_clk=ddr_clk;
+ // unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
+ // printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
+#endif
+
+#define DDR_TEST_CMD__NONE 0
+#define DDR_TEST_CMD__DDR_TEST 1
+#define DDR_TEST_CMD__DDR_TUNE_ACLCDLR 2
+#define DDR_TEST_CMD__DDR_TUNE_MAX_CLK 3 //ddr_test_cmd 3 0x8000000 3 1
+#define DDR_TEST_CMD__DDR_TUNE_ZQ 4
+#define DDR_TEST_CMD__DDR_TUNE_VREF 5
+#define DDR_TEST_CMD__DDR_GXTVBB_CROSSTALK 6
+#define DDR_TEST_CMD__DDR_BANDWIDTH_TEST 7
+#define DDR_TEST_CMD__DDR_LCDLR_ENV_TUNE 8
+#define DDR_TEST_CMD__DDR_MODIFY_REG_USE_MASK 9
+#define DDR_TEST_CMD__DDR_DDR_TUNE_AC_CLK 0xa
+
+#define DDR_TEST_CMD__DDR_SETZQ 0x10
+#define DDR_TEST_CMD__DDR_TUNE_DQS 0x11
+#define DDR_TEST_CMD__DDR_SET_TEST_START_ADD 0x12
+#define DDR_TEST_CMD__DDR_TEST_AC_BIT_SETUP_HOLD_MARGIN 0x13
+#define DDR_TEST_CMD__DDR_TEST_DATA_BIT_SETUP_HOLD_MARGIN 0x14
+#define DDR_TEST_CMD__DDR_TEST_AC_LANE_BIT_MARGIN 0x15
+#define DDR_TEST_CMD__DDR_TEST_EE_VOLTAGE_MDLR_STEP 0x16
+#define DDR_TEST_CMD__DDR_TEST_D2PLL_CMD 0x17
+#define DDR_TEST_CMD__DDR_TEST_DATA_LANE_BIT_MARGIN 0x18
+#define DDR_TEST_CMD__DDR4_TUNE_PHY_VREF 0x19
+#define DDR_TEST_CMD__DDR4_TUNE_DRAM_VREF 0x1A
+#define DDR_TEST_CMD__DDR4_TUNE_AC_VREF 0x1b
+#define DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL 0x1c
+#define DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY 0x1d
+#define DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ 0x1e
+#define DDR_TEST_CMD__DDR_TEST_PWM_CMD 0x1f
+#define DDR_TEST_CMD__DDR_TEST_EE_SI 0x20
+#define DDR_TEST_CMD__DDR_TEST_VDDQ_SI 0x21
+#define DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_ENV 0x22
+#define DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY_TXL 0x23
+#define DDR_TEST_CMD__DISPLAY_DDR_INFORMATION 0x24
+#define DDR_TEST_CMD__OFFSET_LCDLR 0x25
+#define DDR_TEST_CMD__SET_WATCH_DOG_VALUE 0x26
+#define DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_STICKY 0x27
+#define DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL_STICKY 0x28
+#define DDR_TEST_CMD__DDR4_DDR_BIST_TEST_USE_D2PLL_STICKY 0x29
+#define DDR_TEST_CMD__DDR_SET_BIST_TEST_SIZE_STICKY_6 0x30
+#define DDR_TEST_CMD__DDR_SET_UBOOT_STORE_WINDOW 0x31
+#define DDR_TEST_CMD__DDR_SET_UBOOT_STORE_QUICK_WINDOW 0x32
+#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW 0x33
+#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW_MULTI 0x34
+#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW_SAME_CHANGE 0x35
+#define DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD 0x36
+#define DDR_TEST_CMD__DISPLAY_G12_DDR_INFORMATION 0x37
+#define DDR_TEST_CMD__DDR_G12_DMC_TEST 0x38
+#define DDR_TEST_CMD__DDR_G12_EE_BDLR_TEST 0x39
+
+ unsigned int ddr_test_cmd=0;
+ unsigned int arg[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
+ char *endp;
+ ddr_test_cmd = simple_strtoull_ddr(argv[1], &endp, 0);
+ for (i = 2;i<argc;i++)
+ arg[i-2]=simple_strtoull_ddr(argv[i], &endp, 0);
+ printf("\nddr_test_cmd== 0x%08x\n", ddr_test_cmd);
+
+ for (i = 0;i<(argc-2);i++)
+ printf("\narg[%08x]=%08x\n",i,arg[i]);
+ //int argc2_length;
+ //argc2_length=(argc-2);
+ //cmd_tbl_t *cmdtp2;
+ //int flag2;
+ int argc2;
+ char* argv2[30];
+
+ argc2=argc-1;
+ for (i = 1;i<(argc);i++)
+ argv2[i-1]=argv[i];
+ //argv2=(char *)argv++;
+ {
+ run_command("dcache off",0);
+ run_command("dcache on",0);
+ printf("\n cache off on");
+ switch (ddr_test_cmd)
+ {case(DDR_TEST_CMD__NONE):
+ {
+ printf("\n 0x0 help\n");
+ printf("\n 0x1 ddrtest ddr_test_cmd 0x1 start_add test_size loops ");
+ printf("\n 0x2 test aclcdlr ddr_test_cmd 0x2 start_add test_size loops ddr_test_cmd 0x2 a 0 0x8000000 1");
+ printf("\n 0x3 test max_pllclk ddr_test_cmd 0x3 test_size loops add_freq sub_freq ");
+ printf("\n 0x4 test zq ddr_test_cmd 0x4 test_size loops add_freq sub_freq drv_odt_flag ");
+ printf("\n 0x5 test vref ddr_test_cmd 0x5 ");
+ printf("\n 0x6 test gxtvbb_crosstalk ddr_test_cmd 0x6 loops pattern_flag ");
+ printf("\n 0x7 test bandwidth ddr_test_cmd 0x7 size loops port sub_id timer_ms ");
+ printf("\n 0x8 test lcdlr_use_env_uart ddr_test_cmd 0x8 input_src wr_adj_per[] rd_adj_per[][] ");
+ printf("\n 0x9 test_reg_use_mask ddr_test_cmd 0x9 reg_add value mask ");
+ printf("\n 0xa test ac_clk ddr_test_cmd 0xa start_add test_size loops ddr_test_cmd 0xa a 0 0x8000000 1 ");
+ printf("\n 0xb ... ");
+ printf("\n 0xc ... ");
+ printf("\n 0xd ... ");
+ printf("\n 0xe ... ");
+ printf("\n 0xf ... ");
+ printf("\n 0x10 test set zq ddr_test_cmd 0x10 zq0pr0 zq1pr0 zq2pr0 ");
+ printf("\n 0x11 test tune dqs ddr_test_cmd 0x11 a 0 test_size ddr_test_cmd 0x11 a 0 0x80000");
+ printf("\n 0x12 test set start_add ddr_test_cmd 0x12 start_add ");
+ printf("\n 0x13 test ac_bit_setup_hold time ddr_test_cmd 0x13 a 0 size method pin_id ddr_test_cmd 0x13 a 0 0x8000000 0 0xc");
+ printf("\n 0x14 test data_bit_setup_hold time ddr_test_cmd 0x14 a 0 size setup/hold pin_id ddr_test_cmd 0x14 a 0 0x80000 0 3 ");
+ printf("\n 0x15 test ac_lane_setup_hold ddr_test_cmd 0x15 a 0 size ");
+ printf("\n 0x16 test ee mdlr ddr_test_cmd 0x16 voltage pwm_id loops ");
+ printf("\n 0x17 d2pll ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n \
+ example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n \
+ or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
+ printf("or ddr_test_cmd 0x17 1200 6034 60346034 0 0 0 0 1 \n");
+ printf("\n 0x18 test data_lane_setup_hold ddr_test_cmd 0x18 a 0 size range start_pin_id end_pin_id ddr_test_cmd 0x18 a 0 0x80000 1 0 96 ");
+ printf("\n 0x19 test phy vref ddr_test_cmd 0x19 a 0 0x80000 1 seed step vref_all vref_lcdlr_offset test_down_up_step seed_hex_dec \
+ ddr_test_cmd 0x19 a 0 0x1000000 1 63 1 1 0x8 0 1 ");
+ printf("\n 0x1a test dram vref ddr_test_cmd 0x1A a 0 0x80000 clear seed step vref_all vref_lcdlr_offset test_down_up_step vref_range seed_hex_dec \
+ \n setenv ddr_test_ddr4ram_vref ddr_test_cmd 0x1A a 0 0x0800000 0 0x14 1 0 0x8 0 0 0 ; setenv storeboot run ddr_test_ddr4ram_vref ;save;reset ");
+ printf("\n 0x1b test ac vref ddr_test_cmd 0x1B a 0 0x80000 clear seed step vref_all vref_lcdlr_offset seed_hex_dec");
+ printf("\n 0x1c sweep dram clk use d2pll_env ddr_test_cmd 0x1c test_size start_freq end_freq test_loops ddr_test_cmd 0x1c 0x8000000 800 1500 1");
+ printf("\n 0x1d test shift clk ddr_test_cmd 0x1d type delay_ms times");
+ printf("\n 0x1e test write_read ddr_test_cmd 0x1e write_read pattern_id loop start_add test_size");
+ printf("\n 0x1f test pwm_cmd ddr_test_cmd 0x1f pwmid pwm_low pwm_high");
+ printf("\n 0x22 test ddr_window use env ddr_test_cmd 0x22 a 0 test_size watchdog_time \
+ lane_disable_masrk add_test_size setenv bootcmd ddr_test_cmd 0x22 a 0 0x800000 15 0 0x8000000");
+ printf("\n defenv;save;setenv bootcmd ddr_test_cmd 0x22 a 0 0x800000 18 0x0 0x8000000");
+ printf("\n setenv env_ddrtest_data_lane 0x22;save;reset");
+ printf("\n 0x23 test shift ddr frequency ddr_test_cmd 0x23");
+ printf("\n 0x24 display ddr_information ddr_test_cmd 0x24");
+ printf("\n 0x25 offset ddr_lcdlr ddr_test_cmd 0x25");
+ printf("\n 0x26 set watchdog_value ddr_test_cmd 0x26 30");
+ printf("\n 0x27 test ddr_window use sticky register ddr_test_cmd 0x27 a 0 test_size watchdog_time \
+ lane_disable_masrk add_test_size setenv bootcmd ddr_test_cmd 0x27 a 0 0x800000 15 0 0x8000000");
+ printf("\n 0x28 sweep dram clk use d2pll_sticky ddr_test_cmd 0x28 test_size start_freq end_freq test_loops ddr_test_cmd 0x28 0x8000000 800 1500 1");
+
+ /*
+ ddr_tune_dqs_step a 0 0x800000 1 2 lane0-7 min
+ ddr_tune_dqs_step a 0 0x800000 1 1 lane0-7 max
+
+ ddr_tune_aclcdlr_step a 0 0x8000000 1 2 lane0-1 min
+ ddr_tune_aclcdlr_step a 0 0x8000000 1 1 lane0-1 max
+
+ setenv bootcmd "ddr_test_cmd 0x22 a 0 0x800000 18 0 0x8000000" watchdog_time ,lane_disable_mask,add_test_size
+ setenv env_ddrtest_data_lane 0x22 设置命令开始标志
+ save watchdog_time ,lane_disable_mask,add_test_size
+ d2pll 1200
+
+ setenv ddr_soc_iovref_test_ddr_clk "0x0000000";
+ setenv ddr_soc_iovref_lef "0x0000000";
+ setenv ddr_soc_iovref_org "0x0";
+ setenv ddr_soc_iovref_rig "0x000000 ";
+ save
+ d2pll 1104
+ ddr_test_cmd 0x19 a 0 0x80000 1 70 1 1 0x8 0 1
+
+
+
+ 重测要掉电,数据存在stick 寄存器了
+ setenv ddr_dram_iovref_test_ddr_clk "0x0000000";
+ setenv ddr_dram_iovref_lef "0x0000000";
+ setenv ddr_dram_iovref_org "0x0";
+ setenv ddr_dram_iovref_rig "0x000000 ";
+ setenv ddr_test_ddr4ram_vref "ddr_test_cmd 0x1A a 0 0x080000 0 70 0 0 0x08 0 0 1"
+ setenv bootcmd "run ddr_test_ddr4ram_vref"
+ save
+ 掉电上电
+ d2pll 1104
+ */
+
+
+ }
+ return 1;
+
+
+ case(DDR_TEST_CMD__DDR_TEST):
+ {
+ // run_command("ddrtest 0x10000000 0x8000000 3",0);
+ //ddr_test_cmd 0x1 star_add test_size loops
+ // do_ddr_test(cmdtp, flag, argc2,argv);
+ do_ddr_test((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2,(argv2));
+ break;
+ }
+ case(DDR_TEST_CMD__DDR_TUNE_ACLCDLR):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr a 0 0x8000000 3",0);
+ //ddr_test_cmd 0x2 a 0 0x8000000 1
+ do_ddr_test_ac_windows_aclcdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_DDR_TUNE_AC_CLK):
+ {
+ // run_command("ddr_tune_ddr_ac_acbdlr_ck a 0 0x8000000 3",0);
+ //ddr_test_cmd 0xA a 0 0x8000000 1
+ do_ddr_test_ac_windows_acbdlr_ck((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+
+ case(DDR_TEST_CMD__DDR_TUNE_MAX_CLK):
+ {
+ // run_command("ddr_test_cmd 3 0x8000000 0",0);
+ printf("\nTest ddr max frequency should use max timming ,such as 14-14-14\n");
+
+ do_ddr_test_ddr_max_freq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TUNE_ZQ):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
+ printf("\nTest zq,should first test max ddr frequency use default zq value\n");
+
+ do_ddr_test_ddr_zq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_GXTVBB_CROSSTALK):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
+ printf("\nTest GXTVBB cross talk,test only channel 0 --0x10000000 channel 1 --0x10000400 32byte\n");
+
+ do_ddr_gxtvbb_crosstalk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_BANDWIDTH_TEST):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
+ printf("\nNOTE test DDR bandwidth in uboot limited by cpu speed \n");
+
+ do_ddr_test_bandwidth((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_LCDLR_ENV_TUNE):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
+ printf("\ntune ddr lcdlr use uboot env or uart input \n");
+
+ do_ddr_fine_tune_lcdlr_env((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_MODIFY_REG_USE_MASK):
+ {
+ // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
+ printf("\nmodify ddr reg use mask \n");
+
+ do_ddr_modify_reg_use_mask((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SETZQ):
+ {
+ // run_command("ddr_test_cmd 0x10 0x59 0x5d 0x5b ",0);
+ printf("\nset ddr zq \n");
+
+ do_ddr_set_zq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+ case(DDR_TEST_CMD__DDR_TUNE_DQS):
+ {
+ // run_command("ddr_test_cmd 0x11 a 0 0x80000 ",0);
+ printf("\ntest dqs window \n");
+
+ do_ddr_test_dqs_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_TEST_START_ADD):
+ {
+ // run_command("ddr_test_cmd 12 0x41080000 ",0);
+
+
+ test_start_addr=arg[0];
+ if (test_start_addr == 0)
+ test_start_addr=0x1080000;
+ printf("\nset ddr test test_start_addr==0x%08x \n",test_start_addr);
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_AC_BIT_SETUP_HOLD_MARGIN):
+ { //clk seed use for clk too early,clk must delay
+ // run_command("ddr_test_cmd 0x13 a 0 0x8000000 0 0xc ",0); cs0 setup
+ // run_command("ddr_test_cmd 0x13 a 0 0x8000000 1 0xc ",0); cs0 hold
+ // run_command("ddr_test_cmd 0x13 a 0 0x8000000 2 0xc ",0); cs0 hold //some times ddr frequency too high cannot move clk delay.then should only move cmd bdl
+ //so shouldt test hold time use method 1 and method 2----test hold time take care--20160804-jiaxing
+ // run_command("ddr_test_cmd 0x13 a 0 0x8000000 0 0xd ",0); cs1 setup
+ // run_command("ddr_test_cmd 0x13 a 0 0x8000000 1 0xd ",0); cs1 hold
+ printf("\ntest AC bit window \n");
+
+ do_ddr_test_ac_bit_setup_hold_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c
+ }
+ break;
+
+ case(DDR_TEST_CMD__DDR_TEST_D2PLL_CMD):
+ {
+ //printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
+ //printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
+ //printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
+ printf("\ntest d2pll cmd ,see ddr_test_cmd 0x17 help \n");
+
+ do_ddr2pll_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_EE_VOLTAGE_MDLR_STEP):
+ {
+ // run_command("ddr_test_cmd 0x16 1000 1 1",0);//test EE 1000mV ddl step pwmb -1 211 212--pwmd--3
+ //1000 1 1 ---1000mv pwmid loop ,if loop then test all pwm voltage
+ //ddr_test_cmd 0x16 1000 1 set to 1000mv
+ printf("\ntest ee voltage ddl step \n");
+
+ do_ddr_test_pwm_ddl((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_AC_LANE_BIT_MARGIN):
+ {
+ // run_command("ddr_test_cmd 0x15 a 0 0x800000 0",0);
+ printf("\ntest ac lane bit margin not include cs pin \n");
+
+ do_ddr_test_ac_bit_margin((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_DATA_BIT_SETUP_HOLD_MARGIN):
+ {
+ // run_command("ddr_test_cmd 0x14 a 0 0x80000 setup/hold pin_id",0);
+ // run_command("ddr_test_cmd 0x14 a 0 0x80000 0 3",0);
+ printf("\ntest data lane bit setup hold \n");
+
+ do_ddr_test_data_bit_setup_hold_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_DATA_LANE_BIT_MARGIN):
+ {
+ // run_command("ddr_test_cmd 0x18 a 0 0x80000 0",0);
+ // run_command("ddr_test_cmd 0x18 a 0 0x80000 1 0 96",0);
+ printf("\ntest data lane bit margin \n");
+
+ do_ddr_test_data_bit_margin((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+ case(DDR_TEST_CMD__DDR4_TUNE_PHY_VREF):
+ {
+ // run_command("ddr_test_cmd 0x19 a 0 0x80000 1 seed step vref_all vref_lcdlr_offset test_down_up_step seed_hex_dec",0);
+ //ddr_test_cmd 0x19 a 0 0x1000000 1 0x1a 1 1 0x8 0 0
+ //ddr_test_cmd 0x19 a 0 0x1000000 1 63 1 1 0x8 0 1
+ printf("\ntest ddr4 phy vref \n");
+
+ do_ddr4_test_phy_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_TUNE_DRAM_VREF):
+ {
+ // run_command("ddr_test_cmd 0x1A a 0 0x80000 clear seed step vref_all vref_lcdlr_offset test_down_up_step vref_range seed_hex_dec",0);
+ //ddr_test_cmd 0x1A a 0 0x1000000 0 0 3 0 0x10
+ //setenv ddr_test_ddr4ram_vref "ddr_test_cmd 0x1A a 0 0x0800000 0 0x14 0 0 0x8 0 0 0"
+ //setenv storeboot "run ddr_test_ddr4ram_vref"
+ printf("\ntest ddr4 DRAM vref \n");
+
+ do_ddr4_test_dram_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_TUNE_AC_VREF):
+ {
+ // run_command("ddr_test_cmd 0x1B a 0 0x80000 clear seed step vref_all vref_lcdlr_offset seed_hex_dec",0);
+ //ddr_test_cmd 0x1B a 0 0x1000000 0 0 1 0 0x10 0
+ printf("\ntest ddr4 AC or dd3 dram ac_data vref \n");
+
+ do_ddr4_test_dram_ac_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+ //DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL
+ case(DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL):
+ {
+ // run_command("ddr_test_cmd 0x1c test_size start_freq end_freq test_loops",0);
+ //ddr_test_cmd 0x1c 0x8000000 800 1500 3
+ printf("\ntest ddr4 sweep ddr clk use d2pll \n");
+
+ do_ddr4_test_dram_clk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY):
+ {
+ // run_command("ddr_test_cmd 0x1d ",0);
+ //ddr_test_cmd 0x1d type delay_ms times //ddr_test_cmd 0x1d 0 1000 100000
+ //times =0xffffffff will auto loop
+ printf("\ntest ddr shift ddr clk \n");
+
+ do_ddr_test_shift_ddr_clk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ //DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ
+
+ case(DDR_TEST_CMD__DDR_TEST_PWM_CMD):
+ {
+ // run_command("ddr_test_cmd 0x1f 0x1 0x2 0x1A ",0);//test EE pwmb --1 211 212--pwmd--3
+ //1000 1 1 ---pwmid pwm_low pwm_high pwm_low+pwm_high==normal=28
+ printf("\npwmid pwm_low pwm_high \n");
+
+ do_ddr_test_pwm_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_TEST_EE_SI):
+ {
+ // run_command("ddr_test_cmd 0x20 0x1 0x2 0x1A ",0);//test EE pwmb --1 211 212--pwmd--3
+ //1000 1 1 ---pwmid pwm_low pwm_high pwm_low+pwm_high==normal=28
+ // do_ddr_test_ee_si((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
+#else
+ case(DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_ENV):
+ {
+ // run_command("ddr_test_cmd 0x22 a 0 0x80000 ",0);
+ printf("\ntest dqs window use env \n");
+
+ do_ddr_test_dqs_window_env((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY_TXL):
+ {
+ // run_command("ddr_test_cmd 0x1d ",0);
+ //ddr_test_cmd 0x1d type delay_ms times //ddr_test_cmd 0x1d 0 1000 100000
+ //times =0xffffffff will auto loop
+ printf("\ntest ddr shift ddr clk \n");
+
+ do_ddr_test_shift_ddr_clk_txl((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+#endif
+ case(DDR_TEST_CMD__DISPLAY_DDR_INFORMATION):
+ {
+
+ printf("\ndisplay ddr_information \n");
+
+ do_ddr_display_ddr_information((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__OFFSET_LCDLR):
+ {
+
+ printf("\noffset ddr lcdlr \n");
+
+ do_ddr_offset_ddr_lcdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__SET_WATCH_DOG_VALUE):
+ {
+ printf("\nset watchdog value \n");
+ do_ddr_set_watchdog_value ((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+
+ }
+ break;
+
+ case(DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL_STICKY):
+ {
+ // run_command("ddr_test_cmd 0x28
+ printf("\ntest ddr frequency use sticky register\n");
+
+ do_ddr4_test_dram_clk_use_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_DDR_BIST_TEST_USE_D2PLL_STICKY):
+ {
+ // run_command("ddr_test_cmd 0x29
+ printf("\ntest ddr bist test use sticky register\n");
+
+ do_ddr4_test_bist_test_use_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_BIST_TEST_SIZE_STICKY_6):
+ {
+ // run_command("ddr_test_cmd 0x30
+ printf("\nset ddr bist test size use sticky6 register\n");
+
+ do_ddr_set_bist_test_size_use_sticky_6((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_STORE_WINDOW):
+ {
+ // run_command("ddr_test_cmd 0x31
+ printf("\nset do_ddr_uboot_window_use_source\n");
+
+ do_ddr_uboot_window_use_source((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_STORE_QUICK_WINDOW):
+ {
+ // run_command("ddr_test_cmd 0x32
+ printf("\nset do_ddr_uboot_window_use_source_quick_test\n");
+
+ do_ddr_uboot_window_use_source_quick_method((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW):
+ {
+ // run_command("ddr_test_cmd 0x33
+ printf("\nset do_ddr_uboot_kernel_window_use_source_quick_method\n");
+
+ do_ddr_uboot_kernel_window_use_source_quick_method((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW_MULTI):
+ {
+ // run_command("ddr_test_cmd 0x34
+ printf("\nset do_ddr_uboot_kernel_window_use_source_quick_methods\n");
+
+ do_ddr_uboot_kernel_window_use_source_quick_methods((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ //int do_ddr_uboot_window_use_source_all_same_increase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW_SAME_CHANGE):
+ {
+ // run_command("ddr_test_cmd 0x35
+ printf("\nset do_ddr_uboot_kernel_window_use_all lcdlr same channge \n");
+
+ do_ddr_uboot_window_use_source_all_same_increase((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ #endif
+ case(DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_STICKY):
+ {
+ // run_command("ddr_test_cmd 0x27
+ printf("\ntest dqs window use sticky register\n");
+
+ do_ddr_test_dqs_window_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ):
+ {
+ // run_command("ddr_test_cmd 0x1e write_read pattern_id loop start_addr test_size delay_us",0);
+ //ddr_test_cmd 0x1e 1 2 10 0x40000000 0x10000000
+ //times =0xffffffff will auto loop
+ printf("\ntest ddr write read \n");
+
+ do_ddr_test_write_read((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ //DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD
+ case(DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD):
+ {
+ // run_command("ddr_test_cmd 0x36
+ printf("\nset do_ddr_uboot_reconfig cmd\n");
+
+ do_ddr_uboot_new_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+ case(DDR_TEST_CMD__DISPLAY_G12_DDR_INFORMATION):
+ {
+ // run_command("ddr_test_cmd 0x37
+ printf("\nshow g12 ddr information\n");
+
+ do_ddr_display_g12_ddr_information((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+
+ case(DDR_TEST_CMD__DDR_G12_DMC_TEST):
+ {
+ // run_command("ddr_test_cmd 0x38
+ printf("\nUboot dmc test \n");
+
+ do_ddr_g12_uboot_dmc_test((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ case(DDR_TEST_CMD__DDR_G12_EE_BDLR_TEST):
+ {
+ // run_command("ddr_test_cmd 0x39
+ printf("\nUboot BDLR test \n");
+
+ do_ddr_test_pwm_bdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
+ }
+ break;
+ }
+ return 1;//test_start_addr
+ }
+
+usage:
+ cmd_usage(cmdtp);
+ return 1;
+
+}
+U_BOOT_CMD(
+ ddr_test_cmd, 30, 1, do_ddr_test_cmd,
+ "ddr_test_cmd cmd arg1 arg2 arg3...",
+ "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+
+int do_ddr_auto_test_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ global_boot_times=rd_reg(PREG_STICKY_G12A_REG0);
+ printf("\nglobal_boot_times== %d\n", global_boot_times);
+
+ printf("\nargc== 0x%08x\n", argc);
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ char str[1024]="";
+ unsigned int ddr_test_cmd=0;
+ unsigned int temp_reg_add=0;
+ unsigned int num_arry[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+ //int argc2;
+ //char * argv2[30];
+
+ temp_reg_add=((DMC_STICKY_G12A_0));
+ //num_arry = (uint16_t *)(uint64_t )(sticky_reg_base_add);
+ for (i = 0; i < 32; i++) {
+ num_arry[i]=ddr_rd_8_16bit_on_32reg(temp_reg_add,8,i);
+ if((i==0)||(i==16)){
+ printf("\n numarry[%d]" ,i);
+ }
+ printf(" %d ",num_arry[i]);
+ }
+
+ ddr_test_cmd=num_arry[0];
+
+ unsigned int cs0_test_start= 0x1080000;
+ unsigned int cs0_test_size= DDR_CORSS_TALK_TEST_SIZE;
+ unsigned int cs1_test_start= 0;
+ unsigned int cs1_test_size= 0;
+ unsigned int watchdog_time_s=0;
+ unsigned int test_index_enable=0;
+ unsigned int all_toghter_enable=0;
+ //unsigned int nibble_mask[3]={0,0,0};
+ cs0_test_start=((num_arry[TEST_ARG_CS0_TEST_START_INDEX])|((num_arry[TEST_ARG_CS0_TEST_START_INDEX+1])<<8)|
+ ((num_arry[TEST_ARG_CS0_TEST_START_INDEX+2])<<16)|((num_arry[TEST_ARG_CS0_TEST_START_INDEX+3])<<24));
+ cs0_test_size=((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX])|((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+1])<<8)|
+ ((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+2])<<16)|((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+3])<<24));
+ cs1_test_start=((num_arry[TEST_ARG_CS1_TEST_START_INDEX])|((num_arry[TEST_ARG_CS1_TEST_START_INDEX+1])<<8)|
+ ((num_arry[TEST_ARG_CS1_TEST_START_INDEX+2])<<16)|((num_arry[TEST_ARG_CS1_TEST_START_INDEX+3])<<24));
+ cs1_test_size=((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX])|((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+1])<<8)|
+ ((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+2])<<16)|((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+3])<<24));
+ watchdog_time_s=((num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX])|((num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1])<<8));
+ test_index_enable=((num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX])|((num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX+1])<<8));
+ all_toghter_enable=(num_arry[TEST_ARG_3_ALL_TOGHTER]);
+ switch (ddr_test_cmd)
+ {
+ case(DMC_STICKY_UBOOT_WINDOW_MAGIC_1):
+ if(num_arry[1]==DMC_STICKY_UBOOT_WINDOW_MAGIC_1)
+ {
+ //argc2=10;
+ sprintf(str,"ddr_test_cmd 0x27 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x \
+ 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",cs0_test_start,cs0_test_size,cs1_test_start,cs1_test_size,
+ watchdog_time_s,test_index_enable,0,0,0,0,0,0,all_toghter_enable );
+ // for (i = 1;i<(argc2);i++)
+ // {
+ // argv2[i]=(arg[i]);
+ // sprintf(str," 0x%08x ",(arg[i]));
+ // }
+
+ printf("\nstr=%s\n",str);
+
+ run_command(str,0);
+ // ddr_test_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2,(argv2));
+ break;
+ }
+ }
+
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_auto_test_window, 30, 1, do_ddr_auto_test_window,
+ "ddr_test_cmd cmd arg1 arg2 arg3...",
+ "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+
+int do_ddr_auto_scan_drv(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ // ddr_type 2 lpddr4 rank_config
+ #define AUTO_SCAN_DDR3 0
+ #define AUTO_SCAN_DDR4 1
+ #define AUTO_SCAN_LPDDR3 2
+ #define AUTO_SCAN_LPDDR4 3
+
+ #define AUTO_SCAN_CONFIG_RANK0 0
+ #define AUTO_SCAN_CONFIG_RANK01 1
+
+ char *string_print_flag= " window-loop \n";
+ global_boot_times=rd_reg(PREG_STICKY_G12A_REG0);
+
+ printf("\nargc== 0x%08x\n", argc);
+ printf("\nargc== 0x%08x\n", argc);
+ int i ;
+ for (i = 0;i<argc;i++)
+ {
+ printf("\nargv[%d]=%s\n",i,argv[i]);
+ }
+
+ unsigned int ddr_type=0;
+ unsigned int ddr_channel_rank_config=0;
+ unsigned int loop=0;
+ char *endp;
+ if (argc>1)
+ {
+ ddr_type = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ ddr_type=0;
+ }
+ if (argc>2)
+ {
+ ddr_channel_rank_config = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ ddr_channel_rank_config=0;
+ }
+ if (argc>3)
+ {
+ loop = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ loop=0;
+ }
+ unsigned int temp_reg_add=0;
+ {
+ temp_reg_add=((DMC_STICKY_G12A_0));
+ }
+
+ char str[1024]="";
+ // unsigned int ddr_test_cmd=0;
+ // unsigned int temp_reg_add=0;
+ // unsigned int num_arry[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+ unsigned int counter_loop=0;
+ unsigned int ddr_frequency=0;
+ unsigned int soc_data_drv_ohm_p=0;//74 //config soc data pin pull up driver stength,select 0,28,30,32,34,37,40,43,48,53,60,68,80,96,120ohm
+ unsigned int soc_data_drv_ohm_n=0;//76
+ unsigned int soc_data_odt_ohm_p=0;//78 //config soc data pin odt pull up stength,select 0,28,30,32,34,37,40,43,48,53,60,68,80,96,120ohm
+ unsigned int soc_data_odt_ohm_n=0;//80
+ unsigned int dram_data_drv_ohm=0;//82 //config dram data pin pull up pull down driver stength,ddr3 select 34,40ohm,ddr4 select 34,48ohm,lpddr4 select 40,48,60,80,120,240ohm
+ unsigned int dram_data_odt_ohm=0;//84 //config dram data pin odt pull up down stength,ddr3 select 40,60,120ohm,ddr4 select 34,40,48,60,120,240ohm,lpddr4 select 40,48,60,80,120,240ohm
+ unsigned int dram_data_wr_odt_ohm=0; //174 char 1
+ i=74/2;
+ soc_data_drv_ohm_p=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=76/2;
+ soc_data_drv_ohm_n=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=78/2;
+ soc_data_odt_ohm_p=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=80/2;
+ soc_data_odt_ohm_n=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=82/2;
+ dram_data_drv_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=84/2;
+ dram_data_odt_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ i=174/1;
+ dram_data_wr_odt_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,8,i);
+ i=52/2;
+ ddr_frequency=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
+ //ddr_frequency=global_ddr_clk;
+ if(global_boot_times==1)
+ {
+ printf("\norg_global_boot_times== %d %s", global_boot_times,string_print_flag);
+ //printf("\nmax_counter=%d %d %s",max_counter_total,max_counter_total*2,string_print_flag);
+ printf("\nsoc_data_drv_ohm_p=%d %s",soc_data_drv_ohm_p,string_print_flag);
+ printf("\nsoc_data_drv_ohm_n=%d %s",soc_data_drv_ohm_n,string_print_flag);
+ printf("\nsoc_data_odt_ohm_p=%d %s",soc_data_odt_ohm_p,string_print_flag);
+ printf("\nsoc_data_odt_ohm_n=%d %s",soc_data_odt_ohm_n,string_print_flag);
+ printf("\ndram_data_drv_ohm=%d %s",dram_data_drv_ohm,string_print_flag);
+ printf("\ndram_data_odt_ohm=%d %s",dram_data_odt_ohm,string_print_flag);
+ printf("\ndram_data_wr_odt_ohm=%d %s",dram_data_wr_odt_ohm,string_print_flag);
+ }
+ unsigned int soc_data_drv_ohm_p_t[]={34,40,48,60};
+ // unsigned int soc_data_drv_ohm_n_t[]={34,40,48,60};
+
+ unsigned int dram_data_odt_ohm_t_ddr3[]={40,60,120}; //ddr3
+ unsigned int dram_data_odt_ohm_t_ddr4[]={40,48,60,120}; //ddr4
+ unsigned int dram_data_odt_ohm_t_lpddr4[]={40,48,60,120}; //lpddr4
+
+ unsigned int dram_data_drv_ohm_t_ddr3[]={34,40}; //ddr3
+ unsigned int dram_data_drv_ohm_t_ddr4[]={34,48}; //ddr4
+ unsigned int dram_data_drv_ohm_t_lpddr4[]={40,48,60}; //lpddr4
+
+ unsigned int soc_data_odt_ohm_p_t[]={40,48,60,80,120};
+ unsigned int soc_data_odt_ohm_n_t[]={40,48,60,80,120};
+
+ unsigned int dram_data_wr_odt_ohm_t_ddr3[]={60,120,0}; //ddr3
+ unsigned int dram_data_wr_odt_ohm_t_ddr4[]={80,120,0}; //ddr4
+
+ unsigned int *p_soc_data_drv_ohm_p=NULL;
+ // unsigned int *p_soc_data_drv_ohm_n=NULL;
+ unsigned int *p_soc_data_odt_ohm_p=NULL;
+ unsigned int *p_soc_data_odt_ohm_n=NULL;
+
+
+ unsigned int *p_dram_data_drv_ohm=NULL;
+ unsigned int *p_dram_data_odt_ohm=NULL;
+ unsigned int *p_dram_data_wr_odt_ohm=NULL;
+
+ p_soc_data_drv_ohm_p=soc_data_drv_ohm_p_t;
+ // p_soc_data_drv_ohm_n=soc_data_drv_ohm_n_t;
+ p_soc_data_odt_ohm_p=soc_data_odt_ohm_p_t;
+ p_soc_data_odt_ohm_n=soc_data_odt_ohm_n_t;
+
+
+ p_dram_data_drv_ohm=dram_data_drv_ohm_t_ddr3;
+ p_dram_data_odt_ohm=dram_data_odt_ohm_t_ddr3;
+ p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_ddr3;
+
+ unsigned int max_counter_loop_w1=(sizeof(soc_data_drv_ohm_p_t))/(sizeof(soc_data_drv_ohm_p_t[0]));
+ unsigned int max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_ddr3))/(sizeof(dram_data_odt_ohm_t_ddr3[0]));
+ unsigned int max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_ddr3))/(sizeof(dram_data_drv_ohm_t_ddr3[0]));
+ unsigned int max_counter_loop_r2=(sizeof(soc_data_odt_ohm_p_t))/(sizeof(soc_data_odt_ohm_p_t[0]));
+ unsigned int max_counter_loop_wr1=1;
+ if(ddr_channel_rank_config)
+ {
+ max_counter_loop_wr1=(sizeof(dram_data_wr_odt_ohm_t_ddr3))/(sizeof(dram_data_wr_odt_ohm_t_ddr3[0]));
+ }
+ //ddr_channel_rank_configCONFIG_DDR0_32BIT_RANK01_CH0
+ if(ddr_type==AUTO_SCAN_DDR4)
+ {
+ p_dram_data_drv_ohm=dram_data_drv_ohm_t_ddr4;
+ p_dram_data_odt_ohm=dram_data_odt_ohm_t_ddr4;
+ p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_ddr4;
+ max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_ddr4))/(sizeof(dram_data_odt_ohm_t_ddr4[0]));
+ max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_ddr4))/(sizeof(dram_data_drv_ohm_t_ddr4[0]));
+
+ if(ddr_channel_rank_config)
+ {
+ max_counter_loop_wr1=(sizeof(dram_data_wr_odt_ohm_t_ddr4))/(sizeof(dram_data_wr_odt_ohm_t_ddr4[0]));
+ }
+ }
+ if(ddr_type==AUTO_SCAN_LPDDR4)
+ {
+ p_dram_data_drv_ohm=dram_data_drv_ohm_t_lpddr4;
+ p_dram_data_odt_ohm=dram_data_odt_ohm_t_lpddr4;
+ // p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_lpddr4;
+ max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_lpddr4))/(sizeof(dram_data_odt_ohm_t_lpddr4[0]));
+ max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_lpddr4))/(sizeof(dram_data_drv_ohm_t_lpddr4[0]));
+ max_counter_loop_r2=(sizeof(soc_data_odt_ohm_n_t))/(sizeof(soc_data_odt_ohm_n_t[0]));
+
+ // unsigned int *p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_lpddr4;
+ if(ddr_channel_rank_config)
+ {
+ max_counter_loop_wr1=1;
+ }
+ }
+
+ unsigned int max_counter_total=(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)*max_counter_loop_wr1;
+ //add 2 times recover
+ /*
+ switch (global_boot_times)
+ {
+ case(1):
+ {
+ break;
+ }
+ }
+ */
+ //each arrary test 2 times ,for maybe 1times will fail,then next time will recovery //jiaxing 20181114
+ counter_loop=(((global_boot_times-1)/2)%max_counter_total);
+ dram_data_wr_odt_ohm=0;
+ if(max_counter_loop_wr1>1)
+ {
+ dram_data_wr_odt_ohm=p_dram_data_wr_odt_ohm[(counter_loop/(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))];
+ }
+ if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))<(max_counter_loop_w1*max_counter_loop_w2))
+ {
+ soc_data_drv_ohm_p=p_soc_data_drv_ohm_p[(((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))%max_counter_loop_w1)];
+ soc_data_drv_ohm_n=soc_data_drv_ohm_p;
+ dram_data_odt_ohm=p_dram_data_odt_ohm[ (((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))/max_counter_loop_w1)];
+ }
+ else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))==((max_counter_loop_w1*max_counter_loop_w2)+0))
+ {
+ ddr_test_watchdog_reset_system();
+ // sprintf(str,"g12_d2pll 1200 0x11 0x6 0 0x0 0 0 0 0x800000 0 1 "
+ // printf("\nstr=%s\n",str);
+ // run_command(str,0);
+ }
+ else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))<(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2-1))
+ {
+ dram_data_drv_ohm=p_dram_data_drv_ohm[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))%max_counter_loop_r1)];
+ soc_data_odt_ohm_p=p_soc_data_odt_ohm_p[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))/max_counter_loop_r1)];
+ soc_data_odt_ohm_n=0;
+ if(ddr_type==CONFIG_DDR_TYPE_LPDDR4)
+ {
+ soc_data_odt_ohm_p=0;
+ soc_data_odt_ohm_n=p_soc_data_odt_ohm_n[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))/max_counter_loop_r1)];
+ }
+ }
+ else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))==(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2-1))
+ {
+ ddr_test_watchdog_reset_system();
+ }
+ printf("\nglobal_boot_times== %d %s", global_boot_times,string_print_flag);
+ if(loop)
+ {
+ if(((global_boot_times-1)/2)>max_counter_total)
+ return 1;
+ }
+ printf("\nmax_counter=%d %d %s",max_counter_total,max_counter_total*2,string_print_flag);
+ printf("\nsoc_data_drv_ohm_p=%d %s",soc_data_drv_ohm_p,string_print_flag);
+ printf("\nsoc_data_drv_ohm_n=%d %s",soc_data_drv_ohm_n,string_print_flag);
+ printf("\nsoc_data_odt_ohm_p=%d %s",soc_data_odt_ohm_p,string_print_flag);
+ printf("\nsoc_data_odt_ohm_n=%d %s",soc_data_odt_ohm_n,string_print_flag);
+ printf("\ndram_data_drv_ohm=%d %s",dram_data_drv_ohm,string_print_flag);
+ printf("\ndram_data_odt_ohm=%d %s",dram_data_odt_ohm,string_print_flag);
+ printf("\ndram_data_wr_odt_ohm=%d %s",dram_data_wr_odt_ohm,string_print_flag);
+{
+ if(soc_data_drv_ohm_p)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 74 %d 2 0 ",
+ soc_data_drv_ohm_p);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ if(soc_data_drv_ohm_n)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 76 %d 2 0 ",
+ soc_data_drv_ohm_n);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ if(soc_data_odt_ohm_p)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 78 %d 2 0 ",
+ soc_data_odt_ohm_p);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ if(soc_data_odt_ohm_n)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 80 %d 2 0 ",
+ soc_data_odt_ohm_n);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ if(dram_data_drv_ohm)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 82 %d 2 0 ",
+ dram_data_drv_ohm);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ if(dram_data_odt_ohm)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 84 %d 2 0 ",
+ dram_data_odt_ohm);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ //if(dram_data_wr_odt_ohm)
+ {
+ sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 174 %d 1 0 ",
+ dram_data_wr_odt_ohm);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+
+ sprintf(str,"g12_d2pll %d 0x12 0x6 0 0x0 0 0 0 0x800000 0 1 ",ddr_frequency);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+}
+
+return 1;
+}
+
+int do_ddr_auto_fastboot_check(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ #define DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT (1<<5)
+ #define AUTO_WINDOW_TEST_ENABLE_ITEM ((1<<1)|(1<<2))
+ // int i=0;
+ // int count=0;
+ char *endp;
+ //unsigned int enable_ddr_fast_boot=0; // 0 pause 1,resume
+ char auto_window_test_enable_item=DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT;
+ uint32_t auto_window_test_dq_size=0;
+ char pattern_dis_scramble=0;
+ if (argc>1)
+ {
+ auto_window_test_enable_item = simple_strtoull_ddr(argv[1], &endp, 0);
+ if (*argv[1] == 0 || *endp != 0)
+ auto_window_test_enable_item=DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT;
+ }
+ if (argc>2)
+ {
+ auto_window_test_dq_size = simple_strtoull_ddr(argv[2], &endp, 0);
+ if (*argv[2] == 0 || *endp != 0)
+ auto_window_test_dq_size=0;
+ }
+ if (argc>3)
+ {
+ pattern_dis_scramble = simple_strtoull_ddr(argv[3], &endp, 0);
+ if (*argv[3] == 0 || *endp != 0)
+ pattern_dis_scramble=0;
+ }
+ char str[1024]="";
+ ddr_set_t *ddr_set_t_p=NULL;
+ ddr_set_t_p=(ddr_set_t *)(ddr_set_t_p_arrary);
+ //ddr_set_t_p= (ddr_set_t *)G12_DMC_STICKY_0;
+ //if (sizeof(ddr_set_t)<loop_max)
+ uint32_t ddr_set_add=0;
+ uint32_t ddr_set_size=0;
+ ddr_set_add=(uint32_t)(uint64_t)(ddr_set_t_p);
+ ddr_set_size=sizeof(ddr_set_t);
+ printf("\nddr_set_t_p==0x%08x\n",ddr_set_add);
+ uint32_t loop=0;
+ uint32_t loop_max = (4+(0x3f<<2));//((DMC_STICKY_63-DMC_STICKY_0));
+ // loop_max=sizeof(ddr_set_t);
+ for (loop = 0; loop <loop_max; loop+=4) {
+ wr_reg(((uint64_t)(ddr_set_t_p) + loop), rd_reg(G12_DMC_STICKY_0 + loop));
+ }
+
+// if((ddr_set_t_p->slt_test_function[0])&DMC_TEST_SLT_ENABLE_DDR_AUTO_FAST_BOOT)
+// if((ddr_set_t_p->fast_boot[0])>=0xfe)
+ if((ddr_set_t_p->fast_boot[0]))
+ {
+ printf("\nuboot enable auto fast boot funciton \n");
+ }
+ else
+ return 1 ;
+
+ if((ddr_set_t_p->fast_boot[0])==0xff)
+ {
+ printf("\nuboot auto fast boot auto window test is done \n");
+ return 1 ;
+ }
+
+ printf("\n(ddr_set_t_p->fast_boot[0])==0x%08x\n",(ddr_set_t_p->fast_boot[0]));
+{
+ uint16_t dq_bit_delay[72];
+ unsigned char t_count=0;
+ uint16_t delay_org=0;
+ uint16_t delay_temp=0;
+ uint32_t add_offset=0;
+ dwc_ddrphy_apb_wr(0xd0000,0x0);
+
+ {
+ // printf("\n ARdPtrInitVal");
+ add_offset=((0<<20)|(0<<16)|(0<<12)|(0x2e));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->ARdPtrInitVal=delay_org;
+ // printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+
+ // printf("\n dfimrl0 dfimrl1 dfimrl2 dfimrl3 HwtMRL");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ ddr_set_t_p->dfi_mrl=delay_org;
+ // printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(1<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ // printf("\n t_count: %04d %04d %08x %08x",1,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(2<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ // printf("\n t_count: %04d %04d %08x %08x",2,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(1<<16)|(3<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+ // printf("\n t_count: %04d %04d %08x %08x",3,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ add_offset=((0<<20)|(2<<16)|(0<<12)|(0x20));
+ delay_org=dwc_ddrphy_apb_rd(add_offset);
+
+ ddr_set_t_p->dfi_hwtmrl=delay_org;
+ // printf("\n t_count: %04d %04d %08x %08x",0,delay_org,((((add_offset) << 1)+0xfe000000)),delay_org);
+ }
+ {
+ // printf("\n count_index delay_value register_add register_value \n ");
+ // printf("\n address delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<10;t_count++)
+ {
+ add_offset=((0<<20)|(0<<16)|(t_count<<12)|(0x80));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->ac_trace_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n tdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-9 is coarse --step==1UI",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0xd0+(t_count/8)+((t_count%2)<<8)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dqs_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n rxdqs delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI,no coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x8c+(t_count/8)+((t_count%2)<<8)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+ ddr_set_t_p->read_dqs_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n write dq_bit delay * 1/32UIx100==%d ps bit0-4 fine tune --step==1/32UI ,bit 6-8 is coarse --step==1U",ui_1_32_100step);
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->write_dq_bit_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n read dq_bit delay * BDLRx100==%d ps bit0-4 fine tune --step==bdlr step size about 5ps,no coarse",bdlr_100step);
for(t_count=0;t_count<72;t_count++)
{
- add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0xc0+((t_count%9)<<8)+(t_count/36)));
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(0x68+((t_count%9)<<8)+(t_count/36)));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=((delay_org&0x3f));
+
+ ddr_set_t_p->read_dq_bit_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ }
+ {
+ // printf("\n read dqs gate delay * 1/32UIx100==%d ps bit0-4 fine tune ,bit 6-10 is coarse",ui_1_32_100step);
+ for(t_count=0;t_count<16;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%8)>>1)<<12)|(0x80+(t_count/8)+((t_count%2)<<8)));
dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
delay_org=dq_bit_delay[t_count];
- delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
- printf("\n t_count: %d %d",t_count,delay_temp);
- }
- }
-
-}
-
-
-
-
-
-
-
-return 1;
-*/
-
-}
-#endif
-
-#if 0
-int do_ddr_uboot_window_g12a_use_source_test_add_clk(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- printf("\nsetenv bootcmd ddr_test_cmd 0x36 4 6 60 0 0x100000 0x4000000 0 0x100010 0\n");
- printf("\nEnter do_ddr_uboot_window_use_source function\n");
- printf("\n--- watchdog should >15s\n");
-
-#define DDR_TEST_NULL 0
-#define DDR_TEST_PASS 1
-#define DDR_TEST_FAIL 2
-
-
-#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
-#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
- //PREG_STICKY_REG4
- //PREG_STICKY_REG5
-
-#define DDR_TEST_STATUS_UBOOT_ONGOING 1
-#define DDR_TEST_STATUS_UBOOT_FINISH 2
-#define DDR_TEST_STATUS_KERNEL_ONGING 3
-#define DDR_TEST_STATUS_KERNEL_FINISH 4
- //#define DDR_TEST_FAIL 2
-
-
- char *endp;
- unsigned int lane_disable= 0;
- unsigned int data_source= 0;
- unsigned int ddr_data_test_size=0x1000000;
- unsigned int ddr_add_test_size=0x10000000;
- unsigned int ddr_test_size=0x10000000;
-
- unsigned int ddr_test_clear_flag=0;
- unsigned int ddr_test_init_offset=0;
- unsigned int ddr_test_uboot_kernel_enable_mask=0;
-
- unsigned int ddr_test_uboot_loop=0;
-
- unsigned int kernel_test_watchdog_time_s=60;
- unsigned int test_watchdog_time_s=15;
-
- //uint32_t stick_test_ddr_window_delay_override_enable=0;
- uint32_t stick_test_ddr_window_delay_override_index=0;
- uint32_t stick_test_ddr_window_delay_override_value=0;
-
- char str[1024]="";
-
- error_outof_count_flag =1; //for quick out of error
- if (argc >1) {
- data_source = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- {
- data_source= DDR_PARAMETER_SOURCE_FROM_UBOOT_ENV;
- }
- }
- if (argc >2) {
- watchdog_time_s = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- {
- watchdog_time_s= 15;
- }
- }
- printf("watchdog_time_s==%d\n",watchdog_time_s);
- test_watchdog_time_s=watchdog_time_s;
- //test_watchdog_time_s=address_test_watchdog_time_s;
- if (argc >3) {
- kernel_test_watchdog_time_s = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- {
- kernel_test_watchdog_time_s= watchdog_time_s;
- }
- }
- printf("kernel_test_watchdog_time_s==%d\n",kernel_test_watchdog_time_s);
- //lane_disable=g_ddr_test_struct->ddr_test_lane_disable;
- if (argc >4) {
- lane_disable = simple_strtoull_ddr(argv[4], &endp, 0);
- if (*argv[4] == 0 || *endp != 0)
- {
- lane_disable= 0;
- }
- }
- printf("lane_disable==0x%08x\n",lane_disable);
-
- if (argc >5) {
- ddr_data_test_size = simple_strtoull_ddr(argv[5], &endp, 0);
- if (*argv[5] == 0 || *endp != 0)
- {
- ddr_data_test_size= 0x100000;
- }
- }
- printf("ddr_data_test_size==0x%08x\n",ddr_data_test_size);
- if (argc >6) {
- ddr_add_test_size = simple_strtoull_ddr(argv[6], &endp, 0);
- if (*argv[6] == 0 || *endp != 0)
- {
- ddr_add_test_size= 0x10000000;
- }
- }
- printf("ddr_add_test_size==0x%08x\n",ddr_add_test_size);
-
- if (argc >7) {
- ddr_test_clear_flag = simple_strtoull_ddr(argv[7], &endp, 0);
- if (*argv[7] == 0 || *endp != 0)
- {
- ddr_test_clear_flag= 0x10000000;
- }
- }
- printf("ddr_test_clear_flag==0x%08x\n",ddr_test_clear_flag);
-
- if (argc >8) {
- ddr_test_init_offset = simple_strtoull_ddr(argv[8], &endp, 0);
- if (*argv[8] == 0 || *endp != 0)
- {
- ddr_test_init_offset= 0;
- }
- }
- printf("ddr_test_init_offset==0x%08x\n",ddr_test_init_offset);
-
- if (argc >9) {
- ddr_test_uboot_kernel_enable_mask = simple_strtoull_ddr(argv[9], &endp, 0);
- if (*argv[9] == 0 || *endp != 0)
- {
- ddr_test_uboot_kernel_enable_mask= 0;
- }
- }
- printf("ddr_test_uboot_kernel_enable_mask==0x%08x\n",ddr_test_uboot_kernel_enable_mask);
-
- if (argc >10) {
- ddr_test_uboot_loop = simple_strtoull_ddr(argv[10], &endp, 0);
- if (*argv[10] == 0 || *endp != 0)
- {
- ddr_test_uboot_loop= 0;
- }
- }
- printf("ddr_test_uboot_loop==0x%08x\n",ddr_test_uboot_loop);
-
- if (argc >11) {
- stick_test_ddr_window_delay_override_index = simple_strtoull_ddr(argv[11], &endp, 0);
- if (*argv[11] == 0 || *endp != 0)
- {
- stick_test_ddr_window_delay_override_index= 0;
- }
- }
- printf("stick_test_ddr_window_delay_override_index==0x%08x\n",stick_test_ddr_window_delay_override_index);
-
-
- unsigned int rank_index=0;
- unsigned int temp_count=0;
- unsigned int ddr_test_data_array_max=10;
- unsigned int num_array[10];//8 flag 32_data add_8 32_data add_8
-
- unsigned int temp_test_error=0;
- //unsigned int lcdlr_min=0;
- //unsigned int lcdlr_max=0;
- memset(num_array, 0, sizeof(num_array));
- //char str[1024]="";
-
-
- ddr_test_data_array_max=8;
-
- for (temp_count= 0;temp_count < ddr_test_data_array_max; temp_count++)
- {
- num_array[temp_count]= read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_READ );
- printf("read numarry[%d]==%d\n",temp_count,num_array[temp_count]);
- }
-
- unsigned int reg_def_value_data[4]; //write_lcdlr_value+read_lcdlr_value<<16;
-
- //#define DDR_TEST_STATUS_STEP_FLAG_ADD_ORG_STICKY_OFFSET 4 // PREG_STICKY_REG4
- //#define DDR_TEST_STATUS_PASS_FAIL_ADD_ORG_STICKY_OFFSET 5 //45// PREG_STICKY_REG4
-
- unsigned int test_arg_4_step_flag_add_sticky_offset =0; //use for kernel
- unsigned int test_arg_5_pass_fail_flag_add_sticky_offset =0; //use for kernel
-
- unsigned int test_arg_6_step_status =0; //uboot test we should read error then done status. 0 no test 1 ongoing 2 this step done fail or pass
- unsigned int test_arg_7_lcdlr_offset =0; //left_lcdlr+right_lcdlr<<16
- unsigned int test_arg_7_lcdlr_offset_l =0; //left_lcdlr
- unsigned int test_arg_7_lcdlr_offset_r=0; //right_lcdlr
- unsigned int delay_step_x100= 0;
-
- //unsigned int test_arg_6_lcdlr_temp_count =0;
- unsigned int test_lcdlr_temp_value1 =0;
- //unsigned int test_lcdlr_temp_value2 =0;
- unsigned int test_lcdlr_temp_value =0;
- unsigned int test_lcdlr_reach_lcdlr_limited_flag =0;
-
-
- test_lcdlr_reach_lcdlr_limited_flag=0;
- reg_def_value_data[0]=num_array[0];
- reg_def_value_data[1]=num_array[1];
- reg_def_value_data[2]=num_array[2];
- reg_def_value_data[3]=num_array[3];
- test_arg_4_step_flag_add_sticky_offset=num_array[4];
- test_arg_5_pass_fail_flag_add_sticky_offset=num_array[5];
- test_arg_6_step_status=num_array[6];
- test_arg_7_lcdlr_offset=num_array[7];
-
-
-
- printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
- printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
- printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
- printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
- printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
- printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
- printf("test_arg_6_step_status=%d\n",num_array[6]);
- printf("\ntest_arg_7_lcdlr_offset=0x%08x\n",num_array[7]);
-
-
-
-
- //for (temp_count= 0;temp_count < 8; temp_count++)
- // {
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- //}
-
-
- if(ddr_test_clear_flag)
- { test_arg_6_step_status=0;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- printf("\n clear sticky register should reset,then over write ....\n");
- run_command("reset",0);
- while(1);
- }
-
- if(test_arg_6_step_status==0)
- {
- {
-
- //test_arg_6_step_status=1;
-
-
- //for (temp_count = 0; temp_count < (8); temp_count++) //data
-
- {
- temp_count=stick_test_ddr_window_delay_override_index;
- test_lcdlr_temp_value1=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
- //reg_def_value_data[3]=test_lcdlr_temp_value1;
- reg_def_value_data[3]=test_lcdlr_temp_value1;
- num_array[3] = reg_def_value_data[3] ;
- printf("num_array[%d]=%08x\n",3,num_array[3]);
- }
-
- }
- test_arg_4_step_flag_add_sticky_offset=0;
- test_arg_5_pass_fail_flag_add_sticky_offset=0;
- test_arg_6_step_status=0;
- test_arg_7_lcdlr_offset=0;
- if(ddr_test_init_offset)
- {test_arg_7_lcdlr_offset=ddr_test_init_offset;
- }
- //num_array[0] = reg_def_value_data[0] ;
- //num_array[1] = reg_def_value_data[1] ;
- //num_array[2] = reg_def_value_data[2] ;
- num_array[3] = reg_def_value_data[3] ;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ; //use for kernel
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;//use for kernel
- num_array[6] = test_arg_6_step_status ;
- num_array[7] = test_arg_7_lcdlr_offset ;
-
-
-
- for (temp_count= 0;temp_count < 8; temp_count++)
- {
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
-
- }
- else
- {
- //for (temp_count = 0; temp_count < (8); temp_count++) //data
- {
- //temp_count=4;
- //test_lcdlr_temp_value1=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,temp_count,test_lcdlr_temp_value1,DDR_PARAMETER_READ);
- //temp_count=temp_count+1;
- //temp_count=5;
- //test_lcdlr_temp_value2=do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,(temp_count),test_lcdlr_temp_value2,DDR_PARAMETER_READ);
- //reg_def_value_data[3]=test_lcdlr_temp_value1|(test_lcdlr_temp_value2<<16);
- //num_array[3]=reg_def_value_data[3];
- printf("re-num_array[%d]=%08x\n",3,num_array[3]);
- }
- }
-
- if(ddr_test_uboot_kernel_enable_mask&1)
- {printf("skip uboot test should init kernel offset value==0x%08x\n",num_array[7]);
- }
-
- test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- unsigned int lane_step_count=0;
- {
-
- {
- test_watchdog_time_s=watchdog_time_s;
- ddr_test_size=ddr_data_test_size;
-
- }
-
- printf("reg_def_value_data[0]==0x%08x\n",num_array[0]);
- printf("reg_def_value_data[1]==0x%08x\n",num_array[1]);
- printf("reg_def_value_data[2]==0x%08x\n",num_array[2]);
- printf("reg_def_value_data[3]==0x%08x\n",num_array[3]);
- printf("test_arg_4_step_flag_add_sticky_offset=%d\n",num_array[4]);
- printf("test_arg_5_pass_fail_flag_add_sticky_offset=%d\n",num_array[5]);
- printf("test_arg_6_step_status=%d\n",num_array[6]);
- printf("test_arg_7_lcdlr_offset=%d\n",num_array[7]);
-
- if(test_arg_6_step_status==4) //uboot finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
-
- // unsigned int acmdlr= 0;
-
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- unsigned int acmdlr=32;
- delay_step_x100=100*1000000/(2*global_ddr_clk*32); //100*/32 ps
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
-
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
-
- printf("\n\n-----------------------------------------------------------------------------\n\n");
-
-
- }
- if(ddr_test_uboot_kernel_enable_mask&2)
- {
- if(ddr_test_uboot_loop)
- {
- { test_arg_6_step_status=0;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- printf("\n clear sticky register should reset,then over write ....\n");
- run_command("reset",0);
- while(1);
- }
- run_command("reset",0);
- while(1);
- }
- else
- return 1;
- }
- }
-
-
-
- //if((test_arg_6_step_status==0)) //0 test left edge begin 1 test left edge ongoing 2//left_finish 3 right edge ongoing 4 right finish //5 kernel left edge ongoing 6 kernel left finish 7 kernel right ongoing
- // uboot find from pass to fail offset 0->max
- //kernel find from fail to pass offset from max ->0
- if((test_arg_6_step_status<4)) //// uboot find from pass to fail offset 0->max
- {
- if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
- ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
- )
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
- {
- if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
- {
-
- // for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- lane_step_count=6;
- //if((lane_step_count%2)==0)
- {
-
- if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
- /*
- if((lane_step_count%2)==1)
- {
- if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
- */
-
- }
-
-
-
-
- }
- if(test_lcdlr_reach_lcdlr_limited_flag)
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
- else if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL) //pass 1 error 2
- {
-
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
-
- //(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l+1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r+1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
-
- {
-
- // for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- lane_step_count=6;
- printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- }
-
- if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
-
- }
- }
-
-
- {
- //sprintf(str,"ddr_tune_dqs_step a 0 0x80000 %d",( lane_step));
- //printf("\nstr=%s\n",str);
- stick_test_ddr_window_delay_override_value=test_lcdlr_temp_value;
- sprintf(str,"g12_d2pll %d 0x%08x 0x%08x",global_ddr_clk,( stick_test_ddr_window_delay_override_index),
- stick_test_ddr_window_delay_override_value);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- // run_command("reset",0);
- while(1);
-
- }
- // do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
- // (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- //here will dead
- if(test_arg_6_step_status>4)
- {
- //ddr_test_watchdog_disable(); //s
- ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- // temp_count=5;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("run storeboot",0);
- while(1);
- } else
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
-
-
-
- {
- //write org value
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
- }
- do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
-
-
-
-
- }
- }
-
-
- if((test_arg_6_step_status==4)||(test_arg_6_step_status==6))
- {
- test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_UBOOT_FINISH;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
- temp_count=4;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;//DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- }
- if((test_arg_6_step_status>=4)) ////kernel find from fail to pass offset from max ->0
- {
- if((test_arg_6_step_status==0)||(test_arg_6_step_status==2)
- ||(test_arg_6_step_status==4)||(test_arg_6_step_status==6)
- )
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==3)||(test_arg_6_step_status==5)||(test_arg_6_step_status==7))
- {
- if(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_PASS) //pass 2 error 1
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
- if((test_arg_6_step_status==1)||(test_arg_6_step_status==5))
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
-
- if((((num_array[lane_step_count/2])>>0)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
- if((lane_step_count%2)==1)
- {
- if((((num_array[lane_step_count/2])>>16)&0xffff)<=test_arg_7_lcdlr_offset_l)
- {
- test_lcdlr_reach_lcdlr_limited_flag=test_lcdlr_reach_lcdlr_limited_flag+1;
- }
- }
-
- }
-
-
-
-
- }
- // if(test_lcdlr_reach_lcdlr_limited_flag)
- {
- test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
- }
- }
-
- else if((test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_FAIL)
- //||(test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL))//pass 2 error 1
- )
- {
-
- // test_arg_7_lcdlr_offset_l=(test_arg_7_lcdlr_offset&0xffff);
- // test_arg_7_lcdlr_offset_r=((test_arg_7_lcdlr_offset>>16)&0xffff);
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- test_arg_7_lcdlr_offset_l=test_arg_7_lcdlr_offset_l-1;
- }
- else if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- test_arg_7_lcdlr_offset_r=test_arg_7_lcdlr_offset_r-1;
- }
- test_arg_7_lcdlr_offset=(test_arg_7_lcdlr_offset_l|(test_arg_7_lcdlr_offset_r<<16));
- num_array[7] = test_arg_7_lcdlr_offset ;
- temp_count=7;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
-
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_NULL;
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL;
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
-
-
- }
- else if (test_arg_5_pass_fail_flag_add_sticky_offset==DDR_TEST_NULL)//pass 2 error 1
- {printf("\nfind drop power,test_arg_5_pass_fail_flag_add_sticky_offset=%d \n",test_arg_5_pass_fail_flag_add_sticky_offset);
- }
-
- ddr_test_watchdog_enable(test_watchdog_time_s); //s
- printf("\nenable %ds watchdog \n",test_watchdog_time_s);
- ddr_test_watchdog_clear();
-
- {
-
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- printf("\n (num_array[%d]) ==%08x \n",lane_step_count/2,(num_array[lane_step_count/2]));
- if(((test_arg_6_step_status==1))||(test_arg_6_step_status==5))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)-test_arg_7_lcdlr_offset_l;
- if((((num_array[lane_step_count/2])>>0)&0xffff)<test_arg_7_lcdlr_offset_l)
- {test_lcdlr_temp_value=0;
- }
- }
- }
-
- if(((test_arg_6_step_status==3))||(test_arg_6_step_status==7))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff)+test_arg_7_lcdlr_offset_r;
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff)+test_arg_7_lcdlr_offset_r;
-
- }
- }
-
-
-
- do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
-
-
-
- }
-
- //here will dead
- if(test_arg_6_step_status>4)
- {
- //ddr_test_watchdog_disable(); //s
- ddr_test_watchdog_enable(kernel_test_watchdog_time_s); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- // num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- // temp_count=5;
- // read_write_window_test_parameter(data_source,
- // temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("run storeboot",0);
- while(1);
- } else
- {
- temp_test_error=ddr_test_s_cross_talk_pattern(ddr_test_size);
- }
-
- if (temp_test_error)
- {
- run_command("reset",0);
- while(1);
- }
- else
- {
- ddr_test_watchdog_clear();
- {
- //write org value
- for ((lane_step_count=0);(lane_step_count<8);(lane_step_count++))
- {
- if((lane_step_count%2)==0)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>0)&0xffff);
- }
- if((lane_step_count%2)==1)
- {
- test_lcdlr_temp_value=(((num_array[lane_step_count/2])>>16)&0xffff);
- }
- do_ddr_g12_read_write_ddr_add_window_lcdlr( rank_index,lane_step_count,
- (test_lcdlr_temp_value),DDR_PARAMETER_WRITE);
- }
-
- }
-
- test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_PASS; //pass 2 error 1
- num_array[5] = test_arg_5_pass_fail_flag_add_sticky_offset ;
- temp_count=5;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- run_command("reset",0);
- while(1);
-
- }
- }
- }
- }
-
- if(test_arg_6_step_status>=8) //finish
- {
- ddr_test_watchdog_disable(); //s
- printf("close watchdog\n");
-
-
-
- {
- //acmdlr=do_ddr_read_acmdlr();
- u_int32_t acmdlr=32;
- delay_step_x100=100*1000000/(2*global_ddr_clk*acmdlr);
- printf("\nacmdlr=0x%08x-->dec %d,ddr clk==%d,step=%d ps,10step=%d ps,100step=%d ps,\n",acmdlr,acmdlr,global_ddr_clk,
- delay_step_x100/100,delay_step_x100/10,delay_step_x100);
-
-
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ,test_arg_7_lcdlr_offset_r=%4d ",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l,test_arg_7_lcdlr_offset_r);
- printf("\nlcd_offset=0x%08x,test_arg_7_lcdlr_offset=%4d ps,test_arg_7_lcdlr_offset_r=%4d ps",test_arg_7_lcdlr_offset,test_arg_7_lcdlr_offset_l*delay_step_x100/100,test_arg_7_lcdlr_offset_r*delay_step_x100/100);
- printf("\n\n-----------------------------------------------------------------------------\n\n");
-
- test_arg_4_step_flag_add_sticky_offset=DDR_TEST_STATUS_KERNEL_FINISH;
- num_array[4] = test_arg_4_step_flag_add_sticky_offset ;
- temp_count=4;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- }
-
- test_arg_6_step_status=0xffff;
- {
- // test_arg_6_step_status=test_arg_6_step_status+1;
- num_array[6] = test_arg_6_step_status ;
- temp_count=6;
- read_write_window_test_parameter(data_source,
- temp_count ,num_array[temp_count],DDR_PARAMETER_WRITE);
- }
- ddr_test_watchdog_disable(); //s
- // test_arg_5_pass_fail_flag_add_sticky_offset=DDR_TEST_FAIL; //pass 2 error 1
- run_command("run storeboot",0);
- while(1);
- return 1;
-}
-#endif
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-
-int do_ddr_g12_override_data(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
-
- printf("\12nm phy read write register should closd apd and asr funciton\n");
- writel((0), 0xff638630);
- writel((0), 0xff638634);
-#define G12_DATA_READ_OFFSET_MAX (0X3F)
-#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
-
-#if 1
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- char *endp;
- //rank_index dq_index write_read left/right offset_value
- unsigned int test_index=0; // 1 ac ,0x2, write dqs ,0x4,read dqs,0x8,write dq,0x10 read dq
- unsigned int dq_index=0; //0-8 rank0 lane0 ,rank0 9-17 lane1,rank0 18-26 lane2, rank0 27-35 lane3, 36+0-8 rank1 lane0 ,rank1 36+9-17 lane1,rank1 36+18-26 lane2, rank1 36+27-35 lane3
- // unsigned int test_dq_mask_1=0; //each bit mask corresspond with dq_index
- // unsigned int test_dq_mask_2=0; //each bit mask corresspond with dq_index
- // unsigned int test_dq_mask_3=0; //each bit mask corresspond with dq_index
- //unsigned int write_read_flag=0;// 2 write ,1 read #define DDR_PARAMETER_READ 1 #define DDR_PARAMETER_WRITE 2
- // unsigned int left_right_flag=0;// 1 left ,2 right #define DDR_PARAMETER_LEFT 1 #define DDR_PARAMETER_RIGHT 2
- unsigned int ovrride_value=0;//
-
- // unsigned int offset_enable=0;//
-
- // unsigned int temp_value=0;//
- unsigned int count=0;
- // unsigned int count1=0;
- // unsigned int count_max=0;
- unsigned int lcdlr_max=0;
- // unsigned int reg_add=0;
- // unsigned int reg_value=0;
-
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else if (argc >4)
- {//offset_enable=1;
-
- {
- count=0;
- test_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- test_index = 0;
- }
-
- }
- {
- count++;
- dq_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- dq_index = 0;
- }
-
- }
-
-
-
- {
- count++;
- ovrride_value= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- ovrride_value = 0;
- }
-
- }
-
-
- }
- else {
- return 1;
- }
- printf("lcdlr_max %d,\n",lcdlr_max);
-
- {
-
-
- {
-
- {
- dwc_window_reg_after_training_update(test_index,
- dq_index,
- ovrride_value);
- }
-
- }
- }
-
-
-#endif
- return 1;
-}
-U_BOOT_CMD(
- ddr_g12_override_data, 20, 1, do_ddr_g12_override_data,
- "ddr_g12_override_data 1 0 0 0 1 3",
- "ddr_g12_override_data test_index dq_index ovrride_value \n"
-);
-int do_ddr_g12_offset_data(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-
- //ddr_test_cmd 0x25 1 1 10 10 10 10 10 10 10 10 10 10
-
-
-#define G12_DATA_READ_OFFSET_MAX (0X3F)
-#define G12_DATA_WRITE_OFFSET_MAX (0X3F+7*32)
- printf("\12nm phy read write register should closd apd and asr funciton\n");
- writel((0), 0xff638630);
- writel((0), 0xff638634);
-#if 1
- // if(!argc)
- // goto DDR_TUNE_DQS_START;
- int i=0;
- printf("\nargc== 0x%08x\n", argc);
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
- char *endp;
- //rank_index dq_index write_read left/right offset_value
- unsigned int test_index=0; // 1 ac ,0x2, write dqs ,0x4,read dqs,0x8,write dq,0x10 read dq
- // unsigned int dq_index=0; //0-8 rank0 lane0 ,rank0 9-17 lane1,rank0 18-26 lane2, rank0 27-35 lane3, 36+0-8 rank1 lane0 ,rank1 36+9-17 lane1,rank1 36+18-26 lane2, rank1 36+27-35 lane3
- unsigned int test_dq_mask_1=0; //each bit mask corresspond with dq_index
- unsigned int test_dq_mask_2=0; //each bit mask corresspond with dq_index
- unsigned int test_dq_mask_3=0; //each bit mask corresspond with dq_index
- //unsigned int write_read_flag=0;// 2 write ,1 read #define DDR_PARAMETER_READ 1 #define DDR_PARAMETER_WRITE 2
- unsigned int left_right_flag=0;// 1 left ,2 right #define DDR_PARAMETER_LEFT 1 #define DDR_PARAMETER_RIGHT 2
- unsigned int offset_value=0;//
-
- // unsigned int offset_enable=0;//
-
- // unsigned int temp_value=0;//
- unsigned int count=0;
- //unsigned int count1=0;
- unsigned int count_max=0;
- unsigned int lcdlr_max=0;
- // unsigned int reg_add=0;
- // unsigned int reg_value=0;
-
-
- bdlr_100step=get_bdlr_100step(global_ddr_clk);
- ui_1_32_100step=(1000000*100/(global_ddr_clk*2*32));
-
- if (argc == 1)
- { printf("\nplease read help\n");
-
- }
- else if (argc >6)
- {//offset_enable=1;
-
- {
- count=0;
- test_index= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- test_index = 0;
- }
-
- }
- {
- count++;
- test_dq_mask_1= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- test_dq_mask_1 = 0;
- }
-
- }
- {
- count++;
- test_dq_mask_2= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- test_dq_mask_2 = 0;
- }
-
- }
- {
- count++;
- test_dq_mask_3= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- test_dq_mask_3 = 0;
- }
-
- }
- {
- count++;
- left_right_flag= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- left_right_flag = 0;
- }
-
- }
- {
- count++;
- offset_value= simple_strtoull_ddr(argv[count+1], &endp, 0);
- if (*argv[count+1] == 0 || *endp != 0)
- {
- offset_value = 0;
- }
-
- }
-
-
- }
- else {
- return 1;
- }
- printf("lcdlr_max %d,\n",lcdlr_max);
- if(left_right_flag==DDR_PARAMETER_RIGHT)
- printf("offset right ++ left_right_flag %d,\n",left_right_flag);
- if(left_right_flag==DDR_PARAMETER_LEFT)
- printf("offset left --left_right_flag %d,\n",left_right_flag);
-
- if (test_index == DMC_TEST_WINDOW_INDEX_ATXDLY) {
- count_max=10;
-
- lcdlr_max=3*32;//0x3ff;
- }
-
- if (test_index == DMC_TEST_WINDOW_INDEX_TXDQSDLY) {
- count_max=16;
-
- lcdlr_max=16*32;//0x3ff;
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_RXCLKDLY) {
- count_max=16;
- lcdlr_max=96;//0x3f;
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_TXDQDLY) {
- count_max=36*2;
- lcdlr_max=8*32;//0x1ff;
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_RXPBDLY) {
- count_max=36*2;
- lcdlr_max=0x3f;
- }
- if (test_index == DMC_TEST_WINDOW_INDEX_SOC_VREF) {
- count_max=36*1;
- lcdlr_max=0x3f;
- printf(" soc vref rank0 and rank1 share vref dac\n");
- }
-
-
-
- count=0;
- for (;count<count_max;count++) {
- if ((count<32)) {
- if (test_dq_mask_1&(1<<(count%32))) {
- continue;
- }
- }
- if ((count>31) && (count<63)) {
- if (test_dq_mask_2&(1<<(count%32))) {
- continue;
- }
- }
- if ((count>63)) {
- if (test_dq_mask_3&(1<<(count%32))) {
- continue;
- }
- }
-
- // for (count1=0;count1<offset_value;count1++)
- {
- if(left_right_flag==DDR_PARAMETER_RIGHT)
- {
- dwc_window_reg_after_training_update_increas(test_index,
- count,
- 0,offset_value);
- }
- if(left_right_flag==DDR_PARAMETER_LEFT)
- {
- dwc_window_reg_after_training_update_increas(test_index,
- count,
- 1,offset_value);
- }
- }
- }
-
-
-#endif
- return 1;
-}
-
-
-U_BOOT_CMD(
- ddr_g12_offset_data, 20, 1, do_ddr_g12_offset_data,
- "ddr_g12_offset_data 1 0 0 0 1 3",
- "ddr_g12_offset_data test_index mask1 mask2 mask3 left/right offset_value \n"
-);
-
-#endif
-
-
-#if 0
-U_BOOT_CMD(
- ddr_g12_offset_data_lcdlr, 10, 1, do_ddr_g12_offset_data_lcdlr,
- "ddr_g12_offset_data_lcdlr 0 1 2 2 3",
- "ddr_g12_offset_data_lcdlr rank_index dq_index write_read left/right offset_value \n"
-);
-#endif
-int do_ddr_test_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- //ddr_test_watchdog_init(4000);
- //printf("\nopen watchdog %dms\n",4000);
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- printf("\nargv[%d]=%s\n",i,argv[i]);
-
- /* need at least two arguments */
- if (argc < 2)
- goto usage;
- if ((strcmp(argv[1], "h") == 0))
- goto usage;
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- printf("\12nm phy read write register should closd apd and asr funciton\n");
- writel((0), 0xff638630);
- writel((0), 0xff638634);
-#else
- OPEN_CHANNEL_A_PHY_CLK();
- OPEN_CHANNEL_B_PHY_CLK();
-
- unsigned int ddr_pll = rd_reg(AM_DDR_PLL_CNTL0);
- unsigned int ddr_clk =0;
- //#if( CONFIG_DDR_PHY >=P_DDR_PHY_G12)
- //ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
- //#else
- ddr_clk=pll_convert_to_ddr_clk(ddr_pll);
- //#endif
- ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
-
- printf("\nddr_clk== %dMHz\n", ddr_clk);
- global_ddr_clk=ddr_clk;
- unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
- printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
-
-#endif
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
- unsigned int ddr_pll = rd_reg(G12_AM_DDR_PLL_CNTL0);
- unsigned int ddr_clk =0;
- //#if( CONFIG_DDR_PHY >=P_DDR_PHY_G12)
- //ddr_clk=pll_convert_to_ddr_clk_g12a(ddr_pll);
- //#else
- ddr_clk=pll_convert_to_ddr_clk(ddr_pll);
- //#endif
- ///2*(((24 * (ddr_pll&0x1ff))/((ddr_pll>>9)&0x1f))>>((ddr_pll>>16)&0x3));
-
- printf("\nddr_clk== %dMHz\n", ddr_clk);
- global_ddr_clk=ddr_clk;
- // unsigned int zq0pr = rd_reg(DDR0_PUB_ZQ0PR);
- // printf("\nddr_zq0pr== 0x%08x\n", zq0pr);
-#endif
-
-#define DDR_TEST_CMD__NONE 0
-#define DDR_TEST_CMD__DDR_TEST 1
-#define DDR_TEST_CMD__DDR_TUNE_ACLCDLR 2
-#define DDR_TEST_CMD__DDR_TUNE_MAX_CLK 3 //ddr_test_cmd 3 0x8000000 3 1
-#define DDR_TEST_CMD__DDR_TUNE_ZQ 4
-#define DDR_TEST_CMD__DDR_TUNE_VREF 5
-#define DDR_TEST_CMD__DDR_GXTVBB_CROSSTALK 6
-#define DDR_TEST_CMD__DDR_BANDWIDTH_TEST 7
-#define DDR_TEST_CMD__DDR_LCDLR_ENV_TUNE 8
-#define DDR_TEST_CMD__DDR_MODIFY_REG_USE_MASK 9
-#define DDR_TEST_CMD__DDR_DDR_TUNE_AC_CLK 0xa
-
-#define DDR_TEST_CMD__DDR_SETZQ 0x10
-#define DDR_TEST_CMD__DDR_TUNE_DQS 0x11
-#define DDR_TEST_CMD__DDR_SET_TEST_START_ADD 0x12
-#define DDR_TEST_CMD__DDR_TEST_AC_BIT_SETUP_HOLD_MARGIN 0x13
-#define DDR_TEST_CMD__DDR_TEST_DATA_BIT_SETUP_HOLD_MARGIN 0x14
-#define DDR_TEST_CMD__DDR_TEST_AC_LANE_BIT_MARGIN 0x15
-#define DDR_TEST_CMD__DDR_TEST_EE_VOLTAGE_MDLR_STEP 0x16
-#define DDR_TEST_CMD__DDR_TEST_D2PLL_CMD 0x17
-#define DDR_TEST_CMD__DDR_TEST_DATA_LANE_BIT_MARGIN 0x18
-#define DDR_TEST_CMD__DDR4_TUNE_PHY_VREF 0x19
-#define DDR_TEST_CMD__DDR4_TUNE_DRAM_VREF 0x1A
-#define DDR_TEST_CMD__DDR4_TUNE_AC_VREF 0x1b
-#define DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL 0x1c
-#define DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY 0x1d
-#define DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ 0x1e
-#define DDR_TEST_CMD__DDR_TEST_PWM_CMD 0x1f
-#define DDR_TEST_CMD__DDR_TEST_EE_SI 0x20
-#define DDR_TEST_CMD__DDR_TEST_VDDQ_SI 0x21
-#define DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_ENV 0x22
-#define DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY_TXL 0x23
-#define DDR_TEST_CMD__DISPLAY_DDR_INFORMATION 0x24
-#define DDR_TEST_CMD__OFFSET_LCDLR 0x25
-#define DDR_TEST_CMD__SET_WATCH_DOG_VALUE 0x26
-#define DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_STICKY 0x27
-#define DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL_STICKY 0x28
-#define DDR_TEST_CMD__DDR4_DDR_BIST_TEST_USE_D2PLL_STICKY 0x29
-#define DDR_TEST_CMD__DDR_SET_BIST_TEST_SIZE_STICKY_6 0x30
-#define DDR_TEST_CMD__DDR_SET_UBOOT_STORE_WINDOW 0x31
-#define DDR_TEST_CMD__DDR_SET_UBOOT_STORE_QUICK_WINDOW 0x32
-#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW 0x33
-#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW_MULTI 0x34
-#define DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW_SAME_CHANGE 0x35
-#define DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD 0x36
-#define DDR_TEST_CMD__DISPLAY_G12_DDR_INFORMATION 0x37
-#define DDR_TEST_CMD__DDR_G12_DMC_TEST 0x38
-#define DDR_TEST_CMD__DDR_G12_EE_BDLR_TEST 0x39
-
- unsigned int ddr_test_cmd=0;
- unsigned int arg[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
- char *endp;
- ddr_test_cmd = simple_strtoull_ddr(argv[1], &endp, 0);
- for (i = 2;i<argc;i++)
- arg[i-2]=simple_strtoull_ddr(argv[i], &endp, 0);
- printf("\nddr_test_cmd== 0x%08x\n", ddr_test_cmd);
-
- for (i = 0;i<(argc-2);i++)
- printf("\narg[%08x]=%08x\n",i,arg[i]);
- //int argc2_length;
- //argc2_length=(argc-2);
- //cmd_tbl_t *cmdtp2;
- //int flag2;
- int argc2;
- char* argv2[30];
-
- argc2=argc-1;
- for (i = 1;i<(argc);i++)
- argv2[i-1]=argv[i];
- //argv2=(char *)argv++;
- {
- run_command("dcache off",0);
- run_command("dcache on",0);
- printf("\n cache off on");
- switch (ddr_test_cmd)
- {case(DDR_TEST_CMD__NONE):
- {
- printf("\n 0x0 help\n");
- printf("\n 0x1 ddrtest ddr_test_cmd 0x1 start_add test_size loops ");
- printf("\n 0x2 test aclcdlr ddr_test_cmd 0x2 start_add test_size loops ddr_test_cmd 0x2 a 0 0x8000000 1");
- printf("\n 0x3 test max_pllclk ddr_test_cmd 0x3 test_size loops add_freq sub_freq ");
- printf("\n 0x4 test zq ddr_test_cmd 0x4 test_size loops add_freq sub_freq drv_odt_flag ");
- printf("\n 0x5 test vref ddr_test_cmd 0x5 ");
- printf("\n 0x6 test gxtvbb_crosstalk ddr_test_cmd 0x6 loops pattern_flag ");
- printf("\n 0x7 test bandwidth ddr_test_cmd 0x7 size loops port sub_id timer_ms ");
- printf("\n 0x8 test lcdlr_use_env_uart ddr_test_cmd 0x8 input_src wr_adj_per[] rd_adj_per[][] ");
- printf("\n 0x9 test_reg_use_mask ddr_test_cmd 0x9 reg_add value mask ");
- printf("\n 0xa test ac_clk ddr_test_cmd 0xa start_add test_size loops ddr_test_cmd 0xa a 0 0x8000000 1 ");
- printf("\n 0xb ... ");
- printf("\n 0xc ... ");
- printf("\n 0xd ... ");
- printf("\n 0xe ... ");
- printf("\n 0xf ... ");
- printf("\n 0x10 test set zq ddr_test_cmd 0x10 zq0pr0 zq1pr0 zq2pr0 ");
- printf("\n 0x11 test tune dqs ddr_test_cmd 0x11 a 0 test_size ddr_test_cmd 0x11 a 0 0x80000");
- printf("\n 0x12 test set start_add ddr_test_cmd 0x12 start_add ");
- printf("\n 0x13 test ac_bit_setup_hold time ddr_test_cmd 0x13 a 0 size method pin_id ddr_test_cmd 0x13 a 0 0x8000000 0 0xc");
- printf("\n 0x14 test data_bit_setup_hold time ddr_test_cmd 0x14 a 0 size setup/hold pin_id ddr_test_cmd 0x14 a 0 0x80000 0 3 ");
- printf("\n 0x15 test ac_lane_setup_hold ddr_test_cmd 0x15 a 0 size ");
- printf("\n 0x16 test ee mdlr ddr_test_cmd 0x16 voltage pwm_id loops ");
- printf("\n 0x17 d2pll ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n \
- example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n \
- or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
- printf("or ddr_test_cmd 0x17 1200 6034 60346034 0 0 0 0 1 \n");
- printf("\n 0x18 test data_lane_setup_hold ddr_test_cmd 0x18 a 0 size range start_pin_id end_pin_id ddr_test_cmd 0x18 a 0 0x80000 1 0 96 ");
- printf("\n 0x19 test phy vref ddr_test_cmd 0x19 a 0 0x80000 1 seed step vref_all vref_lcdlr_offset test_down_up_step seed_hex_dec \
- ddr_test_cmd 0x19 a 0 0x1000000 1 63 1 1 0x8 0 1 ");
- printf("\n 0x1a test dram vref ddr_test_cmd 0x1A a 0 0x80000 clear seed step vref_all vref_lcdlr_offset test_down_up_step vref_range seed_hex_dec \
- \n setenv ddr_test_ddr4ram_vref ddr_test_cmd 0x1A a 0 0x0800000 0 0x14 1 0 0x8 0 0 0 ; setenv storeboot run ddr_test_ddr4ram_vref ;save;reset ");
- printf("\n 0x1b test ac vref ddr_test_cmd 0x1B a 0 0x80000 clear seed step vref_all vref_lcdlr_offset seed_hex_dec");
- printf("\n 0x1c sweep dram clk use d2pll_env ddr_test_cmd 0x1c test_size start_freq end_freq test_loops ddr_test_cmd 0x1c 0x8000000 800 1500 1");
- printf("\n 0x1d test shift clk ddr_test_cmd 0x1d type delay_ms times");
- printf("\n 0x1e test write_read ddr_test_cmd 0x1e write_read pattern_id loop start_add test_size");
- printf("\n 0x1f test pwm_cmd ddr_test_cmd 0x1f pwmid pwm_low pwm_high");
- printf("\n 0x22 test ddr_window use env ddr_test_cmd 0x22 a 0 test_size watchdog_time \
- lane_disable_masrk add_test_size setenv bootcmd ddr_test_cmd 0x22 a 0 0x800000 15 0 0x8000000");
- printf("\n defenv;save;setenv bootcmd ddr_test_cmd 0x22 a 0 0x800000 18 0x0 0x8000000");
- printf("\n setenv env_ddrtest_data_lane 0x22;save;reset");
- printf("\n 0x23 test shift ddr frequency ddr_test_cmd 0x23");
- printf("\n 0x24 display ddr_information ddr_test_cmd 0x24");
- printf("\n 0x25 offset ddr_lcdlr ddr_test_cmd 0x25");
- printf("\n 0x26 set watchdog_value ddr_test_cmd 0x26 30");
- printf("\n 0x27 test ddr_window use sticky register ddr_test_cmd 0x27 a 0 test_size watchdog_time \
- lane_disable_masrk add_test_size setenv bootcmd ddr_test_cmd 0x27 a 0 0x800000 15 0 0x8000000");
- printf("\n 0x28 sweep dram clk use d2pll_sticky ddr_test_cmd 0x28 test_size start_freq end_freq test_loops ddr_test_cmd 0x28 0x8000000 800 1500 1");
-
- /*
- ddr_tune_dqs_step a 0 0x800000 1 2 lane0-7 min
- ddr_tune_dqs_step a 0 0x800000 1 1 lane0-7 max
-
- ddr_tune_aclcdlr_step a 0 0x8000000 1 2 lane0-1 min
- ddr_tune_aclcdlr_step a 0 0x8000000 1 1 lane0-1 max
-
- setenv bootcmd "ddr_test_cmd 0x22 a 0 0x800000 18 0 0x8000000" watchdog_time ,lane_disable_mask,add_test_size
- setenv env_ddrtest_data_lane 0x22 设置命令开始标志
- save watchdog_time ,lane_disable_mask,add_test_size
- d2pll 1200
-
- setenv ddr_soc_iovref_test_ddr_clk "0x0000000";
- setenv ddr_soc_iovref_lef "0x0000000";
- setenv ddr_soc_iovref_org "0x0";
- setenv ddr_soc_iovref_rig "0x000000 ";
- save
- d2pll 1104
- ddr_test_cmd 0x19 a 0 0x80000 1 70 1 1 0x8 0 1
-
-
-
- 重测要掉电,数据存在stick 寄存器了
- setenv ddr_dram_iovref_test_ddr_clk "0x0000000";
- setenv ddr_dram_iovref_lef "0x0000000";
- setenv ddr_dram_iovref_org "0x0";
- setenv ddr_dram_iovref_rig "0x000000 ";
- setenv ddr_test_ddr4ram_vref "ddr_test_cmd 0x1A a 0 0x080000 0 70 0 0 0x08 0 0 1"
- setenv bootcmd "run ddr_test_ddr4ram_vref"
- save
- 掉电上电
- d2pll 1104
- */
-
-
- }
- return 1;
-
-
- case(DDR_TEST_CMD__DDR_TEST):
- {
- // run_command("ddrtest 0x10000000 0x8000000 3",0);
- //ddr_test_cmd 0x1 star_add test_size loops
- // do_ddr_test(cmdtp, flag, argc2,argv);
- do_ddr_test((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2,(argv2));
- break;
- }
- case(DDR_TEST_CMD__DDR_TUNE_ACLCDLR):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr a 0 0x8000000 3",0);
- //ddr_test_cmd 0x2 a 0 0x8000000 1
- do_ddr_test_ac_windows_aclcdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_DDR_TUNE_AC_CLK):
- {
- // run_command("ddr_tune_ddr_ac_acbdlr_ck a 0 0x8000000 3",0);
- //ddr_test_cmd 0xA a 0 0x8000000 1
- do_ddr_test_ac_windows_acbdlr_ck((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
-
- case(DDR_TEST_CMD__DDR_TUNE_MAX_CLK):
- {
- // run_command("ddr_test_cmd 3 0x8000000 0",0);
- printf("\nTest ddr max frequency should use max timming ,such as 14-14-14\n");
-
- do_ddr_test_ddr_max_freq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_TUNE_ZQ):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
- printf("\nTest zq,should first test max ddr frequency use default zq value\n");
-
- do_ddr_test_ddr_zq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_GXTVBB_CROSSTALK):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
- printf("\nTest GXTVBB cross talk,test only channel 0 --0x10000000 channel 1 --0x10000400 32byte\n");
-
- do_ddr_gxtvbb_crosstalk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_BANDWIDTH_TEST):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
- printf("\nNOTE test DDR bandwidth in uboot limited by cpu speed \n");
-
- do_ddr_test_bandwidth((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_LCDLR_ENV_TUNE):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
- printf("\ntune ddr lcdlr use uboot env or uart input \n");
-
- do_ddr_fine_tune_lcdlr_env((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_MODIFY_REG_USE_MASK):
- {
- // run_command("ddr_tune_ddr_ac_aclcdlr 0x10000000 0x8000000 3",0);
- printf("\nmodify ddr reg use mask \n");
-
- do_ddr_modify_reg_use_mask((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SETZQ):
- {
- // run_command("ddr_test_cmd 0x10 0x59 0x5d 0x5b ",0);
- printf("\nset ddr zq \n");
-
- do_ddr_set_zq((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
- case(DDR_TEST_CMD__DDR_TUNE_DQS):
- {
- // run_command("ddr_test_cmd 0x11 a 0 0x80000 ",0);
- printf("\ntest dqs window \n");
-
- do_ddr_test_dqs_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_TEST_START_ADD):
- {
- // run_command("ddr_test_cmd 12 0x41080000 ",0);
-
-
- test_start_addr=arg[0];
- if (test_start_addr == 0)
- test_start_addr=0x1080000;
- printf("\nset ddr test test_start_addr==0x%08x \n",test_start_addr);
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_AC_BIT_SETUP_HOLD_MARGIN):
- { //clk seed use for clk too early,clk must delay
- // run_command("ddr_test_cmd 0x13 a 0 0x8000000 0 0xc ",0); cs0 setup
- // run_command("ddr_test_cmd 0x13 a 0 0x8000000 1 0xc ",0); cs0 hold
- // run_command("ddr_test_cmd 0x13 a 0 0x8000000 2 0xc ",0); cs0 hold //some times ddr frequency too high cannot move clk delay.then should only move cmd bdl
- //so shouldt test hold time use method 1 and method 2----test hold time take care--20160804-jiaxing
- // run_command("ddr_test_cmd 0x13 a 0 0x8000000 0 0xd ",0); cs1 setup
- // run_command("ddr_test_cmd 0x13 a 0 0x8000000 1 0xd ",0); cs1 hold
- printf("\ntest AC bit window \n");
-
- do_ddr_test_ac_bit_setup_hold_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c
- }
- break;
-
- case(DDR_TEST_CMD__DDR_TEST_D2PLL_CMD):
- {
- //printf(" ddr_test_cmd 0x17 clk zq_ac zq_soc_dram soc_vref dram_vref dec_hex zq_vref 0\n");
- //printf("example ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 50 81 1 50 \n");
- //printf("or ddr_test_cmd 0x17 1200 0x2aa4a 0x2015995d 0x09 0x20 0 50 \n");
- printf("\ntest d2pll cmd ,see ddr_test_cmd 0x17 help \n");
-
- do_ddr2pll_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_EE_VOLTAGE_MDLR_STEP):
- {
- // run_command("ddr_test_cmd 0x16 1000 1 1",0);//test EE 1000mV ddl step pwmb -1 211 212--pwmd--3
- //1000 1 1 ---1000mv pwmid loop ,if loop then test all pwm voltage
- //ddr_test_cmd 0x16 1000 1 set to 1000mv
- printf("\ntest ee voltage ddl step \n");
-
- do_ddr_test_pwm_ddl((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_AC_LANE_BIT_MARGIN):
- {
- // run_command("ddr_test_cmd 0x15 a 0 0x800000 0",0);
- printf("\ntest ac lane bit margin not include cs pin \n");
-
- do_ddr_test_ac_bit_margin((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- //do_ddr_test_ac_bit_setup_hold_window a 0 0x8000000 0 c
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_DATA_BIT_SETUP_HOLD_MARGIN):
- {
- // run_command("ddr_test_cmd 0x14 a 0 0x80000 setup/hold pin_id",0);
- // run_command("ddr_test_cmd 0x14 a 0 0x80000 0 3",0);
- printf("\ntest data lane bit setup hold \n");
-
- do_ddr_test_data_bit_setup_hold_window((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_DATA_LANE_BIT_MARGIN):
- {
- // run_command("ddr_test_cmd 0x18 a 0 0x80000 0",0);
- // run_command("ddr_test_cmd 0x18 a 0 0x80000 1 0 96",0);
- printf("\ntest data lane bit margin \n");
-
- do_ddr_test_data_bit_margin((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
- case(DDR_TEST_CMD__DDR4_TUNE_PHY_VREF):
- {
- // run_command("ddr_test_cmd 0x19 a 0 0x80000 1 seed step vref_all vref_lcdlr_offset test_down_up_step seed_hex_dec",0);
- //ddr_test_cmd 0x19 a 0 0x1000000 1 0x1a 1 1 0x8 0 0
- //ddr_test_cmd 0x19 a 0 0x1000000 1 63 1 1 0x8 0 1
- printf("\ntest ddr4 phy vref \n");
-
- do_ddr4_test_phy_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_TUNE_DRAM_VREF):
- {
- // run_command("ddr_test_cmd 0x1A a 0 0x80000 clear seed step vref_all vref_lcdlr_offset test_down_up_step vref_range seed_hex_dec",0);
- //ddr_test_cmd 0x1A a 0 0x1000000 0 0 3 0 0x10
- //setenv ddr_test_ddr4ram_vref "ddr_test_cmd 0x1A a 0 0x0800000 0 0x14 0 0 0x8 0 0 0"
- //setenv storeboot "run ddr_test_ddr4ram_vref"
- printf("\ntest ddr4 DRAM vref \n");
-
- do_ddr4_test_dram_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_TUNE_AC_VREF):
- {
- // run_command("ddr_test_cmd 0x1B a 0 0x80000 clear seed step vref_all vref_lcdlr_offset seed_hex_dec",0);
- //ddr_test_cmd 0x1B a 0 0x1000000 0 0 1 0 0x10 0
- printf("\ntest ddr4 AC or dd3 dram ac_data vref \n");
-
- do_ddr4_test_dram_ac_vref((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
- //DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL
- case(DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL):
- {
- // run_command("ddr_test_cmd 0x1c test_size start_freq end_freq test_loops",0);
- //ddr_test_cmd 0x1c 0x8000000 800 1500 3
- printf("\ntest ddr4 sweep ddr clk use d2pll \n");
-
- do_ddr4_test_dram_clk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY):
- {
- // run_command("ddr_test_cmd 0x1d ",0);
- //ddr_test_cmd 0x1d type delay_ms times //ddr_test_cmd 0x1d 0 1000 100000
- //times =0xffffffff will auto loop
- printf("\ntest ddr shift ddr clk \n");
-
- do_ddr_test_shift_ddr_clk((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- //DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ
-
- case(DDR_TEST_CMD__DDR_TEST_PWM_CMD):
- {
- // run_command("ddr_test_cmd 0x1f 0x1 0x2 0x1A ",0);//test EE pwmb --1 211 212--pwmd--3
- //1000 1 1 ---pwmid pwm_low pwm_high pwm_low+pwm_high==normal=28
- printf("\npwmid pwm_low pwm_high \n");
-
- do_ddr_test_pwm_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_TEST_EE_SI):
- {
- // run_command("ddr_test_cmd 0x20 0x1 0x2 0x1A ",0);//test EE pwmb --1 211 212--pwmd--3
- //1000 1 1 ---pwmid pwm_low pwm_high pwm_low+pwm_high==normal=28
- // do_ddr_test_ee_si((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-#if ( CONFIG_DDR_PHY >= P_DDR_PHY_G12)
-#else
- case(DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_ENV):
- {
- // run_command("ddr_test_cmd 0x22 a 0 0x80000 ",0);
- printf("\ntest dqs window use env \n");
-
- do_ddr_test_dqs_window_env((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_TEST_SHIFT_DDR_FREQUENCY_TXL):
- {
- // run_command("ddr_test_cmd 0x1d ",0);
- //ddr_test_cmd 0x1d type delay_ms times //ddr_test_cmd 0x1d 0 1000 100000
- //times =0xffffffff will auto loop
- printf("\ntest ddr shift ddr clk \n");
-
- do_ddr_test_shift_ddr_clk_txl((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-#endif
- case(DDR_TEST_CMD__DISPLAY_DDR_INFORMATION):
- {
-
- printf("\ndisplay ddr_information \n");
-
- do_ddr_display_ddr_information((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__OFFSET_LCDLR):
- {
-
- printf("\noffset ddr lcdlr \n");
-
- do_ddr_offset_ddr_lcdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__SET_WATCH_DOG_VALUE):
- {
- printf("\nset watchdog value \n");
- do_ddr_set_watchdog_value ((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
-
- }
- break;
-
- case(DDR_TEST_CMD__DDR4_SWEEP_DRAM_CLK_USE_D2PLL_STICKY):
- {
- // run_command("ddr_test_cmd 0x28
- printf("\ntest ddr frequency use sticky register\n");
-
- do_ddr4_test_dram_clk_use_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_DDR_BIST_TEST_USE_D2PLL_STICKY):
- {
- // run_command("ddr_test_cmd 0x29
- printf("\ntest ddr bist test use sticky register\n");
-
- do_ddr4_test_bist_test_use_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_BIST_TEST_SIZE_STICKY_6):
- {
- // run_command("ddr_test_cmd 0x30
- printf("\nset ddr bist test size use sticky6 register\n");
-
- do_ddr_set_bist_test_size_use_sticky_6((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_UBOOT_STORE_WINDOW):
- {
- // run_command("ddr_test_cmd 0x31
- printf("\nset do_ddr_uboot_window_use_source\n");
-
- do_ddr_uboot_window_use_source((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_UBOOT_STORE_QUICK_WINDOW):
- {
- // run_command("ddr_test_cmd 0x32
- printf("\nset do_ddr_uboot_window_use_source_quick_test\n");
-
- do_ddr_uboot_window_use_source_quick_method((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW):
- {
- // run_command("ddr_test_cmd 0x33
- printf("\nset do_ddr_uboot_kernel_window_use_source_quick_method\n");
-
- do_ddr_uboot_kernel_window_use_source_quick_method((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_STORE_QUICK_WINDOW_MULTI):
- {
- // run_command("ddr_test_cmd 0x34
- printf("\nset do_ddr_uboot_kernel_window_use_source_quick_methods\n");
-
- do_ddr_uboot_kernel_window_use_source_quick_methods((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- //int do_ddr_uboot_window_use_source_all_same_increase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
- case(DDR_TEST_CMD__DDR_SET_UBOOT_KERNEL_WINDOW_SAME_CHANGE):
- {
- // run_command("ddr_test_cmd 0x35
- printf("\nset do_ddr_uboot_kernel_window_use_all lcdlr same channge \n");
-
- do_ddr_uboot_window_use_source_all_same_increase((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- #endif
- case(DDR_TEST_CMD__DDR_TUNE_DDR_DATA_WINDOW_STICKY):
- {
- // run_command("ddr_test_cmd 0x27
- printf("\ntest dqs window use sticky register\n");
-
- do_ddr_test_dqs_window_sticky((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR4_TEST_DATA_WRTIE_READ):
- {
- // run_command("ddr_test_cmd 0x1e write_read pattern_id loop start_addr test_size delay_us",0);
- //ddr_test_cmd 0x1e 1 2 10 0x40000000 0x10000000
- //times =0xffffffff will auto loop
- printf("\ntest ddr write read \n");
-
- do_ddr_test_write_read((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- //DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD
- case(DDR_TEST_CMD__DDR_SET_UBOOT_G12_RECONFIG_CMD):
- {
- // run_command("ddr_test_cmd 0x36
- printf("\nset do_ddr_uboot_reconfig cmd\n");
-
- do_ddr_uboot_new_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
- case(DDR_TEST_CMD__DISPLAY_G12_DDR_INFORMATION):
- {
- // run_command("ddr_test_cmd 0x37
- printf("\nshow g12 ddr information\n");
-
- do_ddr_display_g12_ddr_information((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
-
- case(DDR_TEST_CMD__DDR_G12_DMC_TEST):
- {
- // run_command("ddr_test_cmd 0x38
- printf("\nUboot dmc test \n");
-
- do_ddr_g12_uboot_dmc_test((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- case(DDR_TEST_CMD__DDR_G12_EE_BDLR_TEST):
- {
- // run_command("ddr_test_cmd 0x39
- printf("\nUboot BDLR test \n");
-
- do_ddr_test_pwm_bdlr((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2, (argv2));
- }
- break;
- }
- return 1;//test_start_addr
- }
-
-usage:
- cmd_usage(cmdtp);
- return 1;
-
-}
-U_BOOT_CMD(
- ddr_test_cmd, 30, 1, do_ddr_test_cmd,
- "ddr_test_cmd cmd arg1 arg2 arg3...",
- "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
- );
-
-int do_ddr_auto_test_window(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- global_boot_times=rd_reg(PREG_STICKY_G12A_REG0);
- printf("\nglobal_boot_times== %d\n", global_boot_times);
-
- printf("\nargc== 0x%08x\n", argc);
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- char str[1024]="";
- unsigned int ddr_test_cmd=0;
- unsigned int temp_reg_add=0;
- unsigned int num_arry[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-
- //int argc2;
- //char * argv2[30];
-
- temp_reg_add=((DMC_STICKY_G12A_0));
- //num_arry = (uint16_t *)(uint64_t )(sticky_reg_base_add);
- for (i = 0; i < 32; i++) {
- num_arry[i]=ddr_rd_8_16bit_on_32reg(temp_reg_add,8,i);
- if((i==0)||(i==16)){
- printf("\n numarry[%d]" ,i);
- }
- printf(" %d ",num_arry[i]);
- }
-
- ddr_test_cmd=num_arry[0];
-
- unsigned int cs0_test_start= 0x1080000;
- unsigned int cs0_test_size= DDR_CORSS_TALK_TEST_SIZE;
- unsigned int cs1_test_start= 0;
- unsigned int cs1_test_size= 0;
- unsigned int watchdog_time_s=0;
- unsigned int test_index_enable=0;
- unsigned int all_toghter_enable=0;
- //unsigned int nibble_mask[3]={0,0,0};
- cs0_test_start=((num_arry[TEST_ARG_CS0_TEST_START_INDEX])|((num_arry[TEST_ARG_CS0_TEST_START_INDEX+1])<<8)|
- ((num_arry[TEST_ARG_CS0_TEST_START_INDEX+2])<<16)|((num_arry[TEST_ARG_CS0_TEST_START_INDEX+3])<<24));
- cs0_test_size=((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX])|((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+1])<<8)|
- ((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+2])<<16)|((num_arry[TEST_ARG_CS0_TEST_SIZE_INDEX+3])<<24));
- cs1_test_start=((num_arry[TEST_ARG_CS1_TEST_START_INDEX])|((num_arry[TEST_ARG_CS1_TEST_START_INDEX+1])<<8)|
- ((num_arry[TEST_ARG_CS1_TEST_START_INDEX+2])<<16)|((num_arry[TEST_ARG_CS1_TEST_START_INDEX+3])<<24));
- cs1_test_size=((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX])|((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+1])<<8)|
- ((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+2])<<16)|((num_arry[TEST_ARG_CS1_TEST_SIZE_INDEX+3])<<24));
- watchdog_time_s=((num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX])|((num_arry[TEST_ARG_WATCHDOG_TIME_SIZE_INDEX+1])<<8));
- test_index_enable=((num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX])|((num_arry[TEST_ARG_TEST_INDEX_ENALBE_INDEX+1])<<8));
- all_toghter_enable=(num_arry[TEST_ARG_3_ALL_TOGHTER]);
- switch (ddr_test_cmd)
- {
- case(DMC_STICKY_UBOOT_WINDOW_MAGIC_1):
- if(num_arry[1]==DMC_STICKY_UBOOT_WINDOW_MAGIC_1)
- {
- //argc2=10;
- sprintf(str,"ddr_test_cmd 0x27 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x \
- 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x",cs0_test_start,cs0_test_size,cs1_test_start,cs1_test_size,
- watchdog_time_s,test_index_enable,0,0,0,0,0,0,all_toghter_enable );
- // for (i = 1;i<(argc2);i++)
- // {
- // argv2[i]=(arg[i]);
- // sprintf(str," 0x%08x ",(arg[i]));
- // }
-
- printf("\nstr=%s\n",str);
-
- run_command(str,0);
- // ddr_test_cmd((cmd_tbl_t * )cmdtp, (int) flag,( int) argc2,(argv2));
- break;
- }
- }
-
- return 1;
-}
-U_BOOT_CMD(
- ddr_auto_test_window, 30, 1, do_ddr_auto_test_window,
- "ddr_test_cmd cmd arg1 arg2 arg3...",
- "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
- );
-
-int do_ddr_auto_scan_drv(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- // ddr_type 2 lpddr4 rank_config
- #define AUTO_SCAN_DDR3 0
- #define AUTO_SCAN_DDR4 1
- #define AUTO_SCAN_LPDDR3 2
- #define AUTO_SCAN_LPDDR4 3
-
- #define AUTO_SCAN_CONFIG_RANK0 0
- #define AUTO_SCAN_CONFIG_RANK01 1
-
- char *string_print_flag= " window-loop \n";
- global_boot_times=rd_reg(PREG_STICKY_G12A_REG0);
-
- printf("\nargc== 0x%08x\n", argc);
- printf("\nargc== 0x%08x\n", argc);
- int i ;
- for (i = 0;i<argc;i++)
- {
- printf("\nargv[%d]=%s\n",i,argv[i]);
- }
-
- unsigned int ddr_type=0;
- unsigned int ddr_channel_rank_config=0;
- unsigned int loop=0;
- char *endp;
- if (argc>1)
- {
- ddr_type = simple_strtoull_ddr(argv[1], &endp, 0);
- if (*argv[1] == 0 || *endp != 0)
- ddr_type=0;
- }
- if (argc>2)
- {
- ddr_channel_rank_config = simple_strtoull_ddr(argv[2], &endp, 0);
- if (*argv[2] == 0 || *endp != 0)
- ddr_channel_rank_config=0;
- }
- if (argc>3)
- {
- loop = simple_strtoull_ddr(argv[3], &endp, 0);
- if (*argv[3] == 0 || *endp != 0)
- loop=0;
- }
- unsigned int temp_reg_add=0;
- {
- temp_reg_add=((DMC_STICKY_G12A_0));
- }
-
- char str[1024]="";
- // unsigned int ddr_test_cmd=0;
- // unsigned int temp_reg_add=0;
- // unsigned int num_arry[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
-
- unsigned int counter_loop=0;
- unsigned int ddr_frequency=0;
- unsigned int soc_data_drv_ohm_p=0;//74 //config soc data pin pull up driver stength,select 0,28,30,32,34,37,40,43,48,53,60,68,80,96,120ohm
- unsigned int soc_data_drv_ohm_n=0;//76
- unsigned int soc_data_odt_ohm_p=0;//78 //config soc data pin odt pull up stength,select 0,28,30,32,34,37,40,43,48,53,60,68,80,96,120ohm
- unsigned int soc_data_odt_ohm_n=0;//80
- unsigned int dram_data_drv_ohm=0;//82 //config dram data pin pull up pull down driver stength,ddr3 select 34,40ohm,ddr4 select 34,48ohm,lpddr4 select 40,48,60,80,120,240ohm
- unsigned int dram_data_odt_ohm=0;//84 //config dram data pin odt pull up down stength,ddr3 select 40,60,120ohm,ddr4 select 34,40,48,60,120,240ohm,lpddr4 select 40,48,60,80,120,240ohm
- unsigned int dram_data_wr_odt_ohm=0; //174 char 1
- i=74/2;
- soc_data_drv_ohm_p=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=76/2;
- soc_data_drv_ohm_n=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=78/2;
- soc_data_odt_ohm_p=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=80/2;
- soc_data_odt_ohm_n=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=82/2;
- dram_data_drv_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=84/2;
- dram_data_odt_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- i=174/1;
- dram_data_wr_odt_ohm=ddr_rd_8_16bit_on_32reg(temp_reg_add,8,i);
- i=52/2;
- ddr_frequency=ddr_rd_8_16bit_on_32reg(temp_reg_add,16,i);
- //ddr_frequency=global_ddr_clk;
- if(global_boot_times==1)
- {
- printf("\norg_global_boot_times== %d %s", global_boot_times,string_print_flag);
- //printf("\nmax_counter=%d %d %s",max_counter_total,max_counter_total*2,string_print_flag);
- printf("\nsoc_data_drv_ohm_p=%d %s",soc_data_drv_ohm_p,string_print_flag);
- printf("\nsoc_data_drv_ohm_n=%d %s",soc_data_drv_ohm_n,string_print_flag);
- printf("\nsoc_data_odt_ohm_p=%d %s",soc_data_odt_ohm_p,string_print_flag);
- printf("\nsoc_data_odt_ohm_n=%d %s",soc_data_odt_ohm_n,string_print_flag);
- printf("\ndram_data_drv_ohm=%d %s",dram_data_drv_ohm,string_print_flag);
- printf("\ndram_data_odt_ohm=%d %s",dram_data_odt_ohm,string_print_flag);
- printf("\ndram_data_wr_odt_ohm=%d %s",dram_data_wr_odt_ohm,string_print_flag);
- }
- unsigned int soc_data_drv_ohm_p_t[]={34,40,48,60};
- // unsigned int soc_data_drv_ohm_n_t[]={34,40,48,60};
-
- unsigned int dram_data_odt_ohm_t_ddr3[]={40,60,120}; //ddr3
- unsigned int dram_data_odt_ohm_t_ddr4[]={40,48,60,120}; //ddr4
- unsigned int dram_data_odt_ohm_t_lpddr4[]={40,48,60,120}; //lpddr4
-
- unsigned int dram_data_drv_ohm_t_ddr3[]={34,40}; //ddr3
- unsigned int dram_data_drv_ohm_t_ddr4[]={34,48}; //ddr4
- unsigned int dram_data_drv_ohm_t_lpddr4[]={40,48,60}; //lpddr4
-
- unsigned int soc_data_odt_ohm_p_t[]={40,48,60,80,120};
- unsigned int soc_data_odt_ohm_n_t[]={40,48,60,80,120};
-
- unsigned int dram_data_wr_odt_ohm_t_ddr3[]={60,120,0}; //ddr3
- unsigned int dram_data_wr_odt_ohm_t_ddr4[]={80,120,0}; //ddr4
-
- unsigned int *p_soc_data_drv_ohm_p=NULL;
- // unsigned int *p_soc_data_drv_ohm_n=NULL;
- unsigned int *p_soc_data_odt_ohm_p=NULL;
- unsigned int *p_soc_data_odt_ohm_n=NULL;
-
-
- unsigned int *p_dram_data_drv_ohm=NULL;
- unsigned int *p_dram_data_odt_ohm=NULL;
- unsigned int *p_dram_data_wr_odt_ohm=NULL;
-
- p_soc_data_drv_ohm_p=soc_data_drv_ohm_p_t;
- // p_soc_data_drv_ohm_n=soc_data_drv_ohm_n_t;
- p_soc_data_odt_ohm_p=soc_data_odt_ohm_p_t;
- p_soc_data_odt_ohm_n=soc_data_odt_ohm_n_t;
-
-
- p_dram_data_drv_ohm=dram_data_drv_ohm_t_ddr3;
- p_dram_data_odt_ohm=dram_data_odt_ohm_t_ddr3;
- p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_ddr3;
-
- unsigned int max_counter_loop_w1=(sizeof(soc_data_drv_ohm_p_t))/(sizeof(soc_data_drv_ohm_p_t[0]));
- unsigned int max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_ddr3))/(sizeof(dram_data_odt_ohm_t_ddr3[0]));
- unsigned int max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_ddr3))/(sizeof(dram_data_drv_ohm_t_ddr3[0]));
- unsigned int max_counter_loop_r2=(sizeof(soc_data_odt_ohm_p_t))/(sizeof(soc_data_odt_ohm_p_t[0]));
- unsigned int max_counter_loop_wr1=1;
- if(ddr_channel_rank_config)
- {
- max_counter_loop_wr1=(sizeof(dram_data_wr_odt_ohm_t_ddr3))/(sizeof(dram_data_wr_odt_ohm_t_ddr3[0]));
- }
- //ddr_channel_rank_configCONFIG_DDR0_32BIT_RANK01_CH0
- if(ddr_type==AUTO_SCAN_DDR4)
- {
- p_dram_data_drv_ohm=dram_data_drv_ohm_t_ddr4;
- p_dram_data_odt_ohm=dram_data_odt_ohm_t_ddr4;
- p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_ddr4;
- max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_ddr4))/(sizeof(dram_data_odt_ohm_t_ddr4[0]));
- max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_ddr4))/(sizeof(dram_data_drv_ohm_t_ddr4[0]));
-
- if(ddr_channel_rank_config)
- {
- max_counter_loop_wr1=(sizeof(dram_data_wr_odt_ohm_t_ddr4))/(sizeof(dram_data_wr_odt_ohm_t_ddr4[0]));
- }
- }
- if(ddr_type==AUTO_SCAN_LPDDR4)
- {
- p_dram_data_drv_ohm=dram_data_drv_ohm_t_lpddr4;
- p_dram_data_odt_ohm=dram_data_odt_ohm_t_lpddr4;
- // p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_lpddr4;
- max_counter_loop_w2=(sizeof(dram_data_odt_ohm_t_lpddr4))/(sizeof(dram_data_odt_ohm_t_lpddr4[0]));
- max_counter_loop_r1=(sizeof(dram_data_drv_ohm_t_lpddr4))/(sizeof(dram_data_drv_ohm_t_lpddr4[0]));
- max_counter_loop_r2=(sizeof(soc_data_odt_ohm_n_t))/(sizeof(soc_data_odt_ohm_n_t[0]));
-
- // unsigned int *p_dram_data_wr_odt_ohm=dram_data_wr_odt_ohm_t_lpddr4;
- if(ddr_channel_rank_config)
- {
- max_counter_loop_wr1=1;
- }
- }
-
- unsigned int max_counter_total=(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)*max_counter_loop_wr1;
- //add 2 times recover
- /*
- switch (global_boot_times)
- {
- case(1):
- {
- break;
- }
- }
- */
- //each arrary test 2 times ,for maybe 1times will fail,then next time will recovery //jiaxing 20181114
- counter_loop=(((global_boot_times-1)/2)%max_counter_total);
- dram_data_wr_odt_ohm=0;
- if(max_counter_loop_wr1>1)
- {
- dram_data_wr_odt_ohm=p_dram_data_wr_odt_ohm[(counter_loop/(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))];
- }
- if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))<(max_counter_loop_w1*max_counter_loop_w2))
- {
- soc_data_drv_ohm_p=p_soc_data_drv_ohm_p[(((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))%max_counter_loop_w1)];
- soc_data_drv_ohm_n=soc_data_drv_ohm_p;
- dram_data_odt_ohm=p_dram_data_odt_ohm[ (((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))/max_counter_loop_w1)];
- }
- else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))==((max_counter_loop_w1*max_counter_loop_w2)+0))
- {
- ddr_test_watchdog_reset_system();
- // sprintf(str,"g12_d2pll 1200 0x11 0x6 0 0x0 0 0 0 0x800000 0 1 "
- // printf("\nstr=%s\n",str);
- // run_command(str,0);
- }
- else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))<(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2-1))
- {
- dram_data_drv_ohm=p_dram_data_drv_ohm[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))%max_counter_loop_r1)];
- soc_data_odt_ohm_p=p_soc_data_odt_ohm_p[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))/max_counter_loop_r1)];
- soc_data_odt_ohm_n=0;
- if(ddr_type==CONFIG_DDR_TYPE_LPDDR4)
- {
- soc_data_odt_ohm_p=0;
- soc_data_odt_ohm_n=p_soc_data_odt_ohm_n[((((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2)))-(max_counter_loop_w1*max_counter_loop_w2+1))/max_counter_loop_r1)];
- }
- }
- else if((counter_loop%(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2))==(max_counter_loop_w1*max_counter_loop_w2+max_counter_loop_r1*max_counter_loop_r2+2-1))
- {
- ddr_test_watchdog_reset_system();
- }
- printf("\nglobal_boot_times== %d %s", global_boot_times,string_print_flag);
- if(loop)
- {
- if(((global_boot_times-1)/2)>max_counter_total)
- return 1;
- }
- printf("\nmax_counter=%d %d %s",max_counter_total,max_counter_total*2,string_print_flag);
- printf("\nsoc_data_drv_ohm_p=%d %s",soc_data_drv_ohm_p,string_print_flag);
- printf("\nsoc_data_drv_ohm_n=%d %s",soc_data_drv_ohm_n,string_print_flag);
- printf("\nsoc_data_odt_ohm_p=%d %s",soc_data_odt_ohm_p,string_print_flag);
- printf("\nsoc_data_odt_ohm_n=%d %s",soc_data_odt_ohm_n,string_print_flag);
- printf("\ndram_data_drv_ohm=%d %s",dram_data_drv_ohm,string_print_flag);
- printf("\ndram_data_odt_ohm=%d %s",dram_data_odt_ohm,string_print_flag);
- printf("\ndram_data_wr_odt_ohm=%d %s",dram_data_wr_odt_ohm,string_print_flag);
-{
- if(soc_data_drv_ohm_p)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 74 %d 2 0 ",
- soc_data_drv_ohm_p);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- if(soc_data_drv_ohm_n)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 76 %d 2 0 ",
- soc_data_drv_ohm_n);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- if(soc_data_odt_ohm_p)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 78 %d 2 0 ",
- soc_data_odt_ohm_p);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- if(soc_data_odt_ohm_n)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 80 %d 2 0 ",
- soc_data_odt_ohm_n);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- if(dram_data_drv_ohm)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 82 %d 2 0 ",
- dram_data_drv_ohm);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- if(dram_data_odt_ohm)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 84 %d 2 0 ",
- dram_data_odt_ohm);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
- //if(dram_data_wr_odt_ohm)
- {
- sprintf(str,"ddr_test_cmd 0x36 0x20180030 0x1 174 %d 1 0 ",
- dram_data_wr_odt_ohm);
- printf("\nstr=%s\n",str);
- run_command(str,0);
- }
-
- sprintf(str,"g12_d2pll %d 0x12 0x6 0 0x0 0 0 0 0x800000 0 1 ",ddr_frequency);
- printf("\nstr=%s\n",str);
- run_command(str,0);
-}
-
-return 1;
-}
-U_BOOT_CMD(
- ddr_auto_scan_drv, 30, 1, do_ddr_auto_scan_drv,
- "ddr_test_cmd cmd arg1 arg2 arg3...",
- "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
- );
+ delay_temp=(32*(((delay_org>>6)&0xf)+((delay_org>>5)&1))+(delay_org&0x1f));
+
+ ddr_set_t_p->read_dqs_gate_delay[t_count]=delay_temp;
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+
+ // printf("\n soc vref : lpddr4-- VREF = VDDQ*(0.047 + VrefDAC0[6:0]*0.00367 DDR4 --VREF = VDDQ*(0.510 + VrefDAC0[6:0]*0.00345");
+ //((0<<20)|(1<<16)|(((over_ride_sub_index%36)/9)<<12)|(((over_ride_sub_index%36)%9)<<8)|(0x40),over_ride_value)
+ uint32_t vref_t_count=0;
+ for(t_count=0;t_count<72;t_count++)
+ {
+ add_offset=((0<<20)|(1<<16)|(((t_count%36)/9)<<12)|(((t_count%36)%9)<<8)|(0x40));
+ dq_bit_delay[t_count]=dwc_ddrphy_apb_rd(add_offset);
+ delay_org=dq_bit_delay[t_count];
+ delay_temp=((delay_org));
+
+ if(t_count<35)
+ {
+ vref_t_count=((((t_count%36)/9)*8)+(t_count%9));
+
+ ddr_set_t_p->soc_bit_vref[vref_t_count]=delay_temp;
+ }
+ // printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+
+ // printf("\n dram vref : lpddr4-- VREF = VDDQ*(0. + VrefDAC0[6:0]*0. DDR4 --VREF = VDDQ*(0. + VrefDAC0[6:0]*0.");
+ add_offset=((0<<20)|(1<<16)|(0<<12)|(0x082));
+ delay_temp=dwc_ddrphy_apb_rd(add_offset);
+ for(t_count=0;t_count<32;t_count++)
+ {
+ ddr_set_t_p->dram_bit_vref[t_count]=delay_temp;
+ //printf("\n t_count: %04d %04d %08x %08x",t_count,delay_temp,((((add_offset) << 1)+0xfe000000)),dq_bit_delay[t_count]);
+ }
+ // printf("\n t_count: %04d %04d %08x %08x",0,delay_temp,((((add_offset) << 1)+0xfe000000)),delay_temp);
+ }
+ for(t_count=0;t_count<4;t_count++)
+ { //p_dev->p_ddrs->tdqs2dq=lpddr4_tdqs2dq;
+ //ddr_set_t_p->retraining[0]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaa)); //PptCtlStatic
+ //ddr_set_t_p->retraining[1]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0
+ //ddr_set_t_p->retraining[2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1
+ ddr_set_t_p->retraining[4*t_count+0]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))&0xff; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+1]=(dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaa)))>>8; //PptCtlStatic
+ ddr_set_t_p->retraining[4*t_count+2]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xae)); //PptDqsCntInvTrnTg0 ps0 rank0 lane 0-3
+ ddr_set_t_p->retraining[4*t_count+3]=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(t_count<<12)|(0xaf)); //PptDqsCntInvTrnTg0 ps0 rank1 lane 0-3
+ }
+}
+
+ if((ddr_set_t_p->fast_boot[0])<0xfe)
+ {
+ printf("\nuboot auto fast boot auto window test begin \n");
+ {
+ ddr_set_t_p->fast_boot[0]=0xfe;
+ #if 1
+ printf("&ddr_sha.ddrs : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.ddrs);
+ printf("&ddr_sha.sha2 : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.sha2);
+ printf("ddr_set_add : 0x%x\n", (uint32_t)(uint64_t)ddr_set_add);
+
+ sha256_csum_wd((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ //sha2((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ printf("print sha\n");
+ sprintf(str,"md %08x 0x100", (uint32_t)(uint64_t)(ddr_set_add-32));
+ run_command(str,0);
+ #endif
+
+ {
+ #ifdef USE_FOR_UBOOT_2018
+ sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #else
+ sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #endif
+ // sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ // sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ sprintf(str,"g12_d2pll %d 0x11 %d 0 0 0 0 0 0x%08x 0 %d",ddr_set_t_p->DRAMFreq[0],auto_window_test_enable_item,auto_window_test_dq_size,pattern_dis_scramble);
+ printf("\nstr=%s\n",str);
+
+ run_command(str,0);
+ }
+ return 1 ;
+ }
+
+ if((ddr_set_t_p->fast_boot[0])==0xfe)
+ {
+ char dmc_test_worst_window_rx=0;
+ char dmc_test_worst_window_tx=0;
+
+ {
+ dwc_ddrphy_apb_wr((0<<20)|(0xd<<16)|(0<<12)|(0x0),0); // DWC_DDRPHYA_APBONLY0_MicroContMuxSel
+
+ dmc_test_worst_window_tx=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0x0c2));
+ dmc_test_worst_window_rx=dwc_ddrphy_apb_rd((0<<20)|(1<<16)|(0<<12)|(0x0c3));
+ printf("\ndmc_test_worst_window_tx =%d \n",dmc_test_worst_window_tx);
+ printf("\ndmc_test_worst_window_rx=%d \n",dmc_test_worst_window_rx);
+ if(dmc_test_worst_window_tx>30)
+ dmc_test_worst_window_tx=30;
+ if(dmc_test_worst_window_rx>30)
+ dmc_test_worst_window_rx=30;
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x1c2),t4_write_worst_margin_rank1);
+ // dwc_ddrphy_apb_wr((0<<20)|(1<<16)|(0<<12)|(0x1c3),t4_read_worst_margin_rank1);
+ ddr_set_t_p->fast_boot[1]=(((dmc_test_worst_window_tx/2)<<4))|(((dmc_test_worst_window_rx/2)));
+ }
+
+ ddr_set_t_p->fast_boot[0]=0xff;
+ {
+ printf("\nuboot auto fast boot auto window test finish \n");
+
+ if(ddr_set_t_p->fast_boot[2])
+ {
+ if((ddr_set_t_p->fast_boot[2])&0x7)
+ {
+ if(((ddr_set_t_p->fast_boot[2])&0x8))
+ sprintf(str,"ddr_g12_offset_data 3 0x0 0 0 1 %d ",(ddr_set_t_p->fast_boot[2])&0x7);
+ else
+ sprintf(str,"ddr_g12_offset_data 3 0x0 0 0 2 %d ",(ddr_set_t_p->fast_boot[2])&0x7);
+
+ printf("\nstr=%s\n",str);
+
+ run_command(str,0);
+ }
+ if((ddr_set_t_p->fast_boot[2])&0x70)
+ {
+ if(((ddr_set_t_p->fast_boot[2])&0x80))
+ sprintf(str,"ddr_g12_offset_data 2 0x0 0 0 1 %d ",((ddr_set_t_p->fast_boot[2])>>4)&0x7);
+ else
+ sprintf(str,"ddr_g12_offset_data 2 0x0 0 0 2 %d ",((ddr_set_t_p->fast_boot[2])>>4)&0x7);
+
+ printf("\nstr=%s\n",str);
+
+ run_command(str,0);
+ }
+
+ sprintf(str,"ddr_fast_boot 1 ");
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ else
+ {
+ #if 1
+ printf("&ddr_sha.ddrs : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.ddrs);
+ printf("&ddr_sha.sha2 : 0x%x\n", (uint32_t)(uint64_t)&ddr_sha.sha2);
+ printf("ddr_set_add : 0x%x\n", (uint32_t)(uint64_t)ddr_set_add);
+
+ sha256_csum_wd((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ //sha2((unsigned char *)(uint64_t)ddr_set_add, sizeof(ddr_set_t), ddr_sha.sha2, 0);
+ printf("print sha\n");
+ sprintf(str,"md %08x 0x100", (uint32_t)(uint64_t)(ddr_set_add-32));
+ run_command(str,0);
+ #endif
+
+ {
+ #ifdef USE_FOR_UBOOT_2018
+ sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #else
+ sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add-SHA256_SUM_LEN,ddr_set_size+SHA256_SUM_LEN);
+ #endif
+ // sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ // sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ printf("\nstr=%s\n",str);
+ run_command(str,0);
+ }
+ //#ifdef USE_FOR_UBOOT_2018
+ //sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ //#else
+ //sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ //#endif
+ //sprintf(str,"store ddr_parameter write 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ //sprintf(str,"store rsv write ddr-parameter 0x%08x 0x%08x ",ddr_set_add,ddr_set_size);
+ //printf("\nstr=%s\n",str);
+
+ //run_command(str,0);
+ }
+ return 1;
+ }
+ }
+
+ return 1;
+}
+U_BOOT_CMD(
+ ddr_auto_scan_drv, 30, 1, do_ddr_auto_scan_drv,
+ "ddr_test_cmd cmd arg1 arg2 arg3...",
+ "ddr_test_cmd cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+U_BOOT_CMD(
+ ddr_fast_boot, 30, 1, do_ddr_fastboot_config,
+ "ddr_fastboot_config cmd arg1 arg2 arg3...",
+ "ddr_fastboot_config cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+U_BOOT_CMD(
+ ddr_auto_fast_boot_check, 30, 1, do_ddr_auto_fastboot_check,
+ "ddr_fastboot_config cmd arg1 arg2 arg3...",
+ "ddr_fastboot_config cmd arg1 arg2 arg3... \n dcache off ? \n"
+ );
+
diff --git a/common/store_interface.c b/common/store_interface.c
index 5e0f75397c..8f5a5a8025 100644
--- a/common/store_interface.c
+++ b/common/store_interface.c
@@ -776,6 +776,11 @@ static int do_store_exit(cmd_tbl_t * cmdtp, int flag, int argc, char * const arg
}
}
#endif
+ if (device_boot_flag == EMMC_BOOT_FLAG) {
+ /* partition table need renew */
+ is_partition_checked = false;
+ }
+#endif
return 0;
}