[POWERPC] 4xx: Create common ppc4xx_reset_system() in ppc4xx_soc.c
This patch creates a common system reset routine for all 40x and 44x systems. Previously only a 44x routine existed. But since this system reset via the debug control register is common for 40x and 44x let's share this code for all those platforms in ppc4xx_soc.c. This patch also enables CONFIG_4xx_SOC for all 40x and 44x platforms. Tested on Kilauea (405EX) and Canyonlands (440EX). Signed-off-by: Stefan Roese <sr@denx.de> Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
This commit is contained in:
Родитель
d2477b5cc8
Коммит
93173ce272
|
@ -29,6 +29,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static struct device_node *bcsr_node;
|
static struct device_node *bcsr_node;
|
||||||
static void __iomem *bcsr_regs;
|
static void __iomem *bcsr_regs;
|
||||||
|
@ -119,5 +120,6 @@ define_machine(ep405) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Kilauea board specific routines
|
* Kilauea board specific routines
|
||||||
*
|
*
|
||||||
* Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de>
|
* Copyright 2007-2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
|
||||||
*
|
*
|
||||||
* Based on the Walnut code by
|
* Based on the Walnut code by
|
||||||
* Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
* Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||||
|
@ -20,6 +20,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static __initdata struct of_device_id kilauea_of_bus[] = {
|
static __initdata struct of_device_id kilauea_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -54,5 +55,6 @@ define_machine(kilauea) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static __initdata struct of_device_id makalu_of_bus[] = {
|
static __initdata struct of_device_id makalu_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -54,5 +55,6 @@ define_machine(makalu) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <asm/prom.h>
|
#include <asm/prom.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/xilinx_intc.h>
|
#include <asm/xilinx_intc.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static struct of_device_id xilinx_of_bus_ids[] __initdata = {
|
static struct of_device_id xilinx_of_bus_ids[] __initdata = {
|
||||||
{ .compatible = "xlnx,plb-v46-1.00.a", },
|
{ .compatible = "xlnx,plb-v46-1.00.a", },
|
||||||
|
@ -48,5 +49,6 @@ define_machine(virtex) {
|
||||||
.probe = virtex_probe,
|
.probe = virtex_probe,
|
||||||
.init_IRQ = xilinx_intc_init_tree,
|
.init_IRQ = xilinx_intc_init_tree,
|
||||||
.get_irq = xilinx_intc_get_irq,
|
.get_irq = xilinx_intc_get_irq,
|
||||||
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static __initdata struct of_device_id walnut_of_bus[] = {
|
static __initdata struct of_device_id walnut_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb3", },
|
{ .compatible = "ibm,plb3", },
|
||||||
|
@ -61,5 +62,6 @@ define_machine(walnut) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.restart = ppc4xx_reset_system,
|
||||||
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,5 @@
|
||||||
|
|
||||||
extern u8 as1_readb(volatile u8 __iomem *addr);
|
extern u8 as1_readb(volatile u8 __iomem *addr);
|
||||||
extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
|
extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
|
||||||
extern void ppc44x_reset_system(char *cmd);
|
|
||||||
|
|
||||||
#endif /* __POWERPC_PLATFORMS_44X_44X_H */
|
#endif /* __POWERPC_PLATFORMS_44X_44X_H */
|
||||||
|
|
|
@ -129,7 +129,6 @@ config 440GP
|
||||||
|
|
||||||
config 440GX
|
config 440GX
|
||||||
bool
|
bool
|
||||||
select 4xx_SOC
|
|
||||||
select IBM_NEW_EMAC_EMAC4
|
select IBM_NEW_EMAC_EMAC4
|
||||||
select IBM_NEW_EMAC_RGMII
|
select IBM_NEW_EMAC_RGMII
|
||||||
select IBM_NEW_EMAC_ZMII #test only
|
select IBM_NEW_EMAC_ZMII #test only
|
||||||
|
|
|
@ -22,8 +22,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
static __initdata struct of_device_id bamboo_of_bus[] = {
|
static __initdata struct of_device_id bamboo_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -53,11 +52,11 @@ static int __init bamboo_probe(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
define_machine(bamboo) {
|
define_machine(bamboo) {
|
||||||
.name = "Bamboo",
|
.name = "Bamboo",
|
||||||
.probe = bamboo_probe,
|
.probe = bamboo_probe,
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,8 +23,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
static __initdata struct of_device_id canyonlands_of_bus[] = {
|
static __initdata struct of_device_id canyonlands_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -59,6 +58,6 @@ define_machine(canyonlands) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,8 +26,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
static __initdata struct of_device_id ebony_of_bus[] = {
|
static __initdata struct of_device_id ebony_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -66,6 +65,6 @@ define_machine(ebony) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,8 +22,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
static __initdata struct of_device_id katmai_of_bus[] = {
|
static __initdata struct of_device_id katmai_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -58,6 +57,6 @@ define_machine(katmai) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -44,14 +44,3 @@ _GLOBAL(as1_writeb)
|
||||||
sync
|
sync
|
||||||
isync
|
isync
|
||||||
blr
|
blr
|
||||||
|
|
||||||
/*
|
|
||||||
* void ppc44x_reset_system(char *cmd)
|
|
||||||
*
|
|
||||||
* At present, this routine just applies a system reset.
|
|
||||||
*/
|
|
||||||
_GLOBAL(ppc44x_reset_system)
|
|
||||||
mfspr r13,SPRN_DBCR0
|
|
||||||
oris r13,r13,DBCR0_RST_SYSTEM@h
|
|
||||||
mtspr SPRN_DBCR0,r13
|
|
||||||
b . /* Just in case the reset doesn't work */
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
#include "44x.h"
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static __initdata struct of_device_id rainier_of_bus[] = {
|
static __initdata struct of_device_id rainier_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -57,6 +57,6 @@ define_machine(rainier) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
|
||||||
#include "44x.h"
|
#include <asm/ppc4xx.h>
|
||||||
|
|
||||||
static __initdata struct of_device_id sequoia_of_bus[] = {
|
static __initdata struct of_device_id sequoia_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -58,6 +58,6 @@ define_machine(sequoia) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,8 +29,7 @@
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
#include <asm/pci-bridge.h>
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
static __initdata struct of_device_id taishan_of_bus[] = {
|
static __initdata struct of_device_id taishan_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -68,6 +67,6 @@ define_machine(taishan) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,9 +18,7 @@
|
||||||
#include <asm/udbg.h>
|
#include <asm/udbg.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/uic.h>
|
#include <asm/uic.h>
|
||||||
|
#include <asm/ppc4xx.h>
|
||||||
#include "44x.h"
|
|
||||||
|
|
||||||
|
|
||||||
static __initdata struct of_device_id warp_of_bus[] = {
|
static __initdata struct of_device_id warp_of_bus[] = {
|
||||||
{ .compatible = "ibm,plb4", },
|
{ .compatible = "ibm,plb4", },
|
||||||
|
@ -49,7 +47,7 @@ define_machine(warp) {
|
||||||
.progress = udbg_progress,
|
.progress = udbg_progress,
|
||||||
.init_IRQ = uic_init_tree,
|
.init_IRQ = uic_init_tree,
|
||||||
.get_irq = uic_get_irq,
|
.get_irq = uic_get_irq,
|
||||||
.restart = ppc44x_reset_system,
|
.restart = ppc4xx_reset_system,
|
||||||
.calibrate_decr = generic_calibrate_decr,
|
.calibrate_decr = generic_calibrate_decr,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,11 +41,13 @@ config 40x
|
||||||
bool "AMCC 40x"
|
bool "AMCC 40x"
|
||||||
select PPC_DCR_NATIVE
|
select PPC_DCR_NATIVE
|
||||||
select PPC_UDBG_16550
|
select PPC_UDBG_16550
|
||||||
|
select 4xx_SOC
|
||||||
|
|
||||||
config 44x
|
config 44x
|
||||||
bool "AMCC 44x"
|
bool "AMCC 44x"
|
||||||
select PPC_DCR_NATIVE
|
select PPC_DCR_NATIVE
|
||||||
select PPC_UDBG_16550
|
select PPC_UDBG_16550
|
||||||
|
select 4xx_SOC
|
||||||
|
|
||||||
config E200
|
config E200
|
||||||
bool "Freescale e200"
|
bool "Freescale e200"
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include <asm/dcr.h>
|
#include <asm/dcr.h>
|
||||||
#include <asm/dcr-regs.h>
|
#include <asm/dcr-regs.h>
|
||||||
|
#include <asm/reg.h>
|
||||||
|
|
||||||
static u32 dcrbase_l2c;
|
static u32 dcrbase_l2c;
|
||||||
|
|
||||||
|
@ -187,3 +188,13 @@ static int __init ppc4xx_l2c_probe(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
arch_initcall(ppc4xx_l2c_probe);
|
arch_initcall(ppc4xx_l2c_probe);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* At present, this routine just applies a system reset.
|
||||||
|
*/
|
||||||
|
void ppc4xx_reset_system(char *cmd)
|
||||||
|
{
|
||||||
|
mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_RST_SYSTEM);
|
||||||
|
while (1)
|
||||||
|
; /* Just in case the reset doesn't work */
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* PPC4xx Prototypes and definitions
|
||||||
|
*
|
||||||
|
* Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_POWERPC_PPC4xx_H__
|
||||||
|
#define __ASM_POWERPC_PPC4xx_H__
|
||||||
|
|
||||||
|
extern void ppc4xx_reset_system(char *cmd);
|
||||||
|
|
||||||
|
#endif /* __ASM_POWERPC_PPC4xx_H__ */
|
Загрузка…
Ссылка в новой задаче