xref: /rk3399_rockchip-uboot/board/renesas/sh7757lcr/lowlevel_init.S (revision 7682a99826a624d3764656b5bb31f88e2f8b235b)
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