mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-25 04:23:46 +00:00
83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
448 lines
9 KiB
ArmAsm
448 lines
9 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (C) 2011, 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
|
|
* Copyright (C) 2011, 2012 Renesas Solutions Corp.
|
|
*/
|
|
#include <config.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/macro.h>
|
|
|
|
#include <asm/processor.h>
|
|
|
|
.global lowlevel_init
|
|
|
|
.text
|
|
.align 2
|
|
|
|
lowlevel_init:
|
|
|
|
/* WDT */
|
|
write32 WDTCSR_A, WDTCSR_D
|
|
|
|
/* MMU */
|
|
write32 MMUCR_A, MMUCR_D
|
|
|
|
write32 FRQCR2_A, FRQCR2_D
|
|
write32 FRQCR0_A, FRQCR0_D
|
|
|
|
write32 CS0CTRL_A, CS0CTRL_D
|
|
write32 CS1CTRL_A, CS1CTRL_D
|
|
write32 CS0CTRL2_A, CS0CTRL2_D
|
|
|
|
write32 CSPWCR0_A, CSPWCR0_D
|
|
write32 CSPWCR1_A, CSPWCR1_D
|
|
write32 CS1GDST_A, CS1GDST_D
|
|
|
|
# clock mode check
|
|
mov.l MODEMR, r1
|
|
mov.l @r1, r0
|
|
and #6, r0 /* Check 1 and 2 bit.*/
|
|
cmp/eq #2, r0 /* 0x02 is 533Mhz mode */
|
|
bt init_lbsc_533
|
|
|
|
init_lbsc_400:
|
|
|
|
write32 CSWCR0_A, CSWCR0_D_400
|
|
write32 CSWCR1_A, CSWCR1_D
|
|
|
|
bra init_dbsc3_400_pad
|
|
nop
|
|
|
|
.align 2
|
|
|
|
MODEMR: .long 0xFFCC0020
|
|
WDTCSR_A: .long 0xFFCC0004
|
|
WDTCSR_D: .long 0xA5000000
|
|
MMUCR_A: .long 0xFF000010
|
|
MMUCR_D: .long 0x00000004
|
|
|
|
FRQCR2_A: .long 0xFFC80008
|
|
FRQCR2_D: .long 0x00000000
|
|
FRQCR0_A: .long 0xFFC80000
|
|
FRQCR0_D: .long 0xCF000001
|
|
|
|
CS0CTRL_A: .long 0xFF800200
|
|
CS0CTRL_D: .long 0x00000020
|
|
CS1CTRL_A: .long 0xFF800204
|
|
CS1CTRL_D: .long 0x00000020
|
|
|
|
CS0CTRL2_A: .long 0xFF800220
|
|
CS0CTRL2_D: .long 0x00004000
|
|
|
|
CSPWCR0_A: .long 0xFF800280
|
|
CSPWCR0_D: .long 0x00000000
|
|
CSPWCR1_A: .long 0xFF800284
|
|
CSPWCR1_D: .long 0x00000000
|
|
CS1GDST_A: .long 0xFF8002C0
|
|
CS1GDST_D: .long 0x00000011
|
|
|
|
init_lbsc_533:
|
|
|
|
write32 CSWCR0_A, CSWCR0_D_533
|
|
write32 CSWCR1_A, CSWCR1_D
|
|
|
|
bra init_dbsc3_533_pad
|
|
nop
|
|
|
|
.align 2
|
|
|
|
CSWCR0_A: .long 0xFF800230
|
|
CSWCR0_D_533: .long 0x01120104
|
|
CSWCR0_D_400: .long 0x02120114
|
|
CSWCR1_A: .long 0xFF800234
|
|
CSWCR1_D: .long 0x077F077F
|
|
|
|
init_dbsc3_400_pad:
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D
|
|
wait_timer WAIT_200US_400
|
|
|
|
write32 DBPDCNT0_A, DBPDCNT0_D_400
|
|
write32 DBPDCNT3_A, DBPDCNT3_D0
|
|
write32 DBPDCNT1_A, DBPDCNT1_D
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D1
|
|
wait_timer WAIT_32MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D2
|
|
wait_timer WAIT_100US_400
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D3
|
|
wait_timer WAIT_16MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D4
|
|
wait_timer WAIT_200US_400
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D5
|
|
wait_timer WAIT_1MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D6
|
|
wait_timer WAIT_10KMCLK
|
|
|
|
bra init_dbsc3_ctrl_400
|
|
nop
|
|
|
|
.align 2
|
|
|
|
init_dbsc3_533_pad:
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D
|
|
wait_timer WAIT_200US_533
|
|
|
|
write32 DBPDCNT0_A, DBPDCNT0_D_533
|
|
write32 DBPDCNT3_A, DBPDCNT3_D0
|
|
write32 DBPDCNT1_A, DBPDCNT1_D
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D1
|
|
wait_timer WAIT_32MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D2
|
|
wait_timer WAIT_100US_533
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D3
|
|
wait_timer WAIT_16MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D4
|
|
wait_timer WAIT_200US_533
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D5
|
|
wait_timer WAIT_1MCLK
|
|
|
|
write32 DBPDCNT3_A, DBPDCNT3_D6
|
|
wait_timer WAIT_10KMCLK
|
|
|
|
bra init_dbsc3_ctrl_533
|
|
nop
|
|
|
|
.align 2
|
|
|
|
WAIT_200US_400: .long 40000
|
|
WAIT_200US_533: .long 53300
|
|
WAIT_100US_400: .long 20000
|
|
WAIT_100US_533: .long 26650
|
|
WAIT_32MCLK: .long 32
|
|
WAIT_16MCLK: .long 16
|
|
WAIT_1MCLK: .long 1
|
|
WAIT_10KMCLK: .long 10000
|
|
|
|
DBPDCNT0_A: .long 0xFE800200
|
|
DBPDCNT0_D_533: .long 0x00010245
|
|
DBPDCNT0_D_400: .long 0x00010235
|
|
DBPDCNT1_A: .long 0xFE800204
|
|
DBPDCNT1_D: .long 0x00000014
|
|
DBPDCNT3_A: .long 0xFE80020C
|
|
DBPDCNT3_D: .long 0x80000000
|
|
DBPDCNT3_D0: .long 0x800F0000
|
|
DBPDCNT3_D1: .long 0x800F1000
|
|
DBPDCNT3_D2: .long 0x820F1000
|
|
DBPDCNT3_D3: .long 0x860F1000
|
|
DBPDCNT3_D4: .long 0x870F1000
|
|
DBPDCNT3_D5: .long 0x870F3000
|
|
DBPDCNT3_D6: .long 0x870F7000
|
|
|
|
init_dbsc3_ctrl_400:
|
|
|
|
write32 DBKIND_A, DBKIND_D
|
|
write32 DBCONF_A, DBCONF_D
|
|
|
|
write32 DBTR0_A, DBTR0_D_400
|
|
write32 DBTR1_A, DBTR1_D_400
|
|
write32 DBTR2_A, DBTR2_D
|
|
write32 DBTR3_A, DBTR3_D_400
|
|
write32 DBTR4_A, DBTR4_D_400
|
|
write32 DBTR5_A, DBTR5_D_400
|
|
write32 DBTR6_A, DBTR6_D_400
|
|
write32 DBTR7_A, DBTR7_D
|
|
write32 DBTR8_A, DBTR8_D_400
|
|
write32 DBTR9_A, DBTR9_D
|
|
write32 DBTR10_A, DBTR10_D_400
|
|
write32 DBTR11_A, DBTR11_D
|
|
write32 DBTR12_A, DBTR12_D_400
|
|
write32 DBTR13_A, DBTR13_D_400
|
|
write32 DBTR14_A, DBTR14_D
|
|
write32 DBTR15_A, DBTR15_D
|
|
write32 DBTR16_A, DBTR16_D_400
|
|
write32 DBTR17_A, DBTR17_D_400
|
|
write32 DBTR18_A, DBTR18_D_400
|
|
|
|
write32 DBBL_A, DBBL_D
|
|
write32 DBRNK0_A, DBRNK0_D
|
|
|
|
write32 DBCMD_A, DBCMD_D0_400
|
|
write32 DBCMD_A, DBCMD_D1
|
|
write32 DBCMD_A, DBCMD_D2
|
|
write32 DBCMD_A, DBCMD_D3
|
|
write32 DBCMD_A, DBCMD_D4
|
|
write32 DBCMD_A, DBCMD_D5_400
|
|
write32 DBCMD_A, DBCMD_D6
|
|
write32 DBCMD_A, DBCMD_D7
|
|
write32 DBCMD_A, DBCMD_D8
|
|
write32 DBCMD_A, DBCMD_D9_400
|
|
write32 DBCMD_A, DBCMD_D10
|
|
write32 DBCMD_A, DBCMD_D11
|
|
write32 DBCMD_A, DBCMD_D12
|
|
|
|
write32 DBRFCNF0_A, DBRFCNF0_D
|
|
write32 DBRFCNF1_A, DBRFCNF1_D_400
|
|
write32 DBRFCNF2_A, DBRFCNF2_D
|
|
write32 DBRFEN_A, DBRFEN_D
|
|
write32 DBACEN_A, DBACEN_D
|
|
write32 DBACEN_A, DBACEN_D
|
|
|
|
/* Dummy read */
|
|
mov.l DBWAIT_A, r1
|
|
synco
|
|
mov.l @r1, r0
|
|
synco
|
|
|
|
/* Dummy read */
|
|
mov.l SDRAM_A, r1
|
|
synco
|
|
mov.l @r1, r0
|
|
synco
|
|
|
|
/* need sleep 186A0 */
|
|
|
|
bra finish_init_sh7734
|
|
nop
|
|
|
|
.align 2
|
|
|
|
init_dbsc3_ctrl_533:
|
|
|
|
write32 DBKIND_A, DBKIND_D
|
|
write32 DBCONF_A, DBCONF_D
|
|
|
|
write32 DBTR0_A, DBTR0_D_533
|
|
write32 DBTR1_A, DBTR1_D_533
|
|
write32 DBTR2_A, DBTR2_D
|
|
write32 DBTR3_A, DBTR3_D_533
|
|
write32 DBTR4_A, DBTR4_D_533
|
|
write32 DBTR5_A, DBTR5_D_533
|
|
write32 DBTR6_A, DBTR6_D_533
|
|
write32 DBTR7_A, DBTR7_D
|
|
write32 DBTR8_A, DBTR8_D_533
|
|
write32 DBTR9_A, DBTR9_D
|
|
write32 DBTR10_A, DBTR10_D_533
|
|
write32 DBTR11_A, DBTR11_D
|
|
write32 DBTR12_A, DBTR12_D_533
|
|
write32 DBTR13_A, DBTR13_D_533
|
|
write32 DBTR14_A, DBTR14_D
|
|
write32 DBTR15_A, DBTR15_D
|
|
write32 DBTR16_A, DBTR16_D_533
|
|
write32 DBTR17_A, DBTR17_D_533
|
|
write32 DBTR18_A, DBTR18_D_533
|
|
|
|
write32 DBBL_A, DBBL_D
|
|
write32 DBRNK0_A, DBRNK0_D
|
|
|
|
write32 DBCMD_A, DBCMD_D0_533
|
|
write32 DBCMD_A, DBCMD_D1
|
|
write32 DBCMD_A, DBCMD_D2
|
|
write32 DBCMD_A, DBCMD_D3
|
|
write32 DBCMD_A, DBCMD_D4
|
|
write32 DBCMD_A, DBCMD_D5_533
|
|
write32 DBCMD_A, DBCMD_D6
|
|
write32 DBCMD_A, DBCMD_D7
|
|
write32 DBCMD_A, DBCMD_D8
|
|
write32 DBCMD_A, DBCMD_D9_533
|
|
write32 DBCMD_A, DBCMD_D10
|
|
write32 DBCMD_A, DBCMD_D11
|
|
write32 DBCMD_A, DBCMD_D12
|
|
|
|
write32 DBRFCNF0_A, DBRFCNF0_D
|
|
write32 DBRFCNF1_A, DBRFCNF1_D_533
|
|
write32 DBRFCNF2_A, DBRFCNF2_D
|
|
write32 DBRFEN_A, DBRFEN_D
|
|
write32 DBACEN_A, DBACEN_D
|
|
write32 DBACEN_A, DBACEN_D
|
|
|
|
/* Dummy read */
|
|
mov.l DBWAIT_A, r1
|
|
synco
|
|
mov.l @r1, r0
|
|
synco
|
|
|
|
/* Dummy read */
|
|
mov.l SDRAM_A, r1
|
|
synco
|
|
mov.l @r1, r0
|
|
synco
|
|
|
|
/* need sleep 186A0 */
|
|
|
|
bra finish_init_sh7734
|
|
nop
|
|
|
|
.align 2
|
|
|
|
DBKIND_A: .long 0xFE800020
|
|
DBKIND_D: .long 0x00000005
|
|
DBCONF_A: .long 0xFE800024
|
|
DBCONF_D: .long 0x0D020A01
|
|
|
|
DBTR0_A: .long 0xFE800040
|
|
DBTR0_D_533:.long 0x00000004
|
|
DBTR0_D_400:.long 0x00000003
|
|
DBTR1_A: .long 0xFE800044
|
|
DBTR1_D_533:.long 0x00000003
|
|
DBTR1_D_400:.long 0x00000002
|
|
DBTR2_A: .long 0xFE800048
|
|
DBTR2_D: .long 0x00000000
|
|
DBTR3_A: .long 0xFE800050
|
|
DBTR3_D_533:.long 0x00000004
|
|
DBTR3_D_400:.long 0x00000003
|
|
|
|
DBTR4_A: .long 0xFE800054
|
|
DBTR4_D_533:.long 0x00050004
|
|
DBTR4_D_400:.long 0x00050003
|
|
|
|
DBTR5_A: .long 0xFE800058
|
|
DBTR5_D_533:.long 0x0000000F
|
|
DBTR5_D_400:.long 0x0000000B
|
|
|
|
DBTR6_A: .long 0xFE80005C
|
|
DBTR6_D_533:.long 0x0000000B
|
|
DBTR6_D_400:.long 0x00000008
|
|
|
|
DBTR7_A: .long 0xFE800060
|
|
DBTR7_D: .long 0x00000002
|
|
|
|
DBTR8_A: .long 0xFE800064
|
|
DBTR8_D_533:.long 0x0000000D
|
|
DBTR8_D_400:.long 0x0000000A
|
|
|
|
DBTR9_A: .long 0xFE800068
|
|
DBTR9_D: .long 0x00000002
|
|
|
|
DBTR10_A: .long 0xFE80006C
|
|
DBTR10_D_533:.long 0x00000004
|
|
DBTR10_D_400:.long 0x00000003
|
|
|
|
DBTR11_A: .long 0xFE800070
|
|
DBTR11_D: .long 0x00000008
|
|
|
|
DBTR12_A: .long 0xFE800074
|
|
DBTR12_D_533:.long 0x00000009
|
|
DBTR12_D_400:.long 0x00000008
|
|
|
|
DBTR13_A: .long 0xFE800078
|
|
DBTR13_D_533:.long 0x00000022
|
|
DBTR13_D_400:.long 0x0000001A
|
|
|
|
DBTR14_A: .long 0xFE80007C
|
|
DBTR14_D: .long 0x00070002
|
|
|
|
DBTR15_A: .long 0xFE800080
|
|
DBTR15_D: .long 0x00000003
|
|
|
|
DBTR16_A: .long 0xFE800084
|
|
DBTR16_D_533:.long 0x120A1001
|
|
DBTR16_D_400:.long 0x12091001
|
|
|
|
DBTR17_A: .long 0xFE800088
|
|
DBTR17_D_533:.long 0x00040000
|
|
DBTR17_D_400:.long 0x00030000
|
|
|
|
DBTR18_A: .long 0xFE80008C
|
|
DBTR18_D_533:.long 0x02010200
|
|
DBTR18_D_400:.long 0x02000207
|
|
|
|
DBBL_A: .long 0xFE8000B0
|
|
DBBL_D: .long 0x00000000
|
|
|
|
DBRNK0_A: .long 0xFE800100
|
|
DBRNK0_D: .long 0x00000001
|
|
|
|
DBCMD_A: .long 0xFE800018
|
|
DBCMD_D0_533: .long 0x1100006B
|
|
DBCMD_D0_400: .long 0x11000050
|
|
DBCMD_D1: .long 0x0B000000
|
|
DBCMD_D2: .long 0x2A004000
|
|
DBCMD_D3: .long 0x2B006000
|
|
DBCMD_D4: .long 0x29002044
|
|
DBCMD_D5_533: .long 0x28000743
|
|
DBCMD_D5_400: .long 0x28000533
|
|
DBCMD_D6: .long 0x0B000000
|
|
DBCMD_D7: .long 0x0C000000
|
|
DBCMD_D8: .long 0x0C000000
|
|
DBCMD_D9_533: .long 0x28000643
|
|
DBCMD_D9_400: .long 0x28000433
|
|
DBCMD_D10: .long 0x000000C8
|
|
DBCMD_D11: .long 0x290023C4
|
|
DBCMD_D12: .long 0x29002004
|
|
|
|
DBRFCNF0_A: .long 0xFE8000E0
|
|
DBRFCNF0_D: .long 0x000001FF
|
|
DBRFCNF1_A: .long 0xFE8000E4
|
|
DBRFCNF1_D_533: .long 0x00000805
|
|
DBRFCNF1_D_400: .long 0x00000618
|
|
|
|
DBRFCNF2_A: .long 0xFE8000E8
|
|
DBRFCNF2_D: .long 0x00000000
|
|
|
|
DBRFEN_A: .long 0xFE800014
|
|
DBRFEN_D: .long 0x00000001
|
|
|
|
DBACEN_A: .long 0xFE800010
|
|
DBACEN_D: .long 0x00000001
|
|
|
|
DBWAIT_A: .long 0xFE80001C
|
|
SDRAM_A: .long 0x0C000000
|
|
|
|
finish_init_sh7734:
|
|
write32 CCR_A, CCR_D
|
|
|
|
stc sr, r0
|
|
mov.l SR_MASK_D, r1
|
|
and r1, r0
|
|
ldc r0, sr
|
|
|
|
rts
|
|
nop
|
|
|
|
.align 2
|
|
|
|
CCR_A: .long 0xFF00001C
|
|
CCR_D: .long 0x0000090B
|
|
SR_MASK_D: .long 0xEFFFFF0F
|