summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdt/fdt_powerpc.c
diff options
context:
space:
mode:
authorjhibbits <jhibbits@FreeBSD.org>2016-04-15 01:45:05 +0000
committerjhibbits <jhibbits@FreeBSD.org>2016-04-15 01:45:05 +0000
commitdd88d18f46fc716b661aecfa4734910d362d09e9 (patch)
tree69e37812e68d50d2b58c873b995ea1f9519c71cd /sys/dev/fdt/fdt_powerpc.c
parent32f44c79efbbb2bf4358aec4e7a6789758cbafbd (diff)
downloadFreeBSD-src-dd88d18f46fc716b661aecfa4734910d362d09e9.zip
FreeBSD-src-dd88d18f46fc716b661aecfa4734910d362d09e9.tar.gz
Add fman and dpaa fixups for powerpc fdt
Obtained from: Semihalf
Diffstat (limited to 'sys/dev/fdt/fdt_powerpc.c')
-rw-r--r--sys/dev/fdt/fdt_powerpc.c65
1 files changed, 62 insertions, 3 deletions
diff --git a/sys/dev/fdt/fdt_powerpc.c b/sys/dev/fdt/fdt_powerpc.c
index f408d0a..80cfa4b 100644
--- a/sys/dev/fdt/fdt_powerpc.c
+++ b/sys/dev/fdt/fdt_powerpc.c
@@ -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 }
};
OpenPOWER on IntegriCloud