Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[cascardo/linux.git] / drivers / pci / host / pcie-hisi.c
index f2bb206..56154c2 100644 (file)
 
 #include "pcie-designware.h"
 
-#define PCIE_LTSSM_LINKUP_STATE                                0x11
-#define PCIE_LTSSM_STATE_MASK                          0x3F
-#define PCIE_SUBCTRL_SYS_STATE4_REG                    0x6818
-#define PCIE_SYS_STATE4                                                0x31c
-#define PCIE_HIP06_CTRL_OFF                                    0x1000
+#define PCIE_SUBCTRL_SYS_STATE4_REG            0x6818
+#define PCIE_HIP06_CTRL_OFF                    0x1000
+#define PCIE_SYS_STATE4                                (PCIE_HIP06_CTRL_OFF + 0x31c)
+#define PCIE_LTSSM_LINKUP_STATE                        0x11
+#define PCIE_LTSSM_STATE_MASK                  0x3F
 
 #define to_hisi_pcie(x)        container_of(x, struct hisi_pcie, pp)
 
@@ -37,35 +37,23 @@ struct pcie_soc_ops {
 };
 
 struct hisi_pcie {
+       struct pcie_port pp;            /* pp.dbi_base is DT rc_dbi */
        struct regmap *subctrl;
        u32 port_id;
-       struct pcie_port pp;
        struct pcie_soc_ops *soc_ops;
 };
 
-static inline void hisi_pcie_apb_writel(struct hisi_pcie *hisi_pcie,
-                                       u32 val, u32 reg)
-{
-       writel(val, hisi_pcie->pp.dbi_base + reg);
-}
-
-static inline u32 hisi_pcie_apb_readl(struct hisi_pcie *hisi_pcie, u32 reg)
-{
-       return readl(hisi_pcie->pp.dbi_base + reg);
-}
-
 /* HipXX PCIe host only supports 32-bit config access */
 static int hisi_pcie_cfg_read(struct pcie_port *pp, int where, int size,
                              u32 *val)
 {
        u32 reg;
        u32 reg_val;
-       struct hisi_pcie *hisi_pcie = to_hisi_pcie(pp);
        void *walker = &reg_val;
 
        walker += (where & 0x3);
        reg = where & ~0x3;
-       reg_val = hisi_pcie_apb_readl(hisi_pcie, reg);
+       reg_val = dw_pcie_readl_rc(pp, reg);
 
        if (size == 1)
                *val = *(u8 __force *) walker;
@@ -85,21 +73,20 @@ static int hisi_pcie_cfg_write(struct pcie_port *pp, int where, int  size,
 {
        u32 reg_val;
        u32 reg;
-       struct hisi_pcie *hisi_pcie = to_hisi_pcie(pp);
        void *walker = &reg_val;
 
        walker += (where & 0x3);
        reg = where & ~0x3;
        if (size == 4)
-               hisi_pcie_apb_writel(hisi_pcie, val, reg);
+               dw_pcie_writel_rc(pp, reg, val);
        else if (size == 2) {
-               reg_val = hisi_pcie_apb_readl(hisi_pcie, reg);
+               reg_val = dw_pcie_readl_rc(pp, reg);
                *(u16 __force *) walker = val;
-               hisi_pcie_apb_writel(hisi_pcie, reg_val, reg);
+               dw_pcie_writel_rc(pp, reg, reg_val);
        } else if (size == 1) {
-               reg_val = hisi_pcie_apb_readl(hisi_pcie, reg);
+               reg_val = dw_pcie_readl_rc(pp, reg);
                *(u8 __force *) walker = val;
-               hisi_pcie_apb_writel(hisi_pcie, reg_val, reg);
+               dw_pcie_writel_rc(pp, reg, reg_val);
        } else
                return PCIBIOS_BAD_REGISTER_NUMBER;
 
@@ -118,10 +105,10 @@ static int hisi_pcie_link_up_hip05(struct hisi_pcie *hisi_pcie)
 
 static int hisi_pcie_link_up_hip06(struct hisi_pcie *hisi_pcie)
 {
+       struct pcie_port *pp = &hisi_pcie->pp;
        u32 val;
 
-       val = hisi_pcie_apb_readl(hisi_pcie, PCIE_HIP06_CTRL_OFF +
-                       PCIE_SYS_STATE4);
+       val = dw_pcie_readl_rc(pp, PCIE_SYS_STATE4);
 
        return ((val & PCIE_LTSSM_STATE_MASK) == PCIE_LTSSM_LINKUP_STATE);
 }
@@ -139,13 +126,13 @@ static struct pcie_host_ops hisi_pcie_host_ops = {
        .link_up = hisi_pcie_link_up,
 };
 
-static int hisi_add_pcie_port(struct pcie_port *pp,
-                                    struct platform_device *pdev)
+static int hisi_add_pcie_port(struct hisi_pcie *hisi_pcie,
+                             struct platform_device *pdev)
 {
+       struct pcie_port *pp = &hisi_pcie->pp;
        struct device *dev = pp->dev;
        int ret;
        u32 port_id;
-       struct hisi_pcie *hisi_pcie = to_hisi_pcie(pp);
 
        if (of_property_read_u32(dev->of_node, "port-id", &port_id)) {
                dev_err(dev, "failed to read port-id\n");
@@ -203,7 +190,7 @@ static int hisi_pcie_probe(struct platform_device *pdev)
                return PTR_ERR(pp->dbi_base);
        }
 
-       ret = hisi_add_pcie_port(pp, pdev);
+       ret = hisi_add_pcie_port(hisi_pcie, pdev);
        if (ret)
                return ret;