pci: layerscape: Fixup PCIe EP mode DT nodes for LX2160A rev2
authorHou Zhiqiang <Zhiqiang.Hou@nxp.com>
Sun, 13 Sep 2020 15:12:50 +0000 (23:12 +0800)
committerPriyanka Jain <priyanka.jain@nxp.com>
Thu, 24 Sep 2020 15:27:32 +0000 (20:57 +0530)
LX2160A rev2 uses different PCIe controller, so EP mode DT
nodes also need to be fixed up.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
drivers/pci/pcie_layerscape_fixup_common.c

index fef0a75..0a42997 100644 (file)
@@ -41,6 +41,8 @@ int lx2_board_fix_fdt(void *fdt)
                { "config_axi_slave", "config" }
        };
        int off = -1, i;
+       const fdt32_t *prop;
+       u32 ob_wins, ib_wins;
 
        off = fdt_node_offset_by_compatible(fdt, -1, "fsl,lx2160a-pcie");
        while (off != -FDT_ERR_NOTFOUND) {
@@ -86,6 +88,30 @@ int lx2_board_fix_fdt(void *fdt)
                off = fdt_node_offset_by_compatible(fdt, off,
                                                    "fsl,lx2160a-pcie");
        }
+
+       /* Fixup PCIe EP nodes */
+       off = -1;
+       off = fdt_node_offset_by_compatible(fdt, off, "fsl,lx2160a-pcie-ep");
+       while (off != -FDT_ERR_NOTFOUND) {
+               fdt_setprop_string(fdt, off, "compatible",
+                                  "fsl,lx2160ar2-pcie-ep");
+               prop = fdt_getprop(fdt, off, "apio-wins", NULL);
+               if (!prop) {
+                       printf("%s: Failed to fixup PCIe EP node @0x%x\n",
+                              __func__, off);
+                       continue;
+               }
+
+               ob_wins = fdt32_to_cpu(*prop);
+               ib_wins = (ob_wins == 256) ? 24 : 8;
+               fdt_setprop_u32(fdt, off, "num-ib-windows", ib_wins);
+               fdt_setprop_u32(fdt, off, "num-ob-windows", ob_wins);
+               fdt_delprop(fdt, off, "apio-wins");
+
+               off = fdt_node_offset_by_compatible(fdt, off,
+                                                   "fsl,lx2160a-pcie-ep");
+       }
+
        return 0;
 }