Skip to content

Commit

Permalink
[PATCH] powerpc: Cleanup MPC83xx platform support
Browse files Browse the repository at this point in the history
Moved some code around so its usable by more systems than just
the MPC834x SYS.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Kumar Gala authored and Paul Mackerras committed Feb 7, 2006
1 parent 4b10cfd commit 30f5933
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 62 deletions.
4 changes: 3 additions & 1 deletion arch/powerpc/platforms/83xx/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#
# Makefile for the PowerPC 83xx linux kernel.
#
obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o pci.o
obj-y := misc.o
obj-$(CONFIG_PCI) += pci.o
obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o
55 changes: 55 additions & 0 deletions arch/powerpc/platforms/83xx/misc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* misc setup functions for MPC83xx
*
* Maintainer: Kumar Gala <galak@kernel.crashing.org>
*
* This program 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.
*/

#include <linux/config.h>
#include <linux/stddef.h>
#include <linux/kernel.h>

#include <asm/io.h>
#include <asm/hw_irq.h>
#include <sysdev/fsl_soc.h>

#include "mpc83xx.h"

void mpc83xx_restart(char *cmd)
{
#define RST_OFFSET 0x00000900
#define RST_PROT_REG 0x00000018
#define RST_CTRL_REG 0x0000001c
__be32 __iomem *reg;

/* map reset register space */
reg = ioremap(get_immrbase() + 0x900, 0xff);

local_irq_disable();

/* enable software reset "RSTE" */
out_be32(reg + (RST_PROT_REG >> 2), 0x52535445);

/* set software hard reset */
out_be32(reg + (RST_CTRL_REG >> 2), 0x52535445);
for (;;) ;
}

long __init mpc83xx_time_init(void)
{
#define SPCR_OFFSET 0x00000110
#define SPCR_TBEN 0x00400000
__be32 __iomem *spcr = ioremap(get_immrbase() + SPCR_OFFSET, 4);
__be32 tmp;

tmp = in_be32(spcr);
out_be32(spcr, tmp | SPCR_TBEN);

iounmap(spcr);

return 0;
}
58 changes: 0 additions & 58 deletions arch/powerpc/platforms/83xx/mpc834x_sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,15 @@
#include <linux/delay.h>
#include <linux/seq_file.h>
#include <linux/root_dev.h>
#include <linux/module.h>
#include <linux/fsl_devices.h>

#include <asm/system.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/atomic.h>
#include <asm/time.h>
#include <asm/io.h>
#include <asm/machdep.h>
#include <asm/ipic.h>
#include <asm/bootinfo.h>
#include <asm/pci-bridge.h>
#include <asm/mpc83xx.h>
#include <asm/irq.h>
#include <mm/mmu_decl.h>
#include <asm/prom.h>
#include <asm/udbg.h>
#include <sysdev/fsl_soc.h>
Expand All @@ -52,8 +45,6 @@ unsigned long isa_mem_base = 0;
#endif

#ifdef CONFIG_PCI
extern int mpc83xx_pci2_busno;

static int
mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
{
Expand All @@ -78,17 +69,6 @@ mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
const long min_idsel = 0x11, max_idsel = 0x20, irqs_per_slot = 4;
return PCI_IRQ_TABLE_LOOKUP;
}

static int
mpc83xx_exclude_device(u_char bus, u_char devfn)
{
if (bus == 0 && PCI_SLOT(devfn) == 0)
return PCIBIOS_DEVICE_NOT_FOUND;
if (mpc83xx_pci2_busno)
if (bus == (mpc83xx_pci2_busno) && PCI_SLOT(devfn) == 0)
return PCIBIOS_DEVICE_NOT_FOUND;
return PCIBIOS_SUCCESSFUL;
}
#endif /* CONFIG_PCI */

/* ************************************************************************
Expand Down Expand Up @@ -180,42 +160,6 @@ mpc834x_rtc_hookup(void)
late_initcall(mpc834x_rtc_hookup);
#endif

static void
mpc83xx_restart(char *cmd)
{
#define RST_OFFSET 0x00000900
#define RST_PROT_REG 0x00000018
#define RST_CTRL_REG 0x0000001c
__be32 __iomem *reg;

// map reset register space
reg = ioremap(get_immrbase() + 0x900, 0xff);

local_irq_disable();

/* enable software reset "RSTE" */
out_be32(reg + (RST_PROT_REG >> 2), 0x52535445);

/* set software hard reset */
out_be32(reg + (RST_CTRL_REG >> 2), 0x52535445);
for(;;);
}

static long __init
mpc83xx_time_init(void)
{
#define SPCR_OFFSET 0x00000110
#define SPCR_TBEN 0x00400000
__be32 __iomem *spcr = ioremap(get_immrbase() + SPCR_OFFSET, 4);
__be32 tmp;

tmp = in_be32(spcr);
out_be32(spcr, tmp|SPCR_TBEN);

iounmap(spcr);

return 0;
}
void __init
platform_init(void)
{
Expand All @@ -239,5 +183,3 @@ platform_init(void)

return;
}


3 changes: 3 additions & 0 deletions arch/powerpc/platforms/83xx/mpc83xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,8 @@
*/

extern int add_bridge(struct device_node *dev);
extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
extern void mpc83xx_restart(char *cmd);
extern long mpc83xx_time_init(void);

#endif /* __MPC83XX_H__ */
13 changes: 10 additions & 3 deletions arch/powerpc/platforms/83xx/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,16 @@

int mpc83xx_pci2_busno;

#ifdef CONFIG_PCI
int mpc83xx_exclude_device(u_char bus, u_char devfn)
{
if (bus == 0 && PCI_SLOT(devfn) == 0)
return PCIBIOS_DEVICE_NOT_FOUND;
if (mpc83xx_pci2_busno)
if (bus == (mpc83xx_pci2_busno) && PCI_SLOT(devfn) == 0)
return PCIBIOS_DEVICE_NOT_FOUND;
return PCIBIOS_SUCCESSFUL;
}

int __init add_bridge(struct device_node *dev)
{
int len;
Expand Down Expand Up @@ -95,5 +104,3 @@ int __init add_bridge(struct device_node *dev)

return 0;
}

#endif

0 comments on commit 30f5933

Please sign in to comment.