7 #include <chipcommonb.h>
11 #error __arm__ is NOT defined
14 /* Routine begin/end macro */
15 #if defined(__thumb__)
16 #define FUNC(x) THUMBLEAF(x)
18 #define FUNC(x) LEAF(x)
19 #endif /* __thumb__ */
24 mov r9,r0 /* ddr control register base */
36 /* Configure DDR3 voltage to 1.5V */
41 /* Enable LDO voltage output */
42 ldr r1,=0x1800c020 /* pcu_aopc_control */
49 ldr r4,=0x1800c024 /* pcu_status */
62 ldr r0,=SISF_NS_BOOTDEV_ROM
67 ldr r0,=SI_ENUM_BASE /* r0: core regs SI base address */
68 ldr r4,[r0,#CC_CAPABILITIES] /* r4: capabitilies */
69 and r4,r4,#CC_CAP_OTPSIZE
73 /* Skip OTP initialization here since it was already done in pcie_phy_init */
74 lsr r2,r4,#CC_CAP_OTPSIZE_SHIFT /* Get OTP size */
77 ldr r3,[r1,r2] /* Get the OTP size from otp_sizes table (in bytes) */
79 cmp r3,#0x0 /* skip zero size */
83 cmp r1,#0x0 /* 0: OTP is not ready for whatever reason */
85 add r2,r3,r0 /* Seek to the end of OTP region */
86 /* Scan entire OTP from END -> BEGIN to find first
87 * matching nvram entry */
90 add r4,r2,#CC_SROM_OTP
94 add r4,r2,#CC_SROM_OTP
103 /* no nvram from OTP */
105 /* Get sdram params from OTP 16bits at a time */
108 add r4,r2,#CC_SROM_OTP
111 add r4,r2,#CC_SROM_OTP
114 orr r6,r1,r3 /* sdram_config + sdram_rehash */
116 add r4,r2,#CC_SROM_OTP
119 add r4,r2,#CC_SROM_OTP
122 orr r5,r1,r3 /* sdram_ncdl */
125 ldr r0,=SI_NS_NANDFLASH
126 ldr r1,=SISF_NS_BOOTDEV_NAND
130 ldr r0,=SI_NS_NORFLASH
131 ldr r1,=MAX_NVRAM_SPACE
134 ldr r2,=SI_NS_FLASH_WINDOW
145 /* Try embedded NVRAM at 4KB and 1KB as last resorts */
146 ldr r0,=SI_NS_NORFLASH
158 2: ldr r0,=0x0 /* if we have sdram params from OTP then use it */
168 ldr r6,[r4,#12] /* Pick up sdram_config & sdram_refresh */
169 ldr r5,[r4,#16] /* Pick up sdram_ncdl */
173 ldr r1,[r9,#DDRC_CONTROL00]
176 bne init_ddrphy /* The first time */
184 beq init_ddrphy /* No ddrclk specified */
186 ldr r3,=DDR_TABLE_END
197 /* Put the controller to reset mode first */
204 ldr r0,=CRU_CLKSET_KEY
208 ldr r0,=LCPLL_NDIV_INT
215 ldr r0,=LCPLL_CHX_MDIV
224 ldr r0,=LCPLL_LOAD_EN_CH
228 and r1,r1,#0xfffffff8
230 ldr r0,=CRU_CLKSET_KEY
235 mov r8,r9 /* save r9 */
247 orr r2,r2,#0x01900000
262 b wait_for_ddr_phy_up
265 /* Change PLL divider values inside PHY */
280 wait_for_ddr_phy_pll_lock:
282 beq ddr_phy_pll_lock_done
288 beq ddr_phy_pll_lock_done
289 b wait_for_ddr_phy_pll_lock
290 ddr_phy_pll_lock_done:
297 /* Write 2 if ddr2, 3 if ddr3 */
321 wait_for_ddr_phy_calib_lock:
323 beq ddr_phy_calib_lock_done
329 beq ddr_phy_calib_lock_done
330 b wait_for_ddr_phy_calib_lock
331 ddr_phy_calib_lock_done:
468 /* correct Vtt voltage */
478 mov r9,r8 /* restore r9 */
485 ldr r2,=DDR_STAT_DDR3
491 mov ip,lr /* save lr across calls */
492 adrl r0,ddr2_init_tab
494 mov lr,ip /* restore lr */
498 mov ip,lr /* save lr across calls */
499 adrl r0,ddr3_init_tab
501 mov lr,ip /* restore lr */
506 beq turnon /* No sdram params, use default values */
512 ldr r1,[r9,#DDRC_CONTROL21]
516 str r1,[r9,#DDRC_CONTROL21]
517 ldr r1,[r9,#DDRC_CONTROL22]
521 str r1,[r9,#DDRC_CONTROL22]
529 ldr r1,[r9,#DDRC_CONTROL87]
532 str r1,[r9,#DDRC_CONTROL87]
540 ldr r1,[r9,#DDRC_CONTROL82]
543 str r1,[r9,#DDRC_CONTROL82]
546 ldr r1,[r9,#DDRC_CONTROL82]
551 str r1,[r9,#DDRC_CONTROL82]
554 ldr r1,[r9,#DDRC_CONTROL82]
561 str r1,[r9,#DDRC_CONTROL82]
565 and r0,r0,r6 /* cas latency */
566 sub r1,r0,#1 /* wrlat */
571 sub r1,r0,r1 /* wrlat */
573 ldr r2,[r9,#DDRC_CONTROL05]
576 lsl r3,r0,#9 /* cas << 9 */
578 lsl r3,r0,#25 /* cas << 25 */
580 lsl r3,r1,#16 /* wrlat << 16 */
582 str r2,[r9,#DDRC_CONTROL05]
583 ldr r2,[r9,#DDRC_CONTROL06]
587 str r2,[r9,#DDRC_CONTROL06]
589 ldr r2,[r9,#DDRC_CONTROL174]
596 str r2,[r9,#DDRC_CONTROL174]
598 ldr r2,[r9,#DDRC_CONTROL44]
604 str r2,[r9,#DDRC_CONTROL44]
606 ldr r2,[r9,#DDRC_CONTROL186]
612 str r2,[r9,#DDRC_CONTROL186]
616 ldr r2,=DDR_STAT_DDR3
621 ldr r2,[r9,#DDRC_CONTROL44]
627 str r2,[r9,#DDRC_CONTROL44]
628 ldr r2,[r9,#DDRC_CONTROL45]
641 str r2,[r9,#DDRC_CONTROL45]
643 ldr r2,[r9,#DDRC_CONTROL206]
649 str r2,[r9,#DDRC_CONTROL206]
653 ldr r1,[r9,#DDRC_CONTROL00]
655 str r1,[r9,#DDRC_CONTROL00]
658 ldr r0,[r9,#DDRC_CONTROL89]
659 ldr r2,=DDR_INT_INIT_DONE
689 .word 333, 0x07800000, 0x1e0f1200
690 .word 389, 0x08c00000, 0x23121200
691 .word 400, 0x08000000, 0x20101000
692 .word 533, 0x08000000, 0x20100c00
693 .word 666, 0x07800000, 0x1e0f0900
694 .word 775, 0x07c00000, 0x20100800
695 .word 800, 0x08000000, 0x20100800
768 .word 108, 0x02020101
769 .word 109, 0x08080404
770 .word 110, 0x03020200
771 .word 111, 0x01000202
772 .word 112, 0x00000200
773 .word 116, 0x19000000
774 .word 117, 0x00000028
775 .word 118, 0x00000000
776 .word 119, 0x00010001
777 .word 120, 0x00010001
778 .word 121, 0x00010001
779 .word 122, 0x00010001
780 .word 123, 0x00010001
781 .word 128, 0x001c1c00
782 .word 129, 0x1c1c0001
783 .word 130, 0x00000001
784 .word 133, 0x00011c1c
785 .word 134, 0x00011c1c
786 .word 137, 0x001c1c00
787 .word 138, 0x1c1c0001
788 .word 139, 0x00000001
789 .word 142, 0x00011c1c
790 .word 143, 0x00011c1c
791 .word 144, 0x00000000
792 .word 145, 0x00000000
793 .word 146, 0x001c1c00
794 .word 147, 0x1c1c0001
795 .word 148, 0xffff0001
796 .word 149, 0x00ffff00
797 .word 150, 0x0000ffff
798 .word 151, 0x00000000
799 .word 152, 0x03030303
800 .word 153, 0x03030303
801 .word 156, 0x02006400
802 .word 157, 0x02020202
803 .word 158, 0x02020202
804 .word 160, 0x01020202
805 .word 161, 0x01010064
806 .word 162, 0x01010101
807 .word 163, 0x01010101
808 .word 165, 0x00020101
809 .word 166, 0x00000064
810 .word 167, 0x00000000
811 .word 168, 0x000a0a00
812 .word 169, 0x0c2d0000
813 .word 170, 0x02000200
814 .word 171, 0x02000200
815 .word 172, 0x00000c2d
816 .word 173, 0x00003ce1
817 .word 174, 0x0c2d0505
818 .word 175, 0x02000200
819 .word 176, 0x02000200
820 .word 177, 0x00000c2d
821 .word 178, 0x00003ce1
822 .word 179, 0x02020505
823 .word 180, 0x80000100
824 .word 181, 0x04070303
825 .word 182, 0x0000000a
826 .word 185, 0x0010ffff
827 .word 186, 0x16070303
828 .word 187, 0x0000000f
829 .word 194, 0x00000204
830 .word 202, 0x00000050
831 .word 203, 0x00000050
832 .word 204, 0x00000000
833 .word 205, 0x00000040
834 .word 206, 0x01030301
835 .word 207, 0x00000001
937 .word 100, 0x00000000
938 .word 101, 0x00000000
939 .word 102, 0x00000000
940 .word 103, 0x00000000
941 .word 104, 0x00000000
942 .word 105, 0x00000000
943 .word 106, 0x00000000
944 .word 107, 0x00000000
945 .word 108, 0x02040108
946 .word 109, 0x08010402
947 .word 110, 0x02020202
948 .word 111, 0x01000201
949 .word 112, 0x00000200
950 .word 113, 0x00000000
951 .word 114, 0x00000000
952 .word 115, 0x00000000
953 .word 116, 0x19000000
954 .word 117, 0x00000028
955 .word 118, 0x00000000
956 .word 119, 0x00010001
957 .word 120, 0x00010001
958 .word 121, 0x00010001
959 .word 122, 0x00010001
960 .word 123, 0x00010001
961 .word 124, 0x00000000
962 .word 125, 0x00000000
963 .word 126, 0x00000000
964 .word 127, 0x00000000
965 .word 128, 0x00232300
966 .word 129, 0x23230001
967 .word 130, 0x00000001
968 .word 131, 0x00000000
969 .word 132, 0x00000000
970 .word 133, 0x00012323
971 .word 134, 0x00012323
972 .word 135, 0x00000000
973 .word 136, 0x00000000
974 .word 137, 0x00232300
975 .word 138, 0x23230001
976 .word 139, 0x00000001
977 .word 140, 0x00000000
978 .word 141, 0x00000000
979 .word 142, 0x00012323
980 .word 143, 0x00012323
981 .word 144, 0x00000000
982 .word 145, 0x00000000
983 .word 146, 0x00232300
984 .word 147, 0x23230001
985 .word 148, 0xffff0001
986 .word 149, 0x00ffff00
987 .word 150, 0x0000ffff
988 .word 151, 0x00000000
989 .word 152, 0x03030303
990 .word 153, 0x03030303
991 .word 156, 0x02006400
992 .word 157, 0x02020202
993 .word 158, 0x02020202
994 .word 160, 0x01020202
995 .word 161, 0x01010064
996 .word 162, 0x01010101
997 .word 163, 0x01010101
998 .word 165, 0x00020101
999 .word 166, 0x00000064
1000 .word 167, 0x00000000
1001 .word 168, 0x000b0b00
1002 .word 169, 0x18580000
1003 .word 170, 0x02000200
1004 .word 171, 0x02000200
1005 .word 172, 0x00001858
1006 .word 173, 0x000079b8
1007 .word 174, 0x1858080a
1008 .word 175, 0x02000200
1009 .word 176, 0x02000200
1010 .word 177, 0x00001858
1011 .word 178, 0x000079b8
1012 .word 179, 0x0202080a
1013 .word 180, 0x80000100
1014 .word 181, 0x04070303
1015 .word 182, 0x0000000a
1016 .word 183, 0x00000000
1017 .word 184, 0x00000000
1018 .word 185, 0x0010ffff
1019 .word 186, 0x1c070303
1020 .word 187, 0x0000000f
1021 .word 188, 0x00000000
1022 .word 189, 0x00000000
1023 .word 190, 0x00000000
1024 .word 191, 0x00000000
1025 .word 192, 0x00000000
1026 .word 193, 0x00000000
1027 .word 194, 0x00000204
1028 .word 195, 0x00000000
1029 .word 196, 0x00000000
1030 .word 197, 0x00000000
1031 .word 198, 0x00000000
1032 .word 199, 0x00000000
1033 .word 200, 0x00000000
1034 .word 201, 0x00000000
1035 .word 202, 0x00000008
1036 .word 203, 0x00000008
1037 .word 204, 0x00000000
1038 .word 205, 0x00000040
1039 .word 206, 0x00070701
1040 .word 207, 0x00000000
1043 /* OTP sizes in bytes */
1046 .word 256 /* 2048 bits: 32X64 */
1047 .word 512 /* 4096 bits: 2*32X64 */
1048 .word 1024 /* 8192 bits: 4*32X64 */
1049 .word 512 /* 4096 bits: 64X64 */
1050 .word 768 /* 6144 bits: 5 32X64 */
1051 .word 0 /* 512 bits: dont care */
1052 .word 128 /* 1024 bits: 8X64 */
1059 ldr r3,=DDR_TABLE_END