]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/powerpc/cpu/mpc85xx/fdt.c
mx6sxsabresd: Add Ethernet support
[karo-tx-uboot.git] / arch / powerpc / cpu / mpc85xx / fdt.c
index 85dfa5bc01e592d502ae27d9afe66bfc0f2cb73f..3665ec6b6c8fb7a93f804ec808d3075c3db6c231 100644 (file)
@@ -612,6 +612,51 @@ 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)
+void fdt_fixup_dma3(void *blob)
+{
+       /* the 3rd DMA is not functional if SRIO2 is chosen */
+       int nodeoff;
+       ccsr_gur_t __iomem *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
+
+#define CONFIG_SYS_ELO3_DMA3 (0xffe000000 + 0x102300)
+#if defined(CONFIG_PPC_T2080)
+       u32 srds_prtcl_s2 = in_be32(&gur->rcwsr[4]) &
+                                   FSL_CORENET2_RCWSR4_SRDS2_PRTCL;
+       srds_prtcl_s2 >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT;
+
+       switch (srds_prtcl_s2) {
+       case 0x29:
+       case 0x2d:
+       case 0x2e:
+#elif defined(CONFIG_PPC_T4240) || defined(CONFIG_PPC_T4160) || \
+       defined(CONFIG_PPC_T4080)
+       u32 srds_prtcl_s4 = in_be32(&gur->rcwsr[4]) &
+                                   FSL_CORENET2_RCWSR4_SRDS4_PRTCL;
+       srds_prtcl_s4 >>= FSL_CORENET2_RCWSR4_SRDS4_PRTCL_SHIFT;
+
+       switch (srds_prtcl_s4) {
+       case 6:
+       case 8:
+       case 14:
+       case 16:
+#endif
+               nodeoff = fdt_node_offset_by_compat_reg(blob, "fsl,elo3-dma",
+                                                       CONFIG_SYS_ELO3_DMA3);
+               if (nodeoff > 0)
+                       fdt_status_disabled(blob, nodeoff);
+               else
+                       printf("WARNING: unable to disable dma3\n");
+               break;
+       default:
+               break;
+       }
+}
+#else
+#define fdt_fixup_dma3(x)
+#endif
+
 #if defined(CONFIG_PPC_T1040)
 static void fdt_fixup_l2_switch(void *blob)
 {
@@ -778,6 +823,8 @@ void ft_cpu_setup(void *blob, bd_t *bd)
        fdt_fixup_usb(blob);
 
        fdt_fixup_l2_switch(blob);
+
+       fdt_fixup_dma3(blob);
 }
 
 /*