#define to_meson_pcie(x) dev_get_drvdata((x)->dev)
 
-#define PCIE_CAP_OFFSET                        0x70
-#define PCIE_DEV_CTRL_DEV_STUS         (PCIE_CAP_OFFSET + 0x08)
-#define PCIE_CAP_MAX_PAYLOAD_MASK      GENMASK(7, 5)
 #define PCIE_CAP_MAX_PAYLOAD_SIZE(x)   ((x) << 5)
-#define PCIE_CAP_MAX_READ_REQ_MASK     GENMASK(14, 12)
 #define PCIE_CAP_MAX_READ_REQ_SIZE(x)  ((x) << 12)
 
 /* PCIe specific config registers */
        PCIE_GEN4
 };
 
-struct meson_pcie_mem_res {
-       void __iomem *elbi_base;
-       void __iomem *cfg_base;
-};
-
 struct meson_pcie_clk_res {
        struct clk *clk;
        struct clk *port_clk;
 
 struct meson_pcie {
        struct dw_pcie pci;
-       struct meson_pcie_mem_res mem_res;
+       void __iomem *cfg_base;
        struct meson_pcie_clk_res clk_res;
        struct meson_pcie_rc_reset mrst;
        struct gpio_desc *reset_gpio;
        return 0;
 }
 
-static void __iomem *meson_pcie_get_mem(struct platform_device *pdev,
-                                       struct meson_pcie *mp,
-                                       const char *id)
-{
-       struct device *dev = mp->pci.dev;
-       struct resource *res;
-
-       res = platform_get_resource_byname(pdev, IORESOURCE_MEM, id);
-
-       return devm_ioremap_resource(dev, res);
-}
-
 static int meson_pcie_get_mems(struct platform_device *pdev,
                               struct meson_pcie *mp)
 {
-       mp->mem_res.elbi_base = meson_pcie_get_mem(pdev, mp, "elbi");
-       if (IS_ERR(mp->mem_res.elbi_base))
-               return PTR_ERR(mp->mem_res.elbi_base);
+       struct dw_pcie *pci = &mp->pci;
+
+       pci->dbi_base = devm_platform_ioremap_resource_byname(pdev, "elbi");
+       if (IS_ERR(pci->dbi_base))
+               return PTR_ERR(pci->dbi_base);
 
-       mp->mem_res.cfg_base = meson_pcie_get_mem(pdev, mp, "cfg");
-       if (IS_ERR(mp->mem_res.cfg_base))
-               return PTR_ERR(mp->mem_res.cfg_base);
+       mp->cfg_base = devm_platform_ioremap_resource_byname(pdev, "cfg");
+       if (IS_ERR(mp->cfg_base))
+               return PTR_ERR(mp->cfg_base);
 
        return 0;
 }
        return 0;
 }
 
-static inline void meson_elb_writel(struct meson_pcie *mp, u32 val, u32 reg)
-{
-       writel(val, mp->mem_res.elbi_base + reg);
-}
-
-static inline u32 meson_elb_readl(struct meson_pcie *mp, u32 reg)
-{
-       return readl(mp->mem_res.elbi_base + reg);
-}
-
 static inline u32 meson_cfg_readl(struct meson_pcie *mp, u32 reg)
 {
-       return readl(mp->mem_res.cfg_base + reg);
+       return readl(mp->cfg_base + reg);
 }
 
 static inline void meson_cfg_writel(struct meson_pcie *mp, u32 val, u32 reg)
 {
-       writel(val, mp->mem_res.cfg_base + reg);
+       writel(val, mp->cfg_base + reg);
 }
 
 static void meson_pcie_assert_reset(struct meson_pcie *mp)
 
 static void meson_set_max_payload(struct meson_pcie *mp, int size)
 {
+       struct dw_pcie *pci = &mp->pci;
        u32 val;
+       u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
        int max_payload_size = meson_size_to_payload(mp, size);
 
-       val = meson_elb_readl(mp, PCIE_DEV_CTRL_DEV_STUS);
-       val &= ~PCIE_CAP_MAX_PAYLOAD_MASK;
-       meson_elb_writel(mp, val, PCIE_DEV_CTRL_DEV_STUS);
+       val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL);
+       val &= ~PCI_EXP_DEVCTL_PAYLOAD;
+       dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val);
 
-       val = meson_elb_readl(mp, PCIE_DEV_CTRL_DEV_STUS);
+       val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL);
        val |= PCIE_CAP_MAX_PAYLOAD_SIZE(max_payload_size);
-       meson_elb_writel(mp, val, PCIE_DEV_CTRL_DEV_STUS);
+       dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val);
 }
 
 static void meson_set_max_rd_req_size(struct meson_pcie *mp, int size)
 {
+       struct dw_pcie *pci = &mp->pci;
        u32 val;
+       u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
        int max_rd_req_size = meson_size_to_payload(mp, size);
 
-       val = meson_elb_readl(mp, PCIE_DEV_CTRL_DEV_STUS);
-       val &= ~PCIE_CAP_MAX_READ_REQ_MASK;
-       meson_elb_writel(mp, val, PCIE_DEV_CTRL_DEV_STUS);
+       val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL);
+       val &= ~PCI_EXP_DEVCTL_READRQ;
+       dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val);
 
-       val = meson_elb_readl(mp, PCIE_DEV_CTRL_DEV_STUS);
+       val = dw_pcie_readl_dbi(pci, offset + PCI_EXP_DEVCTL);
        val |= PCIE_CAP_MAX_READ_REQ_SIZE(max_rd_req_size);
-       meson_elb_writel(mp, val, PCIE_DEV_CTRL_DEV_STUS);
+       dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val);
 }
 
 static int meson_pcie_establish_link(struct meson_pcie *mp)
        }
 
        pp->ops = &meson_pcie_host_ops;
-       pci->dbi_base = mp->mem_res.elbi_base;
 
        ret = dw_pcie_host_init(pp);
        if (ret) {