From f45e756958099c35d6afb746df1d40a1c6302cfc Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 07 Nov 2023 06:20:23 +0000 Subject: [PATCH] enable wifi gpio --- u-boot/drivers/pci/pcie_dw_rockchip.c | 63 ++++++++++++++++++++++++++----- 1 files changed, 52 insertions(+), 11 deletions(-) diff --git a/u-boot/drivers/pci/pcie_dw_rockchip.c b/u-boot/drivers/pci/pcie_dw_rockchip.c index 27312d1..dd81acf 100644 --- a/u-boot/drivers/pci/pcie_dw_rockchip.c +++ b/u-boot/drivers/pci/pcie_dw_rockchip.c @@ -18,8 +18,41 @@ #include <asm-generic/gpio.h> #include <asm/arch-rockchip/clock.h> #include <linux/iopoll.h> +#include <linux/ioport.h> DECLARE_GLOBAL_DATA_PTR; + +#define RK_PCIE_DBG 0 + +#define __pcie_dev_print_emit(fmt, ...) \ +({ \ + printf(fmt, ##__VA_ARGS__); \ +}) + +#ifdef dev_err +#undef dev_err +#define dev_err(dev, fmt, ...) \ +({ \ + if (dev) \ + __pcie_dev_print_emit("%s: " fmt, dev->name, \ + ##__VA_ARGS__); \ +}) +#endif + +#ifdef dev_info +#undef dev_info +#define dev_info dev_err +#endif + +#ifdef DEBUG +#define dev_dbg dev_err +#else +#define dev_dbg(dev, fmt, ...) \ +({ \ + if (0) \ + __dev_printk(7, dev, fmt, ##__VA_ARGS__); \ +}) +#endif struct rk_pcie { struct udevice *dev; @@ -62,7 +95,6 @@ #define PCIE_CLIENT_DBG_FIFO_STATUS 0x350 #define PCIE_CLIENT_DBG_TRANSITION_DATA 0xffff0000 #define PCIE_CLIENT_DBF_EN 0xffff0003 -#define RK_PCIE_DBG 0 /* PCI DBICS registers */ #define PCIE_LINK_STATUS_REG 0x80 @@ -119,6 +151,8 @@ #define LINK_WAIT_MAX_IATU_RETRIES 5 #define LINK_WAIT_IATU 10000 +#define PCIE_TYPE0_HDR_DBI2_OFFSET 0x100000 + static int rk_pcie_read(void __iomem *addr, int size, u32 *val) { if ((uintptr_t)addr & (size - 1)) { @@ -165,7 +199,7 @@ ret = rk_pcie_read(base + reg, size, &val); if (ret) - dev_err(rk_pcie->pci->dev, "Read APB address failed\n"); + dev_err(rk_pcie->dev, "Read APB address failed\n"); return val; } @@ -177,7 +211,7 @@ ret = rk_pcie_write(base + reg, size, val); if (ret) - dev_err(rk_pcie->pci->dev, "Write APB address failed\n"); + dev_err(rk_pcie->dev, "Write APB address failed\n"); } static inline u32 rk_pcie_readl_apb(struct rk_pcie *rk_pcie, u32 reg) @@ -272,6 +306,10 @@ val = readl(rk_pcie->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); val |= PORT_LOGIC_SPEED_CHANGE; writel(val, rk_pcie->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); + + /* Disable BAR0 BAR1 */ + writel(0, rk_pcie->dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + 0 * 4); + writel(0, rk_pcie->dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + 1 * 4); rk_pcie_dbi_write_enable(rk_pcie, false); } @@ -469,10 +507,10 @@ #if RK_PCIE_DBG u32 loop; - dev_info(rk_pcie->dev, "ltssm = 0x%x\n", + dev_err(rk_pcie->dev, "ltssm = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS)); for (loop = 0; loop < 64; loop++) - dev_info(rk_pcie->dev, "fifo_status = 0x%x\n", + dev_err(rk_pcie->dev, "fifo_status = 0x%x\n", rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_STATUS)); #endif } @@ -641,17 +679,18 @@ struct rk_pcie *priv = dev_get_priv(dev); u32 max_link_speed; int ret; + struct resource res; - priv->dbi_base = (void *)dev_read_addr_index(dev, 0); - if (!priv->dbi_base) + ret = dev_read_resource_byname(dev, "pcie-dbi", &res); + if (ret) return -ENODEV; - + priv->dbi_base = (void *)(res.start); dev_dbg(dev, "DBI address is 0x%p\n", priv->dbi_base); - priv->apb_base = (void *)dev_read_addr_index(dev, 1); - if (!priv->apb_base) + ret = dev_read_resource_byname(dev, "pcie-apb", &res); + if (ret) return -ENODEV; - + priv->apb_base = (void *)(res.start); dev_dbg(dev, "APB address is 0x%p\n", priv->apb_base); ret = gpio_request_by_name(dev, "reset-gpios", 0, @@ -771,6 +810,8 @@ }; static const struct udevice_id rockchip_pcie_ids[] = { + { .compatible = "rockchip,rk3528-pcie" }, + { .compatible = "rockchip,rk3562-pcie" }, { .compatible = "rockchip,rk3568-pcie" }, { .compatible = "rockchip,rk3588-pcie" }, { } -- Gitblit v1.6.2