android13/u-boot/arch/arm/mach-rockchip/rk3128/rk3128.c

72 lines
1.7 KiB
C

/*
* Copyright (c) 2017 Rockchip Electronics Co., Ltd
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <asm/io.h>
#include <asm/arch/hardware.h>
#include <asm/arch/bootrom.h>
#include <asm/arch/grf_rk3128.h>
#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);
}