u-boot: fixup the iommu-map property of fsl-mc node
authorNipun Gupta <nipun.gupta@nxp.com>
Mon, 20 Aug 2018 10:31:14 +0000 (16:01 +0530)
committerYork Sun <york.sun@nxp.com>
Thu, 27 Sep 2018 15:55:05 +0000 (08:55 -0700)
The iommu-map property in the fsl-mc node is updated by
valid stream-ids by u-boot. This patch is to fixup this
property for LS208x and LS1088.

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch3.h
board/freescale/ls1088a/ls1088a.c
board/freescale/ls2080a/ls2080a.c
board/freescale/ls2080aqds/ls2080aqds.c
board/freescale/ls2080ardb/ls2080ardb.c
drivers/net/fsl-mc/mc.c
include/fsl-mc/fsl_mc.h

index afea9b8da85ec9c5675fbadf5a6186b1acc77db7..8d002da3eda8424825492721ce11d5236fba8d7e 100644 (file)
@@ -35,6 +35,9 @@
  *  -DPAA2
  *     -u-boot will allocate a range of stream IDs to be used by the Management
  *      Complex for containers and will set these values in the MC DPC image.
+ *     -u-boot will fixup the iommu-map property in the fsl-mc node in the
+ *      device tree (see Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt
+ *      for more info on the msi-map definition)
  *     -the MC is responsible for allocating and setting up 'isolation context
  *      IDs (ICIDs) based on the allocated stream IDs for all DPAA2 devices.
  *
index a0dab6fc2ed5f783a1d136ae73bd103f32204f5b..517a8ceed9e5b4e2fce477abe49f48e891e9c641 100644 (file)
@@ -575,6 +575,8 @@ int ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory_banks(blob, base, size, CONFIG_NR_DRAM_BANKS);
 
+       fdt_fsl_mc_fixup_iommu_map_entry(blob);
+
        fsl_fdt_fixup_flash(blob);
 
 #ifdef CONFIG_FSL_MC_ENET
index 75014fd7f908fdee7e3dc50c4b3bd8db281e902c..698ae1f9a65b985b7a84ffb3e3f05cd8c4e98c52 100644 (file)
@@ -127,6 +127,8 @@ int ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory_banks(blob, base, size, 2);
 
+       fdt_fsl_mc_fixup_iommu_map_entry(blob);
+
 #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
        fdt_fixup_board_enet(blob);
 #endif
index c811e994d04dbb9b712908910f0f77d708e770fa..d336ef840c5df5ae28e6b4bde4d092d08725dc19 100644 (file)
@@ -332,6 +332,8 @@ int ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory_banks(blob, base, size, 2);
 
+       fdt_fsl_mc_fixup_iommu_map_entry(blob);
+
        fsl_fdt_fixup_dr_usb(blob, bd);
 
 #if defined(CONFIG_FSL_MC_ENET) && !defined(CONFIG_SPL_BUILD)
index 46b18cf00b3fd40d54627cd42a5ccb71cbf69be9..cf91bc30fb8ea9980c4ad95216e84107aaed8d99 100644 (file)
@@ -394,6 +394,8 @@ int ft_board_setup(void *blob, bd_t *bd)
 
        fdt_fixup_memory_banks(blob, base, size, 2);
 
+       fdt_fsl_mc_fixup_iommu_map_entry(blob);
+
        fsl_fdt_fixup_dr_usb(blob, bd);
 
        fsl_fdt_fixup_flash(blob);
index 940025a467379088021867349b96633f1c6f69bb..cb2fbe9e2f1d3572da087a9b3580606d5b368ce0 100644 (file)
@@ -278,6 +278,40 @@ static int mc_fixup_dpl_mac_addr(void *blob, int dpmac_id,
                                 MC_FIXUP_DPL);
 }
 
+void fdt_fsl_mc_fixup_iommu_map_entry(void *blob)
+{
+       u32 *prop;
+       u32 iommu_map[4];
+       int offset;
+       int lenp;
+
+       /* find fsl-mc node */
+       offset = fdt_path_offset(blob, "/soc/fsl-mc");
+       if (offset < 0)
+               offset = fdt_path_offset(blob, "/fsl-mc");
+       if (offset < 0) {
+               printf("%s: fsl-mc: ERR: fsl-mc node not found in DT, err %d\n",
+                      __func__, offset);
+               return;
+       }
+
+       prop = fdt_getprop_w(blob, offset, "iommu-map", &lenp);
+       if (!prop) {
+               debug("%s: fsl-mc: ERR: missing iommu-map in fsl-mc bus node\n",
+                     __func__);
+               return;
+       }
+
+       iommu_map[0] = cpu_to_fdt32(FSL_DPAA2_STREAM_ID_START);
+       iommu_map[1] = *++prop;
+       iommu_map[2] = cpu_to_fdt32(FSL_DPAA2_STREAM_ID_START);
+       iommu_map[3] = cpu_to_fdt32(FSL_DPAA2_STREAM_ID_END -
+               FSL_DPAA2_STREAM_ID_START + 1);
+
+       fdt_setprop_inplace(blob, offset, "iommu-map",
+                           iommu_map, sizeof(iommu_map));
+}
+
 static int mc_fixup_dpc_mac_addr(void *blob, int dpmac_id,
                                 struct eth_device *eth_dev)
 {
index 7f4859b004be25c3f1e4673dbf01718afc19d515..aef40d39114bd0f372511beb7249ecf99e248703 100644 (file)
@@ -51,6 +51,7 @@ struct mc_ccsr_registers {
        u32 reg_error[];
 };
 
+void fdt_fsl_mc_fixup_iommu_map_entry(void *blob);
 int get_mc_boot_status(void);
 int get_dpl_apply_status(void);
 #ifdef CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET