Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/mpc5xxx: Switch mpc5xxx_get_bus_frequency() to use fwnode

Switch mpc5xxx_get_bus_frequency() to use fwnode in order to help
cleaning up other parts of the kernel from OF specific code.

No functional change intended.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Chris Packham <chris.packham@alliedtelesis.co.nz> # for i2c-mpc
Acked-by: Wolfram Sang <wsa@kernel.org> # for the I2C part
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> # for mscan/mpc5xxx_can
Acked-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220507100147.5802-2-andriy.shevchenko@linux.intel.com

authored by

Andy Shevchenko and committed by
Michael Ellerman
de06fba6 6d056b72

+44 -34
+8 -1
arch/powerpc/include/asm/mpc5xxx.h
··· 11 11 #ifndef __ASM_POWERPC_MPC5xxx_H__ 12 12 #define __ASM_POWERPC_MPC5xxx_H__ 13 13 14 - extern unsigned long mpc5xxx_get_bus_frequency(struct device_node *node); 14 + #include <linux/property.h> 15 + 16 + unsigned long mpc5xxx_fwnode_get_bus_frequency(struct fwnode_handle *fwnode); 17 + 18 + static inline unsigned long mpc5xxx_get_bus_frequency(struct device *dev) 19 + { 20 + return mpc5xxx_fwnode_get_bus_frequency(dev_fwnode(dev)); 21 + } 15 22 16 23 #endif /* __ASM_POWERPC_MPC5xxx_H__ */ 17 24
+1 -1
arch/powerpc/platforms/52xx/mpc52xx_gpt.c
··· 722 722 723 723 raw_spin_lock_init(&gpt->lock); 724 724 gpt->dev = &ofdev->dev; 725 - gpt->ipb_freq = mpc5xxx_get_bus_frequency(ofdev->dev.of_node); 725 + gpt->ipb_freq = mpc5xxx_get_bus_frequency(&ofdev->dev); 726 726 gpt->regs = of_iomap(ofdev->dev.of_node, 0); 727 727 if (!gpt->regs) 728 728 return -ENOMEM;
+22 -19
arch/powerpc/sysdev/mpc5xxx_clocks.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 - /** 3 - * mpc5xxx_get_bus_frequency - Find the bus frequency for a device 4 - * @node: device node 5 - * 6 - * Returns bus frequency (IPS on MPC512x, IPB on MPC52xx), 7 - * or 0 if the bus frequency cannot be found. 8 - */ 9 2 10 3 #include <linux/kernel.h> 11 - #include <linux/of_platform.h> 12 4 #include <linux/export.h> 5 + #include <linux/property.h> 6 + 13 7 #include <asm/mpc5xxx.h> 14 8 15 - unsigned long mpc5xxx_get_bus_frequency(struct device_node *node) 9 + /** 10 + * mpc5xxx_fwnode_get_bus_frequency - Find the bus frequency for a firmware node 11 + * @fwnode: firmware node 12 + * 13 + * Returns bus frequency (IPS on MPC512x, IPB on MPC52xx), 14 + * or 0 if the bus frequency cannot be found. 15 + */ 16 + unsigned long mpc5xxx_fwnode_get_bus_frequency(struct fwnode_handle *fwnode) 16 17 { 17 - const unsigned int *p_bus_freq = NULL; 18 + struct fwnode_handle *parent; 19 + u32 bus_freq; 20 + int ret; 18 21 19 - of_node_get(node); 20 - while (node) { 21 - p_bus_freq = of_get_property(node, "bus-frequency", NULL); 22 - if (p_bus_freq) 23 - break; 22 + ret = fwnode_property_read_u32(fwnode, "bus-frequency", &bus_freq); 23 + if (!ret) 24 + return bus_freq; 24 25 25 - node = of_get_next_parent(node); 26 + fwnode_for_each_parent_node(fwnode, parent) { 27 + ret = fwnode_property_read_u32(parent, "bus-frequency", &bus_freq); 28 + if (!ret) 29 + return bus_freq; 26 30 } 27 - of_node_put(node); 28 31 29 - return p_bus_freq ? *p_bus_freq : 0; 32 + return 0; 30 33 } 31 - EXPORT_SYMBOL(mpc5xxx_get_bus_frequency); 34 + EXPORT_SYMBOL(mpc5xxx_fwnode_get_bus_frequency);
+1 -1
drivers/ata/pata_mpc52xx.c
··· 683 683 struct bcom_task *dmatsk; 684 684 685 685 /* Get ipb frequency */ 686 - ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node); 686 + ipb_freq = mpc5xxx_get_bus_frequency(&op->dev); 687 687 if (!ipb_freq) { 688 688 dev_err(&op->dev, "could not determine IPB bus frequency\n"); 689 689 return -ENODEV;
+4 -3
drivers/i2c/busses/i2c-mpc.c
··· 239 239 static int mpc_i2c_get_fdr_52xx(struct device_node *node, u32 clock, 240 240 u32 *real_clk) 241 241 { 242 + struct fwnode_handle *fwnode = of_fwnode_handle(node); 242 243 const struct mpc_i2c_divider *div = NULL; 243 244 unsigned int pvr = mfspr(SPRN_PVR); 244 245 u32 divider; ··· 247 246 248 247 if (clock == MPC_I2C_CLOCK_LEGACY) { 249 248 /* see below - default fdr = 0x3f -> div = 2048 */ 250 - *real_clk = mpc5xxx_get_bus_frequency(node) / 2048; 249 + *real_clk = mpc5xxx_fwnode_get_bus_frequency(fwnode) / 2048; 251 250 return -EINVAL; 252 251 } 253 252 254 253 /* Determine divider value */ 255 - divider = mpc5xxx_get_bus_frequency(node) / clock; 254 + divider = mpc5xxx_fwnode_get_bus_frequency(fwnode) / clock; 256 255 257 256 /* 258 257 * We want to choose an FDR/DFSR that generates an I2C bus speed that ··· 267 266 break; 268 267 } 269 268 270 - *real_clk = mpc5xxx_get_bus_frequency(node) / div->divider; 269 + *real_clk = mpc5xxx_fwnode_get_bus_frequency(fwnode) / div->divider; 271 270 return (int)div->fdr; 272 271 } 273 272
+1 -1
drivers/net/can/mscan/mpc5xxx_can.c
··· 63 63 else 64 64 *mscan_clksrc = MSCAN_CLKSRC_XTAL; 65 65 66 - freq = mpc5xxx_get_bus_frequency(ofdev->dev.of_node); 66 + freq = mpc5xxx_get_bus_frequency(&ofdev->dev); 67 67 if (!freq) 68 68 return 0; 69 69
+1 -1
drivers/net/ethernet/freescale/fec_mpc52xx.c
··· 924 924 /* Start with safe defaults for link connection */ 925 925 priv->speed = 100; 926 926 priv->duplex = DUPLEX_HALF; 927 - priv->mdio_speed = ((mpc5xxx_get_bus_frequency(np) >> 20) / 5) << 1; 927 + priv->mdio_speed = ((mpc5xxx_get_bus_frequency(&op->dev) >> 20) / 5) << 1; 928 928 929 929 /* The current speed preconfigures the speed of the MII link */ 930 930 prop = of_get_property(np, "current-speed", &prop_size);
+1 -2
drivers/net/ethernet/freescale/fec_mpc52xx_phy.c
··· 100 100 dev_set_drvdata(dev, bus); 101 101 102 102 /* set MII speed */ 103 - out_be32(&priv->regs->mii_speed, 104 - ((mpc5xxx_get_bus_frequency(of->dev.of_node) >> 20) / 5) << 1); 103 + out_be32(&priv->regs->mii_speed, ((mpc5xxx_get_bus_frequency(dev) >> 20) / 5) << 1); 105 104 106 105 err = of_mdiobus_register(bus, np); 107 106 if (err)
+2 -2
drivers/net/ethernet/freescale/fs_enet/mii-fec.c
··· 102 102 struct resource res; 103 103 struct mii_bus *new_bus; 104 104 struct fec_info *fec; 105 - int (*get_bus_freq)(struct device_node *); 105 + int (*get_bus_freq)(struct device *); 106 106 int ret = -ENOMEM, clock, speed; 107 107 108 108 match = of_match_device(fs_enet_mdio_fec_match, &ofdev->dev); ··· 136 136 } 137 137 138 138 if (get_bus_freq) { 139 - clock = get_bus_freq(ofdev->dev.of_node); 139 + clock = get_bus_freq(&ofdev->dev); 140 140 if (!clock) { 141 141 /* Use maximum divider if clock is unknown */ 142 142 dev_warn(&ofdev->dev, "could not determine IPS clock\n");
+1 -1
drivers/spi/spi-mpc52xx.c
··· 437 437 ms->irq0 = irq_of_parse_and_map(op->dev.of_node, 0); 438 438 ms->irq1 = irq_of_parse_and_map(op->dev.of_node, 1); 439 439 ms->state = mpc52xx_spi_fsmstate_idle; 440 - ms->ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node); 440 + ms->ipb_freq = mpc5xxx_get_bus_frequency(&op->dev); 441 441 ms->gpio_cs_count = of_gpio_count(op->dev.of_node); 442 442 if (ms->gpio_cs_count > 0) { 443 443 master->num_chipselect = ms->gpio_cs_count;
+2 -2
drivers/tty/serial/mpc52xx_uart.c
··· 1630 1630 return ret; 1631 1631 } 1632 1632 1633 - uartclk = mpc5xxx_get_bus_frequency(np); 1633 + uartclk = mpc5xxx_fwnode_get_bus_frequency(of_fwnode_handle(np)); 1634 1634 if (uartclk == 0) { 1635 1635 pr_debug("Could not find uart clock frequency!\n"); 1636 1636 return -EINVAL; ··· 1747 1747 /* set the uart clock to the input clock of the psc, the different 1748 1748 * prescalers are taken into account in the set_baudrate() methods 1749 1749 * of the respective chip */ 1750 - uartclk = mpc5xxx_get_bus_frequency(op->dev.of_node); 1750 + uartclk = mpc5xxx_get_bus_frequency(&op->dev); 1751 1751 if (uartclk == 0) { 1752 1752 dev_dbg(&op->dev, "Could not find uart clock frequency!\n"); 1753 1753 return -EINVAL;