Commit 0e315813 authored by Kumar Gala's avatar Kumar Gala Committed by Linus Torvalds

[PATCH] ppc32: support for MPC8555 CPU and board

The following patch adds completes the CPU support for the MPC8555 PowerPC.
 Additionally, it adds support for the MPC8555 CDS reference board.  This
is another PowerPC in the Freescale MPC85xx family.

* Add support for MPC8555 CPU and reference board
Signed-off-by: default avatarKumar Gala <kumar.gala@freescale.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6caf0989
...@@ -21,6 +21,11 @@ config MPC8540_ADS ...@@ -21,6 +21,11 @@ config MPC8540_ADS
help help
This option enables support for the MPC 8540 ADS evaluation board. This option enables support for the MPC 8540 ADS evaluation board.
config MPC8555_CDS
bool "Freescale MPC8555 CDS"
help
This option enablese support for the MPC8555 CDS evaluation board.
config MPC8560_ADS config MPC8560_ADS
bool "Freescale MPC8560 ADS" bool "Freescale MPC8560 ADS"
help help
...@@ -42,11 +47,21 @@ config MPC8540 ...@@ -42,11 +47,21 @@ config MPC8540
depends on MPC8540_ADS depends on MPC8540_ADS
default y default y
config MPC8555
bool
depends on MPC8555_CDS
default y
config MPC8560 config MPC8560
bool bool
depends on SBC8560 || MPC8560_ADS depends on SBC8560 || MPC8560_ADS
default y default y
config 85xx_PCI2
bool "Supprt for 2nd PCI host controller"
depends on MPC8555_CDS
default y
config FSL_OCP config FSL_OCP
bool bool
depends on 85xx depends on 85xx
...@@ -54,7 +69,7 @@ config FSL_OCP ...@@ -54,7 +69,7 @@ config FSL_OCP
config PPC_GEN550 config PPC_GEN550
bool bool
depends on MPC8540 || SBC8560 depends on MPC8540 || SBC8560 || MPC8555
default y default y
endmenu endmenu
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
# #
obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads_common.o mpc8540_ads.o obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads_common.o mpc8540_ads.o
obj-$(CONFIG_MPC8555_CDS) += mpc85xx_cds_common.o
obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads_common.o mpc8560_ads.o obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads_common.o mpc8560_ads.o
obj-$(CONFIG_SBC8560) += sbc85xx.o sbc8560.o obj-$(CONFIG_SBC8560) += sbc85xx.o sbc8560.o
obj-$(CONFIG_MPC8540) += mpc8540.o obj-$(CONFIG_MPC8540) += mpc8540.o
obj-$(CONFIG_MPC8555) += mpc8555.o
obj-$(CONFIG_MPC8560) += mpc8560.o obj-$(CONFIG_MPC8560) += mpc8560.o
/*
* arch/ppc/platform/85xx/mpc8555.c
*
* MPC8555 I/O descriptions
*
* Maintainer: Kumar Gala <kumar.gala@freescale.com>
*
* Copyright 2004 Freescale Semiconductor Inc.
*
* 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/init.h>
#include <linux/module.h>
#include <asm/mpc85xx.h>
#include <asm/ocp.h>
/* These should be defined in platform code */
extern struct ocp_gfar_data mpc85xx_tsec1_def;
extern struct ocp_gfar_data mpc85xx_tsec2_def;
extern struct ocp_mpc_i2c_data mpc85xx_i2c1_def;
/* We use offsets for paddr since we do not know at compile time
* what CCSRBAR is, platform code should fix this up in
* setup_arch
*
* Only the first IRQ is given even if a device has
* multiple lines associated with ita
*/
struct ocp_def core_ocp[] = {
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_IIC,
.index = 0,
.paddr = MPC85xx_IIC1_OFFSET,
.irq = MPC85xx_IRQ_IIC1,
.pm = OCP_CPM_NA,
.additions = &mpc85xx_i2c1_def,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_16550,
.index = 0,
.paddr = MPC85xx_UART0_OFFSET,
.irq = MPC85xx_IRQ_DUART,
.pm = OCP_CPM_NA,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_16550,
.index = 1,
.paddr = MPC85xx_UART1_OFFSET,
.irq = MPC85xx_IRQ_DUART,
.pm = OCP_CPM_NA,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_GFAR,
.index = 0,
.paddr = MPC85xx_ENET1_OFFSET,
.irq = MPC85xx_IRQ_TSEC1_TX,
.pm = OCP_CPM_NA,
.additions = &mpc85xx_tsec1_def,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_GFAR,
.index = 1,
.paddr = MPC85xx_ENET2_OFFSET,
.irq = MPC85xx_IRQ_TSEC2_TX,
.pm = OCP_CPM_NA,
.additions = &mpc85xx_tsec2_def,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_DMA,
.index = 0,
.paddr = MPC85xx_DMA_OFFSET,
.irq = MPC85xx_IRQ_DMA0,
.pm = OCP_CPM_NA,
},
{ .vendor = OCP_VENDOR_FREESCALE,
.function = OCP_FUNC_PERFMON,
.index = 0,
.paddr = MPC85xx_PERFMON_OFFSET,
.irq = MPC85xx_IRQ_PERFMON,
.pm = OCP_CPM_NA,
},
{ .vendor = OCP_VENDOR_INVALID
}
};
/*
* arch/ppc/platforms/mpc8555_cds.h
*
* MPC8555CDS board definitions
*
* Maintainer: Kumar Gala <kumar.gala@freescale.com>
*
* Copyright 2004 Freescale Semiconductor Inc.
*
* 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_MPC8555CDS_H__
#define __MACH_MPC8555CDS_H__
#include <linux/config.h>
#include <linux/serial.h>
#include <platforms/85xx/mpc85xx_cds_common.h>
#define CPM_MAP_ADDR (CCSRBAR + MPC85xx_CPM_OFFSET)
#endif /* __MACH_MPC8555CDS_H__ */
This diff is collapsed.
/*
* arch/ppc/platforms/85xx/mpc85xx_cds_common.h
*
* MPC85xx CDS board definitions
*
* Maintainer: Kumar Gala <kumar.gala@freescale.com>
*
* Copyright 2004 Freescale Semiconductor, Inc
*
* 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_MPC85XX_CDS_H__
#define __MACH_MPC85XX_CDS_H__
#include <linux/config.h>
#include <linux/serial.h>
#include <asm/ppcboot.h>
#include <linux/initrd.h>
#include <syslib/ppc85xx_setup.h>
#define BOARD_CCSRBAR ((uint)0xe0000000)
#define CCSRBAR_SIZE ((uint)1024*1024)
/* CADMUS info */
#define CADMUS_BASE (0xf8004000)
#define CADMUS_SIZE (256)
#define CM_VER (0)
#define CM_CSR (1)
#define CM_RST (2)
/* PCI config */
#define PCI1_CFG_ADDR_OFFSET (0x8000)
#define PCI1_CFG_DATA_OFFSET (0x8004)
#define PCI2_CFG_ADDR_OFFSET (0x9000)
#define PCI2_CFG_DATA_OFFSET (0x9004)
/* PCI interrupt controller */
#define PIRQ0A MPC85xx_IRQ_EXT0
#define PIRQ0B MPC85xx_IRQ_EXT1
#define PIRQ0C MPC85xx_IRQ_EXT2
#define PIRQ0D MPC85xx_IRQ_EXT3
#define PIRQ1A MPC85xx_IRQ_EXT11
/* PCI 1 memory map */
#define MPC85XX_PCI1_LOWER_IO 0x00000000
#define MPC85XX_PCI1_UPPER_IO 0x00ffffff
#define MPC85XX_PCI1_LOWER_MEM 0x80000000
#define MPC85XX_PCI1_UPPER_MEM 0x9fffffff
#define MPC85XX_PCI1_IO_BASE 0xe2000000
#define MPC85XX_PCI1_MEM_OFFSET 0x00000000
#define MPC85XX_PCI1_IO_SIZE 0x01000000
/* PCI 2 memory map */
#define MPC85XX_PCI2_LOWER_IO 0x01000000
#define MPC85XX_PCI2_UPPER_IO 0x01ffffff
#define MPC85XX_PCI2_LOWER_MEM 0xa0000000
#define MPC85XX_PCI2_UPPER_MEM 0xbfffffff
#define MPC85XX_PCI2_IO_BASE 0xe3000000
#define MPC85XX_PCI2_MEM_OFFSET 0x00000000
#define MPC85XX_PCI2_IO_SIZE 0x01000000
#define SERIAL_PORT_DFNS \
STD_UART_OP(0) \
STD_UART_OP(1)
#endif /* __MACH_MPC85XX_CDS_H__ */
...@@ -169,17 +169,20 @@ mpc85xx_setup_pci1(struct pci_controller *hose) ...@@ -169,17 +169,20 @@ mpc85xx_setup_pci1(struct pci_controller *hose)
pci->piwar2 = 0; pci->piwar2 = 0;
pci->piwar3 = 0; pci->piwar3 = 0;
/* Setup 512M Phys:PCI 1:1 outbound mem window @ 0x80000000 */ /* Setup Phys:PCI 1:1 outbound mem window @ MPC85XX_PCI1_LOWER_MEM */
pci->potar1 = (MPC85XX_PCI1_LOWER_MEM >> 12) & 0x000fffff; pci->potar1 = (MPC85XX_PCI1_LOWER_MEM >> 12) & 0x000fffff;
pci->potear1 = 0x00000000; pci->potear1 = 0x00000000;
pci->powbar1 = (MPC85XX_PCI1_LOWER_MEM >> 12) & 0x000fffff; pci->powbar1 = (MPC85XX_PCI1_LOWER_MEM >> 12) & 0x000fffff;
pci->powar1 = 0x8004401c; /* Enable, Mem R/W, 512M */ /* Enable, Mem R/W */
pci->powar1 = 0x80044000 |
(__ilog2(MPC85XX_PCI1_UPPER_MEM - MPC85XX_PCI1_LOWER_MEM + 1) - 1);
/* Setup 16M outboud IO windows @ 0xe2000000 */ /* Setup outboud IO windows @ MPC85XX_PCI1_IO_BASE */
pci->potar2 = 0x00000000; pci->potar2 = 0x00000000;
pci->potear2 = 0x00000000; pci->potear2 = 0x00000000;
pci->powbar2 = (MPC85XX_PCI1_IO_BASE >> 12) & 0x000fffff; pci->powbar2 = (MPC85XX_PCI1_IO_BASE >> 12) & 0x000fffff;
pci->powar2 = 0x80088017; /* Enable, IO R/W, 16M */ /* Enable, IO R/W */
pci->powar2 = 0x80088000 | (__ilog2(MPC85XX_PCI1_IO_SIZE) - 1);
/* Setup 2G inbound Memory Window @ 0 */ /* Setup 2G inbound Memory Window @ 0 */
pci->pitar1 = 0x00000000; pci->pitar1 = 0x00000000;
...@@ -192,7 +195,7 @@ mpc85xx_setup_pci1(struct pci_controller *hose) ...@@ -192,7 +195,7 @@ mpc85xx_setup_pci1(struct pci_controller *hose)
extern int mpc85xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin); extern int mpc85xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin);
extern int mpc85xx_exclude_device(u_char bus, u_char devfn); extern int mpc85xx_exclude_device(u_char bus, u_char devfn);
#if CONFIG_85xx_PCI2 #ifdef CONFIG_85xx_PCI2
static void __init static void __init
mpc85xx_setup_pci2(struct pci_controller *hose) mpc85xx_setup_pci2(struct pci_controller *hose)
{ {
...@@ -203,10 +206,10 @@ mpc85xx_setup_pci2(struct pci_controller *hose) ...@@ -203,10 +206,10 @@ mpc85xx_setup_pci2(struct pci_controller *hose)
pci = ioremap(binfo->bi_immr_base + MPC85xx_PCI2_OFFSET, pci = ioremap(binfo->bi_immr_base + MPC85xx_PCI2_OFFSET,
MPC85xx_PCI2_SIZE); MPC85xx_PCI2_SIZE);
early_read_config_word(hose, 0, 0, PCI_COMMAND, &temps); early_read_config_word(hose, hose->bus_offset, 0, PCI_COMMAND, &temps);
temps |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; temps |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
early_write_config_word(hose, 0, 0, PCI_COMMAND, temps); early_write_config_word(hose, hose->bus_offset, 0, PCI_COMMAND, temps);
early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0x80); early_write_config_byte(hose, hose->bus_offset, 0, PCI_LATENCY_TIMER, 0x80);
/* Disable all windows (except powar0 since its ignored) */ /* Disable all windows (except powar0 since its ignored) */
pci->powar1 = 0; pci->powar1 = 0;
...@@ -217,17 +220,20 @@ mpc85xx_setup_pci2(struct pci_controller *hose) ...@@ -217,17 +220,20 @@ mpc85xx_setup_pci2(struct pci_controller *hose)
pci->piwar2 = 0; pci->piwar2 = 0;
pci->piwar3 = 0; pci->piwar3 = 0;
/* Setup 512M Phys:PCI 1:1 outbound mem window @ 0xa0000000 */ /* Setup Phys:PCI 1:1 outbound mem window @ MPC85XX_PCI2_LOWER_MEM */
pci->potar1 = (MPC85XX_PCI2_LOWER_MEM >> 12) & 0x000fffff; pci->potar1 = (MPC85XX_PCI2_LOWER_MEM >> 12) & 0x000fffff;
pci->potear1 = 0x00000000; pci->potear1 = 0x00000000;
pci->powbar1 = (MPC85XX_PCI2_LOWER_MEM >> 12) & 0x000fffff; pci->powbar1 = (MPC85XX_PCI2_LOWER_MEM >> 12) & 0x000fffff;
pci->powar1 = 0x8004401c; /* Enable, Mem R/W, 512M */ /* Enable, Mem R/W */
pci->powar1 = 0x80044000 |
(__ilog2(MPC85XX_PCI1_UPPER_MEM - MPC85XX_PCI1_LOWER_MEM + 1) - 1);
/* Setup 16M outboud IO windows @ 0xe3000000 */ /* Setup outboud IO windows @ MPC85XX_PCI2_IO_BASE */
pci->potar2 = 0x00000000; pci->potar2 = 0x00000000;
pci->potear2 = 0x00000000; pci->potear2 = 0x00000000;
pci->powbar2 = (MPC85XX_PCI2_IO_BASE >> 12) & 0x000fffff; pci->powbar2 = (MPC85XX_PCI2_IO_BASE >> 12) & 0x000fffff;
pci->powar2 = 0x80088017; /* Enable, IO R/W, 16M */ /* Enable, IO R/W */
pci->powar2 = 0x80088000 | (__ilog2(MPC85XX_PCI1_IO_SIZE) - 1);
/* Setup 2G inbound Memory Window @ 0 */ /* Setup 2G inbound Memory Window @ 0 */
pci->pitar1 = 0x00000000; pci->pitar1 = 0x00000000;
......
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#ifdef CONFIG_MPC8540_ADS #ifdef CONFIG_MPC8540_ADS
#include <platforms/85xx/mpc8540_ads.h> #include <platforms/85xx/mpc8540_ads.h>
#endif #endif
#ifdef CONFIG_MPC8555_CDS
#include <platforms/85xx/mpc8555_cds.h>
#endif
#ifdef CONFIG_MPC8560_ADS #ifdef CONFIG_MPC8560_ADS
#include <platforms/85xx/mpc8560_ads.h> #include <platforms/85xx/mpc8560_ads.h>
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment