Merge tag 'u-boot-atmel-fixes-2020.07-a' of https://gitlab.denx.de/u-boot/custodians...
[oweals/u-boot.git] / arch / powerpc / cpu / mpc85xx / fdt.c
index ced216c6806b9a304e79ba67ed5190a09480baf2..55f191f202f9a87f413e82618d95844485006a7d 100644 (file)
@@ -1,20 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright 2007-2011 Freescale Semiconductor, Inc.
  *
  * (C) Copyright 2000
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
-#include <libfdt.h>
+#include <clock_legacy.h>
+#include <env.h>
+#include <log.h>
+#include <time.h>
+#include <linux/libfdt.h>
 #include <fdt_support.h>
 #include <asm/processor.h>
 #include <linux/ctype.h>
 #include <asm/io.h>
 #include <asm/fsl_fdt.h>
 #include <asm/fsl_portals.h>
+#include <fsl_qbman.h>
 #include <hwconfig.h>
 #ifdef CONFIG_FSL_ESDHC
 #include <fsl_esdhc.h>
@@ -92,7 +96,7 @@ void ft_fixup_cpu(void *blob, u64 memory_limit)
         * Extract hwconfig from environment.
         * Search for tdm entry in hwconfig.
         */
-       ret = getenv_f("hwconfig", buffer, sizeof(buffer));
+       ret = env_get_f("hwconfig", buffer, sizeof(buffer));
        if (ret > 0)
                tdm_hwconfig_enabled = hwconfig_f("tdm", buffer);
 
@@ -180,6 +184,39 @@ static inline void ft_fixup_l3cache(void *blob, int off)
 #define ft_fixup_l3cache(x, y)
 #endif
 
+#if defined(CONFIG_L2_CACHE) || \
+       defined(CONFIG_BACKSIDE_L2_CACHE) || \
+       defined(CONFIG_SYS_FSL_QORIQ_CHASSIS2)
+static inline void ft_fixup_l2cache_compatible(void *blob, int off)
+{
+       int len;
+       struct cpu_type *cpu = identify_cpu(SVR_SOC_VER(get_svr()));
+
+       if (cpu) {
+               char buf[40];
+
+               if (isdigit(cpu->name[0])) {
+                       /* MPCxxxx, where xxxx == 4-digit number */
+                       len = sprintf(buf, "fsl,mpc%s-l2-cache-controller",
+                               cpu->name) + 1;
+               } else {
+                       /* Pxxxx or Txxxx, where xxxx == 4-digit number */
+                       len = sprintf(buf, "fsl,%c%s-l2-cache-controller",
+                       tolower(cpu->name[0]), cpu->name + 1) + 1;
+               }
+
+               /*
+                * append "cache" after the NULL character that the previous
+                * sprintf wrote.  This is how a device tree stores multiple
+                * strings in a property.
+                */
+               len += sprintf(buf + len, "cache") + 1;
+
+               fdt_setprop(blob, off, "compatible", buf, len);
+       }
+}
+#endif
+
 #if defined(CONFIG_L2_CACHE)
 /* return size in kilobytes */
 static inline u32 l2cache_size(void)
@@ -215,9 +252,8 @@ static inline u32 l2cache_size(void)
 
 static inline void ft_fixup_l2cache(void *blob)
 {
-       int len, off;
+       int off;
        u32 *ph;
-       struct cpu_type *cpu = identify_cpu(SVR_SOC_VER(get_svr()));
 
        const u32 line_size = 32;
        const u32 num_ways = 8;
@@ -243,28 +279,7 @@ static inline void ft_fixup_l2cache(void *blob)
                return ;
        }
 
-       if (cpu) {
-               char buf[40];
-
-               if (isdigit(cpu->name[0])) {
-                       /* MPCxxxx, where xxxx == 4-digit number */
-                       len = sprintf(buf, "fsl,mpc%s-l2-cache-controller",
-                               cpu->name) + 1;
-               } else {
-                       /* Pxxxx or Txxxx, where xxxx == 4-digit number */
-                       len = sprintf(buf, "fsl,%c%s-l2-cache-controller",
-                               tolower(cpu->name[0]), cpu->name + 1) + 1;
-               }
-
-               /*
-                * append "cache" after the NULL character that the previous
-                * sprintf wrote.  This is how a device tree stores multiple
-                * strings in a property.
-                */
-               len += sprintf(buf + len, "cache") + 1;
-
-               fdt_setprop(blob, off, "compatible", buf, len);
-       }
+       ft_fixup_l2cache_compatible(blob, off);
        fdt_setprop(blob, off, "cache-unified", NULL, 0);
        fdt_setprop_cell(blob, off, "cache-block-size", line_size);
        fdt_setprop_cell(blob, off, "cache-size", size);
