/* * Copyright (c) 2017 Rockchip Electronics Co., Ltd * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #define GRF_GPIO1C_IOMUX 0x200080c0 #define SDMMC_INTMASK 0x10214024 #define READLATENCY_VAL 0x3f #define BUS_MSCH_QOS_BASE 0x10128014 #define CPU_AXI_QOS_PRIORITY_BASE 0x1012f188 #define CPU_AXI_QOS_PRIORITY_LEVEL(h, l) \ ((((h) & 3) << 8) | (((h) & 3) << 2) | ((l) & 3)) #define CPU_AXI_CIF_QOS_PRIORITY_BASE 0x1012f208 int arch_cpu_init(void) { /* We do some SoC one time setting here. */ /* Read latency configure */ writel(READLATENCY_VAL, BUS_MSCH_QOS_BASE); /* Set lcdc cpu axi qos priority level */ writel(CPU_AXI_QOS_PRIORITY_LEVEL(3, 3), CPU_AXI_QOS_PRIORITY_BASE); /* Set GPIO1_C1 iomux to gpio, default sdcard_detn */ writel(0x00040000, GRF_GPIO1C_IOMUX); #ifdef CONFIG_ROCKCHIP_RK3126 /* * Disable interrupt, otherwise it always generates wakeup signal. This * is an IC hardware issue. */ writel(0, SDMMC_INTMASK); /* raise cif ddr qos priority */ writel(CPU_AXI_QOS_PRIORITY_LEVEL(3, 3), CPU_AXI_CIF_QOS_PRIORITY_BASE); #endif return 0; } void board_debug_uart_init(void) { struct rk3128_grf * const grf __maybe_unused = (struct rk3128_grf * const)0x20008000; enum { /* UART2 */ GPIO1C2_SHIFT = 4, GPIO1C2_MASK = GENMASK(5, 4), GPIO1C2_GPIO = 0, GPIO1C2_MMC0_D0 = 1, GPIO1C2_UART2_TX = 2, GPIO1C3_SHIFT = 6, GPIO1C3_MASK = GENMASK(7, 6), GPIO1C3_GPIO = 0, GPIO1C2_MMC0_D1 = 1, GPIO1C2_UART2_RX = 2, }; rk_clrsetreg(&grf->gpio1c_iomux, GPIO1C2_MASK, GPIO1C2_UART2_TX << GPIO1C2_SHIFT); rk_clrsetreg(&grf->gpio1c_iomux, GPIO1C3_MASK, GPIO1C2_UART2_RX << GPIO1C3_SHIFT); }