lib: utils: Move PLIC DT fix up codes to fdt_helper.c
authorBin Meng <bmeng.cn@gmail.com>
Tue, 17 Mar 2020 14:59:42 +0000 (07:59 -0700)
committerAnup Patel <anup@brainfault.org>
Wed, 18 Mar 2020 04:10:14 +0000 (09:40 +0530)
Now that we have a dedicated fdt_helper.c file for DT releated
helper routines, move plic_fdt_fixup() codes from plic.c to
fdt_helper.c and rename it to fdt_plic_fixup() at the same time,
to keep name consistency in the same file.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
include/sbi_utils/fdt/fdt_helper.h
include/sbi_utils/irqchip/plic.h
lib/utils/fdt/fdt_helper.c
lib/utils/irqchip/plic.c
platform/andes/ae350/platform.c
platform/ariane-fpga/platform.c
platform/qemu/virt/platform.c
platform/sifive/fu540/platform.c

index a6c3073..67251f8 100644 (file)
 #define __FDT_HELPER_H__
 
 /**
+ * Fix up the PLIC node in the device tree
+ *
+ * This routine updates the "interrupt-extended" property of the PLIC node in
+ * the device tree to hide the M-mode external interrupt from CPUs.
+ *
+ * It is recommended that platform codes call this helper in their final_init()
+ *
+ * @param fdt: device tree blob
+ * @param compat: PLIC node compatible string
+ */
+void fdt_plic_fixup(void *fdt, const char *compat);
+
+/**
  * Fix up the reserved memory node in the device tree
  *
  * This routine inserts a child node of the reserved memory node in the device
index 8d6cefa..8e190ce 100644 (file)
@@ -12,8 +12,6 @@
 
 #include <sbi/sbi_types.h>
 
-void plic_fdt_fixup(void *fdt, const char *compat);
-
 int plic_warm_irqchip_init(u32 target_hart, int m_cntx_id, int s_cntx_id);
 
 int plic_cold_irqchip_init(unsigned long base, u32 num_sources, u32 hart_count);
index d95a056..fcae968 100644 (file)
 #include <sbi/sbi_platform.h>
 #include <sbi/sbi_scratch.h>
 
+void fdt_plic_fixup(void *fdt, const char *compat)
+{
+       u32 *cells;
+       int i, cells_count;
+       int plic_off;
+
+       plic_off = fdt_node_offset_by_compatible(fdt, 0, compat);
+       if (plic_off < 0)
+               return;
+
+       cells = (u32 *)fdt_getprop(fdt, plic_off,
+                                  "interrupts-extended", &cells_count);
+       if (!cells)
+               return;
+
+       cells_count = cells_count / sizeof(u32);
+       if (!cells_count)
+               return;
+
+       for (i = 0; i < (cells_count / 2); i++) {
+               if (fdt32_to_cpu(cells[2 * i + 1]) == IRQ_M_EXT)
+                       cells[2 * i + 1] = cpu_to_fdt32(0xffffffff);
+       }
+}
+
 /**
  * We use PMP to protect OpenSBI firmware to safe-guard it from buggy S-mode
  * software, see pmp_init() in lib/sbi/sbi_hart.c. The protected memory region
index 467938c..40c4170 100644 (file)
@@ -12,8 +12,6 @@
 #include <sbi/sbi_console.h>
 #include <sbi/sbi_string.h>
 #include <sbi_utils/irqchip/plic.h>
-#include <libfdt.h>
-#include <fdt.h>
 
 #define PLIC_PRIORITY_BASE 0x0
 #define PLIC_PENDING_BASE 0x1000
@@ -47,31 +45,6 @@ void plic_set_ie(u32 cntxid, u32 word_index, u32 val)
        writel(val, plic_ie + word_index * 4);
 }
 
-void plic_fdt_fixup(void *fdt, const char *compat)
-{
-       u32 *cells;
-       int i, cells_count;
-       int plic_off;
-
-       plic_off = fdt_node_offset_by_compatible(fdt, 0, compat);
-       if (plic_off < 0)
-               return;
-
-       cells = (u32 *)fdt_getprop(fdt, plic_off,
-                                  "interrupts-extended", &cells_count);
-       if (!cells)
-               return;
-
-       cells_count = cells_count / sizeof(u32);
-       if (!cells_count)
-               return;
-
-       for (i = 0; i < (cells_count / 2); i++) {
-               if (fdt32_to_cpu(cells[2 * i + 1]) == IRQ_M_EXT)
-                       cells[2 * i + 1] = cpu_to_fdt32(0xffffffff);
-       }
-}
-
 int plic_warm_irqchip_init(u32 target_hart, int m_cntx_id, int s_cntx_id)
 {
        size_t i, ie_words = plic_num_sources / 32 + 1;
index 13c2b45..a42db9d 100644 (file)
@@ -13,6 +13,7 @@
 #include <sbi/sbi_console.h>
 #include <sbi/sbi_const.h>
 #include <sbi/sbi_platform.h>
+#include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/irqchip/plic.h>
 #include <sbi_utils/serial/uart8250.h>
 #include "platform.h"
@@ -47,7 +48,7 @@ static int ae350_final_init(bool cold_boot)
                return 0;
 
        fdt = sbi_scratch_thishart_arg1_ptr();
-       plic_fdt_fixup(fdt, "riscv,plic0");
+       fdt_plic_fixup(fdt, "riscv,plic0");
 
        return 0;
 }
index 84ffec6..742386b 100644 (file)
@@ -11,6 +11,7 @@
 #include <sbi/sbi_const.h>
 #include <sbi/sbi_hart.h>
 #include <sbi/sbi_platform.h>
+#include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/irqchip/plic.h>
 #include <sbi_utils/serial/uart8250.h>
 #include <sbi_utils/sys/clint.h>
@@ -55,7 +56,7 @@ static int ariane_final_init(bool cold_boot)
        if (!cold_boot)
                return 0;
        fdt = sbi_scratch_thishart_arg1_ptr();
-       plic_fdt_fixup(fdt, "riscv,plic0");
+       fdt_plic_fixup(fdt, "riscv,plic0");
        return 0;
 }
 
index 92f34aa..c103e85 100644 (file)
@@ -14,6 +14,7 @@
 #include <sbi/sbi_const.h>
 #include <sbi/sbi_hart.h>
 #include <sbi/sbi_platform.h>
+#include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/irqchip/plic.h>
 #include <sbi_utils/serial/uart8250.h>
 #include <sbi_utils/sys/clint.h>
@@ -46,7 +47,7 @@ static int virt_final_init(bool cold_boot)
                return 0;
 
        fdt = sbi_scratch_thishart_arg1_ptr();
-       plic_fdt_fixup(fdt, "riscv,plic0");
+       fdt_plic_fixup(fdt, "riscv,plic0");
 
        return 0;
 }
index 2eb9fa1..a10f50b 100644 (file)
@@ -14,6 +14,7 @@
 #include <sbi/sbi_console.h>
 #include <sbi/sbi_const.h>
 #include <sbi/sbi_platform.h>
+#include <sbi_utils/fdt/fdt_helper.h>
 #include <sbi_utils/irqchip/plic.h>
 #include <sbi_utils/serial/sifive-uart.h>
 #include <sbi_utils/sys/clint.h>
@@ -87,7 +88,7 @@ static void fu540_modify_dt(void *fdt)
        fdt_setprop_string(fdt, chosen_offset, "stdout-path",
                           "/soc/serial@10010000:115200");
 
-       plic_fdt_fixup(fdt, "riscv,plic0");
+       fdt_plic_fixup(fdt, "riscv,plic0");
 }
 
 static int fu540_final_init(bool cold_boot)