From 072de836f53be56a70cecf70b43ae43b7ce17376 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 10:08:36 +0000
Subject: [PATCH] mk-rootfs.sh
---
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