Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30f59336 authored by Kumar Gala's avatar Kumar Gala Committed by Paul Mackerras
Browse files

[PATCH] powerpc: Cleanup MPC83xx platform support



Moved some code around so its usable by more systems than just
the MPC834x SYS.

Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 4b10cfd4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
#
# 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 −0
Original line number Diff line number Diff line
/*
 * 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;
}
+0 −58
Original line number Diff line number Diff line
@@ -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>
@@ -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)
{
@@ -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 */

/* ************************************************************************
@@ -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)
{
@@ -239,5 +183,3 @@ platform_init(void)

	return;
}

+3 −0
Original line number Diff line number Diff line
@@ -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__ */
+10 −3
Original line number Diff line number Diff line
@@ -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;
@@ -95,5 +104,3 @@ int __init add_bridge(struct device_node *dev)

	return 0;
}

#endif