hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
u-boot/drivers/pci/pcie_dw_rockchip.c
....@@ -18,8 +18,41 @@
1818 #include <asm-generic/gpio.h>
1919 #include <asm/arch-rockchip/clock.h>
2020 #include <linux/iopoll.h>
21
+#include <linux/ioport.h>
2122
2223 DECLARE_GLOBAL_DATA_PTR;
24
+
25
+#define RK_PCIE_DBG 0
26
+
27
+#define __pcie_dev_print_emit(fmt, ...) \
28
+({ \
29
+ printf(fmt, ##__VA_ARGS__); \
30
+})
31
+
32
+#ifdef dev_err
33
+#undef dev_err
34
+#define dev_err(dev, fmt, ...) \
35
+({ \
36
+ if (dev) \
37
+ __pcie_dev_print_emit("%s: " fmt, dev->name, \
38
+ ##__VA_ARGS__); \
39
+})
40
+#endif
41
+
42
+#ifdef dev_info
43
+#undef dev_info
44
+#define dev_info dev_err
45
+#endif
46
+
47
+#ifdef DEBUG
48
+#define dev_dbg dev_err
49
+#else
50
+#define dev_dbg(dev, fmt, ...) \
51
+({ \
52
+ if (0) \
53
+ __dev_printk(7, dev, fmt, ##__VA_ARGS__); \
54
+})
55
+#endif
2356
2457 struct rk_pcie {
2558 struct udevice *dev;
....@@ -62,7 +95,6 @@
6295 #define PCIE_CLIENT_DBG_FIFO_STATUS 0x350
6396 #define PCIE_CLIENT_DBG_TRANSITION_DATA 0xffff0000
6497 #define PCIE_CLIENT_DBF_EN 0xffff0003
65
-#define RK_PCIE_DBG 0
6698
6799 /* PCI DBICS registers */
68100 #define PCIE_LINK_STATUS_REG 0x80
....@@ -119,6 +151,8 @@
119151 #define LINK_WAIT_MAX_IATU_RETRIES 5
120152 #define LINK_WAIT_IATU 10000
121153
154
+#define PCIE_TYPE0_HDR_DBI2_OFFSET 0x100000
155
+
122156 static int rk_pcie_read(void __iomem *addr, int size, u32 *val)
123157 {
124158 if ((uintptr_t)addr & (size - 1)) {
....@@ -165,7 +199,7 @@
165199
166200 ret = rk_pcie_read(base + reg, size, &val);
167201 if (ret)
168
- dev_err(rk_pcie->pci->dev, "Read APB address failed\n");
202
+ dev_err(rk_pcie->dev, "Read APB address failed\n");
169203
170204 return val;
171205 }
....@@ -177,7 +211,7 @@
177211
178212 ret = rk_pcie_write(base + reg, size, val);
179213 if (ret)
180
- dev_err(rk_pcie->pci->dev, "Write APB address failed\n");
214
+ dev_err(rk_pcie->dev, "Write APB address failed\n");
181215 }
182216
183217 static inline u32 rk_pcie_readl_apb(struct rk_pcie *rk_pcie, u32 reg)
....@@ -272,6 +306,10 @@
272306 val = readl(rk_pcie->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL);
273307 val |= PORT_LOGIC_SPEED_CHANGE;
274308 writel(val, rk_pcie->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL);
309
+
310
+ /* Disable BAR0 BAR1 */
311
+ writel(0, rk_pcie->dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + 0 * 4);
312
+ writel(0, rk_pcie->dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + 1 * 4);
275313
276314 rk_pcie_dbi_write_enable(rk_pcie, false);
277315 }
....@@ -469,10 +507,10 @@
469507 #if RK_PCIE_DBG
470508 u32 loop;
471509
472
- dev_info(rk_pcie->dev, "ltssm = 0x%x\n",
510
+ dev_err(rk_pcie->dev, "ltssm = 0x%x\n",
473511 rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS));
474512 for (loop = 0; loop < 64; loop++)
475
- dev_info(rk_pcie->dev, "fifo_status = 0x%x\n",
513
+ dev_err(rk_pcie->dev, "fifo_status = 0x%x\n",
476514 rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_STATUS));
477515 #endif
478516 }
....@@ -641,17 +679,18 @@
641679 struct rk_pcie *priv = dev_get_priv(dev);
642680 u32 max_link_speed;
643681 int ret;
682
+ struct resource res;
644683
645
- priv->dbi_base = (void *)dev_read_addr_index(dev, 0);
646
- if (!priv->dbi_base)
684
+ ret = dev_read_resource_byname(dev, "pcie-dbi", &res);
685
+ if (ret)
647686 return -ENODEV;
648
-
687
+ priv->dbi_base = (void *)(res.start);
649688 dev_dbg(dev, "DBI address is 0x%p\n", priv->dbi_base);
650689
651
- priv->apb_base = (void *)dev_read_addr_index(dev, 1);
652
- if (!priv->apb_base)
690
+ ret = dev_read_resource_byname(dev, "pcie-apb", &res);
691
+ if (ret)
653692 return -ENODEV;
654
-
693
+ priv->apb_base = (void *)(res.start);
655694 dev_dbg(dev, "APB address is 0x%p\n", priv->apb_base);
656695
657696 ret = gpio_request_by_name(dev, "reset-gpios", 0,
....@@ -771,6 +810,8 @@
771810 };
772811
773812 static const struct udevice_id rockchip_pcie_ids[] = {
813
+ { .compatible = "rockchip,rk3528-pcie" },
814
+ { .compatible = "rockchip,rk3562-pcie" },
774815 { .compatible = "rockchip,rk3568-pcie" },
775816 { .compatible = "rockchip,rk3588-pcie" },
776817 { }