diff options
author | jhibbits <jhibbits@FreeBSD.org> | 2016-04-15 01:45:05 +0000 |
---|---|---|
committer | jhibbits <jhibbits@FreeBSD.org> | 2016-04-15 01:45:05 +0000 |
commit | dd88d18f46fc716b661aecfa4734910d362d09e9 (patch) | |
tree | 69e37812e68d50d2b58c873b995ea1f9519c71cd /sys/dev/fdt/fdt_powerpc.c | |
parent | 32f44c79efbbb2bf4358aec4e7a6789758cbafbd (diff) | |
download | FreeBSD-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.c | 65 |
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 } }; |