fsl-layerscape: dpaa: fix fsl-mc status in fdt with bootefi
authorMian Yousaf Kaukab <ykaukab@suse.de>
Tue, 18 Dec 2018 13:01:17 +0000 (14:01 +0100)
committerYork Sun <york.sun@nxp.com>
Thu, 17 Jan 2019 21:16:49 +0000 (13:16 -0800)
fsl-mc lazyapply command applies dpl from efi_exit_boot_services().
Status of fsl-mc node in working fdt is updated at this stage.
However, an efi application like grub may already have copied the fdt.
So the updates to fdt done at efi_exit_boot_services() may not be
visible to the OS. Fix it by updating fdt earlier if fsl-mc lazyapply
command is used.

Fixes: b7b8410a8f (ls2080: Exit dpaa only right before exiting U-Boot)
Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de>
Reviewed-by: York Sun <york.sun@nxp.com>
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 35a7c34c60b386de03c7168cbf68d714347ae9b7..953aab6e8839aa196c17e6b81ea3c6ab47c9f1b5 100644 (file)
@@ -658,7 +658,8 @@ void fdt_fixup_board_enet(void *fdt)
                return;
        }
 
-       if ((get_mc_boot_status() == 0) && (get_dpl_apply_status() == 0))
+       if (get_mc_boot_status() == 0 &&
+           (is_lazy_dpl_addr_valid() || get_dpl_apply_status() == 0))
                fdt_status_okay(fdt, offset);
        else
                fdt_status_fail(fdt, offset);
index ad3596a8a1874f6185c6637e2448013d17011fa9..cc1822d0f5ce4c3001bee792d952417a5d3e09b4 100644 (file)
@@ -89,7 +89,8 @@ void fdt_fixup_board_enet(void *fdt)
                return;
        }
 
-       if ((get_mc_boot_status() == 0) && (get_dpl_apply_status() == 0))
+       if (get_mc_boot_status() == 0 &&
+           (is_lazy_dpl_addr_valid() || get_dpl_apply_status() == 0))
                fdt_status_okay(fdt, offset);
        else
                fdt_status_fail(fdt, offset);
index d336ef840c5df5ae28e6b4bde4d092d08725dc19..a0a33016916452d9700c1a58b9730dd0cff6c8f8 100644 (file)
@@ -294,7 +294,8 @@ void fdt_fixup_board_enet(void *fdt)
                return;
        }
 
-       if ((get_mc_boot_status() == 0) && (get_dpl_apply_status() == 0))
+       if (get_mc_boot_status() == 0 &&
+           (is_lazy_dpl_addr_valid() || get_dpl_apply_status() == 0))
                fdt_status_okay(fdt, offset);
        else
                fdt_status_fail(fdt, offset);
index 20e1fce0fcb7d00d975b85da0b95c927076fc3e6..ce419dfcaeabf9a9c17d83ec0837a500c342fadd 100644 (file)
@@ -330,7 +330,8 @@ void fdt_fixup_board_enet(void *fdt)
                return;
        }
 
-       if ((get_mc_boot_status() == 0) && (get_dpl_apply_status() == 0))
+       if (get_mc_boot_status() == 0 &&
+           (is_lazy_dpl_addr_valid() || get_dpl_apply_status() == 0))
                fdt_status_okay(fdt, offset);
        else
                fdt_status_fail(fdt, offset);
index b245fbc681e94a7181bdbac96e3e053ecd7e95bb..a51b8a462546aa2b191dc62644e3d9dd57980020 100644 (file)
@@ -834,6 +834,11 @@ int get_dpl_apply_status(void)
        return mc_dpl_applied;
 }
 
+int is_lazy_dpl_addr_valid(void)
+{
+       return !!mc_lazy_dpl_addr;
+}
+
 /*
  * Return the MC address of private DRAM block.
  * As per MC design document, MC initial base address
index aef40d39114bd0f372511beb7249ecf99e248703..0abd797cc4609ff32a3d38ff95a7597c060fa2f0 100644 (file)
@@ -54,6 +54,7 @@ struct mc_ccsr_registers {
 void fdt_fsl_mc_fixup_iommu_map_entry(void *blob);
 int get_mc_boot_status(void);
 int get_dpl_apply_status(void);
+int is_lazy_dpl_addr_valid(void);
 #ifdef CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET
 int get_aiop_apply_status(void);
 #endif