18e9c897bSYoshihiro Shimoda/* 28e9c897bSYoshihiro Shimoda * Copyright (C) 2011 Renesas Solutions Corp. 38e9c897bSYoshihiro Shimoda * 4*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 58e9c897bSYoshihiro Shimoda */ 68e9c897bSYoshihiro Shimoda 78e9c897bSYoshihiro Shimoda#include <config.h> 88e9c897bSYoshihiro Shimoda#include <asm/processor.h> 98e9c897bSYoshihiro Shimoda#include <asm/macro.h> 108e9c897bSYoshihiro Shimoda 118e9c897bSYoshihiro Shimoda.macro or32, addr, data 128e9c897bSYoshihiro Shimoda mov.l \addr, r1 138e9c897bSYoshihiro Shimoda mov.l \data, r0 148e9c897bSYoshihiro Shimoda mov.l @r1, r2 158e9c897bSYoshihiro Shimoda or r2, r0 168e9c897bSYoshihiro Shimoda mov.l r0, @r1 178e9c897bSYoshihiro Shimoda.endm 188e9c897bSYoshihiro Shimoda 198e9c897bSYoshihiro Shimoda.macro wait_DBCMD 208e9c897bSYoshihiro Shimoda mov.l DBWAIT_A, r0 218e9c897bSYoshihiro Shimoda mov.l @r0, r1 228e9c897bSYoshihiro Shimoda.endm 238e9c897bSYoshihiro Shimoda 248e9c897bSYoshihiro Shimoda .global lowlevel_init 258e9c897bSYoshihiro Shimoda .section .spiboot1.text 268e9c897bSYoshihiro Shimoda .align 2 278e9c897bSYoshihiro Shimoda 288e9c897bSYoshihiro Shimodalowlevel_init: 298e9c897bSYoshihiro Shimoda 308e9c897bSYoshihiro Shimoda /*------- GPIO -------*/ 318e9c897bSYoshihiro Shimoda write8 PGDR_A, PGDR_D /* eMMC power off */ 328e9c897bSYoshihiro Shimoda 338e9c897bSYoshihiro Shimoda write16 PACR_A, PACR_D 348e9c897bSYoshihiro Shimoda write16 PBCR_A, PBCR_D 358e9c897bSYoshihiro Shimoda write16 PCCR_A, PCCR_D 368e9c897bSYoshihiro Shimoda write16 PDCR_A, PDCR_D 378e9c897bSYoshihiro Shimoda write16 PECR_A, PECR_D 388e9c897bSYoshihiro Shimoda write16 PFCR_A, PFCR_D 398e9c897bSYoshihiro Shimoda write16 PGCR_A, PGCR_D 408e9c897bSYoshihiro Shimoda write16 PHCR_A, PHCR_D 418e9c897bSYoshihiro Shimoda write16 PICR_A, PICR_D 428e9c897bSYoshihiro Shimoda write16 PJCR_A, PJCR_D 438e9c897bSYoshihiro Shimoda write16 PKCR_A, PKCR_D 448e9c897bSYoshihiro Shimoda write16 PLCR_A, PLCR_D 458e9c897bSYoshihiro Shimoda write16 PMCR_A, PMCR_D 468e9c897bSYoshihiro Shimoda write16 PNCR_A, PNCR_D 478e9c897bSYoshihiro Shimoda write16 POCR_A, POCR_D 488e9c897bSYoshihiro Shimoda write16 PQCR_A, PQCR_D 498e9c897bSYoshihiro Shimoda write16 PRCR_A, PRCR_D 508e9c897bSYoshihiro Shimoda write16 PSCR_A, PSCR_D 518e9c897bSYoshihiro Shimoda write16 PTCR_A, PTCR_D 528e9c897bSYoshihiro Shimoda write16 PUCR_A, PUCR_D 538e9c897bSYoshihiro Shimoda write16 PVCR_A, PVCR_D 548e9c897bSYoshihiro Shimoda write16 PWCR_A, PWCR_D 558e9c897bSYoshihiro Shimoda write16 PXCR_A, PXCR_D 568e9c897bSYoshihiro Shimoda write16 PYCR_A, PYCR_D 578e9c897bSYoshihiro Shimoda write16 PZCR_A, PZCR_D 588e9c897bSYoshihiro Shimoda write16 PSEL0_A, PSEL0_D 598e9c897bSYoshihiro Shimoda write16 PSEL1_A, PSEL1_D 608e9c897bSYoshihiro Shimoda write16 PSEL2_A, PSEL2_D 618e9c897bSYoshihiro Shimoda write16 PSEL3_A, PSEL3_D 628e9c897bSYoshihiro Shimoda write16 PSEL4_A, PSEL4_D 638e9c897bSYoshihiro Shimoda write16 PSEL5_A, PSEL5_D 648e9c897bSYoshihiro Shimoda write16 PSEL6_A, PSEL6_D 658e9c897bSYoshihiro Shimoda write16 PSEL7_A, PSEL7_D 668e9c897bSYoshihiro Shimoda write16 PSEL8_A, PSEL8_D 678e9c897bSYoshihiro Shimoda 688e9c897bSYoshihiro Shimoda bra exit_gpio 698e9c897bSYoshihiro Shimoda nop 708e9c897bSYoshihiro Shimoda 718e9c897bSYoshihiro Shimoda .align 4 728e9c897bSYoshihiro Shimoda 738e9c897bSYoshihiro Shimoda/*------- GPIO -------*/ 748e9c897bSYoshihiro ShimodaPGDR_A: .long 0xffec0040 758e9c897bSYoshihiro ShimodaPACR_A: .long 0xffec0000 768e9c897bSYoshihiro ShimodaPBCR_A: .long 0xffec0002 778e9c897bSYoshihiro ShimodaPCCR_A: .long 0xffec0004 788e9c897bSYoshihiro ShimodaPDCR_A: .long 0xffec0006 798e9c897bSYoshihiro ShimodaPECR_A: .long 0xffec0008 808e9c897bSYoshihiro ShimodaPFCR_A: .long 0xffec000a 818e9c897bSYoshihiro ShimodaPGCR_A: .long 0xffec000c 828e9c897bSYoshihiro ShimodaPHCR_A: .long 0xffec000e 838e9c897bSYoshihiro ShimodaPICR_A: .long 0xffec0010 848e9c897bSYoshihiro ShimodaPJCR_A: .long 0xffec0012 858e9c897bSYoshihiro ShimodaPKCR_A: .long 0xffec0014 868e9c897bSYoshihiro ShimodaPLCR_A: .long 0xffec0016 878e9c897bSYoshihiro ShimodaPMCR_A: .long 0xffec0018 888e9c897bSYoshihiro ShimodaPNCR_A: .long 0xffec001a 898e9c897bSYoshihiro ShimodaPOCR_A: .long 0xffec001c 908e9c897bSYoshihiro ShimodaPQCR_A: .long 0xffec0020 918e9c897bSYoshihiro ShimodaPRCR_A: .long 0xffec0022 928e9c897bSYoshihiro ShimodaPSCR_A: .long 0xffec0024 938e9c897bSYoshihiro ShimodaPTCR_A: .long 0xffec0026 948e9c897bSYoshihiro ShimodaPUCR_A: .long 0xffec0028 958e9c897bSYoshihiro ShimodaPVCR_A: .long 0xffec002a 968e9c897bSYoshihiro ShimodaPWCR_A: .long 0xffec002c 978e9c897bSYoshihiro ShimodaPXCR_A: .long 0xffec002e 988e9c897bSYoshihiro ShimodaPYCR_A: .long 0xffec0030 998e9c897bSYoshihiro ShimodaPZCR_A: .long 0xffec0032 1008e9c897bSYoshihiro ShimodaPSEL0_A: .long 0xffec0070 1018e9c897bSYoshihiro ShimodaPSEL1_A: .long 0xffec0072 1028e9c897bSYoshihiro ShimodaPSEL2_A: .long 0xffec0074 1038e9c897bSYoshihiro ShimodaPSEL3_A: .long 0xffec0076 1048e9c897bSYoshihiro ShimodaPSEL4_A: .long 0xffec0078 1058e9c897bSYoshihiro ShimodaPSEL5_A: .long 0xffec007a 1068e9c897bSYoshihiro ShimodaPSEL6_A: .long 0xffec007c 1078e9c897bSYoshihiro ShimodaPSEL7_A: .long 0xffec0082 1088e9c897bSYoshihiro ShimodaPSEL8_A: .long 0xffec0084 1098e9c897bSYoshihiro Shimoda 1108e9c897bSYoshihiro ShimodaPGDR_D: .long 0x80 1118e9c897bSYoshihiro ShimodaPACR_D: .long 0x0000 1128e9c897bSYoshihiro ShimodaPBCR_D: .long 0x0001 1138e9c897bSYoshihiro ShimodaPCCR_D: .long 0x0000 1148e9c897bSYoshihiro ShimodaPDCR_D: .long 0x0000 1158e9c897bSYoshihiro ShimodaPECR_D: .long 0x0000 1168e9c897bSYoshihiro ShimodaPFCR_D: .long 0x0000 1178e9c897bSYoshihiro ShimodaPGCR_D: .long 0x0000 1188e9c897bSYoshihiro ShimodaPHCR_D: .long 0x0000 1198e9c897bSYoshihiro ShimodaPICR_D: .long 0x0000 1208e9c897bSYoshihiro ShimodaPJCR_D: .long 0x0000 1218e9c897bSYoshihiro ShimodaPKCR_D: .long 0x0003 1228e9c897bSYoshihiro ShimodaPLCR_D: .long 0x0000 1238e9c897bSYoshihiro ShimodaPMCR_D: .long 0x0000 1248e9c897bSYoshihiro ShimodaPNCR_D: .long 0x0000 1258e9c897bSYoshihiro ShimodaPOCR_D: .long 0x0000 1268e9c897bSYoshihiro ShimodaPQCR_D: .long 0xc000 1278e9c897bSYoshihiro ShimodaPRCR_D: .long 0x0000 1288e9c897bSYoshihiro ShimodaPSCR_D: .long 0x0000 1298e9c897bSYoshihiro ShimodaPTCR_D: .long 0x0000 1308e9c897bSYoshihiro Shimoda#if defined(CONFIG_SH7757_OFFSET_SPI) 1318e9c897bSYoshihiro ShimodaPUCR_D: .long 0x0055 1328e9c897bSYoshihiro Shimoda#else 1338e9c897bSYoshihiro ShimodaPUCR_D: .long 0x0000 1348e9c897bSYoshihiro Shimoda#endif 1358e9c897bSYoshihiro ShimodaPVCR_D: .long 0x0000 1368e9c897bSYoshihiro ShimodaPWCR_D: .long 0x0000 1378e9c897bSYoshihiro ShimodaPXCR_D: .long 0x0000 1388e9c897bSYoshihiro ShimodaPYCR_D: .long 0x0000 1398e9c897bSYoshihiro ShimodaPZCR_D: .long 0x0000 1408e9c897bSYoshihiro ShimodaPSEL0_D: .long 0xfe00 1418e9c897bSYoshihiro ShimodaPSEL1_D: .long 0x0000 1428e9c897bSYoshihiro ShimodaPSEL2_D: .long 0x3000 1438e9c897bSYoshihiro ShimodaPSEL3_D: .long 0xff00 1448e9c897bSYoshihiro ShimodaPSEL4_D: .long 0x771f 1458e9c897bSYoshihiro ShimodaPSEL5_D: .long 0x0ffc 1468e9c897bSYoshihiro ShimodaPSEL6_D: .long 0x00ff 1478e9c897bSYoshihiro ShimodaPSEL7_D: .long 0xfc00 1488e9c897bSYoshihiro ShimodaPSEL8_D: .long 0x0000 1498e9c897bSYoshihiro Shimoda 1508e9c897bSYoshihiro Shimoda .align 2 1518e9c897bSYoshihiro Shimoda 1528e9c897bSYoshihiro Shimodaexit_gpio: 1538e9c897bSYoshihiro Shimoda mov #0, r14 1548e9c897bSYoshihiro Shimoda mova 2f, r0 1558e9c897bSYoshihiro Shimoda mov.l PC_MASK, r1 1568e9c897bSYoshihiro Shimoda tst r0, r1 1578e9c897bSYoshihiro Shimoda bf 2f 1588e9c897bSYoshihiro Shimoda 1598e9c897bSYoshihiro Shimoda bra exit_pmb 1608e9c897bSYoshihiro Shimoda nop 1618e9c897bSYoshihiro Shimoda 1628e9c897bSYoshihiro Shimoda .align 2 1638e9c897bSYoshihiro Shimoda 1648e9c897bSYoshihiro Shimoda/* If CPU runs on SDRAM, PC is 0x8???????. */ 1658e9c897bSYoshihiro ShimodaPC_MASK: .long 0x20000000 1668e9c897bSYoshihiro Shimoda 1678e9c897bSYoshihiro Shimoda2: 1688e9c897bSYoshihiro Shimoda mov #1, r14 1698e9c897bSYoshihiro Shimoda 1708e9c897bSYoshihiro Shimoda mov.l EXPEVT_A, r0 1718e9c897bSYoshihiro Shimoda mov.l @r0, r0 1728e9c897bSYoshihiro Shimoda mov.l EXPEVT_POWER_ON_RESET, r1 1738e9c897bSYoshihiro Shimoda cmp/eq r0, r1 1748e9c897bSYoshihiro Shimoda bt 1f 1758e9c897bSYoshihiro Shimoda 1768e9c897bSYoshihiro Shimoda /* 1778e9c897bSYoshihiro Shimoda * If EXPEVT value is manual reset or tlb multipul-hit, 1788e9c897bSYoshihiro Shimoda * initialization of DDR3IF is not necessary. 1798e9c897bSYoshihiro Shimoda */ 1808e9c897bSYoshihiro Shimoda bra exit_ddr 1818e9c897bSYoshihiro Shimoda nop 1828e9c897bSYoshihiro Shimoda 1838e9c897bSYoshihiro Shimoda1: 1848e9c897bSYoshihiro Shimoda /* For Core Reset */ 1858e9c897bSYoshihiro Shimoda mov.l DBACEN_A, r0 1868e9c897bSYoshihiro Shimoda mov.l @r0, r0 1878e9c897bSYoshihiro Shimoda cmp/eq #0, r0 1888e9c897bSYoshihiro Shimoda bt 3f 1898e9c897bSYoshihiro Shimoda 1908e9c897bSYoshihiro Shimoda /* 1918e9c897bSYoshihiro Shimoda * If DBACEN == 1(DBSC was already enabled), we have to avoid the 1928e9c897bSYoshihiro Shimoda * initialization of DDR3-SDRAM. 1938e9c897bSYoshihiro Shimoda */ 1948e9c897bSYoshihiro Shimoda bra exit_ddr 1958e9c897bSYoshihiro Shimoda nop 1968e9c897bSYoshihiro Shimoda 1978e9c897bSYoshihiro Shimoda3: 1988e9c897bSYoshihiro Shimoda /*------- DDR3IF -------*/ 1998e9c897bSYoshihiro Shimoda /* oscillation stabilization time */ 2008e9c897bSYoshihiro Shimoda wait_timer WAIT_OSC_TIME 2018e9c897bSYoshihiro Shimoda 2028e9c897bSYoshihiro Shimoda /* step 3 */ 2038e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_RSTL_VAL 2048e9c897bSYoshihiro Shimoda wait_timer WAIT_30US 2058e9c897bSYoshihiro Shimoda 2068e9c897bSYoshihiro Shimoda /* step 4 */ 2078e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_PDEN_VAL 2088e9c897bSYoshihiro Shimoda 2098e9c897bSYoshihiro Shimoda /* step 5 */ 2108e9c897bSYoshihiro Shimoda write32 DBKIND_A, DBKIND_D 2118e9c897bSYoshihiro Shimoda 2128e9c897bSYoshihiro Shimoda /* step 6 */ 2138e9c897bSYoshihiro Shimoda write32 DBCONF_A, DBCONF_D 2148e9c897bSYoshihiro Shimoda write32 DBTR0_A, DBTR0_D 2158e9c897bSYoshihiro Shimoda write32 DBTR1_A, DBTR1_D 2168e9c897bSYoshihiro Shimoda write32 DBTR2_A, DBTR2_D 2178e9c897bSYoshihiro Shimoda write32 DBTR3_A, DBTR3_D 2188e9c897bSYoshihiro Shimoda write32 DBTR4_A, DBTR4_D 2198e9c897bSYoshihiro Shimoda write32 DBTR5_A, DBTR5_D 2208e9c897bSYoshihiro Shimoda write32 DBTR6_A, DBTR6_D 2218e9c897bSYoshihiro Shimoda write32 DBTR7_A, DBTR7_D 2228e9c897bSYoshihiro Shimoda write32 DBTR8_A, DBTR8_D 2238e9c897bSYoshihiro Shimoda write32 DBTR9_A, DBTR9_D 2248e9c897bSYoshihiro Shimoda write32 DBTR10_A, DBTR10_D 2258e9c897bSYoshihiro Shimoda write32 DBTR11_A, DBTR11_D 2268e9c897bSYoshihiro Shimoda write32 DBTR12_A, DBTR12_D 2278e9c897bSYoshihiro Shimoda write32 DBTR13_A, DBTR13_D 2288e9c897bSYoshihiro Shimoda write32 DBTR14_A, DBTR14_D 2298e9c897bSYoshihiro Shimoda write32 DBTR15_A, DBTR15_D 2308e9c897bSYoshihiro Shimoda write32 DBTR16_A, DBTR16_D 2318e9c897bSYoshihiro Shimoda write32 DBTR17_A, DBTR17_D 2328e9c897bSYoshihiro Shimoda write32 DBTR18_A, DBTR18_D 2338e9c897bSYoshihiro Shimoda write32 DBTR19_A, DBTR19_D 2348e9c897bSYoshihiro Shimoda write32 DBRNK0_A, DBRNK0_D 2358e9c897bSYoshihiro Shimoda 2368e9c897bSYoshihiro Shimoda /* step 7 */ 2378e9c897bSYoshihiro Shimoda write32 DBPDCNT3_A, DBPDCNT3_D 2388e9c897bSYoshihiro Shimoda 2398e9c897bSYoshihiro Shimoda /* step 8 */ 2408e9c897bSYoshihiro Shimoda write32 DBPDCNT1_A, DBPDCNT1_D 2418e9c897bSYoshihiro Shimoda write32 DBPDCNT2_A, DBPDCNT2_D 2428e9c897bSYoshihiro Shimoda write32 DBPDLCK_A, DBPDLCK_D 2438e9c897bSYoshihiro Shimoda write32 DBPDRGA_A, DBPDRGA_D 2448e9c897bSYoshihiro Shimoda write32 DBPDRGD_A, DBPDRGD_D 2458e9c897bSYoshihiro Shimoda 2468e9c897bSYoshihiro Shimoda /* step 9 */ 2478e9c897bSYoshihiro Shimoda wait_timer WAIT_30US 2488e9c897bSYoshihiro Shimoda 2498e9c897bSYoshihiro Shimoda /* step 10 */ 2508e9c897bSYoshihiro Shimoda write32 DBPDCNT0_A, DBPDCNT0_D 2518e9c897bSYoshihiro Shimoda 2528e9c897bSYoshihiro Shimoda /* step 11 */ 2538e9c897bSYoshihiro Shimoda wait_timer WAIT_30US 2548e9c897bSYoshihiro Shimoda wait_timer WAIT_30US 2558e9c897bSYoshihiro Shimoda 2568e9c897bSYoshihiro Shimoda /* step 12 */ 2578e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_WAIT_VAL 2588e9c897bSYoshihiro Shimoda wait_DBCMD 2598e9c897bSYoshihiro Shimoda 2608e9c897bSYoshihiro Shimoda /* step 13 */ 2618e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_RSTH_VAL 2628e9c897bSYoshihiro Shimoda wait_DBCMD 2638e9c897bSYoshihiro Shimoda 2648e9c897bSYoshihiro Shimoda /* step 14 */ 2658e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_WAIT_VAL 2668e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_WAIT_VAL 2678e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_WAIT_VAL 2688e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_WAIT_VAL 2698e9c897bSYoshihiro Shimoda 2708e9c897bSYoshihiro Shimoda /* step 15 */ 2718e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_PDXT_VAL 2728e9c897bSYoshihiro Shimoda 2738e9c897bSYoshihiro Shimoda /* step 16 */ 2748e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_MRS2_VAL 2758e9c897bSYoshihiro Shimoda 2768e9c897bSYoshihiro Shimoda /* step 17 */ 2778e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_MRS3_VAL 2788e9c897bSYoshihiro Shimoda 2798e9c897bSYoshihiro Shimoda /* step 18 */ 2808e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_MRS1_VAL 2818e9c897bSYoshihiro Shimoda 2828e9c897bSYoshihiro Shimoda /* step 19 */ 2838e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_MRS0_VAL 2848e9c897bSYoshihiro Shimoda 2858e9c897bSYoshihiro Shimoda /* step 20 */ 2868e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_ZQCL_VAL 2878e9c897bSYoshihiro Shimoda 2888e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_REF_VAL 2898e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_REF_VAL 2908e9c897bSYoshihiro Shimoda wait_DBCMD 2918e9c897bSYoshihiro Shimoda 2928e9c897bSYoshihiro Shimoda /* step 21 */ 2938e9c897bSYoshihiro Shimoda write32 DBADJ0_A, DBADJ0_D 2948e9c897bSYoshihiro Shimoda write32 DBADJ1_A, DBADJ1_D 2958e9c897bSYoshihiro Shimoda write32 DBADJ2_A, DBADJ2_D 2968e9c897bSYoshihiro Shimoda 2978e9c897bSYoshihiro Shimoda /* step 22 */ 2988e9c897bSYoshihiro Shimoda write32 DBRFCNF0_A, DBRFCNF0_D 2998e9c897bSYoshihiro Shimoda write32 DBRFCNF1_A, DBRFCNF1_D 3008e9c897bSYoshihiro Shimoda write32 DBRFCNF2_A, DBRFCNF2_D 3018e9c897bSYoshihiro Shimoda 3028e9c897bSYoshihiro Shimoda /* step 23 */ 3038e9c897bSYoshihiro Shimoda write32 DBCALCNF_A, DBCALCNF_D 3048e9c897bSYoshihiro Shimoda 3058e9c897bSYoshihiro Shimoda /* step 24 */ 3068e9c897bSYoshihiro Shimoda write32 DBRFEN_A, DBRFEN_D 3078e9c897bSYoshihiro Shimoda write32 DBCMD_A, DBCMD_SRXT_VAL 3088e9c897bSYoshihiro Shimoda 3098e9c897bSYoshihiro Shimoda /* step 25 */ 3108e9c897bSYoshihiro Shimoda write32 DBACEN_A, DBACEN_D 3118e9c897bSYoshihiro Shimoda 3128e9c897bSYoshihiro Shimoda /* step 26 */ 3138e9c897bSYoshihiro Shimoda wait_DBCMD 3148e9c897bSYoshihiro Shimoda 3153ed81645SNobuhiro Iwamatsu#if defined(CONFIG_SH7757LCR_DDR_ECC) 3168e9c897bSYoshihiro Shimoda /* enable DDR-ECC */ 3178e9c897bSYoshihiro Shimoda write32 ECD_ECDEN_A, ECD_ECDEN_D 3188e9c897bSYoshihiro Shimoda write32 ECD_INTSR_A, ECD_INTSR_D 3198e9c897bSYoshihiro Shimoda write32 ECD_SPACER_A, ECD_SPACER_D 3208e9c897bSYoshihiro Shimoda write32 ECD_MCR_A, ECD_MCR_D 3213ed81645SNobuhiro Iwamatsu#endif 3228e9c897bSYoshihiro Shimoda bra exit_ddr 3238e9c897bSYoshihiro Shimoda nop 3248e9c897bSYoshihiro Shimoda 3258e9c897bSYoshihiro Shimoda .align 4 3268e9c897bSYoshihiro Shimoda 3278e9c897bSYoshihiro ShimodaEXPEVT_A: .long 0xff000024 3288e9c897bSYoshihiro ShimodaEXPEVT_POWER_ON_RESET: .long 0x00000000 3298e9c897bSYoshihiro Shimoda 3308e9c897bSYoshihiro Shimoda/*------- DDR3IF -------*/ 3318e9c897bSYoshihiro ShimodaDBCMD_A: .long 0xfe800018 3328e9c897bSYoshihiro ShimodaDBKIND_A: .long 0xfe800020 3338e9c897bSYoshihiro ShimodaDBCONF_A: .long 0xfe800024 3348e9c897bSYoshihiro ShimodaDBTR0_A: .long 0xfe800040 3358e9c897bSYoshihiro ShimodaDBTR1_A: .long 0xfe800044 3368e9c897bSYoshihiro ShimodaDBTR2_A: .long 0xfe800048 3378e9c897bSYoshihiro ShimodaDBTR3_A: .long 0xfe800050 3388e9c897bSYoshihiro ShimodaDBTR4_A: .long 0xfe800054 3398e9c897bSYoshihiro ShimodaDBTR5_A: .long 0xfe800058 3408e9c897bSYoshihiro ShimodaDBTR6_A: .long 0xfe80005c 3418e9c897bSYoshihiro ShimodaDBTR7_A: .long 0xfe800060 3428e9c897bSYoshihiro ShimodaDBTR8_A: .long 0xfe800064 3438e9c897bSYoshihiro ShimodaDBTR9_A: .long 0xfe800068 3448e9c897bSYoshihiro ShimodaDBTR10_A: .long 0xfe80006c 3458e9c897bSYoshihiro ShimodaDBTR11_A: .long 0xfe800070 3468e9c897bSYoshihiro ShimodaDBTR12_A: .long 0xfe800074 3478e9c897bSYoshihiro ShimodaDBTR13_A: .long 0xfe800078 3488e9c897bSYoshihiro ShimodaDBTR14_A: .long 0xfe80007c 3498e9c897bSYoshihiro ShimodaDBTR15_A: .long 0xfe800080 3508e9c897bSYoshihiro ShimodaDBTR16_A: .long 0xfe800084 3518e9c897bSYoshihiro ShimodaDBTR17_A: .long 0xfe800088 3528e9c897bSYoshihiro ShimodaDBTR18_A: .long 0xfe80008c 3538e9c897bSYoshihiro ShimodaDBTR19_A: .long 0xfe800090 3548e9c897bSYoshihiro ShimodaDBRNK0_A: .long 0xfe800100 3558e9c897bSYoshihiro ShimodaDBPDCNT0_A: .long 0xfe800200 3568e9c897bSYoshihiro ShimodaDBPDCNT1_A: .long 0xfe800204 3578e9c897bSYoshihiro ShimodaDBPDCNT2_A: .long 0xfe800208 3588e9c897bSYoshihiro ShimodaDBPDCNT3_A: .long 0xfe80020c 3598e9c897bSYoshihiro ShimodaDBPDLCK_A: .long 0xfe800280 3608e9c897bSYoshihiro ShimodaDBPDRGA_A: .long 0xfe800290 3618e9c897bSYoshihiro ShimodaDBPDRGD_A: .long 0xfe8002a0 3628e9c897bSYoshihiro ShimodaDBADJ0_A: .long 0xfe8000c0 3638e9c897bSYoshihiro ShimodaDBADJ1_A: .long 0xfe8000c4 3648e9c897bSYoshihiro ShimodaDBADJ2_A: .long 0xfe8000c8 3658e9c897bSYoshihiro ShimodaDBRFCNF0_A: .long 0xfe8000e0 3668e9c897bSYoshihiro ShimodaDBRFCNF1_A: .long 0xfe8000e4 3678e9c897bSYoshihiro ShimodaDBRFCNF2_A: .long 0xfe8000e8 3688e9c897bSYoshihiro ShimodaDBCALCNF_A: .long 0xfe8000f4 3698e9c897bSYoshihiro ShimodaDBRFEN_A: .long 0xfe800014 3708e9c897bSYoshihiro ShimodaDBACEN_A: .long 0xfe800010 3718e9c897bSYoshihiro ShimodaDBWAIT_A: .long 0xfe80001c 3728e9c897bSYoshihiro Shimoda 3738e9c897bSYoshihiro ShimodaWAIT_OSC_TIME: .long 6000 3748e9c897bSYoshihiro ShimodaWAIT_30US: .long 13333 3758e9c897bSYoshihiro Shimoda 3768e9c897bSYoshihiro ShimodaDBCMD_RSTL_VAL: .long 0x20000000 3778e9c897bSYoshihiro ShimodaDBCMD_PDEN_VAL: .long 0x1000d73c 3788e9c897bSYoshihiro ShimodaDBCMD_WAIT_VAL: .long 0x0000d73c 3798e9c897bSYoshihiro ShimodaDBCMD_RSTH_VAL: .long 0x2100d73c 3808e9c897bSYoshihiro ShimodaDBCMD_PDXT_VAL: .long 0x110000c8 3818e9c897bSYoshihiro ShimodaDBCMD_MRS0_VAL: .long 0x28000930 3828e9c897bSYoshihiro ShimodaDBCMD_MRS1_VAL: .long 0x29000004 3838e9c897bSYoshihiro ShimodaDBCMD_MRS2_VAL: .long 0x2a000008 3848e9c897bSYoshihiro ShimodaDBCMD_MRS3_VAL: .long 0x2b000000 3858e9c897bSYoshihiro ShimodaDBCMD_ZQCL_VAL: .long 0x03000200 3868e9c897bSYoshihiro ShimodaDBCMD_REF_VAL: .long 0x0c000000 3878e9c897bSYoshihiro ShimodaDBCMD_SRXT_VAL: .long 0x19000000 3888e9c897bSYoshihiro ShimodaDBKIND_D: .long 0x00000007 3898e9c897bSYoshihiro ShimodaDBCONF_D: .long 0x0f030a01 3908e9c897bSYoshihiro ShimodaDBTR0_D: .long 0x00000007 3918e9c897bSYoshihiro ShimodaDBTR1_D: .long 0x00000006 3928e9c897bSYoshihiro ShimodaDBTR2_D: .long 0x00000000 3938e9c897bSYoshihiro ShimodaDBTR3_D: .long 0x00000007 3948e9c897bSYoshihiro ShimodaDBTR4_D: .long 0x00070007 3958e9c897bSYoshihiro ShimodaDBTR5_D: .long 0x0000001b 3968e9c897bSYoshihiro ShimodaDBTR6_D: .long 0x00000014 3978e9c897bSYoshihiro ShimodaDBTR7_D: .long 0x00000005 3988e9c897bSYoshihiro ShimodaDBTR8_D: .long 0x00000015 3998e9c897bSYoshihiro ShimodaDBTR9_D: .long 0x00000006 4008e9c897bSYoshihiro ShimodaDBTR10_D: .long 0x00000008 4018e9c897bSYoshihiro ShimodaDBTR11_D: .long 0x00000007 4028e9c897bSYoshihiro ShimodaDBTR12_D: .long 0x0000000e 4038e9c897bSYoshihiro ShimodaDBTR13_D: .long 0x00000056 4048e9c897bSYoshihiro ShimodaDBTR14_D: .long 0x00000006 4058e9c897bSYoshihiro ShimodaDBTR15_D: .long 0x00000004 4068e9c897bSYoshihiro ShimodaDBTR16_D: .long 0x00150002 4078e9c897bSYoshihiro ShimodaDBTR17_D: .long 0x000c0017 4088e9c897bSYoshihiro ShimodaDBTR18_D: .long 0x00000200 4098e9c897bSYoshihiro ShimodaDBTR19_D: .long 0x00000040 4108e9c897bSYoshihiro ShimodaDBRNK0_D: .long 0x00000001 4118e9c897bSYoshihiro ShimodaDBPDCNT0_D: .long 0x00000001 4128e9c897bSYoshihiro ShimodaDBPDCNT1_D: .long 0x00000001 4138e9c897bSYoshihiro ShimodaDBPDCNT2_D: .long 0x00000000 4148e9c897bSYoshihiro ShimodaDBPDCNT3_D: .long 0x00004010 4158e9c897bSYoshihiro ShimodaDBPDLCK_D: .long 0x0000a55a 4168e9c897bSYoshihiro ShimodaDBPDRGA_D: .long 0x00000028 4178e9c897bSYoshihiro ShimodaDBPDRGD_D: .long 0x00017100 4188e9c897bSYoshihiro Shimoda 4198e9c897bSYoshihiro ShimodaDBADJ0_D: .long 0x00000000 4208e9c897bSYoshihiro ShimodaDBADJ1_D: .long 0x00000000 4218e9c897bSYoshihiro ShimodaDBADJ2_D: .long 0x18061806 4228e9c897bSYoshihiro ShimodaDBRFCNF0_D: .long 0x000001ff 4238e9c897bSYoshihiro ShimodaDBRFCNF1_D: .long 0x08001000 4248e9c897bSYoshihiro ShimodaDBRFCNF2_D: .long 0x00000000 4258e9c897bSYoshihiro ShimodaDBCALCNF_D: .long 0x0000ffff 4268e9c897bSYoshihiro ShimodaDBRFEN_D: .long 0x00000001 4278e9c897bSYoshihiro ShimodaDBACEN_D: .long 0x00000001 4288e9c897bSYoshihiro Shimoda 4298e9c897bSYoshihiro Shimoda/*------- DDR-ECC -------*/ 4308e9c897bSYoshihiro ShimodaECD_ECDEN_A: .long 0xffc1012c 4318e9c897bSYoshihiro ShimodaECD_ECDEN_D: .long 0x00000001 4328e9c897bSYoshihiro ShimodaECD_INTSR_A: .long 0xfe900024 4338e9c897bSYoshihiro ShimodaECD_INTSR_D: .long 0xffffffff 4348e9c897bSYoshihiro ShimodaECD_SPACER_A: .long 0xfe900018 4358e9c897bSYoshihiro ShimodaECD_SPACER_D: .long SH7757LCR_SDRAM_ECC_SETTING 4368e9c897bSYoshihiro ShimodaECD_MCR_A: .long 0xfe900010 4378e9c897bSYoshihiro ShimodaECD_MCR_D: .long 0x00000001 4388e9c897bSYoshihiro Shimoda 4398e9c897bSYoshihiro Shimoda .align 2 4408e9c897bSYoshihiro Shimodaexit_ddr: 4418e9c897bSYoshihiro Shimoda 4428e9c897bSYoshihiro Shimoda#if defined(CONFIG_SH_32BIT) 4438e9c897bSYoshihiro Shimoda /*------- set PMB -------*/ 4448e9c897bSYoshihiro Shimoda write32 PASCR_A, PASCR_29BIT_D 4458e9c897bSYoshihiro Shimoda write32 MMUCR_A, MMUCR_D 4468e9c897bSYoshihiro Shimoda 4478e9c897bSYoshihiro Shimoda /***************************************************************** 4488e9c897bSYoshihiro Shimoda * ent virt phys v sz c wt 4498e9c897bSYoshihiro Shimoda * 0 0xa0000000 0x00000000 1 128M 0 1 4508e9c897bSYoshihiro Shimoda * 1 0xa8000000 0x48000000 1 128M 0 1 4518e9c897bSYoshihiro Shimoda * 5 0x88000000 0x48000000 1 128M 1 1 4528e9c897bSYoshihiro Shimoda */ 4538e9c897bSYoshihiro Shimoda write32 PMB_ADDR_SPIBOOT_A, PMB_ADDR_SPIBOOT_D 4548e9c897bSYoshihiro Shimoda write32 PMB_DATA_SPIBOOT_A, PMB_DATA_SPIBOOT_D 4558e9c897bSYoshihiro Shimoda write32 PMB_ADDR_DDR_C1_A, PMB_ADDR_DDR_C1_D 4568e9c897bSYoshihiro Shimoda write32 PMB_DATA_DDR_C1_A, PMB_DATA_DDR_C1_D 4578e9c897bSYoshihiro Shimoda write32 PMB_ADDR_DDR_N1_A, PMB_ADDR_DDR_N1_D 4588e9c897bSYoshihiro Shimoda write32 PMB_DATA_DDR_N1_A, PMB_DATA_DDR_N1_D 4598e9c897bSYoshihiro Shimoda 4608e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY2, PMB_ADDR_NOT_USE_D 4618e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY3, PMB_ADDR_NOT_USE_D 4628e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY4, PMB_ADDR_NOT_USE_D 4638e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY6, PMB_ADDR_NOT_USE_D 4648e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY7, PMB_ADDR_NOT_USE_D 4658e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY8, PMB_ADDR_NOT_USE_D 4668e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY9, PMB_ADDR_NOT_USE_D 4678e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY10, PMB_ADDR_NOT_USE_D 4688e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY11, PMB_ADDR_NOT_USE_D 4698e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY12, PMB_ADDR_NOT_USE_D 4708e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY13, PMB_ADDR_NOT_USE_D 4718e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY14, PMB_ADDR_NOT_USE_D 4728e9c897bSYoshihiro Shimoda write32 PMB_ADDR_ENTRY15, PMB_ADDR_NOT_USE_D 4738e9c897bSYoshihiro Shimoda 4748e9c897bSYoshihiro Shimoda write32 PASCR_A, PASCR_INIT 4758e9c897bSYoshihiro Shimoda mov.l DUMMY_ADDR, r0 4768e9c897bSYoshihiro Shimoda icbi @r0 4778e9c897bSYoshihiro Shimoda#endif /* if defined(CONFIG_SH_32BIT) */ 4788e9c897bSYoshihiro Shimoda 4798e9c897bSYoshihiro Shimodaexit_pmb: 4808e9c897bSYoshihiro Shimoda /* CPU is running on ILRAM? */ 4818e9c897bSYoshihiro Shimoda mov r14, r0 4828e9c897bSYoshihiro Shimoda tst #1, r0 4838e9c897bSYoshihiro Shimoda bt 1f 4848e9c897bSYoshihiro Shimoda 4858e9c897bSYoshihiro Shimoda mov.l _bss_start, r15 4868e9c897bSYoshihiro Shimoda mov.l _spiboot_main, r0 4878e9c897bSYoshihiro Shimoda100: bsrf r0 4888e9c897bSYoshihiro Shimoda nop 4898e9c897bSYoshihiro Shimoda 4908e9c897bSYoshihiro Shimoda .align 2 4918e9c897bSYoshihiro Shimoda_spiboot_main: .long (spiboot_main - (100b + 4)) 4928e9c897bSYoshihiro Shimoda_bss_start: .long bss_start 4938e9c897bSYoshihiro Shimoda 4948e9c897bSYoshihiro Shimoda1: 4958e9c897bSYoshihiro Shimoda 4968e9c897bSYoshihiro Shimoda write32 CCR_A, CCR_D 4978e9c897bSYoshihiro Shimoda 4988e9c897bSYoshihiro Shimoda rts 4998e9c897bSYoshihiro Shimoda nop 5008e9c897bSYoshihiro Shimoda 5018e9c897bSYoshihiro Shimoda .align 4 5028e9c897bSYoshihiro Shimoda 5038e9c897bSYoshihiro Shimoda#if defined(CONFIG_SH_32BIT) 5048e9c897bSYoshihiro Shimoda/*------- set PMB -------*/ 5058e9c897bSYoshihiro ShimodaPMB_ADDR_SPIBOOT_A: .long PMB_ADDR_BASE(0) 5068e9c897bSYoshihiro ShimodaPMB_ADDR_DDR_N1_A: .long PMB_ADDR_BASE(1) 5078e9c897bSYoshihiro ShimodaPMB_ADDR_DDR_C1_A: .long PMB_ADDR_BASE(5) 5088e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY2: .long PMB_ADDR_BASE(2) 5098e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY3: .long PMB_ADDR_BASE(3) 5108e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY4: .long PMB_ADDR_BASE(4) 5118e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY6: .long PMB_ADDR_BASE(6) 5128e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY7: .long PMB_ADDR_BASE(7) 5138e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY8: .long PMB_ADDR_BASE(8) 5148e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY9: .long PMB_ADDR_BASE(9) 5158e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY10: .long PMB_ADDR_BASE(10) 5168e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY11: .long PMB_ADDR_BASE(11) 5178e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY12: .long PMB_ADDR_BASE(12) 5188e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY13: .long PMB_ADDR_BASE(13) 5198e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY14: .long PMB_ADDR_BASE(14) 5208e9c897bSYoshihiro ShimodaPMB_ADDR_ENTRY15: .long PMB_ADDR_BASE(15) 5218e9c897bSYoshihiro Shimoda 5228e9c897bSYoshihiro ShimodaPMB_ADDR_SPIBOOT_D: .long mk_pmb_addr_val(0xa0) 5238e9c897bSYoshihiro ShimodaPMB_ADDR_DDR_C1_D: .long mk_pmb_addr_val(0x88) 5248e9c897bSYoshihiro ShimodaPMB_ADDR_DDR_N1_D: .long mk_pmb_addr_val(0xa8) 5258e9c897bSYoshihiro ShimodaPMB_ADDR_NOT_USE_D: .long 0x00000000 5268e9c897bSYoshihiro Shimoda 5278e9c897bSYoshihiro ShimodaPMB_DATA_SPIBOOT_A: .long PMB_DATA_BASE(0) 5288e9c897bSYoshihiro ShimodaPMB_DATA_DDR_N1_A: .long PMB_DATA_BASE(1) 5298e9c897bSYoshihiro ShimodaPMB_DATA_DDR_C1_A: .long PMB_DATA_BASE(5) 5308e9c897bSYoshihiro Shimoda 5318e9c897bSYoshihiro Shimoda/* ppn ub v s1 s0 c wt */ 5328e9c897bSYoshihiro ShimodaPMB_DATA_SPIBOOT_D: .long mk_pmb_data_val(0x00, 0, 1, 1, 0, 0, 1) 5338e9c897bSYoshihiro ShimodaPMB_DATA_DDR_C1_D: .long mk_pmb_data_val(0x48, 0, 1, 1, 0, 1, 1) 5348e9c897bSYoshihiro ShimodaPMB_DATA_DDR_N1_D: .long mk_pmb_data_val(0x48, 1, 1, 1, 0, 0, 1) 5358e9c897bSYoshihiro Shimoda 5368e9c897bSYoshihiro ShimodaPASCR_A: .long 0xff000070 5378e9c897bSYoshihiro ShimodaDUMMY_ADDR: .long 0xa0000000 5388e9c897bSYoshihiro ShimodaPASCR_29BIT_D: .long 0x00000000 5398e9c897bSYoshihiro ShimodaPASCR_INIT: .long 0x80000080 5408e9c897bSYoshihiro ShimodaMMUCR_A: .long 0xff000010 5418e9c897bSYoshihiro ShimodaMMUCR_D: .long 0x00000004 /* clear ITLB */ 5428e9c897bSYoshihiro Shimoda#endif /* CONFIG_SH_32BIT */ 5438e9c897bSYoshihiro Shimoda 5448e9c897bSYoshihiro ShimodaCCR_A: .long CCR 5458e9c897bSYoshihiro ShimodaCCR_D: .long CCR_CACHE_INIT 546