mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 17:43:59 +00:00
powerpc/86xx: Consolidate common platform code
Signed-off-by: Alessio Igor Bogani <alessio.bogani@elettra.eu> Signed-off-by: Scott Wood <oss@buserror.net>
This commit is contained in:
parent
737b01fca3
commit
4f9d6e95bc
@ -2,7 +2,7 @@
|
||||
# Makefile for the PowerPC 86xx linux kernel.
|
||||
#
|
||||
|
||||
obj-y := pic.o
|
||||
obj-y := pic.o common.o
|
||||
obj-$(CONFIG_SMP) += mpc86xx_smp.o
|
||||
obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o
|
||||
obj-$(CONFIG_SBC8641D) += sbc8641d.o
|
||||
|
43
arch/powerpc/platforms/86xx/common.c
Normal file
43
arch/powerpc/platforms/86xx/common.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Routines common to most mpc86xx-based boards.
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/synch.h>
|
||||
|
||||
#include "mpc86xx.h"
|
||||
|
||||
static const struct of_device_id mpc86xx_common_ids[] __initconst = {
|
||||
{ .type = "soc", },
|
||||
{ .compatible = "soc", },
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .name = "localbus", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
int __init mpc86xx_common_publish_devices(void)
|
||||
{
|
||||
return of_platform_bus_probe(NULL, mpc86xx_common_ids, NULL);
|
||||
}
|
||||
|
||||
long __init mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
isync();
|
||||
|
||||
return 0;
|
||||
}
|
@ -197,37 +197,7 @@ static int __init gef_ppc9a_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_bus_ids[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
printk(KERN_DEBUG "Probe platform devices\n");
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
machine_arch_initcall(gef_ppc9a, declare_of_platform_devices);
|
||||
machine_arch_initcall(gef_ppc9a, mpc86xx_common_publish_devices);
|
||||
|
||||
define_machine(gef_ppc9a) {
|
||||
.name = "GE PPC9A",
|
||||
|
@ -184,37 +184,7 @@ static int __init gef_sbc310_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_bus_ids[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
printk(KERN_DEBUG "Probe platform devices\n");
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
machine_arch_initcall(gef_sbc310, declare_of_platform_devices);
|
||||
machine_arch_initcall(gef_sbc310, mpc86xx_common_publish_devices);
|
||||
|
||||
define_machine(gef_sbc310) {
|
||||
.name = "GE SBC310",
|
||||
|
@ -174,37 +174,7 @@ static int __init gef_sbc610_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_bus_ids[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
printk(KERN_DEBUG "Probe platform devices\n");
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
machine_arch_initcall(gef_sbc610, declare_of_platform_devices);
|
||||
machine_arch_initcall(gef_sbc610, mpc86xx_common_publish_devices);
|
||||
|
||||
define_machine(gef_sbc610) {
|
||||
.name = "GE SBC610",
|
||||
|
@ -88,12 +88,10 @@ static inline void mpc8610_suspend_init(void) { }
|
||||
static const struct of_device_id mpc8610_ids[] __initconst = {
|
||||
{ .compatible = "fsl,mpc8610-immr", },
|
||||
{ .compatible = "fsl,mpc8610-guts", },
|
||||
{ .compatible = "simple-bus", },
|
||||
/* So that the DMA channel nodes can be probed individually: */
|
||||
{ .compatible = "fsl,eloplus-dma", },
|
||||
/* PCI controllers */
|
||||
{ .compatible = "fsl,mpc8610-pci", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{}
|
||||
};
|
||||
|
||||
@ -105,6 +103,8 @@ static int __init mpc8610_declare_of_platform_devices(void)
|
||||
/* Enable wakeup on PIXIS' event IRQ. */
|
||||
mpc8610_suspend_init();
|
||||
|
||||
mpc86xx_common_publish_devices();
|
||||
|
||||
/* Without this call, the SSI device driver won't get probed. */
|
||||
of_platform_bus_probe(NULL, mpc8610_ids, NULL);
|
||||
|
||||
@ -327,22 +327,6 @@ static int __init mpc86xx_hpcd_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
define_machine(mpc86xx_hpcd) {
|
||||
.name = "MPC86xx HPCD",
|
||||
.probe = mpc86xx_hpcd_probe,
|
||||
|
@ -17,5 +17,7 @@
|
||||
|
||||
extern void mpc86xx_smp_init(void);
|
||||
extern void mpc86xx_init_irq(void);
|
||||
extern long mpc86xx_time_init(void);
|
||||
extern int mpc86xx_common_publish_devices(void);
|
||||
|
||||
#endif /* __MPC86XX_H__ */
|
||||
|
@ -110,33 +110,14 @@ static int __init mpc86xx_hpcn_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init
|
||||
mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_bus_ids[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "fsl,srio", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
mpc86xx_common_publish_devices();
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
|
||||
return 0;
|
||||
|
@ -75,37 +75,7 @@ static int __init sbc8641_probe(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long __init
|
||||
mpc86xx_time_init(void)
|
||||
{
|
||||
unsigned int temp;
|
||||
|
||||
/* Set the time base to zero */
|
||||
mtspr(SPRN_TBWL, 0);
|
||||
mtspr(SPRN_TBWU, 0);
|
||||
|
||||
temp = mfspr(SPRN_HID0);
|
||||
temp |= HID0_TBEN;
|
||||
mtspr(SPRN_HID0, temp);
|
||||
asm volatile("isync");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id of_bus_ids[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "gianfar", },
|
||||
{ .compatible = "fsl,mpc8641-pcie", },
|
||||
{},
|
||||
};
|
||||
|
||||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
machine_arch_initcall(sbc8641, declare_of_platform_devices);
|
||||
machine_arch_initcall(sbc8641, mpc86xx_common_publish_devices);
|
||||
|
||||
define_machine(sbc8641) {
|
||||
.name = "SBC8641D",
|
||||
|
Loading…
x
Reference in New Issue
Block a user