Browse Source

[ARM] 3334/1: Add support for IXDP28x5 platforms

Patch from Deepak Saxena

This patch adds support for Intel's IXDP28x5 platform. This
is just and IXDP2801 with a new CPU rev but the bootloader
has been updated to reflect a new machine ID so we just build
support for it by default when we build IXDP2801.

Signed-off-by: Deepak Saxena <dsaxena@plexity.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Deepak Saxena 19 years ago
parent
commit
0328ad23cf

+ 7 - 2
arch/arm/mach-ixp2000/Kconfig

@@ -43,12 +43,17 @@ config ARCH_IXDP2401
 	  this platform, see <file:Documentation/arm/IXP2000>.
 	  this platform, see <file:Documentation/arm/IXP2000>.
 
 
 config ARCH_IXDP2801
 config ARCH_IXDP2801
-	bool "Support Intel IXDP2801"
+	bool "Support Intel IXDP2801 and IXDP28x5"
 	help
 	help
 	  Say 'Y' here if you want your kernel to support the Intel
 	  Say 'Y' here if you want your kernel to support the Intel
-	  IXDP2801 reference platform. For more information on
+	  IXDP2801/2805/2855 reference platforms. For more information on
 	  this platform, see <file:Documentation/arm/IXP2000>.
 	  this platform, see <file:Documentation/arm/IXP2000>.
 
 
+config MACH_IXDP28X5
+	bool
+	depends on ARCH_IXDP2801
+	default y
+
 config ARCH_IXDP2X01
 config ARCH_IXDP2X01
 	bool
 	bool
 	depends on ARCH_IXDP2401 || ARCH_IXDP2801
 	depends on ARCH_IXDP2401 || ARCH_IXDP2801

+ 18 - 2
arch/arm/mach-ixp2000/ixdp2x01.c

@@ -284,7 +284,7 @@ static int ixdp2x01_pci_setup(int nr, struct pci_sys_data *sys)
 {
 {
 	sys->mem_offset = 0xe0000000;
 	sys->mem_offset = 0xe0000000;
 
 
-	if (machine_is_ixdp2801())
+	if (machine_is_ixdp2801() || machine_is_ixdp28x5())
 		sys->mem_offset -= ((*IXP2000_PCI_ADDR_EXT & 0xE000) << 16);
 		sys->mem_offset -= ((*IXP2000_PCI_ADDR_EXT & 0xE000) << 16);
 
 
 	return ixp2000_pci_setup(nr, sys);
 	return ixp2000_pci_setup(nr, sys);
@@ -300,7 +300,8 @@ struct hw_pci ixdp2x01_pci __initdata = {
 
 
 int __init ixdp2x01_pci_init(void)
 int __init ixdp2x01_pci_init(void)
 {
 {
-	if (machine_is_ixdp2401() || machine_is_ixdp2801())
+	if (machine_is_ixdp2401() || machine_is_ixdp2801() ||\
+		machine_is_ixdp28x5())
 		pci_common_init(&ixdp2x01_pci);
 		pci_common_init(&ixdp2x01_pci);
 
 
 	return 0;
 	return 0;
@@ -400,6 +401,21 @@ MACHINE_START(IXDP2801, "Intel IXDP2801 Development Platform")
 	.timer		= &ixdp2x01_timer,
 	.timer		= &ixdp2x01_timer,
 	.init_machine	= ixdp2x01_init_machine,
 	.init_machine	= ixdp2x01_init_machine,
 MACHINE_END
 MACHINE_END
+
+/*
+ * IXDP28x5 is basically an IXDP2801 with a different CPU but Intel
+ * changed the machine ID in the bootloader
+ */
+MACHINE_START(IXDP28X5, "Intel IXDP2805/2855 Development Platform")
+	/* Maintainer: MontaVista Software, Inc. */
+	.phys_io	= IXP2000_UART_PHYS_BASE,
+	.io_pg_offst	= ((IXP2000_UART_VIRT_BASE) >> 18) & 0xfffc,
+	.boot_params	= 0x00000100,
+	.map_io		= ixdp2x01_map_io,
+	.init_irq	= ixdp2x01_init_irq,
+	.timer		= &ixdp2x01_timer,
+	.init_machine	= ixdp2x01_init_machine,
+MACHINE_END
 #endif
 #endif
 
 
 
 

+ 1 - 1
include/asm-arm/arch-ixp2000/system.h

@@ -37,7 +37,7 @@ static inline void arch_reset(char mode)
 	 * to cause a complete reset of the CPU and all external devices
 	 * to cause a complete reset of the CPU and all external devices
 	 * and move the flash bank register back to 0.
 	 * and move the flash bank register back to 0.
 	 */
 	 */
-	if (machine_is_ixdp2801()) {
+	if (machine_is_ixdp2801() || machine_is_ixdp28x5()) {
 		unsigned long reset_reg = *IXDP2X01_CPLD_RESET_REG;
 		unsigned long reset_reg = *IXDP2X01_CPLD_RESET_REG;
 
 
 		reset_reg = 0x55AA0000 | (reset_reg & 0x0000FFFF);
 		reset_reg = 0x55AA0000 | (reset_reg & 0x0000FFFF);