18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/** 38c2ecf20Sopenharmony_ci * mpc5xxx_get_bus_frequency - Find the bus frequency for a device 48c2ecf20Sopenharmony_ci * @node: device node 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Returns bus frequency (IPS on MPC512x, IPB on MPC52xx), 78c2ecf20Sopenharmony_ci * or 0 if the bus frequency cannot be found. 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/kernel.h> 118c2ecf20Sopenharmony_ci#include <linux/of_platform.h> 128c2ecf20Sopenharmony_ci#include <linux/export.h> 138c2ecf20Sopenharmony_ci#include <asm/mpc5xxx.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciunsigned long mpc5xxx_get_bus_frequency(struct device_node *node) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci const unsigned int *p_bus_freq = NULL; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci of_node_get(node); 208c2ecf20Sopenharmony_ci while (node) { 218c2ecf20Sopenharmony_ci p_bus_freq = of_get_property(node, "bus-frequency", NULL); 228c2ecf20Sopenharmony_ci if (p_bus_freq) 238c2ecf20Sopenharmony_ci break; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci node = of_get_next_parent(node); 268c2ecf20Sopenharmony_ci } 278c2ecf20Sopenharmony_ci of_node_put(node); 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci return p_bus_freq ? *p_bus_freq : 0; 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ciEXPORT_SYMBOL(mpc5xxx_get_bus_frequency); 32