@@ -337,7 +352,7 @@ static inline void ft_fixup_l2cache(void *blob)
                        fdt_setprop_cell(blob, l2_off, "cache-size", size);
                        fdt_setprop_cell(blob, l2_off, "cache-sets", num_sets);
                        fdt_setprop_cell(blob, l2_off, "cache-level", 2);
-                       fdt_setprop(blob, l2_off, "compatible", "cache", 6);
+                       ft_fixup_l2cache_compatible(blob, l2_off);
                }
 
                if (l3_off < 0) {
@@ -490,7 +505,7 @@ static void ft_fixup_qe_snum(void *blob)
 }
 #endif
 
-#if defined(CONFIG_PPC_P4080)
+#if defined(CONFIG_ARCH_P4080)
 static void fdt_fixup_usb(void *fdt)
 {
        ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
@@ -511,8 +526,8 @@ static void fdt_fixup_usb(void *fdt)
 #define fdt_fixup_usb(x)
 #endif
 
-#if defined(CONFIG_PPC_T2080) || defined(CONFIG_PPC_T4240) || \
-       defined(CONFIG_PPC_T4160) || defined(CONFIG_PPC_T4080)
+#if defined(CONFIG_ARCH_T2080) || defined(CONFIG_ARCH_T4240) || \
+       defined(CONFIG_ARCH_T4160)
 void fdt_fixup_dma3(void *blob)
 {
        /* the 3rd DMA is not functional if SRIO2 is chosen */
@@ -520,7 +535,7 @@ void fdt_fixup_dma3(void *blob)
        ccsr_gur_t __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
 
 #define CONFIG_SYS_ELO3_DMA3 (0xffe000000 + 0x102300)
-#if defined(CONFIG_PPC_T2080)
+#if defined(CONFIG_ARCH_T2080)
        u32 srds_prtcl_s2 = in_be32(&gur->rcwsr[4]) &
                                    FSL_CORENET2_RCWSR4_SRDS2_PRTCL;
        srds_prtcl_s2 >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;
@@ -529,8 +544,7 @@ void fdt_fixup_dma3(void *blob)
        case 0x29:
        case 0x2d:
        case 0x2e:
-#elif defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160) || \
-       defined(CONFIG_PPC_T4080)
+#elif defined(CONFIG_ARCH_T4240) || defined(CONFIG_ARCH_T4160)
        u32 srds_prtcl_s4 = in_be32(&gur->rcwsr[4]) &
                                    FSL_CORENET2_RCWSR4_SRDS4_PRTCL;
        srds_prtcl_s4 >>= FSL_CORENET2_RCWSR4_SRDS4_PRTCL_SHIFT;
@@ -556,7 +570,7 @@ void fdt_fixup_dma3(void *blob)
 #define fdt_fixup_dma3(x)
 #endif
 
-#if defined(CONFIG_PPC_T1040)
+#if defined(CONFIG_ARCH_T1040)
 static void fdt_fixup_l2_switch(void *blob)
 {
        uchar l2swaddr[6];
@@ -570,7 +584,7 @@ static void fdt_fixup_l2_switch(void *blob)
                return;
 
        /* Get MAC address for the l2switch from "l2switchaddr"*/
-       if (!eth_getenv_enetaddr("l2switchaddr", l2swaddr)) {
+       if (!eth_env_get_enetaddr("l2switchaddr", l2swaddr)) {
                printf("Warning: MAC address for l2switch not found\n");
                memset(l2swaddr, 0, sizeof(l2swaddr));
        }
@@ -602,8 +616,6 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        }
 #endif
 
-       fdt_fixup_ethernet(blob);
-
        fdt_add_enet_stashing(blob);
 
 #ifndef CONFIG_FSL_TBCLK_EXTRA_DIV
@@ -626,10 +638,6 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        do_fixup_by_prop_u32(blob, "device_type", "soc", 4,
                "bus-frequency", bd->bi_busfreq, 1);
 
-       do_fixup_by_compat_u32(blob, "fsl,pq3-localbus",
-               "bus-frequency", gd->arch.lbc_clk, 1);
-       do_fixup_by_compat_u32(blob, "fsl,elbc",
-               "bus-frequency", gd->arch.lbc_clk, 1);
 #ifdef CONFIG_QE
        ft_qe_setup(blob);
        ft_fixup_qe_snum(blob);
@@ -766,8 +774,15 @@ int ft_verify_fdt(void *fdt)
 
        /* First check the CCSR base address */
        off = fdt_node_offset_by_prop_value(fdt, -1, "device_type", "soc", 4);
-       if (off > 0)
-               addr = fdt_get_base_address(fdt, off);
+       if (off > 0) {
+               int size;
+               u32 naddr;
+               const fdt32_t *prop;
+
+               naddr = fdt_address_cells(fdt, off);
+               prop = fdt_getprop(fdt, off, "ranges", &size);
+               addr = fdt_translate_address(fdt, off, prop + naddr);
+       }
 
        if (!addr) {
                printf("Warning: could not determine base CCSR address in "