From 071106ecf68c401173c58808b1cf5f68cc50d390 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 05 Jan 2024 08:39:27 +0000 Subject: [PATCH] change wifi driver to cypress --- u-boot/arch/arm/mach-rockchip/rk3588/rk3588.c | 89 +++++++++++++++++++++++++++++++------------- 1 files changed, 63 insertions(+), 26 deletions(-) diff --git a/u-boot/arch/arm/mach-rockchip/rk3588/rk3588.c b/u-boot/arch/arm/mach-rockchip/rk3588/rk3588.c index 7323d96..678d558 100644 --- a/u-boot/arch/arm/mach-rockchip/rk3588/rk3588.c +++ b/u-boot/arch/arm/mach-rockchip/rk3588/rk3588.c @@ -19,20 +19,31 @@ #define FIREWALL_DDR_BASE 0xfe030000 #define FW_DDR_MST5_REG 0x54 #define FW_DDR_MST13_REG 0x74 +#define FW_DDR_MST19_REG 0x8c #define FW_DDR_MST21_REG 0x94 #define FW_DDR_MST26_REG 0xa8 #define FW_DDR_MST27_REG 0xac #define FIREWALL_SYSMEM_BASE 0xfe038000 #define FW_SYSM_MST5_REG 0x54 #define FW_SYSM_MST13_REG 0x74 +#define FW_SYSM_MST19_REG 0x8c #define FW_SYSM_MST21_REG 0x94 #define FW_SYSM_MST26_REG 0xa8 #define FW_SYSM_MST27_REG 0xac +#define PMU1_SGRF_BASE 0xfd582000 +#define PMU1_SGRF_SOC_CON0 0x0 +#define PMU1_SGRF_SOC_CON6 0x18 +#define PMU1_SGRF_SOC_CON7 0x1c +#define PMU1_SGRF_SOC_CON8 0x20 +#define PMU1_SGRF_SOC_CON9 0x24 +#define PMU1_SGRF_SOC_CON10 0x28 +#define PMU1_SGRF_SOC_CON13 0x34 #define SYS_GRF_BASE 0xfd58c000 #define SYS_GRF_SOC_CON6 0x0318 #define USBGRF_BASE 0xfd5ac000 #define USB_GRF_USB3OTG0_CON1 0x001c #define BUS_SGRF_BASE 0xfd586000 +#define BUS_SGRF_SOC_CON2 0x08 #define BUS_SGRF_FIREWALL_CON18 0x288 #define PMU_BASE 0xfd8d0000 #define PMU_PWR_GATE_SFTCON1 0x8150 @@ -66,14 +77,21 @@ #define EMMC_IOC_GPIO2D_DS_H 0x5c #define CRU_BASE 0xfd7c0000 +#define CRU_GPLL_CON1 0x01c4 #define CRU_SOFTRST_CON77 0x0b34 +#define CRU_GLB_RST_CON 0x0c10 #define PMU1CRU_BASE 0xfd7f0000 +#define PMU1CRU_SOFTRST_CON00 0x0a00 #define PMU1CRU_SOFTRST_CON03 0x0a0c #define PMU1CRU_SOFTRST_CON04 0x0a10 #define HDMIRX_NODE_FDT_PATH "/hdmirx-controller@fdee0000" #define RK3588_PHY_CONFIG 0xfdee00c0 + +#define VOP_M0_PRIORITY_REG 0xfdf82008 +#define VOP_M1_PRIORITY_REG 0xfdf82208 +#define QOS_PRIORITY_LEVEL(h, l) ((((h) & 7) << 8) | ((l) & 7)) #ifdef CONFIG_ARM64 #include <asm/armv8/mmu.h> @@ -865,8 +883,15 @@ secure_reg &= 0xffff0000; writel(secure_reg, FIREWALL_SYSMEM_BASE + FW_SYSM_MST27_REG); - /* Select clk_tx source as default for i2s2/i2s3 */ - writel(0x03400340, SYS_GRF_BASE + SYS_GRF_SOC_CON6); + /* + * Select clk_tx source as default for i2s2/i2s3 + * Set I2Sx_MCLK as input default + * + * It's safe to set mclk as input default to avoid high freq glitch + * which may make devices work unexpected. And then enabled by + * kernel stage or any state where user use it. + */ + writel(0x03c703c7, SYS_GRF_BASE + SYS_GRF_SOC_CON6); if (readl(BUS_IOC_BASE + BUS_IOC_GPIO2D_IOMUX_SEL_L) == 0x2222) { /* Set the fspi m0 io ds level to 55ohm */ @@ -922,7 +947,14 @@ writel(0xffff1111, BUS_IOC_BASE + BUS_IOC_GPIO2D_IOMUX_SEL_L); writel(0xffff1111, BUS_IOC_BASE + BUS_IOC_GPIO2D_IOMUX_SEL_H); #endif - + /* + * set VOP M0 and VOP M1 to priority 0x303,then + * Peri > VOP/MCU > ISP/VICAP > other + * Note: VOP priority can only be modified during the u-boot stage, + * as VOP default power down, and power up after trust. + */ + writel(QOS_PRIORITY_LEVEL(3, 3), VOP_M0_PRIORITY_REG); + writel(QOS_PRIORITY_LEVEL(3, 3), VOP_M1_PRIORITY_REG); #endif /* Select usb otg0 phy status to 0 that make rockusb can work at high-speed */ @@ -1245,31 +1277,36 @@ #ifdef CONFIG_SPL_BUILD int spl_fit_standalone_release(char *id, uintptr_t entry_point) { - /* gpll enable */ - writel(0x00f00042, 0xfd7c01c4); + u32 val; + + /* pmu m0 configuration: */ + /* set gpll */ + writel(0x00f00042, CRU_BASE + CRU_GPLL_CON1); + /* set pmu mcu to access ddr memory */ + val = readl(FIREWALL_DDR_BASE + FW_DDR_MST19_REG); + writel(val & 0x0000ffff, FIREWALL_DDR_BASE + FW_DDR_MST19_REG); + /* set pmu mcu to access system memory */ + val = readl(FIREWALL_SYSMEM_BASE + FW_SYSM_MST19_REG); + writel(val & 0x000000ff, FIREWALL_SYSMEM_BASE + FW_SYSM_MST19_REG); + /* set pmu mcu to secure */ + writel(0x00080000, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON0); /* set start addr, pmu_mcu_code_addr_start */ - writel(0xFFFF0000 | (entry_point >> 16), 0xFD582024); - /* pmu_mcu_sram_addr_start */ - writel(0xFFFF2000, 0xFD582028); - /* pmu_mcu_tcm_addr_start */ - writel(0xFFFF2000, 0xFD582034); - /* set mcu secure */ - writel(0x00080000, 0xFD582000); + writel(0xFFFF0000 | (entry_point >> 16), PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON9); + /* set pmu_mcu_sram_addr_start */ + writel(0xFFFF2000, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON10); + /* set pmu_mcu_tcm_addr_start */ + writel(0xFFFF2000, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON13); /* set cache cache_peripheral_addr */ - writel(0xffff0000, 0xFD582018); - writel(0xffffee00, 0xFD58201c); - writel(0x00ff00ff, 0xFD582020); /* 0xf0000000 ~ 0xfee00000 */ - /* mcupmu access DDR secure control, each bit for a region. */ - writel(0x0000ffff, 0xFE03008C); - /* mcupmu access DDR secure control, each bit for a region. */ - writel(0x000000ff, 0xFE03808C); - /* PMU WDT reset system enable */ - writel(0x02000200, 0xFD586008); - /* WDT trigger global reset. */ - writel(0x08400840, 0xFD7C0C10); - /* Spl helps to load the mcu image, but not need to release - * mcu for rk3588. - */ + /* 0xf0000000 ~ 0xfee00000 */ + writel(0xffff0000, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON6); + writel(0xffffee00, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON7); + writel(0x00ff00ff, PMU1_SGRF_BASE + PMU1_SGRF_SOC_CON8); + /* enable PMU WDT reset system */ + writel(0x02000200, BUS_SGRF_BASE + BUS_SGRF_SOC_CON2); + /* select WDT trigger global reset. */ + writel(0x08400840, CRU_BASE + CRU_GLB_RST_CON); + /* release pmu mcu */ + /* writel(0x20000000, PMU1CRU_BASE + PMU1CRU_SOFTRST_CON00); */ return 0; } -- Gitblit v1.6.2