diff options
Diffstat (limited to 'arch/powerpc/sysdev/mpc5xxx_clocks.c')
-rw-r--r-- | arch/powerpc/sysdev/mpc5xxx_clocks.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/mpc5xxx_clocks.c b/arch/powerpc/sysdev/mpc5xxx_clocks.c new file mode 100644 index 000000000..58cee28e2 --- /dev/null +++ b/arch/powerpc/sysdev/mpc5xxx_clocks.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/kernel.h> +#include <linux/export.h> +#include <linux/property.h> + +#include <asm/mpc5xxx.h> + +/** + * mpc5xxx_fwnode_get_bus_frequency - Find the bus frequency for a firmware node + * @fwnode: firmware node + * + * Returns bus frequency (IPS on MPC512x, IPB on MPC52xx), + * or 0 if the bus frequency cannot be found. + */ +unsigned long mpc5xxx_fwnode_get_bus_frequency(struct fwnode_handle *fwnode) +{ + struct fwnode_handle *parent; + u32 bus_freq; + int ret; + + ret = fwnode_property_read_u32(fwnode, "bus-frequency", &bus_freq); + if (!ret) + return bus_freq; + + fwnode_for_each_parent_node(fwnode, parent) { + ret = fwnode_property_read_u32(parent, "bus-frequency", &bus_freq); + if (!ret) { + fwnode_handle_put(parent); + return bus_freq; + } + } + + return 0; +} +EXPORT_SYMBOL(mpc5xxx_fwnode_get_bus_frequency); |