Author: jhibbits
Date: Fri Apr 15 01:45:05 2016
New Revision: 298020
URL: https://svnweb.freebsd.org/changeset/base/298020

Log:
  Add fman and dpaa fixups for powerpc fdt
  
  Obtained from:        Semihalf

Modified:
  head/sys/dev/fdt/fdt_powerpc.c

Modified: head/sys/dev/fdt/fdt_powerpc.c
==============================================================================
--- head/sys/dev/fdt/fdt_powerpc.c      Fri Apr 15 01:20:14 2016        
(r298019)
+++ head/sys/dev/fdt/fdt_powerpc.c      Fri Apr 15 01:45:05 2016        
(r298020)
@@ -46,7 +46,7 @@ __FBSDID("$FreeBSD$");
 #include "fdt_common.h"
 
 static void
-fdt_fixup_busfreq(phandle_t root)
+fdt_fixup_busfreq(phandle_t root, uint32_t div)
 {
        phandle_t sb, cpus, child;
        pcell_t freq;
@@ -72,12 +72,71 @@ fdt_fixup_busfreq(phandle_t root)
            sizeof(freq)) <= 0)
                return;
 
+       if (div == 0)
+               return;
+
+       freq /= div;
+
        OF_setprop(sb, "bus-frequency", (void *)&freq, sizeof(freq));
 }
 
+static void
+fdt_fixup_busfreq_mpc85xx(phandle_t root)
+{
+
+       fdt_fixup_busfreq(root, 1);
+}
+
+static void
+fdt_fixup_busfreq_dpaa(phandle_t root)
+{
+
+       fdt_fixup_busfreq(root, 2);
+}
+
+static void
+fdt_fixup_fman(phandle_t root)
+{
+       phandle_t node;
+       pcell_t freq;
+
+       if ((node = fdt_find_compatible(root, "simple-bus", 1)) == 0)
+               return;
+
+       if (OF_getprop(node, "bus-frequency", (void *)&freq,
+           sizeof(freq)) <= 0)
+               return;
+
+       /*
+        * Set clock-frequency for FMan nodes (only on QorIQ DPAA targets).
+        * That frequency is equal to /soc node bus-frequency.
+        */
+       for (node = OF_child(node); node != 0; node = OF_peer(node)) {
+               if (fdt_is_compatible(node, "fsl,fman") == 0)
+                       continue;
+
+               if (OF_setprop(node, "clock-frequency", (void *)&freq,
+                   sizeof(freq)) == -1) {
+                       /*
+                        * XXX Shall we take some actions if no clock-frequency
+                        * property was found?
+                        */
+               }
+       }
+}
+
 struct fdt_fixup_entry fdt_fixup_table[] = {
-       { "fsl,MPC8572DS", &fdt_fixup_busfreq },
-       { "MPC8555CDS", &fdt_fixup_busfreq },
+       { "fsl,MPC8572DS", &fdt_fixup_busfreq_mpc85xx },
+       { "MPC8555CDS", &fdt_fixup_busfreq_mpc85xx },
+       { "fsl,P2020", &fdt_fixup_busfreq_mpc85xx },
+       { "fsl,P2041RDB", &fdt_fixup_busfreq_dpaa },
+       { "fsl,P2041RDB", &fdt_fixup_fman },
+       { "fsl,P3041DS", &fdt_fixup_busfreq_dpaa },
+       { "fsl,P3041DS", &fdt_fixup_fman },
+       { "fsl,P5020DS", &fdt_fixup_busfreq_dpaa },
+       { "fsl,P5020DS", &fdt_fixup_fman },
+       { "varisys,CYRUS", &fdt_fixup_busfreq_dpaa },
+       { "varisys,CYRUS", &fdt_fixup_fman },
        { NULL, NULL }
 };
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to