Chris Brandt | 1f3b667 | 2017-08-23 14:53:59 -0500 | [diff] [blame] | 1 | /* 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 | |
| 70 | lowlevel_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 |