1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2de06fba6SAndy Shevchenko 3de06fba6SAndy Shevchenko #include <linux/kernel.h> 4de06fba6SAndy Shevchenko #include <linux/export.h> 5de06fba6SAndy Shevchenko #include <linux/property.h> 6de06fba6SAndy Shevchenko 7de06fba6SAndy Shevchenko #include <asm/mpc5xxx.h> 8de06fba6SAndy Shevchenko 987c441e5SWolfgang Denk /** 10de06fba6SAndy Shevchenko * mpc5xxx_fwnode_get_bus_frequency - Find the bus frequency for a firmware node 11de06fba6SAndy Shevchenko * @fwnode: firmware node 1287c441e5SWolfgang Denk * 1387c441e5SWolfgang Denk * Returns bus frequency (IPS on MPC512x, IPB on MPC52xx), 1487c441e5SWolfgang Denk * or 0 if the bus frequency cannot be found. 1587c441e5SWolfgang Denk */ mpc5xxx_fwnode_get_bus_frequency(struct fwnode_handle * fwnode)16de06fba6SAndy Shevchenkounsigned long mpc5xxx_fwnode_get_bus_frequency(struct fwnode_handle *fwnode) 1787c441e5SWolfgang Denk { 18de06fba6SAndy Shevchenko struct fwnode_handle *parent; 19de06fba6SAndy Shevchenko u32 bus_freq; 20de06fba6SAndy Shevchenko int ret; 2187c441e5SWolfgang Denk 22de06fba6SAndy Shevchenko ret = fwnode_property_read_u32(fwnode, "bus-frequency", &bus_freq); 23de06fba6SAndy Shevchenko if (!ret) 24de06fba6SAndy Shevchenko return bus_freq; 2587c441e5SWolfgang Denk 26de06fba6SAndy Shevchenko fwnode_for_each_parent_node(fwnode, parent) { 27de06fba6SAndy Shevchenko ret = fwnode_property_read_u32(parent, "bus-frequency", &bus_freq); 28*b9bbbf49SLiang He if (!ret) { 29*b9bbbf49SLiang He fwnode_handle_put(parent); 30de06fba6SAndy Shevchenko return bus_freq; 3187c441e5SWolfgang Denk } 32*b9bbbf49SLiang He } 3387c441e5SWolfgang Denk 34de06fba6SAndy Shevchenko return 0; 3587c441e5SWolfgang Denk } 36de06fba6SAndy Shevchenko EXPORT_SYMBOL(mpc5xxx_fwnode_get_bus_frequency); 37