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

Commit f59c811f authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle
Browse files

MIPS: Alchemy: one kernel for DB1000/DB1500/DB1100



These 3 boards are very similar; with this patch a single kernel image
which runs on all three can be built.

Tested on DB1500 and DB1100.

Signed-off-by: default avatarManuel Lauss <manuel.lauss@googlemail.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2872/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 6f7c8623
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -27,17 +27,12 @@ config MIPS_MTX1
	select SYS_HAS_EARLY_PRINTK

config MIPS_DB1000
	bool "Alchemy DB1000 board"
	bool "Alchemy DB1000/DB1500/DB1100 boards"
	select ALCHEMY_GPIOINT_AU1000
	select DMA_NONCOHERENT
	select HW_HAS_PCI
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK

config MIPS_DB1100
	bool "Alchemy DB1100 board"
	select ALCHEMY_GPIOINT_AU1000
	select DMA_NONCOHERENT
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_BIG_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK

@@ -57,16 +52,6 @@ config MIPS_DB1300
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK

config MIPS_DB1500
	bool "Alchemy DB1500 board"
	select ALCHEMY_GPIOINT_AU1000
	select DMA_NONCOHERENT
	select HW_HAS_PCI
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_BIG_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK

config MIPS_DB1550
	bool "Alchemy DB1550 board"
	select ALCHEMY_GPIOINT_AU1000
+1 −15
Original line number Diff line number Diff line
@@ -26,26 +26,12 @@ cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00
load-$(CONFIG_MIPS_PB1550)	+= 0xffffffff80100000

#
# AMD Alchemy Db1000 eval board
# AMD Alchemy Db1000/Db1500/Db1100 eval boards
#
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 Db1100 eval board
#
platform-$(CONFIG_MIPS_DB1100)	+= alchemy/devboards/
cflags-$(CONFIG_MIPS_DB1100)	+= -I$(srctree)/arch/mips/include/asm/mach-db1x00
load-$(CONFIG_MIPS_DB1100)	+= 0xffffffff80100000

#
# AMD Alchemy Db1500 eval board
#
platform-$(CONFIG_MIPS_DB1500)	+= alchemy/devboards/
cflags-$(CONFIG_MIPS_DB1500)	+= -I$(srctree)/arch/mips/include/asm/mach-db1x00
load-$(CONFIG_MIPS_DB1500)	+= 0xffffffff80100000

#
# AMD Alchemy Db1550 eval board
#
+1 −3
Original line number Diff line number Diff line
@@ -7,9 +7,7 @@ obj-$(CONFIG_PM) += pm.o
obj-$(CONFIG_MIPS_PB1100)	+= pb1100.o
obj-$(CONFIG_MIPS_PB1500)	+= pb1500.o
obj-$(CONFIG_MIPS_PB1550)	+= pb1550.o
obj-$(CONFIG_MIPS_DB1000)	+= db1x00.o
obj-$(CONFIG_MIPS_DB1100)	+= db1x00.o
obj-$(CONFIG_MIPS_DB1000)	+= db1000.o
obj-$(CONFIG_MIPS_DB1200)	+= db1200.o
obj-$(CONFIG_MIPS_DB1300)	+= db1300.o
obj-$(CONFIG_MIPS_DB1500)	+= db1x00.o
obj-$(CONFIG_MIPS_DB1550)	+= db1550.o
+73 −62
Original line number Diff line number Diff line
@@ -32,28 +32,37 @@
#include <prom.h>
#include "platform.h"

#define F_SWAPPED (bcsr_read(BCSR_STATUS) & BCSR_STATUS_DB1000_SWAPBOOT)

struct pci_dev;

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";
	default:
		return "(unknown)";
	}
}

const char *get_system_type(void)
{
	return "Alchemy Db1x00";
	return board_type_str();
}

