diff options
Diffstat (limited to 'arch/mips/alchemy')
| -rw-r--r-- | arch/mips/alchemy/Kconfig | 24 | ||||
| -rw-r--r-- | arch/mips/alchemy/Platform | 16 | ||||
| -rw-r--r-- | arch/mips/alchemy/board-gpr.c | 4 | ||||
| -rw-r--r-- | arch/mips/alchemy/board-mtx1.c | 6 | ||||
| -rw-r--r-- | arch/mips/alchemy/board-xxs1500.c | 2 | ||||
| -rw-r--r-- | arch/mips/alchemy/common/power.c | 1 | ||||
| -rw-r--r-- | arch/mips/alchemy/common/setup.c | 16 | ||||
| -rw-r--r-- | arch/mips/alchemy/common/sleeper.S | 6 | ||||
| -rw-r--r-- | arch/mips/alchemy/common/usb.c | 26 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/Makefile | 4 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1000.c | 54 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1200.c | 78 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1300.c | 40 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1550.c | 10 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/db1xxx.c (renamed from arch/mips/alchemy/devboards/db1235.c) | 43 | ||||
| -rw-r--r-- | arch/mips/alchemy/devboards/pm.c | 4 | 
16 files changed, 206 insertions, 128 deletions
diff --git a/arch/mips/alchemy/Kconfig b/arch/mips/alchemy/Kconfig index 7032ac7ecd1..b9628983d62 100644 --- a/arch/mips/alchemy/Kconfig +++ b/arch/mips/alchemy/Kconfig @@ -16,36 +16,29 @@ config ALCHEMY_GPIO_INDIRECT  choice  	prompt "Machine type"  	depends on MIPS_ALCHEMY -	default MIPS_DB1000 +	default MIPS_DB1XXX  config MIPS_MTX1  	bool "4G Systems MTX-1 board" -	select DMA_NONCOHERENT  	select HW_HAS_PCI  	select ALCHEMY_GPIOINT_AU1000  	select SYS_SUPPORTS_LITTLE_ENDIAN  	select SYS_HAS_EARLY_PRINTK -config MIPS_DB1000 -	bool "Alchemy DB1000/DB1500/DB1100 PB1500/1100 boards" -	select ALCHEMY_GPIOINT_AU1000 -	select DMA_NONCOHERENT -	select HW_HAS_PCI -	select SYS_SUPPORTS_BIG_ENDIAN -	select SYS_SUPPORTS_LITTLE_ENDIAN -	select SYS_HAS_EARLY_PRINTK - -config MIPS_DB1235 -	bool "Alchemy DB1200/PB1200/DB1300/DB1550/PB1550 boards" +config MIPS_DB1XXX +	bool "Alchemy DB1XXX / PB1XXX boards"  	select ARCH_REQUIRE_GPIOLIB  	select HW_HAS_PCI -	select DMA_COHERENT  	select SYS_SUPPORTS_LITTLE_ENDIAN  	select SYS_HAS_EARLY_PRINTK +	help +	  Select this option if you have one of the following Alchemy +	  development boards:  DB1000 DB1500 DB1100 DB1550 DB1200 DB1300 +			       PB1500 PB1100 PB1550 PB1200 +	  Board type is autodetected during boot.  config MIPS_XXS1500  	bool "MyCable XXS1500 board" -	select DMA_NONCOHERENT  	select ALCHEMY_GPIOINT_AU1000  	select SYS_SUPPORTS_LITTLE_ENDIAN  	select SYS_HAS_EARLY_PRINTK @@ -54,7 +47,6 @@ config MIPS_GPR  	bool "Trapeze ITS GPR board"  	select ALCHEMY_GPIOINT_AU1000  	select HW_HAS_PCI -	select DMA_NONCOHERENT  	select SYS_SUPPORTS_LITTLE_ENDIAN  	select SYS_HAS_EARLY_PRINTK diff --git a/arch/mips/alchemy/Platform b/arch/mips/alchemy/Platform index b3afcdd8d77..33c9da3b077 100644 --- a/arch/mips/alchemy/Platform +++ b/arch/mips/alchemy/Platform @@ -5,18 +5,12 @@ platform-$(CONFIG_MIPS_ALCHEMY) += alchemy/common/  # -# AMD Alchemy Db1000/Db1500/Pb1500/Db1100/Pb1100 eval boards +# AMD Alchemy Db1000/Db1500/Pb1500/Db1100/Pb1100 +#             Db1550/Pb1550/Db1200/Pb1200/Db1300  # -platform-$(CONFIG_MIPS_DB1000)	+= alchemy/devboards/ -cflags-$(CONFIG_MIPS_DB1000)	+= -I$(srctree)/arch/mips/include/asm/mach-db1x00 -load-$(CONFIG_MIPS_DB1000)	+= 0xffffffff80100000 - -# -# AMD Alchemy Db1200/Pb1200/Db1550/Pb1550/Db1300 eval boards -# -platform-$(CONFIG_MIPS_DB1235)	+= alchemy/devboards/ -cflags-$(CONFIG_MIPS_DB1235)	+= -I$(srctree)/arch/mips/include/asm/mach-db1x00 -load-$(CONFIG_MIPS_DB1235)	+= 0xffffffff80100000 +platform-$(CONFIG_MIPS_DB1XXX)	+= alchemy/devboards/ +cflags-$(CONFIG_MIPS_DB1XXX)	+= -I$(srctree)/arch/mips/include/asm/mach-db1x00 +load-$(CONFIG_MIPS_DB1XXX)	+= 0xffffffff80100000  #  # 4G-Systems MTX-1 "MeshCube" wireless router diff --git a/arch/mips/alchemy/board-gpr.c b/arch/mips/alchemy/board-gpr.c index 9edc35ff8cf..acf9a2a37f5 100644 --- a/arch/mips/alchemy/board-gpr.c +++ b/arch/mips/alchemy/board-gpr.c @@ -53,10 +53,8 @@ void __init prom_init(void)  	prom_init_cmdline();  	memsize_str = prom_getenv("memsize"); -	if (!memsize_str) +	if (!memsize_str || kstrtoul(memsize_str, 0, &memsize))  		memsize = 0x04000000; -	else -		strict_strtoul(memsize_str, 0, &memsize);  	add_memory_region(0, memsize, BOOT_MEM_RAM);  } diff --git a/arch/mips/alchemy/board-mtx1.c b/arch/mips/alchemy/board-mtx1.c index 4a9baa9f633..25a59a23547 100644 --- a/arch/mips/alchemy/board-mtx1.c +++ b/arch/mips/alchemy/board-mtx1.c @@ -52,10 +52,8 @@ void __init prom_init(void)  	prom_init_cmdline();  	memsize_str = prom_getenv("memsize"); -	if (!memsize_str) +	if (!memsize_str || kstrtoul(memsize_str, 0, &memsize))  		memsize = 0x04000000; -	else -		strict_strtoul(memsize_str, 0, &memsize);  	add_memory_region(0, memsize, BOOT_MEM_RAM);  } @@ -276,7 +274,7 @@ static struct platform_device mtx1_pci_host = {  	.resource	= alchemy_pci_host_res,  }; -static struct __initdata platform_device * mtx1_devs[] = { +static struct platform_device *mtx1_devs[] __initdata = {  	&mtx1_pci_host,  	&mtx1_gpio_leds,  	&mtx1_wdt, diff --git a/arch/mips/alchemy/board-xxs1500.c b/arch/mips/alchemy/board-xxs1500.c index bd551365029..3fb814be0e9 100644 --- a/arch/mips/alchemy/board-xxs1500.c +++ b/arch/mips/alchemy/board-xxs1500.c @@ -49,7 +49,7 @@ void __init prom_init(void)  	prom_init_cmdline();  	memsize_str = prom_getenv("memsize"); -	if (!memsize_str || strict_strtoul(memsize_str, 0, &memsize)) +	if (!memsize_str || kstrtoul(memsize_str, 0, &memsize))  		memsize = 0x04000000;  	add_memory_region(0, memsize, BOOT_MEM_RAM); diff --git a/arch/mips/alchemy/common/power.c b/arch/mips/alchemy/common/power.c index 0c7fce2a3c1..bdb28dee8fd 100644 --- a/arch/mips/alchemy/common/power.c +++ b/arch/mips/alchemy/common/power.c @@ -29,7 +29,6 @@   *  675 Mass Ave, Cambridge, MA 02139, USA.   */ -#include <linux/init.h>  #include <linux/pm.h>  #include <linux/sysctl.h>  #include <linux/jiffies.h> diff --git a/arch/mips/alchemy/common/setup.c b/arch/mips/alchemy/common/setup.c index 62b4e7bbeab..8267e3c9772 100644 --- a/arch/mips/alchemy/common/setup.c +++ b/arch/mips/alchemy/common/setup.c @@ -30,6 +30,7 @@  #include <linux/jiffies.h>  #include <linux/module.h> +#include <asm/dma-coherence.h>  #include <asm/mipsregs.h>  #include <asm/time.h> @@ -59,6 +60,21 @@ void __init plat_mem_setup(void)  		/* Clear to obtain best system bus performance */  		clear_c0_config(1 << 19); /* Clear Config[OD] */ +	hw_coherentio = 0; +	coherentio = 1; +	switch (alchemy_get_cputype()) { +	case ALCHEMY_CPU_AU1000: +	case ALCHEMY_CPU_AU1500: +	case ALCHEMY_CPU_AU1100: +		coherentio = 0; +		break; +	case ALCHEMY_CPU_AU1200: +		/* Au1200 AB USB does not support coherent memory */ +		if (0 == (read_c0_prid() & PRID_REV_MASK)) +			coherentio = 0; +		break; +	} +  	board_setup();	/* board specific setup */  	/* IO/MEM resources. */ diff --git a/arch/mips/alchemy/common/sleeper.S b/arch/mips/alchemy/common/sleeper.S index 706d933e008..c73d81270b4 100644 --- a/arch/mips/alchemy/common/sleeper.S +++ b/arch/mips/alchemy/common/sleeper.S @@ -95,7 +95,7 @@ LEAF(alchemy_sleep_au1000)  	/* cache following instructions, as memory gets put to sleep */  	la	t0, 1f -	.set	mips3 +	.set	arch=r4000  	cache	0x14, 0(t0)  	cache	0x14, 32(t0)  	cache	0x14, 64(t0) @@ -121,7 +121,7 @@ LEAF(alchemy_sleep_au1550)  	/* cache following instructions, as memory gets put to sleep */  	la	t0, 1f -	.set	mips3 +	.set	arch=r4000  	cache	0x14, 0(t0)  	cache	0x14, 32(t0)  	cache	0x14, 64(t0) @@ -163,7 +163,7 @@ LEAF(alchemy_sleep_au1300)  	la	t1, 4f  	subu	t2, t1, t0 -	.set	mips3 +	.set	arch=r4000  1:	cache	0x14, 0(t0)  	subu	t2, t2, 32 diff --git a/arch/mips/alchemy/common/usb.c b/arch/mips/alchemy/common/usb.c index 2adc7edda49..d193dbea84a 100644 --- a/arch/mips/alchemy/common/usb.c +++ b/arch/mips/alchemy/common/usb.c @@ -355,47 +355,25 @@ static inline void __au1200_udc_control(void __iomem *base, int enable)  	}  } -static inline int au1200_coherency_bug(void) -{ -#if defined(CONFIG_DMA_COHERENT) -	/* Au1200 AB USB does not support coherent memory */ -	if (!(read_c0_prid() & PRID_REV_MASK)) { -		printk(KERN_INFO "Au1200 USB: this is chip revision AB !!\n"); -		printk(KERN_INFO "Au1200 USB: update your board or re-configure" -				 " the kernel\n"); -		return -ENODEV; -	} -#endif -	return 0; -} -  static inline int au1200_usb_control(int block, int enable)  {  	void __iomem *base =  			(void __iomem *)KSEG1ADDR(AU1200_USB_CTL_PHYS_ADDR); -	int ret = 0;  	switch (block) {  	case ALCHEMY_USB_OHCI0: -		ret = au1200_coherency_bug(); -		if (ret && enable) -			goto out;  		__au1200_ohci_control(base, enable);  		break;  	case ALCHEMY_USB_UDC0:  		__au1200_udc_control(base, enable);  		break;  	case ALCHEMY_USB_EHCI0: -		ret = au1200_coherency_bug(); -		if (ret && enable) -			goto out;  		__au1200_ehci_control(base, enable);  		break;  	default: -		ret = -ENODEV; +		return -ENODEV;  	} -out: -	return ret; +	return 0;  } diff --git a/arch/mips/alchemy/devboards/Makefile b/arch/mips/alchemy/devboards/Makefile index 15bf7306648..9da3659a9d1 100644 --- a/arch/mips/alchemy/devboards/Makefile +++ b/arch/mips/alchemy/devboards/Makefile @@ -2,7 +2,5 @@  # Alchemy Develboards  # -obj-y += bcsr.o platform.o +obj-y += bcsr.o platform.o db1000.o db1200.o db1300.o db1550.o db1xxx.o  obj-$(CONFIG_PM)		+= pm.o -obj-$(CONFIG_MIPS_DB1000)	+= db1000.o -obj-$(CONFIG_MIPS_DB1235)	+= db1235.o db1200.o db1300.o db1550.o diff --git a/arch/mips/alchemy/devboards/db1000.c b/arch/mips/alchemy/devboards/db1000.c index 11f3ad20321..92dd929d405 100644 --- a/arch/mips/alchemy/devboards/db1000.c +++ b/arch/mips/alchemy/devboards/db1000.c @@ -41,42 +41,27 @@  #define F_SWAPPED (bcsr_read(BCSR_STATUS) & BCSR_STATUS_DB1000_SWAPBOOT) -struct pci_dev; +const char *get_system_type(void); -static const char *board_type_str(void) +int __init db1000_board_setup(void)  { +	/* initialize board register space */ +	bcsr_init(DB1000_BCSR_PHYS_ADDR, +		  DB1000_BCSR_PHYS_ADDR + DB1000_BCSR_HEXLED_OFS); +  	switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) {  	case BCSR_WHOAMI_DB1000: -		return "DB1000";  	case BCSR_WHOAMI_DB1500: -		return "DB1500";  	case BCSR_WHOAMI_DB1100: -		return "DB1100";  	case BCSR_WHOAMI_PB1500:  	case BCSR_WHOAMI_PB1500R2: -		return "PB1500";  	case BCSR_WHOAMI_PB1100: -		return "PB1100"; -	default: -		return "(unknown)"; +		pr_info("AMD Alchemy %s Board\n", get_system_type()); +		return 0;  	} +	return -ENODEV;  } -const char *get_system_type(void) -{ -	return board_type_str(); -} - -void __init board_setup(void) -{ -	/* initialize board register space */ -	bcsr_init(DB1000_BCSR_PHYS_ADDR, -		  DB1000_BCSR_PHYS_ADDR + DB1000_BCSR_HEXLED_OFS); - -	printk(KERN_INFO "AMD Alchemy %s Board\n", board_type_str()); -} - -  static int db1500_map_pci_irq(const struct pci_dev *d, u8 slot, u8 pin)  {  	if ((slot < 12) || (slot > 13) || pin == 0) @@ -114,17 +99,10 @@ static struct platform_device db1500_pci_host_dev = {  	.resource	= alchemy_pci_host_res,  }; -static int __init db1500_pci_init(void) +int __init db1500_pci_setup(void)  { -	int id = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI)); -	if ((id == BCSR_WHOAMI_DB1500) || (id == BCSR_WHOAMI_PB1500) || -	    (id == BCSR_WHOAMI_PB1500R2)) -		return platform_device_register(&db1500_pci_host_dev); -	return 0; +	return platform_device_register(&db1500_pci_host_dev);  } -/* must be arch_initcall; MIPS PCI scans busses in a subsys_initcall */ -arch_initcall(db1500_pci_init); -  static struct resource au1100_lcd_resources[] = {  	[0] = { @@ -513,7 +491,7 @@ static struct platform_device *db1100_devs[] = {  	&db1000_irda_dev,  }; -static int __init db1000_dev_init(void) +int __init db1000_dev_setup(void)  {  	int board = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI));  	int c0, c1, d0, d1, s0, s1, flashsize = 32,  twosocks = 1; @@ -534,13 +512,10 @@ static int __init db1000_dev_init(void)  		s0 = AU1100_GPIO1_INT;  		s1 = AU1100_GPIO4_INT; +		gpio_request(19, "sd0_cd"); +		gpio_request(20, "sd1_cd");  		gpio_direction_input(19);	/* sd0 cd# */  		gpio_direction_input(20);	/* sd1 cd# */ -		gpio_direction_input(21);	/* touch pendown# */ -		gpio_direction_input(207);	/* SPI MISO */ -		gpio_direction_output(208, 0);	/* SPI MOSI */ -		gpio_direction_output(209, 1);	/* SPI SCK */ -		gpio_direction_output(210, 1);	/* SPI CS# */  		/* spi_gpio on SSI0 pins */  		pfc = __raw_readl((void __iomem *)SYS_PINFUNC); @@ -626,4 +601,3 @@ static int __init db1000_dev_init(void)  	db1x_register_norflash(flashsize << 20, 4 /* 32bit */, F_SWAPPED);  	return 0;  } -device_initcall(db1000_dev_init); diff --git a/arch/mips/alchemy/devboards/db1200.c b/arch/mips/alchemy/devboards/db1200.c index a84d98b8f96..9e46667f259 100644 --- a/arch/mips/alchemy/devboards/db1200.c +++ b/arch/mips/alchemy/devboards/db1200.c @@ -35,16 +35,63 @@  #include <linux/spi/spi.h>  #include <linux/spi/flash.h>  #include <linux/smc91x.h> +#include <linux/ata_platform.h>  #include <asm/mach-au1x00/au1000.h>  #include <asm/mach-au1x00/au1100_mmc.h>  #include <asm/mach-au1x00/au1xxx_dbdma.h> +#include <asm/mach-au1x00/au1xxx_psc.h>  #include <asm/mach-au1x00/au1200fb.h>  #include <asm/mach-au1x00/au1550_spi.h>  #include <asm/mach-db1x00/bcsr.h> -#include <asm/mach-db1x00/db1200.h>  #include "platform.h" +#define BCSR_INT_IDE		0x0001 +#define BCSR_INT_ETH		0x0002 +#define BCSR_INT_PC0		0x0004 +#define BCSR_INT_PC0STSCHG	0x0008 +#define BCSR_INT_PC1		0x0010 +#define BCSR_INT_PC1STSCHG	0x0020 +#define BCSR_INT_DC		0x0040 +#define BCSR_INT_FLASHBUSY	0x0080 +#define BCSR_INT_PC0INSERT	0x0100 +#define BCSR_INT_PC0EJECT	0x0200 +#define BCSR_INT_PC1INSERT	0x0400 +#define BCSR_INT_PC1EJECT	0x0800 +#define BCSR_INT_SD0INSERT	0x1000 +#define BCSR_INT_SD0EJECT	0x2000 +#define BCSR_INT_SD1INSERT	0x4000 +#define BCSR_INT_SD1EJECT	0x8000 + +#define DB1200_IDE_PHYS_ADDR	0x18800000 +#define DB1200_IDE_REG_SHIFT	5 +#define DB1200_IDE_PHYS_LEN	(16 << DB1200_IDE_REG_SHIFT) +#define DB1200_ETH_PHYS_ADDR	0x19000300 +#define DB1200_NAND_PHYS_ADDR	0x20000000 + +#define PB1200_IDE_PHYS_ADDR	0x0C800000 +#define PB1200_ETH_PHYS_ADDR	0x0D000300 +#define PB1200_NAND_PHYS_ADDR	0x1C000000 + +#define DB1200_INT_BEGIN	(AU1000_MAX_INTR + 1) +#define DB1200_IDE_INT		(DB1200_INT_BEGIN + 0) +#define DB1200_ETH_INT		(DB1200_INT_BEGIN + 1) +#define DB1200_PC0_INT		(DB1200_INT_BEGIN + 2) +#define DB1200_PC0_STSCHG_INT	(DB1200_INT_BEGIN + 3) +#define DB1200_PC1_INT		(DB1200_INT_BEGIN + 4) +#define DB1200_PC1_STSCHG_INT	(DB1200_INT_BEGIN + 5) +#define DB1200_DC_INT		(DB1200_INT_BEGIN + 6) +#define DB1200_FLASHBUSY_INT	(DB1200_INT_BEGIN + 7) +#define DB1200_PC0_INSERT_INT	(DB1200_INT_BEGIN + 8) +#define DB1200_PC0_EJECT_INT	(DB1200_INT_BEGIN + 9) +#define DB1200_PC1_INSERT_INT	(DB1200_INT_BEGIN + 10) +#define DB1200_PC1_EJECT_INT	(DB1200_INT_BEGIN + 11) +#define DB1200_SD0_INSERT_INT	(DB1200_INT_BEGIN + 12) +#define DB1200_SD0_EJECT_INT	(DB1200_INT_BEGIN + 13) +#define PB1200_SD1_INSERT_INT	(DB1200_INT_BEGIN + 14) +#define PB1200_SD1_EJECT_INT	(DB1200_INT_BEGIN + 15) +#define DB1200_INT_END		(DB1200_INT_BEGIN + 15) +  const char *get_system_type(void);  static int __init db1200_detect_board(void) @@ -89,6 +136,15 @@ int __init db1200_board_setup(void)  		return -ENODEV;  	whoami = bcsr_read(BCSR_WHOAMI); +	switch (BCSR_WHOAMI_BOARD(whoami)) { +	case BCSR_WHOAMI_PB1200_DDR1: +	case BCSR_WHOAMI_PB1200_DDR2: +	case BCSR_WHOAMI_DB1200: +		break; +	default: +		return -ENODEV; +	} +  	printk(KERN_INFO "Alchemy/AMD/RMI %s Board, CPLD Rev %d"  		"  Board-ID %d	Daughtercard ID %d\n", get_system_type(),  		(whoami >> 4) & 0xf, (whoami >> 8) & 0xf, whoami & 0xf); @@ -275,32 +331,38 @@ static struct platform_device db1200_eth_dev = {  /**********************************************************************/ +static struct pata_platform_info db1200_ide_info = { +	.ioport_shift	= DB1200_IDE_REG_SHIFT, +}; + +#define IDE_ALT_START	(14 << DB1200_IDE_REG_SHIFT)  static struct resource db1200_ide_res[] = {  	[0] = {  		.start	= DB1200_IDE_PHYS_ADDR, -		.end	= DB1200_IDE_PHYS_ADDR + DB1200_IDE_PHYS_LEN - 1, +		.end	= DB1200_IDE_PHYS_ADDR + IDE_ALT_START - 1,  		.flags	= IORESOURCE_MEM,  	},  	[1] = { +		.start	= DB1200_IDE_PHYS_ADDR + IDE_ALT_START, +		.end	= DB1200_IDE_PHYS_ADDR + DB1200_IDE_PHYS_LEN - 1, +		.flags	= IORESOURCE_MEM, +	}, +	[2] = {  		.start	= DB1200_IDE_INT,  		.end	= DB1200_IDE_INT,  		.flags	= IORESOURCE_IRQ,  	}, -	[2] = { -		.start	= AU1200_DSCR_CMD0_DMA_REQ1, -		.end	= AU1200_DSCR_CMD0_DMA_REQ1, -		.flags	= IORESOURCE_DMA, -	},  };  static u64 au1200_ide_dmamask = DMA_BIT_MASK(32);  static struct platform_device db1200_ide_dev = { -	.name		= "au1200-ide", +	.name		= "pata_platform",  	.id		= 0,  	.dev = {  		.dma_mask		= &au1200_ide_dmamask,  		.coherent_dma_mask	= DMA_BIT_MASK(32), +		.platform_data		= &db1200_ide_info,  	},  	.num_resources	= ARRAY_SIZE(db1200_ide_res),  	.resource	= db1200_ide_res, diff --git a/arch/mips/alchemy/devboards/db1300.c b/arch/mips/alchemy/devboards/db1300.c index 6167e73eef9..1aed6be4de1 100644 --- a/arch/mips/alchemy/devboards/db1300.c +++ b/arch/mips/alchemy/devboards/db1300.c @@ -26,12 +26,44 @@  #include <asm/mach-au1x00/au1200fb.h>  #include <asm/mach-au1x00/au1xxx_dbdma.h>  #include <asm/mach-au1x00/au1xxx_psc.h> -#include <asm/mach-db1x00/db1300.h>  #include <asm/mach-db1x00/bcsr.h>  #include <asm/mach-au1x00/prom.h>  #include "platform.h" +/* FPGA (external mux) interrupt sources */ +#define DB1300_FIRST_INT	(ALCHEMY_GPIC_INT_LAST + 1) +#define DB1300_IDE_INT		(DB1300_FIRST_INT + 0) +#define DB1300_ETH_INT		(DB1300_FIRST_INT + 1) +#define DB1300_CF_INT		(DB1300_FIRST_INT + 2) +#define DB1300_VIDEO_INT	(DB1300_FIRST_INT + 4) +#define DB1300_HDMI_INT		(DB1300_FIRST_INT + 5) +#define DB1300_DC_INT		(DB1300_FIRST_INT + 6) +#define DB1300_FLASH_INT	(DB1300_FIRST_INT + 7) +#define DB1300_CF_INSERT_INT	(DB1300_FIRST_INT + 8) +#define DB1300_CF_EJECT_INT	(DB1300_FIRST_INT + 9) +#define DB1300_AC97_INT		(DB1300_FIRST_INT + 10) +#define DB1300_AC97_PEN_INT	(DB1300_FIRST_INT + 11) +#define DB1300_SD1_INSERT_INT	(DB1300_FIRST_INT + 12) +#define DB1300_SD1_EJECT_INT	(DB1300_FIRST_INT + 13) +#define DB1300_OTG_VBUS_OC_INT	(DB1300_FIRST_INT + 14) +#define DB1300_HOST_VBUS_OC_INT (DB1300_FIRST_INT + 15) +#define DB1300_LAST_INT		(DB1300_FIRST_INT + 15) + +/* SMSC9210 CS */ +#define DB1300_ETH_PHYS_ADDR	0x19000000 +#define DB1300_ETH_PHYS_END	0x197fffff + +/* ATA CS */ +#define DB1300_IDE_PHYS_ADDR	0x18800000 +#define DB1300_IDE_REG_SHIFT	5 +#define DB1300_IDE_PHYS_LEN	(16 << DB1300_IDE_REG_SHIFT) + +/* NAND CS */ +#define DB1300_NAND_PHYS_ADDR	0x20000000 +#define DB1300_NAND_PHYS_END	0x20000fff + +  static struct i2c_board_info db1300_i2c_devs[] __initdata = {  	{ I2C_BOARD_INFO("wm8731", 0x1b), },	/* I2S audio codec */  	{ I2C_BOARD_INFO("ne1619", 0x2d), },	/* adm1025-compat hwmon */ @@ -759,11 +791,15 @@ int __init db1300_board_setup(void)  {  	unsigned short whoami; -	db1300_gpio_config();  	bcsr_init(DB1300_BCSR_PHYS_ADDR,  		  DB1300_BCSR_PHYS_ADDR + DB1300_BCSR_HEXLED_OFS);  	whoami = bcsr_read(BCSR_WHOAMI); +	if (BCSR_WHOAMI_BOARD(whoami) != BCSR_WHOAMI_DB1300) +		return -ENODEV; + +	db1300_gpio_config(); +  	printk(KERN_INFO "NetLogic DBAu1300 Development Platform.\n\t"  		"BoardID %d   CPLD Rev %d   DaughtercardID %d\n",  		BCSR_WHOAMI_BOARD(whoami), BCSR_WHOAMI_CPLD(whoami), diff --git a/arch/mips/alchemy/devboards/db1550.c b/arch/mips/alchemy/devboards/db1550.c index 016cddacd7e..bbd8d988470 100644 --- a/arch/mips/alchemy/devboards/db1550.c +++ b/arch/mips/alchemy/devboards/db1550.c @@ -62,10 +62,16 @@ int __init db1550_board_setup(void)  		  DB1550_BCSR_PHYS_ADDR + DB1550_BCSR_HEXLED_OFS);  	whoami = bcsr_read(BCSR_WHOAMI); /* PB1550 hexled offset differs */ -	if ((BCSR_WHOAMI_BOARD(whoami) == BCSR_WHOAMI_PB1550_SDR) || -	    (BCSR_WHOAMI_BOARD(whoami) == BCSR_WHOAMI_PB1550_DDR)) +	switch (BCSR_WHOAMI_BOARD(whoami)) { +	case BCSR_WHOAMI_PB1550_SDR: +	case BCSR_WHOAMI_PB1550_DDR:  		bcsr_init(PB1550_BCSR_PHYS_ADDR,  			  PB1550_BCSR_PHYS_ADDR + PB1550_BCSR_HEXLED_OFS); +	case BCSR_WHOAMI_DB1550: +		break; +	default: +		return -ENODEV; +	}  	pr_info("Alchemy/AMD %s Board, CPLD Rev %d Board-ID %d	"	\  		"Daughtercard ID %d\n", get_system_type(), diff --git a/arch/mips/alchemy/devboards/db1235.c b/arch/mips/alchemy/devboards/db1xxx.c index c76a90f7866..2d47f951121 100644 --- a/arch/mips/alchemy/devboards/db1235.c +++ b/arch/mips/alchemy/devboards/db1xxx.c @@ -1,12 +1,13 @@  /* - * DB1200/PB1200 / DB1550 / DB1300 board support. - * - * These 4 boards can reliably be supported in a single kernel image. + * Alchemy DB/PB1xxx board support.   */  #include <asm/mach-au1x00/au1000.h>  #include <asm/mach-db1x00/bcsr.h> +int __init db1000_board_setup(void); +int __init db1000_dev_setup(void); +int __init db1500_pci_setup(void);  int __init db1200_board_setup(void);  int __init db1200_dev_setup(void);  int __init db1300_board_setup(void); @@ -18,6 +19,17 @@ int __init db1550_pci_setup(int);  static const char *board_type_str(void)  {  	switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) { +	case BCSR_WHOAMI_DB1000: +		return "DB1000"; +	case BCSR_WHOAMI_DB1500: +		return "DB1500"; +	case BCSR_WHOAMI_DB1100: +		return "DB1100"; +	case BCSR_WHOAMI_PB1500: +	case BCSR_WHOAMI_PB1500R2: +		return "PB1500"; +	case BCSR_WHOAMI_PB1100: +		return "PB1100";  	case BCSR_WHOAMI_PB1200_DDR1:  	case BCSR_WHOAMI_PB1200_DDR2:  		return "PB1200"; @@ -45,6 +57,11 @@ void __init board_setup(void)  	int ret;  	switch (alchemy_get_cputype()) { +	case ALCHEMY_CPU_AU1000: +	case ALCHEMY_CPU_AU1500: +	case ALCHEMY_CPU_AU1100: +		ret = db1000_board_setup(); +		break;  	case ALCHEMY_CPU_AU1550:  		ret = db1550_board_setup();  		break; @@ -59,10 +76,10 @@ void __init board_setup(void)  		ret = -ENODEV;  	}  	if (ret) -		panic("cannot initialize board support\n"); +		panic("cannot initialize board support");  } -int __init db1235_arch_init(void) +static int __init db1xxx_arch_init(void)  {  	int id = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI));  	if (id == BCSR_WHOAMI_DB1550) @@ -70,14 +87,24 @@ int __init db1235_arch_init(void)  	else if ((id == BCSR_WHOAMI_PB1550_SDR) ||  		 (id == BCSR_WHOAMI_PB1550_DDR))  		return db1550_pci_setup(1); +	else if ((id == BCSR_WHOAMI_DB1500) || (id == BCSR_WHOAMI_PB1500) || +		 (id == BCSR_WHOAMI_PB1500R2)) +		return db1500_pci_setup();  	return 0;  } -arch_initcall(db1235_arch_init); +arch_initcall(db1xxx_arch_init); -int __init db1235_dev_init(void) +static int __init db1xxx_dev_init(void)  {  	switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) { +	case BCSR_WHOAMI_DB1000: +	case BCSR_WHOAMI_DB1500: +	case BCSR_WHOAMI_DB1100: +	case BCSR_WHOAMI_PB1500: +	case BCSR_WHOAMI_PB1500R2: +	case BCSR_WHOAMI_PB1100: +		return db1000_dev_setup();  	case BCSR_WHOAMI_PB1200_DDR1:  	case BCSR_WHOAMI_PB1200_DDR2:  	case BCSR_WHOAMI_DB1200: @@ -91,4 +118,4 @@ int __init db1235_dev_init(void)  	}  	return 0;  } -device_initcall(db1235_dev_init); +device_initcall(db1xxx_dev_init); diff --git a/arch/mips/alchemy/devboards/pm.c b/arch/mips/alchemy/devboards/pm.c index b86bff31d1d..61e90fe9eab 100644 --- a/arch/mips/alchemy/devboards/pm.c +++ b/arch/mips/alchemy/devboards/pm.c @@ -158,7 +158,7 @@ static ssize_t db1x_pmattr_store(struct kobject *kobj,  	int tmp;  	if (ATTRCMP(timer_timeout)) { -		tmp = strict_strtoul(instr, 0, &l); +		tmp = kstrtoul(instr, 0, &l);  		if (tmp)  			return tmp; @@ -181,7 +181,7 @@ static ssize_t db1x_pmattr_store(struct kobject *kobj,  		}  	} else if (ATTRCMP(wakemsk)) { -		tmp = strict_strtoul(instr, 0, &l); +		tmp = kstrtoul(instr, 0, &l);  		if (tmp)  			return tmp;  | 
