]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/cpu/armv8/fsl-layerscape/fdt.c
Merge branch 'rmobile-mx' of git://git.denx.de/u-boot-sh
[u-boot] / arch / arm / cpu / armv8 / fsl-layerscape / fdt.c
index 762a95b945c131adc5375fa601def93f109fa49f..cae59da803b56c39d701a03ae58be0cf06c5ee37 100644 (file)
@@ -79,13 +79,13 @@ remove_psci_node:
                puts("couldn't find /cpus node\n");
                return;
        }
-       of_bus_default_count_cells(blob, off, &addr_cells, NULL);
+       fdt_support_default_count_cells(blob, off, &addr_cells, NULL);
 
        off = fdt_node_offset_by_prop_value(blob, -1, "device_type", "cpu", 4);
        while (off != -FDT_ERR_NOTFOUND) {
                reg = (fdt32_t *)fdt_getprop(blob, off, "reg", 0);
                if (reg) {
-                       core_id = of_read_number(reg, addr_cells);
+                       core_id = fdt_read_number(reg, addr_cells);
                        if (core_id  == 0 || (is_core_online(core_id))) {
                                val = spin_tbl_addr;
                                val += id_to_core(core_id) *
@@ -345,11 +345,38 @@ static void fdt_fixup_msi(void *blob)
 }
 #endif
 
+#ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
+/* Remove JR node used by SEC firmware */
+void fdt_fixup_remove_jr(void *blob)
+{
+       int jr_node, addr_cells, len;
+       int crypto_node = fdt_path_offset(blob, "crypto");
+       u64 jr_offset, used_jr;
+       fdt32_t *reg;
+
+       used_jr = sec_firmware_used_jobring_offset();
+       fdt_support_default_count_cells(blob, crypto_node, &addr_cells, NULL);
+
+       jr_node = fdt_node_offset_by_compatible(blob, crypto_node,
+                                               "fsl,sec-v4.0-job-ring");
+
+       while (jr_node != -FDT_ERR_NOTFOUND) {
+               reg = (fdt32_t *)fdt_getprop(blob, jr_node, "reg", &len);
+               jr_offset = fdt_read_number(reg, addr_cells);
+               if (jr_offset == used_jr) {
+                       fdt_del_node(blob, jr_node);
+                       break;
+               }
+               jr_node = fdt_node_offset_by_compatible(blob, jr_node,
+                                                       "fsl,sec-v4.0-job-ring");
+       }
+}
+#endif
+
 void ft_cpu_setup(void *blob, bd_t *bd)
 {
-#ifdef CONFIG_FSL_LSCH2
        struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
-       unsigned int svr = in_be32(&gur->svr);
+       unsigned int svr = gur_in32(&gur->svr);
 
        /* delete crypto node if not on an E-processor */
        if (!IS_E_PROCESSOR(svr))
@@ -358,11 +385,15 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        else {
                ccsr_sec_t __iomem *sec;
 
+#ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
+               if (fdt_fixup_kaslr(blob))
+                       fdt_fixup_remove_jr(blob);
+#endif
+
                sec = (void __iomem *)CONFIG_SYS_FSL_SEC_ADDR;
                fdt_fixup_crypto_node(blob, sec_in32(&sec->secvid_ms));
        }
 #endif
-#endif
 
 #ifdef CONFIG_MP
        ft_fixup_cpu(blob);
@@ -373,8 +404,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
                               "clock-frequency", CONFIG_SYS_NS16550_CLK, 1);
 #endif
 
-       do_fixup_by_compat_u32(blob, "fixed-clock",
-                              "clock-frequency", CONFIG_SYS_CLK_FREQ, 1);
+       do_fixup_by_path_u32(blob, "/sysclk", "clock-frequency",
+                            CONFIG_SYS_CLK_FREQ, 1);
 
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
@@ -387,7 +418,7 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 #ifdef CONFIG_SYS_DPAA_FMAN
        fdt_fixup_fman_firmware(blob);
 #endif
-#ifndef CONFIG_LS1012A
+#ifndef CONFIG_ARCH_LS1012A
        fsl_fdt_disable_usb(blob);
 #endif
 #ifdef CONFIG_HAS_FEATURE_GIC64K_ALIGN