"Das U-Boot" Source Tree

rockhip: rk3128: Add basic SoC init file

In order to prepare the switch to TPL/SPL for RK3128 provide basic Soc
init, which currently supports getting the boot device, initialization of
all 3 uart channels pins or usb uart, and disable forcing to JTAG mode of
the sdmmc/uart2 pins.

Signed-off-by: Alex Bee <knaerzche@gmail.com>

authored by

Alex Bee and committed by jcs.org dfb73ee6 f0fcd0f1

+149
+1
arch/arm/mach-rockchip/rk3128/Makefile
··· 6 6 7 7 obj-y += syscon_rk3128.o 8 8 obj-y += clk_rk3128.o 9 + obj-y += rk3128.o
+148
arch/arm/mach-rockchip/rk3128/rk3128.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + 3 + #include <init.h> 4 + #include <asm/arch-rockchip/bootrom.h> 5 + #include <asm/arch-rockchip/grf_rk3128.h> 6 + #include <asm/arch-rockchip/hardware.h> 7 + 8 + #define GRF_BASE 0x20008000 9 + 10 + const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = { 11 + [BROM_BOOTSOURCE_EMMC] = "/mmc@1021c000", 12 + [BROM_BOOTSOURCE_SPINOR] = "/spi@1020c000/flash@0", 13 + [BROM_BOOTSOURCE_SPINAND] = "/spi@1020c000/flash@0", 14 + [BROM_BOOTSOURCE_SD] = "/mmc@10214000", 15 + }; 16 + 17 + #if IS_ENABLED(CONFIG_DEBUG_UART_BOARD_INIT) && defined(CONFIG_DEBUG_UART_BASE) 18 + void board_debug_uart_init(void) 19 + { 20 + struct rk3128_grf * const grf = (void *)GRF_BASE; 21 + #if CONFIG_DEBUG_UART_BASE == 0x20060000 22 + enum { 23 + GPIO2D2_SHIFT = 4, 24 + GPIO2D2_MASK = 3 << GPIO2D2_SHIFT, 25 + GPIO2D2_UART0_SOUT = 2, 26 + 27 + GPIO2D3_SHIFT = 6, 28 + GPIO2D3_MASK = 3 << GPIO2D3_SHIFT, 29 + GPIO2D3_UART0_SIN = 2, 30 + }; 31 + 32 + rk_clrsetreg(&grf->gpio1b_iomux, 33 + GPIO2D2_MASK | GPIO2D3_MASK, 34 + GPIO2D2_UART0_SOUT << GPIO2D2_SHIFT | 35 + GPIO2D3_UART0_SIN << GPIO2D3_SHIFT); 36 + #elif CONFIG_DEBUG_UART_BASE == 0x20064000 37 + enum { 38 + GPIO1B1_SHIFT = 2, 39 + GPIO1B1_MASK = 3 << GPIO1B1_SHIFT, 40 + GPIO1B1_UART1_SOUT = 2, 41 + 42 + GPIO1B2_SHIFT = 4, 43 + GPIO1B2_MASK = 3 << GPIO1B2_SHIFT, 44 + GPIO1B2_UART1_SIN = 2, 45 + 46 + }; 47 + 48 + rk_clrsetreg(&grf->gpio1b_iomux, 49 + GPIO1B1_MASK | GPIO1B2_MASK, 50 + GPIO1B1_UART1_SOUT << GPIO1B1_SHIFT | 51 + GPIO1B2_UART1_SIN << GPIO1B2_SHIFT); 52 + #elif CONFIG_DEBUG_UART_BASE == 0x20068000 53 + #if IS_ENABLED(CONFIG_ROCKCHIP_USB_UART) 54 + enum { 55 + UTMI_TERMSELECT_SHIFT = 6, 56 + UTMI_TERMSELECT_MASK = 1 << UTMI_TERMSELECT_SHIFT, 57 + UTMI_TERM_HS = 0, 58 + UTMI_TERM_FS, 59 + 60 + UTMI_XCVRSELECT_SHIFT = 4, 61 + UTMI_XCVRSELECT_MASK = 3 << UTMI_XCVRSELECT_SHIFT, 62 + UTMI_XCVR_HS = 0, 63 + UTMI_XCVR_FS, 64 + UTMI_XCVR_LS, 65 + 66 + UTMI_OPMODE_SHIFT = 2, 67 + UTMI_OPMODE_MASK = 3 << UTMI_OPMODE_SHIFT, 68 + UTMI_OPMODE_NORMAL = 0, 69 + UTMI_OPMODE_NON_DRIVING, 70 + UTMI_OPMODE_NORMAL_WO_SYNC, 71 + 72 + UTMI_SUSPEND_N_SHIFT = 1, 73 + UTMI_SUSPEND_N_MASK = 1 << UTMI_SUSPEND_N_SHIFT, 74 + UTMI_SUSPEND_ENABLE = 0, 75 + UTMI_SUSPEND_DISABLE, 76 + 77 + USBPHY_SOFT_CON_SEL_SHIFT = 0, 78 + USBPHY_SOFT_CON_SEL_MASK = 1 << USBPHY_SOFT_CON_SEL_SHIFT, 79 + USBPHY_SOFT_CON_DISABLE = 1, 80 + USBPHY_SOFT_CON_ENABLE, 81 + }; 82 + 83 + rk_clrsetreg(&grf->uoc0_con0, 84 + UTMI_TERMSELECT_MASK | UTMI_OPMODE_MASK | 85 + UTMI_SUSPEND_N_MASK | USBPHY_SOFT_CON_SEL_MASK, 86 + UTMI_TERM_FS << UTMI_TERMSELECT_SHIFT | 87 + UTMI_XCVR_FS << UTMI_XCVRSELECT_SHIFT | 88 + UTMI_OPMODE_NON_DRIVING << UTMI_OPMODE_SHIFT | 89 + UTMI_SUSPEND_ENABLE << UTMI_SUSPEND_N_SHIFT | 90 + USBPHY_SOFT_CON_ENABLE << USBPHY_SOFT_CON_SEL_SHIFT); 91 + 92 + enum { 93 + BYPASSSEL0_SHIFT = 13, 94 + BYPASSSEL0_MASK = 1 << BYPASSSEL0_SHIFT, 95 + BYPASSSEL0_DISABLE = 0, 96 + BYPASSSEL0_ENABLE = 1, 97 + 98 + BYPASSDMEN0_SHIFT = 12, 99 + BYPASSDMEN0_MASK = 1 << BYPASSDMEN0_SHIFT, 100 + BYPASSDMEN0_DISABLE = 0, 101 + BYPASSDMEN0_ENABLE, 102 + 103 + OTGPHYDISABLE_SHIFT = 10, 104 + OTGPHYDISABLE_MASK = 1 << OTGPHYDISABLE_SHIFT, 105 + OTGPHY_ENABLE = 0, 106 + OTGPHY_DISABLE, 107 + }; 108 + 109 + rk_clrsetreg(&grf->uoc1_con4, 110 + BYPASSSEL0_MASK | BYPASSDMEN0_MASK | 111 + OTGPHYDISABLE_MASK, 112 + BYPASSSEL0_ENABLE << BYPASSSEL0_SHIFT | 113 + BYPASSDMEN0_ENABLE << BYPASSDMEN0_SHIFT | 114 + OTGPHY_DISABLE << OTGPHYDISABLE_SHIFT); 115 + #else 116 + enum { 117 + GPIO1C2_SHIFT = 4, 118 + GPIO1C2_MASK = 3 << GPIO1C2_SHIFT, 119 + GPIO1C2_UART2_TX = 2, 120 + 121 + GPIO1C3_SHIFT = 6, 122 + GPIO1C3_MASK = 3 << GPIO1C3_SHIFT, 123 + GPIO1C3_UART2_RX = 2, 124 + }; 125 + 126 + rk_clrsetreg(&grf->gpio1c_iomux, 127 + GPIO1C3_MASK | GPIO1C2_MASK, 128 + GPIO1C2_UART2_TX << GPIO1C2_SHIFT | 129 + GPIO1C3_UART2_RX << GPIO1C3_SHIFT); 130 + #endif //IS_ENABLED(CONFIG_ROCKCHIP_USB_UART) 131 + #endif 132 + } 133 + #endif //IS_ENABLED(CONFIG_DEBUG_UART_BOARD_INIT) && defined(CONFIG_DEBUG_UART_BASE) 134 + 135 + #if !IS_ENABLED(CONFIG_TPL_BUILD) 136 + int arch_cpu_init(void) 137 + { 138 + #if IS_ENABLED(CONFIG_SPL_BUILD) 139 + #if IS_ENABLED(CONFIG_ROCKCHIP_DISABLE_FORCE_JTAG) 140 + struct rk3128_grf * const grf = (void *)GRF_BASE; 141 + 142 + /* don't force jtag on sdmmc/uart2 iomux */ 143 + rk_clrreg(&grf->soc_con0, BIT(8)); 144 + #endif 145 + #endif 146 + return 0; 147 + } 148 + #endif