提交 7ae1f7ec 编写于 作者: L Lennert Buytenhek 提交者: Russell King

[ARM] 3818/1: iop3xx: introduce arch/arm/plat-iop for shared iop32x/iop33x code

Introduce the arch/arm/plat-iop directory, for code shared between the
iop32x and iop33x, and move the common memory map setup bits there.
Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 3f7e5815
...@@ -205,6 +205,7 @@ config ARCH_IMX ...@@ -205,6 +205,7 @@ config ARCH_IMX
config ARCH_IOP32X config ARCH_IOP32X
bool "IOP32x-based" bool "IOP32x-based"
depends on MMU depends on MMU
select PLAT_IOP
select PCI select PCI
help help
Support for Intel's 80219 and IOP32X (XScale) family of Support for Intel's 80219 and IOP32X (XScale) family of
...@@ -213,6 +214,7 @@ config ARCH_IOP32X ...@@ -213,6 +214,7 @@ config ARCH_IOP32X
config ARCH_IOP33X config ARCH_IOP33X
bool "IOP33x-based" bool "IOP33x-based"
depends on MMU depends on MMU
select PLAT_IOP
select PCI select PCI
help help
Support for Intel's IOP33X (XScale) family of processors. Support for Intel's IOP33X (XScale) family of processors.
...@@ -362,6 +364,9 @@ source "arch/arm/mach-netx/Kconfig" ...@@ -362,6 +364,9 @@ source "arch/arm/mach-netx/Kconfig"
config ARCH_ACORN config ARCH_ACORN
bool bool
config PLAT_IOP
bool
source arch/arm/mm/Kconfig source arch/arm/mm/Kconfig
# bool 'Use XScale PMU as timer source' CONFIG_XSCALE_PMU_TIMER # bool 'Use XScale PMU as timer source' CONFIG_XSCALE_PMU_TIMER
......
...@@ -158,6 +158,7 @@ core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ) ...@@ -158,6 +158,7 @@ core-$(CONFIG_FPE_FASTFPE) += $(FASTFPE_OBJ)
core-$(CONFIG_VFP) += arch/arm/vfp/ core-$(CONFIG_VFP) += arch/arm/vfp/
# If we have a common platform directory, then include it in the build. # If we have a common platform directory, then include it in the build.
core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/
core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/ core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/
drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/hardware/iop3xx.h>
/* /*
...@@ -39,7 +40,7 @@ static struct map_desc iq31244_io_desc[] __initdata = { ...@@ -39,7 +40,7 @@ static struct map_desc iq31244_io_desc[] __initdata = {
void __init iq31244_map_io(void) void __init iq31244_map_io(void)
{ {
iop321_map_io(); iop3xx_map_io();
iotable_init(iq31244_io_desc, ARRAY_SIZE(iq31244_io_desc)); iotable_init(iq31244_io_desc, ARRAY_SIZE(iq31244_io_desc));
} }
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/hardware/iop3xx.h>
/* /*
...@@ -39,7 +40,7 @@ static struct map_desc iq80321_io_desc[] __initdata = { ...@@ -39,7 +40,7 @@ static struct map_desc iq80321_io_desc[] __initdata = {
void __init iq80321_map_io(void) void __init iq80321_map_io(void)
{ {
iop321_map_io(); iop3xx_map_io();
iotable_init(iq80321_io_desc, ARRAY_SIZE(iq80321_io_desc)); iotable_init(iq80321_io_desc, ARRAY_SIZE(iq80321_io_desc));
} }
...@@ -32,23 +32,6 @@ ...@@ -32,23 +32,6 @@
#define IOP321_UART_XTAL 1843200 #define IOP321_UART_XTAL 1843200
/*
* Standard IO mapping for all IOP321 based systems
*/
static struct map_desc iop321_std_desc[] __initdata = {
{ /* mem mapped registers */
.virtual = IOP321_VIRT_MEM_BASE,
.pfn = __phys_to_pfn(IOP321_PHYS_MEM_BASE),
.length = 0x00002000,
.type = MT_DEVICE
}, { /* PCI IO space */
.virtual = IOP321_PCI_LOWER_IO_VA,
.pfn = __phys_to_pfn(IOP321_PCI_LOWER_IO_PA),
.length = IOP321_PCI_IO_WINDOW_SIZE,
.type = MT_DEVICE
}
};
#ifdef CONFIG_ARCH_IQ80321 #ifdef CONFIG_ARCH_IQ80321
#define UARTBASE IQ80321_UART #define UARTBASE IQ80321_UART
#define IRQ_UART IRQ_IQ80321_UART #define IRQ_UART IRQ_IQ80321_UART
...@@ -126,11 +109,6 @@ void __init iop32x_init(void) ...@@ -126,11 +109,6 @@ void __init iop32x_init(void)
platform_add_devices(iop32x_devices, platform_add_devices(iop32x_devices,
ARRAY_SIZE(iop32x_devices)); ARRAY_SIZE(iop32x_devices));
} }
}
void __init iop321_map_io(void)
{
iotable_init(iop321_std_desc, ARRAY_SIZE(iop321_std_desc));
early_serial_setup(&iop321_serial_ports[0]); early_serial_setup(&iop321_serial_ports[0]);
} }
......
...@@ -7,5 +7,5 @@ obj-m := ...@@ -7,5 +7,5 @@ obj-m :=
obj-n := obj-n :=
obj- := obj- :=
obj-$(CONFIG_ARCH_IQ80331) += iq80331-mm.o iq80331-pci.o obj-$(CONFIG_ARCH_IQ80331) += iq80331-pci.o
obj-$(CONFIG_MACH_IQ80332) += iq80332-mm.o iq80332-pci.o obj-$(CONFIG_MACH_IQ80332) += iq80332-pci.o
/*
* linux/arch/arm/mach-iop33x/iq80331-mm.c
*
* Low level memory initialization for iq80331 platform
*
* Author: Dave Jiang <dave.jiang@intel.com>
* Copyright (C) 2003 Intel Corp.
*
* 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/mm.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/mach/map.h>
/*
* IQ80331 specific IO mappings
*
* We use RedBoot's setup for the onboard devices.
*/
void __init iq80331_map_io(void)
{
iop331_map_io();
}
/*
* linux/arch/arm/mach-iop33x/iq80332-mm.c
*
* Low level memory initialization for iq80332 platform
*
* Author: Dave Jiang <dave.jiang@intel.com>
* Copyright (C) 2004 Intel Corp.
*
* 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/mm.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>
#include <asm/mach/map.h>
/*
* IQ80332 specific IO mappings
*
* We use RedBoot's setup for the onboard devices.
*/
void __init iq80332_map_io(void)
{
iop331_map_io();
}
...@@ -28,26 +28,10 @@ ...@@ -28,26 +28,10 @@
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/hardware/iop3xx.h>
#define IOP331_UART_XTAL 33334000 #define IOP331_UART_XTAL 33334000
/*
* Standard IO mapping for all IOP331 based systems
*/
static struct map_desc iop331_std_desc[] __initdata = {
{ /* mem mapped registers */
.virtual = IOP331_VIRT_MEM_BASE,
.pfn = __phys_to_pfn(IOP331_PHYS_MEM_BASE),
.length = 0x00002000,
.type = MT_DEVICE
}, { /* PCI IO space */
.virtual = IOP331_PCI_LOWER_IO_VA,
.pfn = __phys_to_pfn(IOP331_PCI_LOWER_IO_PA),
.length = IOP331_PCI_IO_WINDOW_SIZE,
.type = MT_DEVICE
}
};
static struct resource iop33x_uart0_resources[] = { static struct resource iop33x_uart0_resources[] = {
[0] = { [0] = {
.start = IOP331_UART0_PHYS, .start = IOP331_UART0_PHYS,
...@@ -172,30 +156,17 @@ void __init iop33x_init(void) ...@@ -172,30 +156,17 @@ void __init iop33x_init(void)
} }
} }
void __init iop331_map_io(void)
{
iotable_init(iop331_std_desc, ARRAY_SIZE(iop331_std_desc));
}
#ifdef CONFIG_ARCH_IOP33X #ifdef CONFIG_ARCH_IOP33X
extern void iop331_init_irq(void); extern void iop331_init_irq(void);
extern struct sys_timer iop331_timer; extern struct sys_timer iop331_timer;
#endif #endif
#ifdef CONFIG_ARCH_IQ80331
extern void iq80331_map_io(void);
#endif
#ifdef CONFIG_MACH_IQ80332
extern void iq80332_map_io(void);
#endif
#if defined(CONFIG_ARCH_IQ80331) #if defined(CONFIG_ARCH_IQ80331)
MACHINE_START(IQ80331, "Intel IQ80331") MACHINE_START(IQ80331, "Intel IQ80331")
/* Maintainer: Intel Corp. */ /* Maintainer: Intel Corp. */
.phys_io = 0xfefff000, .phys_io = 0xfefff000,
.io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
.map_io = iq80331_map_io, .map_io = iop3xx_map_io,
.init_irq = iop331_init_irq, .init_irq = iop331_init_irq,
.timer = &iop331_timer, .timer = &iop331_timer,
.boot_params = 0x0100, .boot_params = 0x0100,
...@@ -207,7 +178,7 @@ MACHINE_START(IQ80332, "Intel IQ80332") ...@@ -207,7 +178,7 @@ MACHINE_START(IQ80332, "Intel IQ80332")
/* Maintainer: Intel Corp. */ /* Maintainer: Intel Corp. */
.phys_io = 0xfefff000, .phys_io = 0xfefff000,
.io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical .io_pg_offst = ((0xfffff000) >> 18) & 0xfffc, // virtual, physical
.map_io = iq80332_map_io, .map_io = iop3xx_map_io,
.init_irq = iop331_init_irq, .init_irq = iop331_init_irq,
.timer = &iop331_timer, .timer = &iop331_timer,
.boot_params = 0x0100, .boot_params = 0x0100,
......
#
# Makefile for the linux kernel.
#
obj-y := setup.o
obj-m :=
obj-n :=
obj- :=
/*
* arch/arm/plat-iop/setup.c
*
* Author: Nicolas Pitre <nico@cam.org>
* Copyright (C) 2001 MontaVista Software, Inc.
* Copyright (C) 2004 Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/mm.h>
#include <linux/init.h>
#include <asm/mach/map.h>
#include <asm/hardware/iop3xx.h>
/*
* Standard IO mapping for all IOP3xx based systems
*/
static struct map_desc iop3xx_std_desc[] __initdata = {
{ /* mem mapped registers */
.virtual = IOP3XX_PERIPHERAL_VIRT_BASE,
.pfn = __phys_to_pfn(IOP3XX_PERIPHERAL_PHYS_BASE),
.length = IOP3XX_PERIPHERAL_SIZE,
.type = MT_DEVICE,
}, { /* PCI IO space */
.virtual = IOP3XX_PCI_LOWER_IO_VA,
.pfn = __phys_to_pfn(IOP3XX_PCI_LOWER_IO_PA),
.length = IOP3XX_PCI_IO_WINDOW_SIZE,
.type = MT_DEVICE,
},
};
void __init iop3xx_map_io(void)
{
iotable_init(iop3xx_std_desc, ARRAY_SIZE(iop3xx_std_desc));
}
...@@ -333,7 +333,6 @@ ...@@ -333,7 +333,6 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
extern void iop321_map_io(void);
extern void iop321_init_irq(void); extern void iop321_init_irq(void);
extern void iop321_time_init(void); extern void iop321_time_init(void);
#endif #endif
......
...@@ -350,7 +350,6 @@ ...@@ -350,7 +350,6 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
extern void iop331_map_io(void);
extern void iop331_init_irq(void); extern void iop331_init_irq(void);
extern void iop331_time_init(void); extern void iop331_time_init(void);
#endif #endif
......
/*
* include/asm-arm/hardware/iop3xx.h
*
* Intel IOP32X and IOP33X register definitions
*
* Author: Rory Bolt <rorybolt@pacbell.net>
* Copyright (C) 2002 Rory Bolt
* Copyright (C) 2004 Intel Corp.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __IOP3XX_H
#define __IOP3XX_H
/*
* IOP3XX processor registers
*/
#define IOP3XX_PERIPHERAL_PHYS_BASE 0xffffe000
#define IOP3XX_PERIPHERAL_VIRT_BASE 0xfeffe000
#define IOP3XX_PERIPHERAL_SIZE 0x00002000
#define IOP3XX_REG_ADDR(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + (reg))
/*
* IOP3XX I/O and Mem space regions for PCI autoconfiguration
*/
#define IOP3XX_PCI_MEM_WINDOW_SIZE 0x04000000
#define IOP3XX_PCI_LOWER_MEM_PA 0x80000000
#define IOP3XX_PCI_IO_WINDOW_SIZE 0x00010000
#define IOP3XX_PCI_LOWER_IO_PA 0x90000000
#define IOP3XX_PCI_LOWER_IO_VA 0xfe000000
#ifndef __ASSEMBLY__
void iop3xx_map_io(void);
#endif
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册