blob: 9a66dfa6c6936b0564a94b489ffadcf7d021c5d6 [file] [log] [blame]
Chris Brandt1f3b6672017-08-23 14:53:59 -05001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (C) 2017 Renesas Electronics
4 * Copyright (C) 2017 Chris Brandt
5 */
6#include <config.h>
7#include <version.h>
8#include <asm/macro.h>
9
10/* Watchdog Registers */
11#define RZA1_WDT_BASE 0xFCFE0000
12#define WTCSR (RZA1_WDT_BASE + 0x00) /* Watchdog Timer Control Register */
13#define WTCNT (RZA1_WDT_BASE + 0x02) /* Watchdog Timer Counter Register */
14#define WRCSR (RZA1_WDT_BASE + 0x04) /* Watchdog Reset Control Register */
15
16/* Standby controller registers (chapter 55) */
17#define RZA1_STBCR_BASE 0xFCFE0020
18#define STBCR1 (RZA1_STBCR_BASE + 0x00)
19#define STBCR2 (RZA1_STBCR_BASE + 0x04)
20#define STBCR3 (RZA1_STBCR_BASE + 0x400)
21#define STBCR4 (RZA1_STBCR_BASE + 0x404)
22#define STBCR5 (RZA1_STBCR_BASE + 0x408)
23#define STBCR6 (RZA1_STBCR_BASE + 0x40c)
24#define STBCR7 (RZA1_STBCR_BASE + 0x410)
25#define STBCR8 (RZA1_STBCR_BASE + 0x414)
26#define STBCR9 (RZA1_STBCR_BASE + 0x418)
27#define STBCR10 (RZA1_STBCR_BASE + 0x41c)
28#define STBCR11 (RZA1_STBCR_BASE + 0x420)
29#define STBCR12 (RZA1_STBCR_BASE + 0x424)
30#define STBCR13 (RZA1_STBCR_BASE + 0x450)
31
32/* Clock Registers */
33#define RZA1_FRQCR_BASE 0xFCFE0010
34#define FRQCR (RZA1_FRQCR_BASE + 0x00)
35#define FRQCR2 (RZA1_FRQCR_BASE + 0x04)
36
37#define SYSCR1 0xFCFE0400 /* System control register 1 */
38#define SYSCR2 0xFCFE0404 /* System control register 2 */
39#define SYSCR3 0xFCFE0408 /* System control register 3 */
40
41/* Disable WDT */
42#define WTCSR_D 0xA518
43#define WTCNT_D 0x5A00
44
45/* Enable all peripheral clocks */
46#define STBCR3_D 0x00000000
47#define STBCR4_D 0x00000000
48#define STBCR5_D 0x00000000
49#define STBCR6_D 0x00000000
50#define STBCR7_D 0x00000024
51#define STBCR8_D 0x00000005
52#define STBCR9_D 0x00000000
53#define STBCR10_D 0x00000000
54#define STBCR11_D 0x000000c0
55#define STBCR12_D 0x000000f0
56
57/*
58 * Set all system clocks to full speed.
59 * On reset, the CPU will be running at 1/2 speed.
60 * In the Hardware Manual, see Table 6.3 Settable Frequency Ranges
61 */
62#define FRQCR_D 0x0035
63#define FRQCR2_D 0x0001
64
65 .global lowlevel_init
66
67 .text
68 .align 2
69
70lowlevel_init:
71 /* PL310 init */
72 write32 0x3fffff80, 0x00000001
73
74 /* Disable WDT */
75 write16 WTCSR, WTCSR_D
76 write16 WTCNT, WTCNT_D
77
78 /* Set clocks */
79 write16 FRQCR, FRQCR_D
80 write16 FRQCR2, FRQCR2_D
81
82 /* Enable all peripherals(Standby Control) */
83 write8 STBCR3, STBCR3_D
84 write8 STBCR4, STBCR4_D
85 write8 STBCR5, STBCR5_D
86 write8 STBCR6, STBCR6_D
87 write8 STBCR7, STBCR7_D
88 write8 STBCR8, STBCR8_D
89 write8 STBCR9, STBCR9_D
90 write8 STBCR10, STBCR10_D
91 write8 STBCR11, STBCR11_D
92 write8 STBCR12, STBCR12_D
93
94 /* For serial booting, enable read ahead caching to speed things up */
95#define DRCR_0 0x3FEFA00C
96 write32 DRCR_0, 0x00010100 /* Read Burst ON, Length=2 */
97
98 /* Enable all internal RAM */
99 write8 SYSCR1, 0xFF
100 write8 SYSCR2, 0xFF
101 write8 SYSCR3, 0xFF
102
103 nop
104 /* back to arch calling code */
105 mov pc, lr
106
107 .align 4