.. | .. |
---|
18 | 18 | #include <asm-generic/gpio.h> |
---|
19 | 19 | #include <asm/arch-rockchip/clock.h> |
---|
20 | 20 | #include <linux/iopoll.h> |
---|
| 21 | +#include <linux/ioport.h> |
---|
21 | 22 | |
---|
22 | 23 | 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 |
---|
23 | 56 | |
---|
24 | 57 | struct rk_pcie { |
---|
25 | 58 | struct udevice *dev; |
---|
.. | .. |
---|
62 | 95 | #define PCIE_CLIENT_DBG_FIFO_STATUS 0x350 |
---|
63 | 96 | #define PCIE_CLIENT_DBG_TRANSITION_DATA 0xffff0000 |
---|
64 | 97 | #define PCIE_CLIENT_DBF_EN 0xffff0003 |
---|
65 | | -#define RK_PCIE_DBG 0 |
---|
66 | 98 | |
---|
67 | 99 | /* PCI DBICS registers */ |
---|
68 | 100 | #define PCIE_LINK_STATUS_REG 0x80 |
---|
.. | .. |
---|
119 | 151 | #define LINK_WAIT_MAX_IATU_RETRIES 5 |
---|
120 | 152 | #define LINK_WAIT_IATU 10000 |
---|
121 | 153 | |
---|
| 154 | +#define PCIE_TYPE0_HDR_DBI2_OFFSET 0x100000 |
---|
| 155 | + |
---|
122 | 156 | static int rk_pcie_read(void __iomem *addr, int size, u32 *val) |
---|
123 | 157 | { |
---|
124 | 158 | if ((uintptr_t)addr & (size - 1)) { |
---|
.. | .. |
---|
165 | 199 | |
---|
166 | 200 | ret = rk_pcie_read(base + reg, size, &val); |
---|
167 | 201 | 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"); |
---|
169 | 203 | |
---|
170 | 204 | return val; |
---|
171 | 205 | } |
---|
.. | .. |
---|
177 | 211 | |
---|
178 | 212 | ret = rk_pcie_write(base + reg, size, val); |
---|
179 | 213 | 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"); |
---|
181 | 215 | } |
---|
182 | 216 | |
---|
183 | 217 | static inline u32 rk_pcie_readl_apb(struct rk_pcie *rk_pcie, u32 reg) |
---|
.. | .. |
---|
272 | 306 | val = readl(rk_pcie->dbi_base + PCIE_LINK_WIDTH_SPEED_CONTROL); |
---|
273 | 307 | val |= PORT_LOGIC_SPEED_CHANGE; |
---|
274 | 308 | 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); |
---|
275 | 313 | |
---|
276 | 314 | rk_pcie_dbi_write_enable(rk_pcie, false); |
---|
277 | 315 | } |
---|
.. | .. |
---|
469 | 507 | #if RK_PCIE_DBG |
---|
470 | 508 | u32 loop; |
---|
471 | 509 | |
---|
472 | | - dev_info(rk_pcie->dev, "ltssm = 0x%x\n", |
---|
| 510 | + dev_err(rk_pcie->dev, "ltssm = 0x%x\n", |
---|
473 | 511 | rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_LTSSM_STATUS)); |
---|
474 | 512 | 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", |
---|
476 | 514 | rk_pcie_readl_apb(rk_pcie, PCIE_CLIENT_DBG_FIFO_STATUS)); |
---|
477 | 515 | #endif |
---|
478 | 516 | } |
---|
.. | .. |
---|
641 | 679 | struct rk_pcie *priv = dev_get_priv(dev); |
---|
642 | 680 | u32 max_link_speed; |
---|
643 | 681 | int ret; |
---|
| 682 | + struct resource res; |
---|
644 | 683 | |
---|
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) |
---|
647 | 686 | return -ENODEV; |
---|
648 | | - |
---|
| 687 | + priv->dbi_base = (void *)(res.start); |
---|
649 | 688 | dev_dbg(dev, "DBI address is 0x%p\n", priv->dbi_base); |
---|
650 | 689 | |
---|
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) |
---|
653 | 692 | return -ENODEV; |
---|
654 | | - |
---|
| 693 | + priv->apb_base = (void *)(res.start); |
---|
655 | 694 | dev_dbg(dev, "APB address is 0x%p\n", priv->apb_base); |
---|
656 | 695 | |
---|
657 | 696 | ret = gpio_request_by_name(dev, "reset-gpios", 0, |
---|
.. | .. |
---|
771 | 810 | }; |
---|
772 | 811 | |
---|
773 | 812 | static const struct udevice_id rockchip_pcie_ids[] = { |
---|
| 813 | + { .compatible = "rockchip,rk3528-pcie" }, |
---|
| 814 | + { .compatible = "rockchip,rk3562-pcie" }, |
---|
774 | 815 | { .compatible = "rockchip,rk3568-pcie" }, |
---|
775 | 816 | { .compatible = "rockchip,rk3588-pcie" }, |
---|
776 | 817 | { } |
---|