void __init board_setup(void)
{
#ifdef CONFIG_MIPS_DB1000
	printk(KERN_INFO "AMD Alchemy Au1000/Db1000 Board\n");
#endif
#ifdef CONFIG_MIPS_DB1500
	printk(KERN_INFO "AMD Alchemy Au1500/Db1500 Board\n");
#endif
#ifdef CONFIG_MIPS_DB1100
	printk(KERN_INFO "AMD Alchemy Au1100/Db1100 Board\n");
#endif
	/* 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());

#if defined(CONFIG_IRDA) && defined(CONFIG_AU1000_FIR)
	{
		u32 pin_func;
@@ -72,35 +81,6 @@ void __init board_setup(void)
	alchemy_gpio1_input_enable();
}

/* DB1xxx PCMCIA interrupt sources:
 * CD0/1	GPIO0/3
 * STSCHG0/1	GPIO1/4
 * CARD0/1	GPIO2/5
 */

#define F_SWAPPED (bcsr_read(BCSR_STATUS) & BCSR_STATUS_DB1000_SWAPBOOT)

#if defined(CONFIG_MIPS_DB1000)
#define DB1XXX_PCMCIA_CD0	AU1000_GPIO0_INT
#define DB1XXX_PCMCIA_STSCHG0	AU1000_GPIO1_INT
#define DB1XXX_PCMCIA_CARD0	AU1000_GPIO2_INT
#define DB1XXX_PCMCIA_CD1	AU1000_GPIO3_INT
#define DB1XXX_PCMCIA_STSCHG1	AU1000_GPIO4_INT
#define DB1XXX_PCMCIA_CARD1	AU1000_GPIO5_INT
#elif defined(CONFIG_MIPS_DB1100)
#define DB1XXX_PCMCIA_CD0	AU1100_GPIO0_INT
#define DB1XXX_PCMCIA_STSCHG0	AU1100_GPIO1_INT
#define DB1XXX_PCMCIA_CARD0	AU1100_GPIO2_INT
#define DB1XXX_PCMCIA_CD1	AU1100_GPIO3_INT
#define DB1XXX_PCMCIA_STSCHG1	AU1100_GPIO4_INT
#define DB1XXX_PCMCIA_CARD1	AU1100_GPIO5_INT
#elif defined(CONFIG_MIPS_DB1500)
#define DB1XXX_PCMCIA_CD0	AU1500_GPIO0_INT
#define DB1XXX_PCMCIA_STSCHG0	AU1500_GPIO1_INT
#define DB1XXX_PCMCIA_CARD0	AU1500_GPIO2_INT
#define DB1XXX_PCMCIA_CD1	AU1500_GPIO3_INT
#define DB1XXX_PCMCIA_STSCHG1	AU1500_GPIO4_INT
#define DB1XXX_PCMCIA_CARD1	AU1500_GPIO5_INT

static int db1500_map_pci_irq(const struct pci_dev *d, u8 slot, u8 pin)
{
@@ -141,13 +121,14 @@ static struct platform_device db1500_pci_host_dev = {

static int __init db1500_pci_init(void)
{
	if (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI)) == BCSR_WHOAMI_DB1500)
		return platform_device_register(&db1500_pci_host_dev);
	return 0;
}
/* must be arch_initcall; MIPS PCI scans busses in a subsys_initcall */
arch_initcall(db1500_pci_init);
#endif

#ifdef CONFIG_MIPS_DB1100

static struct resource au1100_lcd_resources[] = {
	[0] = {
		.start	= AU1100_LCD_PHYS_ADDR,
@@ -173,7 +154,6 @@ static struct platform_device au1100_lcd_device = {
	.num_resources	= ARRAY_SIZE(au1100_lcd_resources),
	.resource	= au1100_lcd_resources,
};
#endif

static struct resource alchemy_ac97c_res[] = {
	[0] = {
@@ -214,14 +194,53 @@ static struct platform_device db1x00_audio_dev = {
	.name		= "db1000-audio",
};

static int __init db1xxx_dev_init(void)
static struct platform_device *db1x00_devs[] = {
	&db1x00_codec_dev,
	&alchemy_ac97c_dma_dev,
	&alchemy_ac97c_dev,
	&db1x00_audio_dev,
};

static struct platform_device *db1100_devs[] = {
	&au1100_lcd_device,
};

static int __init db1000_dev_init(void)
{
	irq_set_irq_type(DB1XXX_PCMCIA_CD0, IRQ_TYPE_EDGE_BOTH);
	irq_set_irq_type(DB1XXX_PCMCIA_CD1, IRQ_TYPE_EDGE_BOTH);
	irq_set_irq_type(DB1XXX_PCMCIA_CARD0, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(DB1XXX_PCMCIA_CARD1, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(DB1XXX_PCMCIA_STSCHG0, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(DB1XXX_PCMCIA_STSCHG1, IRQ_TYPE_LEVEL_LOW);
	int board = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI));
	int c0, c1, d0, d1, s0, s1;

	if (board == BCSR_WHOAMI_DB1500) {
		c0 = AU1500_GPIO2_INT;
		c1 = AU1500_GPIO5_INT;
		d0 = AU1500_GPIO0_INT;
		d1 = AU1500_GPIO3_INT;
		s0 = AU1500_GPIO1_INT;
		s1 = AU1500_GPIO4_INT;
	} else if (board == BCSR_WHOAMI_DB1100) {
		c0 = AU1100_GPIO2_INT;
		c1 = AU1100_GPIO5_INT;
		d0 = AU1100_GPIO0_INT;
		d1 = AU1100_GPIO3_INT;
		s0 = AU1100_GPIO1_INT;
		s1 = AU1100_GPIO4_INT;
		platform_add_devices(db1100_devs, ARRAY_SIZE(db1100_devs));
	} else if (board == BCSR_WHOAMI_DB1000) {
		c0 = AU1000_GPIO2_INT;
		c1 = AU1000_GPIO5_INT;
		d0 = AU1000_GPIO0_INT;
		d1 = AU1000_GPIO3_INT;
		s0 = AU1000_GPIO1_INT;
		s1 = AU1000_GPIO4_INT;
	} else
		return 0; /* unknown board, no further dev setup to do */

	irq_set_irq_type(d0, IRQ_TYPE_EDGE_BOTH);
	irq_set_irq_type(d1, IRQ_TYPE_EDGE_BOTH);
	irq_set_irq_type(c0, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(c1, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(s0, IRQ_TYPE_LEVEL_LOW);
	irq_set_irq_type(s1, IRQ_TYPE_LEVEL_LOW);

	db1x_register_pcmcia_socket(
		AU1000_PCMCIA_ATTR_PHYS_ADDR,
@@ -230,8 +249,7 @@ static int __init db1xxx_dev_init(void)
		AU1000_PCMCIA_MEM_PHYS_ADDR  + 0x000400000 - 1,
		AU1000_PCMCIA_IO_PHYS_ADDR,
		AU1000_PCMCIA_IO_PHYS_ADDR   + 0x000010000 - 1,
		DB1XXX_PCMCIA_CARD0, DB1XXX_PCMCIA_CD0,
		/*DB1XXX_PCMCIA_STSCHG0*/0, 0, 0);
		c0, d0,	/*s0*/0, 0, 0);

	db1x_register_pcmcia_socket(
		AU1000_PCMCIA_ATTR_PHYS_ADDR + 0x004000000,
@@ -240,17 +258,10 @@ static int __init db1xxx_dev_init(void)
		AU1000_PCMCIA_MEM_PHYS_ADDR  + 0x004400000 - 1,
		AU1000_PCMCIA_IO_PHYS_ADDR   + 0x004000000,
		AU1000_PCMCIA_IO_PHYS_ADDR   + 0x004010000 - 1,
		DB1XXX_PCMCIA_CARD1, DB1XXX_PCMCIA_CD1,
		/*DB1XXX_PCMCIA_STSCHG1*/0, 0, 1);
#ifdef CONFIG_MIPS_DB1100
	platform_device_register(&au1100_lcd_device);
#endif
	platform_device_register(&db1x00_codec_dev);
	platform_device_register(&alchemy_ac97c_dma_dev);
	platform_device_register(&alchemy_ac97c_dev);
	platform_device_register(&db1x00_audio_dev);
		c1, d1,	/*s1*/0, 0, 1);

	platform_add_devices(db1x00_devs, ARRAY_SIZE(db1x00_devs));
	db1x_register_norflash(32 << 20, 4 /* 32bit */, F_SWAPPED);
	return 0;
}
device_initcall(db1xxx_dev_init);
device_initcall(db1000_dev_init);
+2 −2
Original line number Diff line number Diff line
@@ -34,8 +34,8 @@
#include <prom.h>

#if defined(CONFIG_MIPS_DB1000) || \
    defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1100) || \
    defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_DB1500)
    defined(CONFIG_MIPS_PB1100) || \
    defined(CONFIG_MIPS_PB1500)
#define ALCHEMY_BOARD_DEFAULT_MEMSIZE	0x04000000

#else	/* Au1550/Au1200-based develboards */
Loading