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

Commit 71bc7bf0 authored by Kumar Gala's avatar Kumar Gala
Browse files

Merge branch '83xx' into for_paulus

parents cbdb54d3 913b8394
Loading
Loading
Loading
Loading
+1336 −0

File added.

Preview size limit exceeded, changes collapsed.

+10 −1
Original line number Original line Diff line number Diff line
@@ -16,12 +16,21 @@ config MPC834x_SYS
	  3 PCI slots.  The PIBs PCI initialization is the bootloader's
	  3 PCI slots.  The PIBs PCI initialization is the bootloader's
	  responsiblilty.
	  responsiblilty.


config MPC834x_ITX
	bool "Freescale MPC834x ITX"
	select DEFAULT_UIMAGE
	help
	  This option enables support for the MPC 834x ITX evaluation board.

	  Be aware that PCI initialization is the bootloader's
	  responsiblilty.

endchoice
endchoice


config MPC834x
config MPC834x
	bool
	bool
	select PPC_UDBG_16550
	select PPC_UDBG_16550
	select PPC_INDIRECT_PCI
	select PPC_INDIRECT_PCI
	default y if MPC834x_SYS
	default y if MPC834x_SYS || MPC834x_ITX


endmenu
endmenu
+1 −0
Original line number Original line Diff line number Diff line
@@ -4,3 +4,4 @@
obj-y				:= misc.o
obj-y				:= misc.o
obj-$(CONFIG_PCI)		+= pci.o
obj-$(CONFIG_PCI)		+= pci.o
obj-$(CONFIG_MPC834x_SYS)	+= mpc834x_sys.o
obj-$(CONFIG_MPC834x_SYS)	+= mpc834x_sys.o
obj-$(CONFIG_MPC834x_ITX)	+= mpc834x_itx.o
+156 −0
Original line number Original line Diff line number Diff line
/*
 * arch/powerpc/platforms/83xx/mpc834x_itx.c
 *
 * MPC834x ITX board specific routines
 *
 * 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 <linux/init.h>
#include <linux/errno.h>
#include <linux/reboot.h>
#include <linux/pci.h>
#include <linux/kdev_t.h>
#include <linux/major.h>
#include <linux/console.h>
#include <linux/delay.h>
#include <linux/seq_file.h>
#include <linux/root_dev.h>

#include <asm/system.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/irq.h>
#include <asm/prom.h>
#include <asm/udbg.h>
#include <sysdev/fsl_soc.h>

#include "mpc83xx.h"

#include <platforms/83xx/mpc834x_sys.h>

#ifndef CONFIG_PCI
unsigned long isa_io_base = 0;
unsigned long isa_mem_base = 0;
#endif

#ifdef CONFIG_PCI
static int
mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
{
	static char pci_irq_table[][4] =
	    /*
	     *      PCI IDSEL/INTPIN->INTLINE
	     *       A      B      C      D
	     */
	{
		{PIRQB, PIRQC, PIRQD, PIRQA},	/* idsel 0x0e */
		{PIRQA, PIRQB, PIRQC, PIRQD},	/* idsel 0x0f */
		{PIRQC, PIRQD, PIRQA, PIRQB},	/* idsel 0x10 */
	};

	const long min_idsel = 0x0e, max_idsel = 0x10, irqs_per_slot = 4;
	return PCI_IRQ_TABLE_LOOKUP;
}
#endif				/* CONFIG_PCI */

/* ************************************************************************
 *
 * Setup the architecture
 *
 */
static void __init mpc834x_itx_setup_arch(void)
{
	struct device_node *np;

	if (ppc_md.progress)
		ppc_md.progress("mpc834x_itx_setup_arch()", 0);

	np = of_find_node_by_type(NULL, "cpu");
	if (np != 0) {
		unsigned int *fp =
		    (int *)get_property(np, "clock-frequency", NULL);
		if (fp != 0)
			loops_per_jiffy = *fp / HZ;
		else
			loops_per_jiffy = 50000000 / HZ;
		of_node_put(np);
	}
#ifdef CONFIG_PCI
	for (np = NULL; (np = of_find_node_by_type(np, "pci")) != NULL;)
		add_bridge(np);

	ppc_md.pci_swizzle = common_swizzle;
	ppc_md.pci_map_irq = mpc83xx_map_irq;
	ppc_md.pci_exclude_device = mpc83xx_exclude_device;
#endif

#ifdef  CONFIG_ROOT_NFS
	ROOT_DEV = Root_NFS;
#else
	ROOT_DEV = Root_HDA1;
#endif
}

void __init mpc834x_itx_init_IRQ(void)
{
	u8 senses[8] = {
		0,			/* EXT 0 */
		IRQ_SENSE_LEVEL,	/* EXT 1 */
		IRQ_SENSE_LEVEL,	/* EXT 2 */
		0,			/* EXT 3 */
#ifdef CONFIG_PCI
		IRQ_SENSE_LEVEL,	/* EXT 4 */
		IRQ_SENSE_LEVEL,	/* EXT 5 */
		IRQ_SENSE_LEVEL,	/* EXT 6 */
		IRQ_SENSE_LEVEL,	/* EXT 7 */
#else
		0,			/* EXT 4 */
		0,			/* EXT 5 */
		0,			/* EXT 6 */
		0,			/* EXT 7 */
#endif
	};

	ipic_init(get_immrbase() + 0x00700, 0, 0, senses, 8);

	/* Initialize the default interrupt mapping priorities,
	 * in case the boot rom changed something on us.
	 */
	ipic_set_default_priority();
}

/*
 * Called very early, MMU is off, device-tree isn't unflattened
 */
static int __init mpc834x_itx_probe(void)
{
	/* We always match for now, eventually we should look at the flat
	   dev tree to ensure this is the board we are suppose to run on
	*/
	return 1;
}

define_machine(mpc834x_itx) {
	.name			= "MPC834x ITX",
	.probe			= mpc834x_itx_probe,
	.setup_arch		= mpc834x_itx_setup_arch,
	.init_IRQ		= mpc834x_itx_init_IRQ,
	.get_irq		= ipic_get_irq,
	.restart		= mpc83xx_restart,
	.time_init		= mpc83xx_time_init,
	.calibrate_decr		= generic_calibrate_decr,
	.progress		= udbg_progress,
};
+23 −0
Original line number Original line Diff line number Diff line
/*
 * arch/powerpc/platforms/83xx/mpc834x_itx.h
 *
 * MPC834X ITX common board definitions
 *
 * 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.
 *
 */

#ifndef __MACH_MPC83XX_ITX_H__
#define __MACH_MPC83XX_ITX_H__

#define PIRQA	MPC83xx_IRQ_EXT4
#define PIRQB	MPC83xx_IRQ_EXT5
#define PIRQC	MPC83xx_IRQ_EXT6
#define PIRQD	MPC83xx_IRQ_EXT7

#endif				/* __MACH_MPC83XX_ITX_H__ */