// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2019 Rockchip Electronics Co., Ltd * Copyright (c) 2022 Edgeble AI Technologies Pvt. Ltd. */ #include #include #include #include #include #define FIREWALL_APB_BASE 0xffa60000 #define FW_DDR_CON_REG 0x80 #define GRF_BASE 0xFE000000 const char * const boot_devices[BROM_LAST_BOOTSOURCE + 1] = { [BROM_BOOTSOURCE_EMMC] = "/mmc@ffc50000", [BROM_BOOTSOURCE_SD] = "/mmc@ffc60000", }; /* GRF_GPIO3A_IOMUX_L */ enum { GPIO3A3_SHIFT = 12, GPIO3A3_MASK = GENMASK(14, 12), GPIO3A3_GPIO = 0, GPIO3A3_UART2_RX_M1, GPIO3A3_A7_JTAG_TMS_M1, GPIO3A2_SHIFT = 8, GPIO3A2_MASK = GENMASK(10, 8), GPIO3A2_GPIO = 0, GPIO3A2_UART2_TX_M1, GPIO3A2_A7_JTAG_TCK_M1, }; /* GRF_IOFUNC_CON2 */ enum { UART2_IO_SEL_SHIFT = 8, UART2_IO_SEL_MASK = GENMASK(8, 8), UART2_IO_SEL_M0 = 0, UART2_IO_SEL_M1, }; void board_debug_uart_init(void) { static struct rv1126_grf * const grf = (void *)GRF_BASE; /* Enable early UART2 channel m1 on the rv1126 */ rk_clrsetreg(&grf->iofunc_con2, UART2_IO_SEL_MASK, UART2_IO_SEL_M1 << UART2_IO_SEL_SHIFT); /* Switch iomux */ rk_clrsetreg(&grf->gpio3a_iomux_l, GPIO3A3_MASK | GPIO3A2_MASK, GPIO3A3_UART2_RX_M1 << GPIO3A3_SHIFT | GPIO3A2_UART2_TX_M1 << GPIO3A2_SHIFT); } #ifndef CONFIG_TPL_BUILD int arch_cpu_init(void) { /** * Set dram area unsecure in spl * * usb & mmc & sfc controllers can read data to dram * since they are unsecure. * (Note: only secure-world can access this register) */ if (IS_ENABLED(CONFIG_SPL_BUILD)) writel(0, FIREWALL_APB_BASE + FW_DDR_CON_REG); return 0; } #endif