#ifndef __ASSEMBLY__
 #include <asm/types.h>
 #include <asm/prom.h>
+#include <asm/mpc5xxx.h>
 #endif /* __ASSEMBLY__ */
 
 #include <linux/suspend.h>
 #ifndef __ASSEMBLY__
 
 /* mpc52xx_common.c */
-extern unsigned int mpc52xx_find_ipb_freq(struct device_node *node);
 extern void mpc5200_setup_xlb_arbiter(void);
 extern void mpc52xx_declare_of_platform_devices(void);
 extern void mpc52xx_map_common_devices(void);
 
  * Author: John Rigby, <jrigby@freescale.com>, Friday Apr 13 2007
  *
  * Description:
- * MPC5121 Prototypes and definitions
+ * MPC5xxx Prototypes and definitions
  *
  * This is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by
  *
  */
 
-#ifndef __ASM_POWERPC_MPC512x_H__
-#define __ASM_POWERPC_MPC512x_H__
+#ifndef __ASM_POWERPC_MPC5xxx_H__
+#define __ASM_POWERPC_MPC5xxx_H__
 
-extern unsigned long mpc512x_find_ips_freq(struct device_node *node);
+extern unsigned long mpc5xxx_get_bus_frequency(struct device_node *node);
 
-#endif /* __ASM_POWERPC_MPC512x_H__ */
+#endif /* __ASM_POWERPC_MPC5xxx_H__ */
 
 
 #include <linux/io.h>
 
 #include <linux/of_platform.h>
-#include <asm/mpc512x.h>
+#include <asm/mpc5xxx.h>
 #include <asm/clk_interface.h>
 
 #undef CLK_DEBUG
 
 
 #ifndef __MPC512X_H__
 #define __MPC512X_H__
-extern unsigned long mpc512x_find_ips_freq(struct device_node *node);
 extern void __init mpc512x_init_IRQ(void);
 void __init mpc512x_declare_of_platform_devices(void);
 #endif                         /* __MPC512X_H__ */
 
 
 #include "mpc512x.h"
 
-unsigned long
-mpc512x_find_ips_freq(struct device_node *node)
-{
-       struct device_node *np;
-       const unsigned int *p_ips_freq = NULL;
-
-       of_node_get(node);
-       while (node) {
-               p_ips_freq = of_get_property(node, "bus-frequency", NULL);
-               if (p_ips_freq)
-                       break;
-
-               np = of_get_parent(node);
-               of_node_put(node);
-               node = np;
-       }
-       if (node)
-               of_node_put(node);
-
-       return p_ips_freq ? *p_ips_freq : 0;
-}
-EXPORT_SYMBOL(mpc512x_find_ips_freq);
-
 void __init mpc512x_init_IRQ(void)
 {
        struct device_node *np;
 
 static struct mpc52xx_gpt __iomem *mpc52xx_wdt;
 static struct mpc52xx_cdm __iomem *mpc52xx_cdm;
 
-/**
- *     mpc52xx_find_ipb_freq - Find the IPB bus frequency for a device
- *     @node:  device node
- *
- *     Returns IPB bus frequency, or 0 if the bus frequency cannot be found.
- */
-unsigned int
-mpc52xx_find_ipb_freq(struct device_node *node)
-{
-       struct device_node *np;
-       const unsigned int *p_ipb_freq = NULL;
-
-       of_node_get(node);
-       while (node) {
-               p_ipb_freq = of_get_property(node, "bus-frequency", NULL);
-               if (p_ipb_freq)
-                       break;
-
-               np = of_get_parent(node);
-               of_node_put(node);
-               node = np;
-       }
-       if (node)
-               of_node_put(node);
-
-       return p_ipb_freq ? *p_ipb_freq : 0;
-}
-EXPORT_SYMBOL(mpc52xx_find_ipb_freq);
-
-
 /*
  * Configure the XLB arbiter settings to match what Linux expects.
  */
        if (!mpc52xx_cdm)
                return 0;
 
-       freq = mpc52xx_find_ipb_freq(node);
+       freq = mpc5xxx_get_bus_frequency(node);
        if (!freq)
                return 0;
 
 
 obj-$(CONFIG_8xx)              += mpc8xx_pic.o cpm1.o
 obj-$(CONFIG_UCODE_PATCH)      += micropatch.o
 
+obj-$(CONFIG_PPC_MPC512x)      += mpc5xxx_clocks.o
+obj-$(CONFIG_PPC_MPC52xx)      += mpc5xxx_clocks.o
+
 ifeq ($(CONFIG_SUSPEND),y)
 obj-$(CONFIG_6xx)              += 6xx-suspend.o
 endif
 
--- /dev/null
+/**
+ *     mpc5xxx_get_bus_frequency - Find the bus frequency for a device
+ *     @node:  device node
+ *
+ *     Returns bus frequency (IPS on MPC512x, IPB on MPC52xx),
+ *     or 0 if the bus frequency cannot be found.
+ */
+
+#include <linux/kernel.h>
+#include <linux/of_platform.h>
+
+unsigned int
+mpc5xxx_get_bus_frequency(struct device_node *node)
+{
+       struct device_node *np;
+       const unsigned int *p_bus_freq = NULL;
+
+       of_node_get(node);
+       while (node) {
+               p_bus_freq = of_get_property(node, "bus-frequency", NULL);
+               if (p_bus_freq)
+                       break;
+
+               np = of_get_parent(node);
+               of_node_put(node);
+               node = np;
+       }
+       if (node)
+               of_node_put(node);
+
+       return p_bus_freq ? *p_bus_freq : 0;
+}
+EXPORT_SYMBOL(mpc5xxx_get_bus_frequency);
 
        struct bcom_task *dmatsk = NULL;
 
        /* Get ipb frequency */
-       ipb_freq = mpc52xx_find_ipb_freq(op->node);
+       ipb_freq = mpc5xxx_get_bus_frequency(op->node);
        if (!ipb_freq) {
                dev_err(&op->dev, "could not determine IPB bus frequency\n");
                return -ENODEV;
 
                return -EINVAL;
 
        /* Determine divider value */
-       divider = mpc52xx_find_ipb_freq(node) / clock;
+       divider = mpc5xxx_get_bus_frequency(node) / clock;
 
        /*
         * We want to choose an FDR/DFSR that generates an I2C bus speed that
 
        priv->phy_addr = FEC5200_PHYADDR_NONE;
        priv->speed = 100;
        priv->duplex = DUPLEX_HALF;
-       priv->phy_speed = ((mpc52xx_find_ipb_freq(op->node) >> 20) / 5) << 1;
+       priv->phy_speed = ((mpc5xxx_get_bus_frequency(op->node) >> 20) / 5) << 1;
 
        /* the 7-wire property means don't use MII mode */
        if (of_find_property(op->node, "fsl,7-wire-mode", NULL))
 
 
        /* set MII speed */
        out_be32(&priv->regs->mii_speed,
-               ((mpc52xx_find_ipb_freq(of->node) >> 20) / 5) << 1);
+               ((mpc5xxx_get_bus_frequency(of->node) >> 20) / 5) << 1);
 
        err = mdiobus_register(bus);
        if (err)
 
 #include <linux/of_platform.h>
 
 #include <asm/mpc52xx.h>
-#include <asm/mpc512x.h>
 #include <asm/mpc52xx_psc.h>
 
 #if defined(CONFIG_SERIAL_MPC52xx_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
         * but the generic serial code assumes 16
         * so return ipb freq / 2
         */
-       return mpc52xx_find_ipb_freq(p) / 2;
+       return mpc5xxx_get_bus_frequency(p) / 2;
 }
 
 static struct psc_ops mpc52xx_psc_ops = {
 
 static unsigned long mpc512x_getuartclk(void *p)
 {
-       return mpc512x_find_ips_freq(p);
+       return mpc5xxx_get_bus_frequency(p);
 }
 
 static struct psc_ops mpc512x_psc_ops = {
 
        if (!wdt)
                return -ENOMEM;
 
-       wdt->ipb_freq = mpc52xx_find_ipb_freq(op->node);
+       wdt->ipb_freq = mpc5xxx_get_bus_frequency(op->node);
 
        err = of_address_to_resource(op->node, 0, &wdt->mem);
        if (err)