* [PATCH 0/3] Alchemy: consolidate board code, v2
@ 2008-11-08 12:08 Manuel Lauss
2008-11-08 12:08 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss
` (2 more replies)
0 siblings, 3 replies; 19+ messages in thread
From: Manuel Lauss @ 2008-11-08 12:08 UTC (permalink / raw)
To: Linux-MIPS; +Cc: Sergei Shtylyov, Florian Fainelli, Bruno Randolf, Manuel Lauss
Hello,
(CC'ing Florian and Bruno since they have shown interest in the MTX-1
code in the past).
This is v2 of my attempts to consolidate Alchemy board code. This
patchset mostly moves code around with no intented functional changes.
Changes v1->v2:
- amended 2/3 as per Sergeis suggestions,
- simplified 3/3: now all boards can override the reset/poweroff hooks
if they want to; no changes for all existing in-tree users.
(although I'd still like to kill off alchemy/common/reset.c or at least
move it away from the other CPU-specific code). This should also
alleviate all of Sergei's remaining points.
Patch overview:
1/3: in all boards dirs, merge the irqmap.c/init.c files into
board_setup.c.
2/3: create a common subdirectory for Alchemy evalboards; extract
the prom code which is (almost) identical for all of them.
Also extract the code augmenting the commandline from
alchemy/common and sprinkle existing board init code with it.
Not every board should be forced to have a serial console on UART0.
3/3: allow boards to override default alchemy reset/poweroff hooks.
All patches have been compile-tested with all Alchemy boards available
in KConfig and tested on Db1200.
Feedback and Testers welcome!
Thanks,
Manuel Lauss
Manuel Lauss (3):
Alchemy: merge small board files into single files
Alchemy: Move evalboard code to common directory
Alchemy: allow boards to override default reset/poweroff functions.
arch/mips/Makefile | 24 +-
arch/mips/alchemy/common/setup.c | 33 +---
arch/mips/alchemy/db1x00/Makefile | 8 -
arch/mips/alchemy/db1x00/board_setup.c | 108 ---------
arch/mips/alchemy/db1x00/init.c | 62 -----
arch/mips/alchemy/db1x00/irqmap.c | 86 -------
arch/mips/alchemy/evalboards/Makefile | 17 ++
arch/mips/alchemy/evalboards/common.c | 62 +++++
arch/mips/alchemy/evalboards/db1x00.c | 206 ++++++++++++++++
arch/mips/alchemy/evalboards/pb1000.c | 196 +++++++++++++++
arch/mips/alchemy/evalboards/pb1100.c | 150 ++++++++++++
arch/mips/alchemy/evalboards/pb1200.c | 301 ++++++++++++++++++++++++
arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++
arch/mips/alchemy/evalboards/pb1500.c | 156 ++++++++++++
arch/mips/alchemy/evalboards/pb1550.c | 86 +++++++
arch/mips/alchemy/mtx-1/Makefile | 2 +-
arch/mips/alchemy/mtx-1/board_setup.c | 60 +++++-
arch/mips/alchemy/mtx-1/init.c | 60 -----
arch/mips/alchemy/mtx-1/irqmap.c | 52 ----
arch/mips/alchemy/pb1000/Makefile | 8 -
arch/mips/alchemy/pb1000/board_setup.c | 165 -------------
arch/mips/alchemy/pb1000/init.c | 57 -----
arch/mips/alchemy/pb1000/irqmap.c | 38 ---
arch/mips/alchemy/pb1100/Makefile | 8 -
arch/mips/alchemy/pb1100/board_setup.c | 109 ---------
arch/mips/alchemy/pb1100/init.c | 60 -----
arch/mips/alchemy/pb1100/irqmap.c | 40 ---
arch/mips/alchemy/pb1200/Makefile | 8 -
arch/mips/alchemy/pb1200/board_setup.c | 162 -------------
arch/mips/alchemy/pb1200/init.c | 58 -----
arch/mips/alchemy/pb1200/irqmap.c | 160 -------------
arch/mips/alchemy/pb1200/platform.c | 166 -------------
arch/mips/alchemy/pb1500/Makefile | 8 -
arch/mips/alchemy/pb1500/board_setup.c | 119 ----------
arch/mips/alchemy/pb1500/init.c | 58 -----
arch/mips/alchemy/pb1500/irqmap.c | 46 ----
arch/mips/alchemy/pb1550/Makefile | 8 -
arch/mips/alchemy/pb1550/board_setup.c | 58 -----
arch/mips/alchemy/pb1550/init.c | 58 -----
arch/mips/alchemy/pb1550/irqmap.c | 43 ----
arch/mips/alchemy/xxs1500/Makefile | 2 +-
arch/mips/alchemy/xxs1500/board_setup.c | 59 +++++-
arch/mips/alchemy/xxs1500/init.c | 58 -----
arch/mips/alchemy/xxs1500/irqmap.c | 49 ----
44 files changed, 1473 insertions(+), 1967 deletions(-)
delete mode 100644 arch/mips/alchemy/db1x00/Makefile
delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c
delete mode 100644 arch/mips/alchemy/db1x00/init.c
delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c
create mode 100644 arch/mips/alchemy/evalboards/Makefile
create mode 100644 arch/mips/alchemy/evalboards/common.c
create mode 100644 arch/mips/alchemy/evalboards/db1x00.c
create mode 100644 arch/mips/alchemy/evalboards/pb1000.c
create mode 100644 arch/mips/alchemy/evalboards/pb1100.c
create mode 100644 arch/mips/alchemy/evalboards/pb1200.c
create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c
create mode 100644 arch/mips/alchemy/evalboards/pb1500.c
create mode 100644 arch/mips/alchemy/evalboards/pb1550.c
delete mode 100644 arch/mips/alchemy/mtx-1/init.c
delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c
delete mode 100644 arch/mips/alchemy/pb1000/Makefile
delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c
delete mode 100644 arch/mips/alchemy/pb1000/init.c
delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c
delete mode 100644 arch/mips/alchemy/pb1100/Makefile
delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c
delete mode 100644 arch/mips/alchemy/pb1100/init.c
delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c
delete mode 100644 arch/mips/alchemy/pb1200/Makefile
delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c
delete mode 100644 arch/mips/alchemy/pb1200/init.c
delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c
delete mode 100644 arch/mips/alchemy/pb1200/platform.c
delete mode 100644 arch/mips/alchemy/pb1500/Makefile
delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c
delete mode 100644 arch/mips/alchemy/pb1500/init.c
delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c
delete mode 100644 arch/mips/alchemy/pb1550/Makefile
delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c
delete mode 100644 arch/mips/alchemy/pb1550/init.c
delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c
delete mode 100644 arch/mips/alchemy/xxs1500/init.c
delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c
^ permalink raw reply [flat|nested] 19+ messages in thread* [PATCH 1/3] Alchemy: merge small board files into single files 2008-11-08 12:08 [PATCH 0/3] Alchemy: consolidate board code, v2 Manuel Lauss @ 2008-11-08 12:08 ` Manuel Lauss 2008-11-12 3:54 ` Kevin Hickey 2008-11-08 12:08 ` [PATCH 2/3] Alchemy: Move evalboard code to common directory Manuel Lauss 2008-11-08 12:08 ` [PATCH 3/3] Alchemy: allow boards to override default reset/poweroff functions Manuel Lauss 2 siblings, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-08 12:08 UTC (permalink / raw) To: Linux-MIPS; +Cc: Sergei Shtylyov, Florian Fainelli, Bruno Randolf, Manuel Lauss Most files of the Alchemy boards are very small. Merge them. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> --- arch/mips/alchemy/db1x00/Makefile | 2 +- arch/mips/alchemy/db1x00/board_setup.c | 92 +++++++++++++++++- arch/mips/alchemy/db1x00/init.c | 62 ------------ arch/mips/alchemy/db1x00/irqmap.c | 86 ---------------- arch/mips/alchemy/mtx-1/Makefile | 2 +- arch/mips/alchemy/mtx-1/board_setup.c | 52 ++++++++++- arch/mips/alchemy/mtx-1/init.c | 60 ----------- arch/mips/alchemy/mtx-1/irqmap.c | 52 ---------- arch/mips/alchemy/pb1000/Makefile | 2 +- arch/mips/alchemy/pb1000/board_setup.c | 36 +++++++- arch/mips/alchemy/pb1000/init.c | 57 ----------- arch/mips/alchemy/pb1000/irqmap.c | 38 ------- arch/mips/alchemy/pb1100/Makefile | 2 +- arch/mips/alchemy/pb1100/board_setup.c | 42 ++++++++- arch/mips/alchemy/pb1100/init.c | 60 ----------- arch/mips/alchemy/pb1100/irqmap.c | 40 -------- arch/mips/alchemy/pb1200/Makefile | 2 +- arch/mips/alchemy/pb1200/board_setup.c | 162 ++++++++++++++++++++++++++++++- arch/mips/alchemy/pb1200/init.c | 58 ----------- arch/mips/alchemy/pb1200/irqmap.c | 160 ------------------------------ arch/mips/alchemy/pb1500/Makefile | 2 +- arch/mips/alchemy/pb1500/board_setup.c | 46 +++++++++- arch/mips/alchemy/pb1500/init.c | 58 ----------- arch/mips/alchemy/pb1500/irqmap.c | 46 --------- arch/mips/alchemy/pb1550/Makefile | 2 +- arch/mips/alchemy/pb1550/board_setup.c | 41 ++++++++- arch/mips/alchemy/pb1550/init.c | 58 ----------- arch/mips/alchemy/pb1550/irqmap.c | 43 -------- arch/mips/alchemy/xxs1500/Makefile | 2 +- arch/mips/alchemy/xxs1500/board_setup.c | 50 +++++++++- arch/mips/alchemy/xxs1500/init.c | 58 ----------- arch/mips/alchemy/xxs1500/irqmap.c | 49 --------- 32 files changed, 513 insertions(+), 1009 deletions(-) delete mode 100644 arch/mips/alchemy/db1x00/init.c delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c delete mode 100644 arch/mips/alchemy/mtx-1/init.c delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c delete mode 100644 arch/mips/alchemy/pb1000/init.c delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c delete mode 100644 arch/mips/alchemy/pb1100/init.c delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c delete mode 100644 arch/mips/alchemy/pb1200/init.c delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c delete mode 100644 arch/mips/alchemy/pb1500/init.c delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c delete mode 100644 arch/mips/alchemy/pb1550/init.c delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c delete mode 100644 arch/mips/alchemy/xxs1500/init.c delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile index 274db3b..9924aa0 100644 --- a/arch/mips/alchemy/db1x00/Makefile +++ b/arch/mips/alchemy/db1x00/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor DBAu1xx0 boards. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c index 9e5ccbb..507ded2 100644 --- a/arch/mips/alchemy/db1x00/board_setup.c +++ b/arch/mips/alchemy/db1x00/board_setup.c @@ -1,7 +1,10 @@ /* * * BRIEF MODULE DESCRIPTION - * Alchemy Db1x00 board setup. + * Alchemy Db1x00 board support. + * + * Copyright 2003 Embedded Edge, LLC + * dan@embeddededge.com * * Copyright 2000, 2008 MontaVista Software Inc. * Author: MontaVista Software, Inc. <source@mvista.com> @@ -28,12 +31,99 @@ */ #include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> +#include <prom.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-db1x00/db1x00.h> +#ifdef CONFIG_MIPS_DB1500 +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_BOSPORUS +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_MIRAGE +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ +}; +#endif + +#ifdef CONFIG_MIPS_DB1550 +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; +#endif + + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + +#ifndef CONFIG_MIPS_MIRAGE +#ifdef CONFIG_MIPS_DB1550 + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#else + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#endif +#else + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ +#endif + +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; +const char *get_system_type(void) +{ +#ifdef CONFIG_MIPS_BOSPORUS + return "Alchemy Bosporus Gateway Reference"; +#else + return "Alchemy Db1x00"; +#endif +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { /* Hit BCSR.SW_RESET[RESET] */ diff --git a/arch/mips/alchemy/db1x00/init.c b/arch/mips/alchemy/db1x00/init.c deleted file mode 100644 index 8474135..0000000 --- a/arch/mips/alchemy/db1x00/init.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * PB1000 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ -#ifdef CONFIG_MIPS_BOSPORUS - return "Alchemy Bosporus Gateway Reference"; -#else - return "Alchemy Db1x00"; -#endif -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/db1x00/irqmap.c b/arch/mips/alchemy/db1x00/irqmap.c deleted file mode 100644 index 94c090e..0000000 --- a/arch/mips/alchemy/db1x00/irqmap.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_DB1500 -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_BOSPORUS -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_MIRAGE -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ -}; -#endif - -#ifdef CONFIG_MIPS_DB1550 -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; -#endif - - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - -#ifndef CONFIG_MIPS_MIRAGE -#ifdef CONFIG_MIPS_DB1550 - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#else - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#endif -#else - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ -#endif - -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/mtx-1/Makefile b/arch/mips/alchemy/mtx-1/Makefile index 7c67b3d..f011b2d 100644 --- a/arch/mips/alchemy/mtx-1/Makefile +++ b/arch/mips/alchemy/mtx-1/Makefile @@ -6,7 +6,7 @@ # Makefile for 4G Systems MTX-1 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o obj-y := platform.o EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c index 3f80791..2e26465 100644 --- a/arch/mips/alchemy/mtx-1/board_setup.c +++ b/arch/mips/alchemy/mtx-1/board_setup.c @@ -29,12 +29,61 @@ */ #include <linux/init.h> - +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> +#include <prom.h> extern int (*board_pci_idsel)(unsigned int devsel, int assert); int mtx1_pci_idsel(unsigned int devsel, int assert); +char irq_tab_alchemy[][5] __initdata = { + [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ + [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ + [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ + [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ + [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ + [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ + [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ + [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "MTX-1"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */ @@ -95,4 +144,3 @@ mtx1_pci_idsel(unsigned int devsel, int assert) au_sync_udelay(1); return 1; } - diff --git a/arch/mips/alchemy/mtx-1/init.c b/arch/mips/alchemy/mtx-1/init.c deleted file mode 100644 index 3bae13c..0000000 --- a/arch/mips/alchemy/mtx-1/init.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * 4G Systems MTX-1 board setup - * - * Copyright 2003, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * Bruno Randolf <bruno.randolf@4g-systems.biz> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/kernel.h> -#include <linux/init.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "MTX-1"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/mtx-1/irqmap.c b/arch/mips/alchemy/mtx-1/irqmap.c deleted file mode 100644 index f2bf029..0000000 --- a/arch/mips/alchemy/mtx-1/irqmap.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ - [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ - [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ - [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ - [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ - [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ - [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ - [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile index 99bbec0..4377ab3 100644 --- a/arch/mips/alchemy/pb1000/Makefile +++ b/arch/mips/alchemy/pb1000/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1000 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c index 25df167..bd0b6f4 100644 --- a/arch/mips/alchemy/pb1000/board_setup.c +++ b/arch/mips/alchemy/pb1000/board_setup.c @@ -23,11 +23,43 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1000.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +const char *get_system_type(void) +{ + return "Alchemy Pb1000"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1000/init.c b/arch/mips/alchemy/pb1000/init.c deleted file mode 100644 index 8a9c7d5..0000000 --- a/arch/mips/alchemy/pb1000/init.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Pb1000 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1000"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1000/irqmap.c b/arch/mips/alchemy/pb1000/irqmap.c deleted file mode 100644 index b3d56b0..0000000 --- a/arch/mips/alchemy/pb1000/irqmap.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile index 793e97c..627a75c 100644 --- a/arch/mips/alchemy/pb1100/Makefile +++ b/arch/mips/alchemy/pb1100/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1100 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c index c0bfd59..87da4a5 100644 --- a/arch/mips/alchemy/pb1100/board_setup.c +++ b/arch/mips/alchemy/pb1100/board_setup.c @@ -23,11 +23,49 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1100.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1100"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg3; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1100/init.c b/arch/mips/alchemy/pb1100/init.c deleted file mode 100644 index 7c67923..0000000 --- a/arch/mips/alchemy/pb1100/init.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1100 board setup - * - * Copyright 2002, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1100"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg3; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1100/irqmap.c b/arch/mips/alchemy/pb1100/irqmap.c deleted file mode 100644 index 9b7dd8b..0000000 --- a/arch/mips/alchemy/pb1100/irqmap.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xx0 IRQ map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile index d678adf..e9b9d27 100644 --- a/arch/mips/alchemy/pb1200/Makefile +++ b/arch/mips/alchemy/pb1200/Makefile @@ -2,7 +2,7 @@ # Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o obj-y += platform.o EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c index 6cb2115..a336a7a 100644 --- a/arch/mips/alchemy/pb1200/board_setup.c +++ b/arch/mips/alchemy/pb1200/board_setup.c @@ -25,14 +25,168 @@ */ #include <linux/init.h> -#include <linux/sched.h> +#include <linux/interrupt.h> +#include <asm/bootinfo.h> +#include <asm/mach-au1x00/au1000.h> + +#ifdef CONFIG_MIPS_PB1200 +#include <asm/mach-pb1x00/pb1200.h> +#endif + +#ifdef CONFIG_MIPS_DB1200 +#include <asm/mach-db1x00/db1200.h> +#define PB1200_INT_BEGIN DB1200_INT_BEGIN +#define PB1200_INT_END DB1200_INT_END +#endif #include <prom.h> -#include <au1xxx.h> -extern void _board_init_irq(void); extern void (*board_init_irq)(void); +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + /* This is external interrupt cascade */ + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +/* + * Support for External interrupts on the Pb1200 Development platform. + */ +static volatile int pb1200_cascade_en; + +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) +{ + unsigned short bisr = bcsr->int_status; + int extirq_nr = 0; + + /* Clear all the edge interrupts. This has no effect on level. */ + bcsr->int_status = bisr; + for ( ; bisr; bisr &= bisr - 1) { + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); + /* Ack and dispatch IRQ */ + do_IRQ(extirq_nr); + } + + return IRQ_RETVAL(1); +} + +inline void pb1200_enable_irq(unsigned int irq_nr) +{ + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +inline void pb1200_disable_irq(unsigned int irq_nr) +{ + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +static unsigned int pb1200_setup_cascade(void) +{ + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, + 0, "Pb1200 Cascade", &pb1200_cascade_handler); +} + +static unsigned int pb1200_startup_irq(unsigned int irq) +{ + if (++pb1200_cascade_en == 1) { + int res; + + res = pb1200_setup_cascade(); + if (res) + return res; + } + + pb1200_enable_irq(irq); + + return 0; +} + +static void pb1200_shutdown_irq(unsigned int irq) +{ + pb1200_disable_irq(irq); + if (--pb1200_cascade_en == 0) + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); +} + +static struct irq_chip external_irq_type = { +#ifdef CONFIG_MIPS_PB1200 + .name = "Pb1200 Ext", +#endif +#ifdef CONFIG_MIPS_DB1200 + .name = "Db1200 Ext", +#endif + .startup = pb1200_startup_irq, + .shutdown = pb1200_shutdown_irq, + .ack = pb1200_disable_irq, + .mask = pb1200_disable_irq, + .mask_ack = pb1200_disable_irq, + .unmask = pb1200_enable_irq, +}; + +static void pb1200_init_irq(void) +{ + unsigned int irq; + +#ifdef CONFIG_MIPS_PB1200 + /* We have a problem with CPLD rev 3. */ + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); + printk(KERN_ERR "updated to latest revision. This software will\n"); + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + panic("Game over. Your score is 0."); + } +#endif + + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { + set_irq_chip_and_handler(irq, &external_irq_type, + handle_level_irq); + pb1200_disable_irq(irq); + } + + /* + * GPIO_7 can not be hooked here, so it is hooked upon first + * request of any source attached to the cascade. + */ +} + +const char *get_system_type(void) +{ + return "Alchemy Pb1200"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x08000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { bcsr->resets = 0; @@ -126,7 +280,7 @@ void __init board_setup(void) #endif /* Setup Pb1200 External Interrupt Controller */ - board_init_irq = _board_init_irq; + board_init_irq = pb1200_init_irq; } int board_au1200fb_panel(void) diff --git a/arch/mips/alchemy/pb1200/init.c b/arch/mips/alchemy/pb1200/init.c deleted file mode 100644 index e9b2a0f..0000000 --- a/arch/mips/alchemy/pb1200/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * PB1200 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1200"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1200/irqmap.c b/arch/mips/alchemy/pb1200/irqmap.c deleted file mode 100644 index 2a505ad..0000000 --- a/arch/mips/alchemy/pb1200/irqmap.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> - -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_PB1200 -#include <asm/mach-pb1x00/pb1200.h> -#endif - -#ifdef CONFIG_MIPS_DB1200 -#include <asm/mach-db1x00/db1200.h> -#define PB1200_INT_BEGIN DB1200_INT_BEGIN -#define PB1200_INT_END DB1200_INT_END -#endif - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - /* This is external interrupt cascade */ - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -/* - * Support for External interrupts on the Pb1200 Development platform. - */ -static volatile int pb1200_cascade_en; - -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) -{ - unsigned short bisr = bcsr->int_status; - int extirq_nr = 0; - - /* Clear all the edge interrupts. This has no effect on level. */ - bcsr->int_status = bisr; - for ( ; bisr; bisr &= bisr - 1) { - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); - /* Ack and dispatch IRQ */ - do_IRQ(extirq_nr); - } - - return IRQ_RETVAL(1); -} - -inline void pb1200_enable_irq(unsigned int irq_nr) -{ - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -inline void pb1200_disable_irq(unsigned int irq_nr) -{ - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -static unsigned int pb1200_setup_cascade(void) -{ - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, - 0, "Pb1200 Cascade", &pb1200_cascade_handler); -} - -static unsigned int pb1200_startup_irq(unsigned int irq) -{ - if (++pb1200_cascade_en == 1) { - int res; - - res = pb1200_setup_cascade(); - if (res) - return res; - } - - pb1200_enable_irq(irq); - - return 0; -} - -static void pb1200_shutdown_irq(unsigned int irq) -{ - pb1200_disable_irq(irq); - if (--pb1200_cascade_en == 0) - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); -} - -static struct irq_chip external_irq_type = { -#ifdef CONFIG_MIPS_PB1200 - .name = "Pb1200 Ext", -#endif -#ifdef CONFIG_MIPS_DB1200 - .name = "Db1200 Ext", -#endif - .startup = pb1200_startup_irq, - .shutdown = pb1200_shutdown_irq, - .ack = pb1200_disable_irq, - .mask = pb1200_disable_irq, - .mask_ack = pb1200_disable_irq, - .unmask = pb1200_enable_irq, -}; - -void _board_init_irq(void) -{ - unsigned int irq; - -#ifdef CONFIG_MIPS_PB1200 - /* We have a problem with CPLD rev 3. */ - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); - printk(KERN_ERR "updated to latest revision. This software will\n"); - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - panic("Game over. Your score is 0."); - } -#endif - - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { - set_irq_chip_and_handler(irq, &external_irq_type, - handle_level_irq); - pb1200_disable_irq(irq); - } - - /* - * GPIO_7 can not be hooked here, so it is hooked upon first - * request of any source attached to the cascade. - */ -} diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile index 602f38d..4664d61 100644 --- a/arch/mips/alchemy/pb1500/Makefile +++ b/arch/mips/alchemy/pb1500/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1500 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c index 035771c..1be1afc 100644 --- a/arch/mips/alchemy/pb1500/board_setup.c +++ b/arch/mips/alchemy/pb1500/board_setup.c @@ -23,11 +23,53 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1500.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1500"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1500/init.c b/arch/mips/alchemy/pb1500/init.c deleted file mode 100644 index 3b6e395..0000000 --- a/arch/mips/alchemy/pb1500/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1500 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1500/irqmap.c b/arch/mips/alchemy/pb1500/irqmap.c deleted file mode 100644 index 39c4682..0000000 --- a/arch/mips/alchemy/pb1500/irqmap.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile index 7d8beca..7e6453d 100644 --- a/arch/mips/alchemy/pb1550/Makefile +++ b/arch/mips/alchemy/pb1550/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1550 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c index 0ed76b6..e844484 100644 --- a/arch/mips/alchemy/pb1550/board_setup.c +++ b/arch/mips/alchemy/pb1550/board_setup.c @@ -28,9 +28,48 @@ */ #include <linux/init.h> - +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1550.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1550"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x08000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1550/init.c b/arch/mips/alchemy/pb1550/init.c deleted file mode 100644 index e1055a1..0000000 --- a/arch/mips/alchemy/pb1550/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1550 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1550"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1550/irqmap.c b/arch/mips/alchemy/pb1550/irqmap.c deleted file mode 100644 index a02a4d1..0000000 --- a/arch/mips/alchemy/pb1550/irqmap.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xx0 IRQ map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/xxs1500/Makefile b/arch/mips/alchemy/xxs1500/Makefile index db3c526..9ec3b54 100644 --- a/arch/mips/alchemy/xxs1500/Makefile +++ b/arch/mips/alchemy/xxs1500/Makefile @@ -5,4 +5,4 @@ # Makefile for MyCable XXS1500 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c index 4c587ac..813668f 100644 --- a/arch/mips/alchemy/xxs1500/board_setup.c +++ b/arch/mips/alchemy/xxs1500/board_setup.c @@ -23,10 +23,56 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, + + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "XXS1500"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/xxs1500/init.c b/arch/mips/alchemy/xxs1500/init.c deleted file mode 100644 index 7516434..0000000 --- a/arch/mips/alchemy/xxs1500/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * XXS1500 board setup - * - * Copyright 2003, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "XXS1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/xxs1500/irqmap.c b/arch/mips/alchemy/xxs1500/irqmap.c deleted file mode 100644 index edf06ed..0000000 --- a/arch/mips/alchemy/xxs1500/irqmap.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, - - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); -- 1.6.0.3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 1/3] Alchemy: merge small board files into single files 2008-11-08 12:08 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss @ 2008-11-12 3:54 ` Kevin Hickey 2008-11-12 6:05 ` Manuel Lauss 0 siblings, 1 reply; 19+ messages in thread From: Kevin Hickey @ 2008-11-12 3:54 UTC (permalink / raw) To: Manuel Lauss; +Cc: Linux-MIPS, Sergei Shtylyov, Florian Fainelli, Bruno Randolf Manuel, Why is this reorganization necessary? I actually think we have too much consolidation; as I am working on the new SOC I am finding it easier to subdivide more (esp out of platform.c but that's a whole other story). What's the advantage to this change? =Kevin On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > Most files of the Alchemy boards are very small. Merge them. > > Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> > --- > arch/mips/alchemy/db1x00/Makefile | 2 +- > arch/mips/alchemy/db1x00/board_setup.c | 92 +++++++++++++++++- > arch/mips/alchemy/db1x00/init.c | 62 ------------ > arch/mips/alchemy/db1x00/irqmap.c | 86 ---------------- > arch/mips/alchemy/mtx-1/Makefile | 2 +- > arch/mips/alchemy/mtx-1/board_setup.c | 52 ++++++++++- > arch/mips/alchemy/mtx-1/init.c | 60 ----------- > arch/mips/alchemy/mtx-1/irqmap.c | 52 ---------- > arch/mips/alchemy/pb1000/Makefile | 2 +- > arch/mips/alchemy/pb1000/board_setup.c | 36 +++++++- > arch/mips/alchemy/pb1000/init.c | 57 ----------- > arch/mips/alchemy/pb1000/irqmap.c | 38 ------- > arch/mips/alchemy/pb1100/Makefile | 2 +- > arch/mips/alchemy/pb1100/board_setup.c | 42 ++++++++- > arch/mips/alchemy/pb1100/init.c | 60 ----------- > arch/mips/alchemy/pb1100/irqmap.c | 40 -------- > arch/mips/alchemy/pb1200/Makefile | 2 +- > arch/mips/alchemy/pb1200/board_setup.c | 162 ++++++++++++++++++++++++++++++- > arch/mips/alchemy/pb1200/init.c | 58 ----------- > arch/mips/alchemy/pb1200/irqmap.c | 160 ------------------------------ > arch/mips/alchemy/pb1500/Makefile | 2 +- > arch/mips/alchemy/pb1500/board_setup.c | 46 +++++++++- > arch/mips/alchemy/pb1500/init.c | 58 ----------- > arch/mips/alchemy/pb1500/irqmap.c | 46 --------- > arch/mips/alchemy/pb1550/Makefile | 2 +- > arch/mips/alchemy/pb1550/board_setup.c | 41 ++++++++- > arch/mips/alchemy/pb1550/init.c | 58 ----------- > arch/mips/alchemy/pb1550/irqmap.c | 43 -------- > arch/mips/alchemy/xxs1500/Makefile | 2 +- > arch/mips/alchemy/xxs1500/board_setup.c | 50 +++++++++- > arch/mips/alchemy/xxs1500/init.c | 58 ----------- > arch/mips/alchemy/xxs1500/irqmap.c | 49 --------- > 32 files changed, 513 insertions(+), 1009 deletions(-) > delete mode 100644 arch/mips/alchemy/db1x00/init.c > delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c > delete mode 100644 arch/mips/alchemy/mtx-1/init.c > delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c > delete mode 100644 arch/mips/alchemy/pb1000/init.c > delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c > delete mode 100644 arch/mips/alchemy/pb1100/init.c > delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c > delete mode 100644 arch/mips/alchemy/pb1200/init.c > delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c > delete mode 100644 arch/mips/alchemy/pb1500/init.c > delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c > delete mode 100644 arch/mips/alchemy/pb1550/init.c > delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c > delete mode 100644 arch/mips/alchemy/xxs1500/init.c > delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c > > diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile > index 274db3b..9924aa0 100644 > --- a/arch/mips/alchemy/db1x00/Makefile > +++ b/arch/mips/alchemy/db1x00/Makefile > @@ -5,4 +5,4 @@ > # Makefile for the Alchemy Semiconductor DBAu1xx0 boards. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c > index 9e5ccbb..507ded2 100644 > --- a/arch/mips/alchemy/db1x00/board_setup.c > +++ b/arch/mips/alchemy/db1x00/board_setup.c > @@ -1,7 +1,10 @@ > /* > * > * BRIEF MODULE DESCRIPTION > - * Alchemy Db1x00 board setup. > + * Alchemy Db1x00 board support. > + * > + * Copyright 2003 Embedded Edge, LLC > + * dan@embeddededge.com > * > * Copyright 2000, 2008 MontaVista Software Inc. > * Author: MontaVista Software, Inc. <source@mvista.com> > @@ -28,12 +31,99 @@ > */ > > #include <linux/init.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > +#include <prom.h> > > #include <asm/mach-au1x00/au1000.h> > #include <asm/mach-db1x00/db1x00.h> > > +#ifdef CONFIG_MIPS_DB1500 > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_BOSPORUS > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_MIRAGE > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_DB1550 > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > +}; > +#endif > + > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + > +#ifndef CONFIG_MIPS_MIRAGE > +#ifdef CONFIG_MIPS_DB1550 > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > +#else > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > + > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > +#endif > +#else > + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > +#endif > + > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > +const char *get_system_type(void) > +{ > +#ifdef CONFIG_MIPS_BOSPORUS > + return "Alchemy Bosporus Gateway Reference"; > +#else > + return "Alchemy Db1x00"; > +#endif > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > + > void board_reset(void) > { > /* Hit BCSR.SW_RESET[RESET] */ > diff --git a/arch/mips/alchemy/db1x00/init.c b/arch/mips/alchemy/db1x00/init.c > deleted file mode 100644 > index 8474135..0000000 > --- a/arch/mips/alchemy/db1x00/init.c > +++ /dev/null > @@ -1,62 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * PB1000 board setup > - * > - * Copyright 2001, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > -#ifdef CONFIG_MIPS_BOSPORUS > - return "Alchemy Bosporus Gateway Reference"; > -#else > - return "Alchemy Db1x00"; > -#endif > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/db1x00/irqmap.c b/arch/mips/alchemy/db1x00/irqmap.c > deleted file mode 100644 > index 94c090e..0000000 > --- a/arch/mips/alchemy/db1x00/irqmap.c > +++ /dev/null > @@ -1,86 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -#ifdef CONFIG_MIPS_DB1500 > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_BOSPORUS > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_MIRAGE > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_DB1550 > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > -}; > -#endif > - > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - > -#ifndef CONFIG_MIPS_MIRAGE > -#ifdef CONFIG_MIPS_DB1550 > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > -#else > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > - > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > -#endif > -#else > - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > -#endif > - > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/mtx-1/Makefile b/arch/mips/alchemy/mtx-1/Makefile > index 7c67b3d..f011b2d 100644 > --- a/arch/mips/alchemy/mtx-1/Makefile > +++ b/arch/mips/alchemy/mtx-1/Makefile > @@ -6,7 +6,7 @@ > # Makefile for 4G Systems MTX-1 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > obj-y := platform.o > > EXTRA_CFLAGS += -Werror > diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c > index 3f80791..2e26465 100644 > --- a/arch/mips/alchemy/mtx-1/board_setup.c > +++ b/arch/mips/alchemy/mtx-1/board_setup.c > @@ -29,12 +29,61 @@ > */ > > #include <linux/init.h> > - > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > +#include <prom.h> > > extern int (*board_pci_idsel)(unsigned int devsel, int assert); > int mtx1_pci_idsel(unsigned int devsel, int assert); > > +char irq_tab_alchemy[][5] __initdata = { > + [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ > + [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ > + [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ > + [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ > + [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ > + [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ > + [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ > + [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ > +}; > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "MTX-1"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > + > void board_reset(void) > { > /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */ > @@ -95,4 +144,3 @@ mtx1_pci_idsel(unsigned int devsel, int assert) > au_sync_udelay(1); > return 1; > } > - > diff --git a/arch/mips/alchemy/mtx-1/init.c b/arch/mips/alchemy/mtx-1/init.c > deleted file mode 100644 > index 3bae13c..0000000 > --- a/arch/mips/alchemy/mtx-1/init.c > +++ /dev/null > @@ -1,60 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * 4G Systems MTX-1 board setup > - * > - * Copyright 2003, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * Bruno Randolf <bruno.randolf@4g-systems.biz> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/kernel.h> > -#include <linux/init.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "MTX-1"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/mtx-1/irqmap.c b/arch/mips/alchemy/mtx-1/irqmap.c > deleted file mode 100644 > index f2bf029..0000000 > --- a/arch/mips/alchemy/mtx-1/irqmap.c > +++ /dev/null > @@ -1,52 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -char irq_tab_alchemy[][5] __initdata = { > - [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ > - [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ > - [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ > - [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ > - [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ > - [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ > - [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ > - [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ > -}; > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile > index 99bbec0..4377ab3 100644 > --- a/arch/mips/alchemy/pb1000/Makefile > +++ b/arch/mips/alchemy/pb1000/Makefile > @@ -5,4 +5,4 @@ > # Makefile for the Alchemy Semiconductor Pb1000 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c > index 25df167..bd0b6f4 100644 > --- a/arch/mips/alchemy/pb1000/board_setup.c > +++ b/arch/mips/alchemy/pb1000/board_setup.c > @@ -23,11 +23,43 @@ > * 675 Mass Ave, Cambridge, MA 02139, USA. > */ > > -#include <linux/init.h> > #include <linux/delay.h> > - > +#include <linux/init.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > #include <asm/mach-pb1x00/pb1000.h> > +#include <prom.h> > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1000"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = (int)fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > > void board_reset(void) > { > diff --git a/arch/mips/alchemy/pb1000/init.c b/arch/mips/alchemy/pb1000/init.c > deleted file mode 100644 > index 8a9c7d5..0000000 > --- a/arch/mips/alchemy/pb1000/init.c > +++ /dev/null > @@ -1,57 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Pb1000 board setup > - * > - * Copyright 2001, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1000"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/pb1000/irqmap.c b/arch/mips/alchemy/pb1000/irqmap.c > deleted file mode 100644 > index b3d56b0..0000000 > --- a/arch/mips/alchemy/pb1000/irqmap.c > +++ /dev/null > @@ -1,38 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/interrupt.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile > index 793e97c..627a75c 100644 > --- a/arch/mips/alchemy/pb1100/Makefile > +++ b/arch/mips/alchemy/pb1100/Makefile > @@ -5,4 +5,4 @@ > # Makefile for the Alchemy Semiconductor Pb1100 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c > index c0bfd59..87da4a5 100644 > --- a/arch/mips/alchemy/pb1100/board_setup.c > +++ b/arch/mips/alchemy/pb1100/board_setup.c > @@ -23,11 +23,49 @@ > * 675 Mass Ave, Cambridge, MA 02139, USA. > */ > > -#include <linux/init.h> > #include <linux/delay.h> > - > +#include <linux/init.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > #include <asm/mach-pb1x00/pb1100.h> > +#include <prom.h> > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1100"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg3; > + > + prom_init_cmdline(); > + > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > > void board_reset(void) > { > diff --git a/arch/mips/alchemy/pb1100/init.c b/arch/mips/alchemy/pb1100/init.c > deleted file mode 100644 > index 7c67923..0000000 > --- a/arch/mips/alchemy/pb1100/init.c > +++ /dev/null > @@ -1,60 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Pb1100 board setup > - * > - * Copyright 2002, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1100"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg3; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/pb1100/irqmap.c b/arch/mips/alchemy/pb1100/irqmap.c > deleted file mode 100644 > index 9b7dd8b..0000000 > --- a/arch/mips/alchemy/pb1100/irqmap.c > +++ /dev/null > @@ -1,40 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xx0 IRQ map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile > index d678adf..e9b9d27 100644 > --- a/arch/mips/alchemy/pb1200/Makefile > +++ b/arch/mips/alchemy/pb1200/Makefile > @@ -2,7 +2,7 @@ > # Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > obj-y += platform.o > > EXTRA_CFLAGS += -Werror > diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c > index 6cb2115..a336a7a 100644 > --- a/arch/mips/alchemy/pb1200/board_setup.c > +++ b/arch/mips/alchemy/pb1200/board_setup.c > @@ -25,14 +25,168 @@ > */ > > #include <linux/init.h> > -#include <linux/sched.h> > +#include <linux/interrupt.h> > +#include <asm/bootinfo.h> > +#include <asm/mach-au1x00/au1000.h> > + > +#ifdef CONFIG_MIPS_PB1200 > +#include <asm/mach-pb1x00/pb1200.h> > +#endif > + > +#ifdef CONFIG_MIPS_DB1200 > +#include <asm/mach-db1x00/db1200.h> > +#define PB1200_INT_BEGIN DB1200_INT_BEGIN > +#define PB1200_INT_END DB1200_INT_END > +#endif > > #include <prom.h> > -#include <au1xxx.h> > > -extern void _board_init_irq(void); > extern void (*board_init_irq)(void); > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + /* This is external interrupt cascade */ > + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > +/* > + * Support for External interrupts on the Pb1200 Development platform. > + */ > +static volatile int pb1200_cascade_en; > + > +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > +{ > + unsigned short bisr = bcsr->int_status; > + int extirq_nr = 0; > + > + /* Clear all the edge interrupts. This has no effect on level. */ > + bcsr->int_status = bisr; > + for ( ; bisr; bisr &= bisr - 1) { > + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > + /* Ack and dispatch IRQ */ > + do_IRQ(extirq_nr); > + } > + > + return IRQ_RETVAL(1); > +} > + > +inline void pb1200_enable_irq(unsigned int irq_nr) > +{ > + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > +} > + > +inline void pb1200_disable_irq(unsigned int irq_nr) > +{ > + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > +} > + > +static unsigned int pb1200_setup_cascade(void) > +{ > + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > + 0, "Pb1200 Cascade", &pb1200_cascade_handler); > +} > + > +static unsigned int pb1200_startup_irq(unsigned int irq) > +{ > + if (++pb1200_cascade_en == 1) { > + int res; > + > + res = pb1200_setup_cascade(); > + if (res) > + return res; > + } > + > + pb1200_enable_irq(irq); > + > + return 0; > +} > + > +static void pb1200_shutdown_irq(unsigned int irq) > +{ > + pb1200_disable_irq(irq); > + if (--pb1200_cascade_en == 0) > + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > +} > + > +static struct irq_chip external_irq_type = { > +#ifdef CONFIG_MIPS_PB1200 > + .name = "Pb1200 Ext", > +#endif > +#ifdef CONFIG_MIPS_DB1200 > + .name = "Db1200 Ext", > +#endif > + .startup = pb1200_startup_irq, > + .shutdown = pb1200_shutdown_irq, > + .ack = pb1200_disable_irq, > + .mask = pb1200_disable_irq, > + .mask_ack = pb1200_disable_irq, > + .unmask = pb1200_enable_irq, > +}; > + > +static void pb1200_init_irq(void) > +{ > + unsigned int irq; > + > +#ifdef CONFIG_MIPS_PB1200 > + /* We have a problem with CPLD rev 3. */ > + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > + printk(KERN_ERR "updated to latest revision. This software will\n"); > + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + panic("Game over. Your score is 0."); > + } > +#endif > + > + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > + set_irq_chip_and_handler(irq, &external_irq_type, > + handle_level_irq); > + pb1200_disable_irq(irq); > + } > + > + /* > + * GPIO_7 can not be hooked here, so it is hooked upon first > + * request of any source attached to the cascade. > + */ > +} > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1200"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = (int)fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x08000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > + > void board_reset(void) > { > bcsr->resets = 0; > @@ -126,7 +280,7 @@ void __init board_setup(void) > #endif > > /* Setup Pb1200 External Interrupt Controller */ > - board_init_irq = _board_init_irq; > + board_init_irq = pb1200_init_irq; > } > > int board_au1200fb_panel(void) > diff --git a/arch/mips/alchemy/pb1200/init.c b/arch/mips/alchemy/pb1200/init.c > deleted file mode 100644 > index e9b2a0f..0000000 > --- a/arch/mips/alchemy/pb1200/init.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * PB1200 board setup > - * > - * Copyright 2001, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1200"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x08000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/pb1200/irqmap.c b/arch/mips/alchemy/pb1200/irqmap.c > deleted file mode 100644 > index 2a505ad..0000000 > --- a/arch/mips/alchemy/pb1200/irqmap.c > +++ /dev/null > @@ -1,160 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/interrupt.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -#ifdef CONFIG_MIPS_PB1200 > -#include <asm/mach-pb1x00/pb1200.h> > -#endif > - > -#ifdef CONFIG_MIPS_DB1200 > -#include <asm/mach-db1x00/db1200.h> > -#define PB1200_INT_BEGIN DB1200_INT_BEGIN > -#define PB1200_INT_END DB1200_INT_END > -#endif > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - /* This is external interrupt cascade */ > - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > -/* > - * Support for External interrupts on the Pb1200 Development platform. > - */ > -static volatile int pb1200_cascade_en; > - > -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > -{ > - unsigned short bisr = bcsr->int_status; > - int extirq_nr = 0; > - > - /* Clear all the edge interrupts. This has no effect on level. */ > - bcsr->int_status = bisr; > - for ( ; bisr; bisr &= bisr - 1) { > - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > - /* Ack and dispatch IRQ */ > - do_IRQ(extirq_nr); > - } > - > - return IRQ_RETVAL(1); > -} > - > -inline void pb1200_enable_irq(unsigned int irq_nr) > -{ > - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > -} > - > -inline void pb1200_disable_irq(unsigned int irq_nr) > -{ > - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > -} > - > -static unsigned int pb1200_setup_cascade(void) > -{ > - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > - 0, "Pb1200 Cascade", &pb1200_cascade_handler); > -} > - > -static unsigned int pb1200_startup_irq(unsigned int irq) > -{ > - if (++pb1200_cascade_en == 1) { > - int res; > - > - res = pb1200_setup_cascade(); > - if (res) > - return res; > - } > - > - pb1200_enable_irq(irq); > - > - return 0; > -} > - > -static void pb1200_shutdown_irq(unsigned int irq) > -{ > - pb1200_disable_irq(irq); > - if (--pb1200_cascade_en == 0) > - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > -} > - > -static struct irq_chip external_irq_type = { > -#ifdef CONFIG_MIPS_PB1200 > - .name = "Pb1200 Ext", > -#endif > -#ifdef CONFIG_MIPS_DB1200 > - .name = "Db1200 Ext", > -#endif > - .startup = pb1200_startup_irq, > - .shutdown = pb1200_shutdown_irq, > - .ack = pb1200_disable_irq, > - .mask = pb1200_disable_irq, > - .mask_ack = pb1200_disable_irq, > - .unmask = pb1200_enable_irq, > -}; > - > -void _board_init_irq(void) > -{ > - unsigned int irq; > - > -#ifdef CONFIG_MIPS_PB1200 > - /* We have a problem with CPLD rev 3. */ > - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > - printk(KERN_ERR "updated to latest revision. This software will\n"); > - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - panic("Game over. Your score is 0."); > - } > -#endif > - > - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > - set_irq_chip_and_handler(irq, &external_irq_type, > - handle_level_irq); > - pb1200_disable_irq(irq); > - } > - > - /* > - * GPIO_7 can not be hooked here, so it is hooked upon first > - * request of any source attached to the cascade. > - */ > -} > diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile > index 602f38d..4664d61 100644 > --- a/arch/mips/alchemy/pb1500/Makefile > +++ b/arch/mips/alchemy/pb1500/Makefile > @@ -5,4 +5,4 @@ > # Makefile for the Alchemy Semiconductor Pb1500 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c > index 035771c..1be1afc 100644 > --- a/arch/mips/alchemy/pb1500/board_setup.c > +++ b/arch/mips/alchemy/pb1500/board_setup.c > @@ -23,11 +23,53 @@ > * 675 Mass Ave, Cambridge, MA 02139, USA. > */ > > -#include <linux/init.h> > #include <linux/delay.h> > - > +#include <linux/init.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > #include <asm/mach-pb1x00/pb1500.h> > +#include <prom.h> > + > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1500"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = (int)fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > > void board_reset(void) > { > diff --git a/arch/mips/alchemy/pb1500/init.c b/arch/mips/alchemy/pb1500/init.c > deleted file mode 100644 > index 3b6e395..0000000 > --- a/arch/mips/alchemy/pb1500/init.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Pb1500 board setup > - * > - * Copyright 2001, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1500"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/pb1500/irqmap.c b/arch/mips/alchemy/pb1500/irqmap.c > deleted file mode 100644 > index 39c4682..0000000 > --- a/arch/mips/alchemy/pb1500/irqmap.c > +++ /dev/null > @@ -1,46 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile > index 7d8beca..7e6453d 100644 > --- a/arch/mips/alchemy/pb1550/Makefile > +++ b/arch/mips/alchemy/pb1550/Makefile > @@ -5,4 +5,4 @@ > # Makefile for the Alchemy Semiconductor Pb1550 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c > index 0ed76b6..e844484 100644 > --- a/arch/mips/alchemy/pb1550/board_setup.c > +++ b/arch/mips/alchemy/pb1550/board_setup.c > @@ -28,9 +28,48 @@ > */ > > #include <linux/init.h> > - > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > #include <asm/mach-pb1x00/pb1550.h> > +#include <prom.h> > + > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > +}; > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1550"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = (int)fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x08000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > > void board_reset(void) > { > diff --git a/arch/mips/alchemy/pb1550/init.c b/arch/mips/alchemy/pb1550/init.c > deleted file mode 100644 > index e1055a1..0000000 > --- a/arch/mips/alchemy/pb1550/init.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Pb1550 board setup > - * > - * Copyright 2001, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1550"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x08000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/pb1550/irqmap.c b/arch/mips/alchemy/pb1550/irqmap.c > deleted file mode 100644 > index a02a4d1..0000000 > --- a/arch/mips/alchemy/pb1550/irqmap.c > +++ /dev/null > @@ -1,43 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xx0 IRQ map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > -}; > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > diff --git a/arch/mips/alchemy/xxs1500/Makefile b/arch/mips/alchemy/xxs1500/Makefile > index db3c526..9ec3b54 100644 > --- a/arch/mips/alchemy/xxs1500/Makefile > +++ b/arch/mips/alchemy/xxs1500/Makefile > @@ -5,4 +5,4 @@ > # Makefile for MyCable XXS1500 board. > # > > -lib-y := init.o board_setup.o irqmap.o > +lib-y := board_setup.o > diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c > index 4c587ac..813668f 100644 > --- a/arch/mips/alchemy/xxs1500/board_setup.c > +++ b/arch/mips/alchemy/xxs1500/board_setup.c > @@ -23,10 +23,56 @@ > * 675 Mass Ave, Cambridge, MA 02139, USA. > */ > > -#include <linux/init.h> > #include <linux/delay.h> > - > +#include <linux/init.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > #include <asm/mach-au1x00/au1000.h> > +#include <prom.h> > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, > + > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "XXS1500"; > +} > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = 0x04000000; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > > void board_reset(void) > { > diff --git a/arch/mips/alchemy/xxs1500/init.c b/arch/mips/alchemy/xxs1500/init.c > deleted file mode 100644 > index 7516434..0000000 > --- a/arch/mips/alchemy/xxs1500/init.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * XXS1500 board setup > - * > - * Copyright 2003, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/kernel.h> > - > -#include <asm/bootinfo.h> > - > -#include <prom.h> > - > -const char *get_system_type(void) > -{ > - return "XXS1500"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > diff --git a/arch/mips/alchemy/xxs1500/irqmap.c b/arch/mips/alchemy/xxs1500/irqmap.c > deleted file mode 100644 > index edf06ed..0000000 > --- a/arch/mips/alchemy/xxs1500/irqmap.c > +++ /dev/null > @@ -1,49 +0,0 @@ > -/* > - * BRIEF MODULE DESCRIPTION > - * Au1xxx irq map table > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > - > -#include <asm/mach-au1x00/au1000.h> > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, > - > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); -- Kevin Hickey Alchemy Solutions RMI Corporation khickey@rmicorp.com P: 512.691.8044 ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 1/3] Alchemy: merge small board files into single files 2008-11-12 3:54 ` Kevin Hickey @ 2008-11-12 6:05 ` Manuel Lauss 0 siblings, 0 replies; 19+ messages in thread From: Manuel Lauss @ 2008-11-12 6:05 UTC (permalink / raw) To: Kevin Hickey; +Cc: Linux-MIPS, Sergei Shtylyov, Florian Fainelli, Bruno Randolf On Tue, Nov 11, 2008 at 09:54:57PM -0600, Kevin Hickey wrote: > Manuel, > > Why is this reorganization necessary? I actually think we have too much > consolidation; as I am working on the new SOC I am finding it easier to > subdivide more (esp out of platform.c but that's a whole other story). > > What's the advantage to this change? In all boards, init.c only contains prom initialization code; this one I moved to a "common" file. After that, all that was left was the IRQ map which had more lines of copyright than interesting code. I have also made a few changes to alchemy IRQ code (and made board_init_irq() mandatory in the process) which led me to move all initialization-relevant board code into a single file. It seemed to be a good optimization at the time ;-) If you and others prefer to keep the old file layout, no problem. I'll just move them to a demoboard subdirectory instead. Thanks, Manuel Lauss > =Kevin > > > On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > > Most files of the Alchemy boards are very small. Merge them. > > > > Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> > > --- > > arch/mips/alchemy/db1x00/Makefile | 2 +- > > arch/mips/alchemy/db1x00/board_setup.c | 92 +++++++++++++++++- > > arch/mips/alchemy/db1x00/init.c | 62 ------------ > > arch/mips/alchemy/db1x00/irqmap.c | 86 ---------------- > > arch/mips/alchemy/mtx-1/Makefile | 2 +- > > arch/mips/alchemy/mtx-1/board_setup.c | 52 ++++++++++- > > arch/mips/alchemy/mtx-1/init.c | 60 ----------- > > arch/mips/alchemy/mtx-1/irqmap.c | 52 ---------- > > arch/mips/alchemy/pb1000/Makefile | 2 +- > > arch/mips/alchemy/pb1000/board_setup.c | 36 +++++++- > > arch/mips/alchemy/pb1000/init.c | 57 ----------- > > arch/mips/alchemy/pb1000/irqmap.c | 38 ------- > > arch/mips/alchemy/pb1100/Makefile | 2 +- > > arch/mips/alchemy/pb1100/board_setup.c | 42 ++++++++- > > arch/mips/alchemy/pb1100/init.c | 60 ----------- > > arch/mips/alchemy/pb1100/irqmap.c | 40 -------- > > arch/mips/alchemy/pb1200/Makefile | 2 +- > > arch/mips/alchemy/pb1200/board_setup.c | 162 ++++++++++++++++++++++++++++++- > > arch/mips/alchemy/pb1200/init.c | 58 ----------- > > arch/mips/alchemy/pb1200/irqmap.c | 160 ------------------------------ > > arch/mips/alchemy/pb1500/Makefile | 2 +- > > arch/mips/alchemy/pb1500/board_setup.c | 46 +++++++++- > > arch/mips/alchemy/pb1500/init.c | 58 ----------- > > arch/mips/alchemy/pb1500/irqmap.c | 46 --------- > > arch/mips/alchemy/pb1550/Makefile | 2 +- > > arch/mips/alchemy/pb1550/board_setup.c | 41 ++++++++- > > arch/mips/alchemy/pb1550/init.c | 58 ----------- > > arch/mips/alchemy/pb1550/irqmap.c | 43 -------- > > arch/mips/alchemy/xxs1500/Makefile | 2 +- > > arch/mips/alchemy/xxs1500/board_setup.c | 50 +++++++++- > > arch/mips/alchemy/xxs1500/init.c | 58 ----------- > > arch/mips/alchemy/xxs1500/irqmap.c | 49 --------- > > 32 files changed, 513 insertions(+), 1009 deletions(-) > > delete mode 100644 arch/mips/alchemy/db1x00/init.c > > delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c > > delete mode 100644 arch/mips/alchemy/mtx-1/init.c > > delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c > > delete mode 100644 arch/mips/alchemy/pb1000/init.c > > delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c > > delete mode 100644 arch/mips/alchemy/pb1100/init.c > > delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c > > delete mode 100644 arch/mips/alchemy/pb1200/init.c > > delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c > > delete mode 100644 arch/mips/alchemy/pb1500/init.c > > delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c > > delete mode 100644 arch/mips/alchemy/pb1550/init.c > > delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c > > delete mode 100644 arch/mips/alchemy/xxs1500/init.c > > delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c > > > > diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile > > index 274db3b..9924aa0 100644 > > --- a/arch/mips/alchemy/db1x00/Makefile > > +++ b/arch/mips/alchemy/db1x00/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for the Alchemy Semiconductor DBAu1xx0 boards. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c > > index 9e5ccbb..507ded2 100644 > > --- a/arch/mips/alchemy/db1x00/board_setup.c > > +++ b/arch/mips/alchemy/db1x00/board_setup.c > > @@ -1,7 +1,10 @@ > > /* > > * > > * BRIEF MODULE DESCRIPTION > > - * Alchemy Db1x00 board setup. > > + * Alchemy Db1x00 board support. > > + * > > + * Copyright 2003 Embedded Edge, LLC > > + * dan@embeddededge.com > > * > > * Copyright 2000, 2008 MontaVista Software Inc. > > * Author: MontaVista Software, Inc. <source@mvista.com> > > @@ -28,12 +31,99 @@ > > */ > > > > #include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > +#include <prom.h> > > > > #include <asm/mach-au1x00/au1000.h> > > #include <asm/mach-db1x00/db1x00.h> > > > > +#ifdef CONFIG_MIPS_DB1500 > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_BOSPORUS > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_MIRAGE > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > > + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > > + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_DB1550 > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > +}; > > +#endif > > + > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + > > +#ifndef CONFIG_MIPS_MIRAGE > > +#ifdef CONFIG_MIPS_DB1550 > > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > +#else > > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > + > > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > +#endif > > +#else > > + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > > +#endif > > + > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > > > +const char *get_system_type(void) > > +{ > > +#ifdef CONFIG_MIPS_BOSPORUS > > + return "Alchemy Bosporus Gateway Reference"; > > +#else > > + return "Alchemy Db1x00"; > > +#endif > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > + > > void board_reset(void) > > { > > /* Hit BCSR.SW_RESET[RESET] */ > > diff --git a/arch/mips/alchemy/db1x00/init.c b/arch/mips/alchemy/db1x00/init.c > > deleted file mode 100644 > > index 8474135..0000000 > > --- a/arch/mips/alchemy/db1x00/init.c > > +++ /dev/null > > @@ -1,62 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * PB1000 board setup > > - * > > - * Copyright 2001, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > -#ifdef CONFIG_MIPS_BOSPORUS > > - return "Alchemy Bosporus Gateway Reference"; > > -#else > > - return "Alchemy Db1x00"; > > -#endif > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/db1x00/irqmap.c b/arch/mips/alchemy/db1x00/irqmap.c > > deleted file mode 100644 > > index 94c090e..0000000 > > --- a/arch/mips/alchemy/db1x00/irqmap.c > > +++ /dev/null > > @@ -1,86 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -#ifdef CONFIG_MIPS_DB1500 > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_BOSPORUS > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_MIRAGE > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > > - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > > - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_DB1550 > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > -}; > > -#endif > > - > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - > > -#ifndef CONFIG_MIPS_MIRAGE > > -#ifdef CONFIG_MIPS_DB1550 > > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > -#else > > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > - > > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > -#endif > > -#else > > - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > > -#endif > > - > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/mtx-1/Makefile b/arch/mips/alchemy/mtx-1/Makefile > > index 7c67b3d..f011b2d 100644 > > --- a/arch/mips/alchemy/mtx-1/Makefile > > +++ b/arch/mips/alchemy/mtx-1/Makefile > > @@ -6,7 +6,7 @@ > > # Makefile for 4G Systems MTX-1 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > obj-y := platform.o > > > > EXTRA_CFLAGS += -Werror > > diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c > > index 3f80791..2e26465 100644 > > --- a/arch/mips/alchemy/mtx-1/board_setup.c > > +++ b/arch/mips/alchemy/mtx-1/board_setup.c > > @@ -29,12 +29,61 @@ > > */ > > > > #include <linux/init.h> > > - > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > +#include <prom.h> > > > > extern int (*board_pci_idsel)(unsigned int devsel, int assert); > > int mtx1_pci_idsel(unsigned int devsel, int assert); > > > > +char irq_tab_alchemy[][5] __initdata = { > > + [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ > > + [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ > > + [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ > > + [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ > > + [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ > > + [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ > > + [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ > > + [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ > > +}; > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "MTX-1"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > + > > void board_reset(void) > > { > > /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */ > > @@ -95,4 +144,3 @@ mtx1_pci_idsel(unsigned int devsel, int assert) > > au_sync_udelay(1); > > return 1; > > } > > - > > diff --git a/arch/mips/alchemy/mtx-1/init.c b/arch/mips/alchemy/mtx-1/init.c > > deleted file mode 100644 > > index 3bae13c..0000000 > > --- a/arch/mips/alchemy/mtx-1/init.c > > +++ /dev/null > > @@ -1,60 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * 4G Systems MTX-1 board setup > > - * > > - * Copyright 2003, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * Bruno Randolf <bruno.randolf@4g-systems.biz> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/kernel.h> > > -#include <linux/init.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "MTX-1"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/mtx-1/irqmap.c b/arch/mips/alchemy/mtx-1/irqmap.c > > deleted file mode 100644 > > index f2bf029..0000000 > > --- a/arch/mips/alchemy/mtx-1/irqmap.c > > +++ /dev/null > > @@ -1,52 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -char irq_tab_alchemy[][5] __initdata = { > > - [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ > > - [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ > > - [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ > > - [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ > > - [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ > > - [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ > > - [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ > > - [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ > > -}; > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile > > index 99bbec0..4377ab3 100644 > > --- a/arch/mips/alchemy/pb1000/Makefile > > +++ b/arch/mips/alchemy/pb1000/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for the Alchemy Semiconductor Pb1000 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c > > index 25df167..bd0b6f4 100644 > > --- a/arch/mips/alchemy/pb1000/board_setup.c > > +++ b/arch/mips/alchemy/pb1000/board_setup.c > > @@ -23,11 +23,43 @@ > > * 675 Mass Ave, Cambridge, MA 02139, USA. > > */ > > > > -#include <linux/init.h> > > #include <linux/delay.h> > > - > > +#include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > #include <asm/mach-pb1x00/pb1000.h> > > +#include <prom.h> > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1000"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = (int)fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > > > void board_reset(void) > > { > > diff --git a/arch/mips/alchemy/pb1000/init.c b/arch/mips/alchemy/pb1000/init.c > > deleted file mode 100644 > > index 8a9c7d5..0000000 > > --- a/arch/mips/alchemy/pb1000/init.c > > +++ /dev/null > > @@ -1,57 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Pb1000 board setup > > - * > > - * Copyright 2001, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1000"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/pb1000/irqmap.c b/arch/mips/alchemy/pb1000/irqmap.c > > deleted file mode 100644 > > index b3d56b0..0000000 > > --- a/arch/mips/alchemy/pb1000/irqmap.c > > +++ /dev/null > > @@ -1,38 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile > > index 793e97c..627a75c 100644 > > --- a/arch/mips/alchemy/pb1100/Makefile > > +++ b/arch/mips/alchemy/pb1100/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for the Alchemy Semiconductor Pb1100 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c > > index c0bfd59..87da4a5 100644 > > --- a/arch/mips/alchemy/pb1100/board_setup.c > > +++ b/arch/mips/alchemy/pb1100/board_setup.c > > @@ -23,11 +23,49 @@ > > * 675 Mass Ave, Cambridge, MA 02139, USA. > > */ > > > > -#include <linux/init.h> > > #include <linux/delay.h> > > - > > +#include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > #include <asm/mach-pb1x00/pb1100.h> > > +#include <prom.h> > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > > + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > > + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > > + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1100"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg3; > > + > > + prom_init_cmdline(); > > + > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > > > void board_reset(void) > > { > > diff --git a/arch/mips/alchemy/pb1100/init.c b/arch/mips/alchemy/pb1100/init.c > > deleted file mode 100644 > > index 7c67923..0000000 > > --- a/arch/mips/alchemy/pb1100/init.c > > +++ /dev/null > > @@ -1,60 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Pb1100 board setup > > - * > > - * Copyright 2002, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1100"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg3; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/pb1100/irqmap.c b/arch/mips/alchemy/pb1100/irqmap.c > > deleted file mode 100644 > > index 9b7dd8b..0000000 > > --- a/arch/mips/alchemy/pb1100/irqmap.c > > +++ /dev/null > > @@ -1,40 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xx0 IRQ map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > > - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > > - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > > - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile > > index d678adf..e9b9d27 100644 > > --- a/arch/mips/alchemy/pb1200/Makefile > > +++ b/arch/mips/alchemy/pb1200/Makefile > > @@ -2,7 +2,7 @@ > > # Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > obj-y += platform.o > > > > EXTRA_CFLAGS += -Werror > > diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c > > index 6cb2115..a336a7a 100644 > > --- a/arch/mips/alchemy/pb1200/board_setup.c > > +++ b/arch/mips/alchemy/pb1200/board_setup.c > > @@ -25,14 +25,168 @@ > > */ > > > > #include <linux/init.h> > > -#include <linux/sched.h> > > +#include <linux/interrupt.h> > > +#include <asm/bootinfo.h> > > +#include <asm/mach-au1x00/au1000.h> > > + > > +#ifdef CONFIG_MIPS_PB1200 > > +#include <asm/mach-pb1x00/pb1200.h> > > +#endif > > + > > +#ifdef CONFIG_MIPS_DB1200 > > +#include <asm/mach-db1x00/db1200.h> > > +#define PB1200_INT_BEGIN DB1200_INT_BEGIN > > +#define PB1200_INT_END DB1200_INT_END > > +#endif > > > > #include <prom.h> > > -#include <au1xxx.h> > > > > -extern void _board_init_irq(void); > > extern void (*board_init_irq)(void); > > > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + /* This is external interrupt cascade */ > > + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > +/* > > + * Support for External interrupts on the Pb1200 Development platform. > > + */ > > +static volatile int pb1200_cascade_en; > > + > > +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > > +{ > > + unsigned short bisr = bcsr->int_status; > > + int extirq_nr = 0; > > + > > + /* Clear all the edge interrupts. This has no effect on level. */ > > + bcsr->int_status = bisr; > > + for ( ; bisr; bisr &= bisr - 1) { > > + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > > + /* Ack and dispatch IRQ */ > > + do_IRQ(extirq_nr); > > + } > > + > > + return IRQ_RETVAL(1); > > +} > > + > > +inline void pb1200_enable_irq(unsigned int irq_nr) > > +{ > > + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > > +} > > + > > +inline void pb1200_disable_irq(unsigned int irq_nr) > > +{ > > + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > > +} > > + > > +static unsigned int pb1200_setup_cascade(void) > > +{ > > + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > > + 0, "Pb1200 Cascade", &pb1200_cascade_handler); > > +} > > + > > +static unsigned int pb1200_startup_irq(unsigned int irq) > > +{ > > + if (++pb1200_cascade_en == 1) { > > + int res; > > + > > + res = pb1200_setup_cascade(); > > + if (res) > > + return res; > > + } > > + > > + pb1200_enable_irq(irq); > > + > > + return 0; > > +} > > + > > +static void pb1200_shutdown_irq(unsigned int irq) > > +{ > > + pb1200_disable_irq(irq); > > + if (--pb1200_cascade_en == 0) > > + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > > +} > > + > > +static struct irq_chip external_irq_type = { > > +#ifdef CONFIG_MIPS_PB1200 > > + .name = "Pb1200 Ext", > > +#endif > > +#ifdef CONFIG_MIPS_DB1200 > > + .name = "Db1200 Ext", > > +#endif > > + .startup = pb1200_startup_irq, > > + .shutdown = pb1200_shutdown_irq, > > + .ack = pb1200_disable_irq, > > + .mask = pb1200_disable_irq, > > + .mask_ack = pb1200_disable_irq, > > + .unmask = pb1200_enable_irq, > > +}; > > + > > +static void pb1200_init_irq(void) > > +{ > > + unsigned int irq; > > + > > +#ifdef CONFIG_MIPS_PB1200 > > + /* We have a problem with CPLD rev 3. */ > > + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > > + printk(KERN_ERR "updated to latest revision. This software will\n"); > > + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + panic("Game over. Your score is 0."); > > + } > > +#endif > > + > > + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > > + set_irq_chip_and_handler(irq, &external_irq_type, > > + handle_level_irq); > > + pb1200_disable_irq(irq); > > + } > > + > > + /* > > + * GPIO_7 can not be hooked here, so it is hooked upon first > > + * request of any source attached to the cascade. > > + */ > > +} > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1200"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = (int)fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x08000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > + > > void board_reset(void) > > { > > bcsr->resets = 0; > > @@ -126,7 +280,7 @@ void __init board_setup(void) > > #endif > > > > /* Setup Pb1200 External Interrupt Controller */ > > - board_init_irq = _board_init_irq; > > + board_init_irq = pb1200_init_irq; > > } > > > > int board_au1200fb_panel(void) > > diff --git a/arch/mips/alchemy/pb1200/init.c b/arch/mips/alchemy/pb1200/init.c > > deleted file mode 100644 > > index e9b2a0f..0000000 > > --- a/arch/mips/alchemy/pb1200/init.c > > +++ /dev/null > > @@ -1,58 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * PB1200 board setup > > - * > > - * Copyright 2001, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1200"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x08000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/pb1200/irqmap.c b/arch/mips/alchemy/pb1200/irqmap.c > > deleted file mode 100644 > > index 2a505ad..0000000 > > --- a/arch/mips/alchemy/pb1200/irqmap.c > > +++ /dev/null > > @@ -1,160 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -#ifdef CONFIG_MIPS_PB1200 > > -#include <asm/mach-pb1x00/pb1200.h> > > -#endif > > - > > -#ifdef CONFIG_MIPS_DB1200 > > -#include <asm/mach-db1x00/db1200.h> > > -#define PB1200_INT_BEGIN DB1200_INT_BEGIN > > -#define PB1200_INT_END DB1200_INT_END > > -#endif > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - /* This is external interrupt cascade */ > > - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > -/* > > - * Support for External interrupts on the Pb1200 Development platform. > > - */ > > -static volatile int pb1200_cascade_en; > > - > > -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > > -{ > > - unsigned short bisr = bcsr->int_status; > > - int extirq_nr = 0; > > - > > - /* Clear all the edge interrupts. This has no effect on level. */ > > - bcsr->int_status = bisr; > > - for ( ; bisr; bisr &= bisr - 1) { > > - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > > - /* Ack and dispatch IRQ */ > > - do_IRQ(extirq_nr); > > - } > > - > > - return IRQ_RETVAL(1); > > -} > > - > > -inline void pb1200_enable_irq(unsigned int irq_nr) > > -{ > > - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > > -} > > - > > -inline void pb1200_disable_irq(unsigned int irq_nr) > > -{ > > - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > > -} > > - > > -static unsigned int pb1200_setup_cascade(void) > > -{ > > - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > > - 0, "Pb1200 Cascade", &pb1200_cascade_handler); > > -} > > - > > -static unsigned int pb1200_startup_irq(unsigned int irq) > > -{ > > - if (++pb1200_cascade_en == 1) { > > - int res; > > - > > - res = pb1200_setup_cascade(); > > - if (res) > > - return res; > > - } > > - > > - pb1200_enable_irq(irq); > > - > > - return 0; > > -} > > - > > -static void pb1200_shutdown_irq(unsigned int irq) > > -{ > > - pb1200_disable_irq(irq); > > - if (--pb1200_cascade_en == 0) > > - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > > -} > > - > > -static struct irq_chip external_irq_type = { > > -#ifdef CONFIG_MIPS_PB1200 > > - .name = "Pb1200 Ext", > > -#endif > > -#ifdef CONFIG_MIPS_DB1200 > > - .name = "Db1200 Ext", > > -#endif > > - .startup = pb1200_startup_irq, > > - .shutdown = pb1200_shutdown_irq, > > - .ack = pb1200_disable_irq, > > - .mask = pb1200_disable_irq, > > - .mask_ack = pb1200_disable_irq, > > - .unmask = pb1200_enable_irq, > > -}; > > - > > -void _board_init_irq(void) > > -{ > > - unsigned int irq; > > - > > -#ifdef CONFIG_MIPS_PB1200 > > - /* We have a problem with CPLD rev 3. */ > > - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > > - printk(KERN_ERR "updated to latest revision. This software will\n"); > > - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - panic("Game over. Your score is 0."); > > - } > > -#endif > > - > > - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > > - set_irq_chip_and_handler(irq, &external_irq_type, > > - handle_level_irq); > > - pb1200_disable_irq(irq); > > - } > > - > > - /* > > - * GPIO_7 can not be hooked here, so it is hooked upon first > > - * request of any source attached to the cascade. > > - */ > > -} > > diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile > > index 602f38d..4664d61 100644 > > --- a/arch/mips/alchemy/pb1500/Makefile > > +++ b/arch/mips/alchemy/pb1500/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for the Alchemy Semiconductor Pb1500 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c > > index 035771c..1be1afc 100644 > > --- a/arch/mips/alchemy/pb1500/board_setup.c > > +++ b/arch/mips/alchemy/pb1500/board_setup.c > > @@ -23,11 +23,53 @@ > > * 675 Mass Ave, Cambridge, MA 02139, USA. > > */ > > > > -#include <linux/init.h> > > #include <linux/delay.h> > > - > > +#include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > #include <asm/mach-pb1x00/pb1500.h> > > +#include <prom.h> > > + > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1500"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = (int)fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > > > void board_reset(void) > > { > > diff --git a/arch/mips/alchemy/pb1500/init.c b/arch/mips/alchemy/pb1500/init.c > > deleted file mode 100644 > > index 3b6e395..0000000 > > --- a/arch/mips/alchemy/pb1500/init.c > > +++ /dev/null > > @@ -1,58 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Pb1500 board setup > > - * > > - * Copyright 2001, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1500"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/pb1500/irqmap.c b/arch/mips/alchemy/pb1500/irqmap.c > > deleted file mode 100644 > > index 39c4682..0000000 > > --- a/arch/mips/alchemy/pb1500/irqmap.c > > +++ /dev/null > > @@ -1,46 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile > > index 7d8beca..7e6453d 100644 > > --- a/arch/mips/alchemy/pb1550/Makefile > > +++ b/arch/mips/alchemy/pb1550/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for the Alchemy Semiconductor Pb1550 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c > > index 0ed76b6..e844484 100644 > > --- a/arch/mips/alchemy/pb1550/board_setup.c > > +++ b/arch/mips/alchemy/pb1550/board_setup.c > > @@ -28,9 +28,48 @@ > > */ > > > > #include <linux/init.h> > > - > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > #include <asm/mach-pb1x00/pb1550.h> > > +#include <prom.h> > > + > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > +}; > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1550"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = (int)fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x08000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > > > void board_reset(void) > > { > > diff --git a/arch/mips/alchemy/pb1550/init.c b/arch/mips/alchemy/pb1550/init.c > > deleted file mode 100644 > > index e1055a1..0000000 > > --- a/arch/mips/alchemy/pb1550/init.c > > +++ /dev/null > > @@ -1,58 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Pb1550 board setup > > - * > > - * Copyright 2001, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1550"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x08000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/pb1550/irqmap.c b/arch/mips/alchemy/pb1550/irqmap.c > > deleted file mode 100644 > > index a02a4d1..0000000 > > --- a/arch/mips/alchemy/pb1550/irqmap.c > > +++ /dev/null > > @@ -1,43 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xx0 IRQ map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > -}; > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > diff --git a/arch/mips/alchemy/xxs1500/Makefile b/arch/mips/alchemy/xxs1500/Makefile > > index db3c526..9ec3b54 100644 > > --- a/arch/mips/alchemy/xxs1500/Makefile > > +++ b/arch/mips/alchemy/xxs1500/Makefile > > @@ -5,4 +5,4 @@ > > # Makefile for MyCable XXS1500 board. > > # > > > > -lib-y := init.o board_setup.o irqmap.o > > +lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c > > index 4c587ac..813668f 100644 > > --- a/arch/mips/alchemy/xxs1500/board_setup.c > > +++ b/arch/mips/alchemy/xxs1500/board_setup.c > > @@ -23,10 +23,56 @@ > > * 675 Mass Ave, Cambridge, MA 02139, USA. > > */ > > > > -#include <linux/init.h> > > #include <linux/delay.h> > > - > > +#include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > #include <asm/mach-au1x00/au1000.h> > > +#include <prom.h> > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, > > + > > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ > > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "XXS1500"; > > +} > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = 0x04000000; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > > > void board_reset(void) > > { > > diff --git a/arch/mips/alchemy/xxs1500/init.c b/arch/mips/alchemy/xxs1500/init.c > > deleted file mode 100644 > > index 7516434..0000000 > > --- a/arch/mips/alchemy/xxs1500/init.c > > +++ /dev/null > > @@ -1,58 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * XXS1500 board setup > > - * > > - * Copyright 2003, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/kernel.h> > > - > > -#include <asm/bootinfo.h> > > - > > -#include <prom.h> > > - > > -const char *get_system_type(void) > > -{ > > - return "XXS1500"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > diff --git a/arch/mips/alchemy/xxs1500/irqmap.c b/arch/mips/alchemy/xxs1500/irqmap.c > > deleted file mode 100644 > > index edf06ed..0000000 > > --- a/arch/mips/alchemy/xxs1500/irqmap.c > > +++ /dev/null > > @@ -1,49 +0,0 @@ > > -/* > > - * BRIEF MODULE DESCRIPTION > > - * Au1xxx irq map table > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, > > - > > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ > > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > -- > Kevin Hickey > Alchemy Solutions > RMI Corporation > khickey@rmicorp.com > P: 512.691.8044 > ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-08 12:08 [PATCH 0/3] Alchemy: consolidate board code, v2 Manuel Lauss 2008-11-08 12:08 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss @ 2008-11-08 12:08 ` Manuel Lauss 2008-11-12 4:00 ` Kevin Hickey 2008-11-08 12:08 ` [PATCH 3/3] Alchemy: allow boards to override default reset/poweroff functions Manuel Lauss 2 siblings, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-08 12:08 UTC (permalink / raw) To: Linux-MIPS; +Cc: Sergei Shtylyov, Florian Fainelli, Bruno Randolf, Manuel Lauss Move all code of the Pb/Db boards to a single subdirectory and extract some common code. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> --- arch/mips/Makefile | 24 +- arch/mips/alchemy/common/setup.c | 25 -- arch/mips/alchemy/db1x00/Makefile | 8 - arch/mips/alchemy/db1x00/board_setup.c | 198 --------------- arch/mips/alchemy/evalboards/Makefile | 17 ++ arch/mips/alchemy/evalboards/common.c | 62 +++++ arch/mips/alchemy/evalboards/db1x00.c | 206 +++++++++++++++ arch/mips/alchemy/evalboards/pb1000.c | 196 +++++++++++++++ arch/mips/alchemy/evalboards/pb1100.c | 150 +++++++++++ arch/mips/alchemy/evalboards/pb1200.c | 301 ++++++++++++++++++++++ arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++ arch/mips/alchemy/evalboards/pb1500.c | 156 ++++++++++++ arch/mips/alchemy/evalboards/pb1550.c | 86 +++++++ arch/mips/alchemy/mtx-1/board_setup.c | 8 + arch/mips/alchemy/pb1000/Makefile | 8 - arch/mips/alchemy/pb1000/board_setup.c | 197 --------------- arch/mips/alchemy/pb1100/Makefile | 8 - arch/mips/alchemy/pb1100/board_setup.c | 147 ----------- arch/mips/alchemy/pb1200/Makefile | 8 - arch/mips/alchemy/pb1200/board_setup.c | 316 ------------------------ arch/mips/alchemy/pb1200/platform.c | 166 ------------- arch/mips/alchemy/pb1500/Makefile | 8 - arch/mips/alchemy/pb1500/board_setup.c | 161 ------------ arch/mips/alchemy/pb1550/Makefile | 8 - arch/mips/alchemy/pb1550/board_setup.c | 97 -------- arch/mips/alchemy/xxs1500/board_setup.c | 9 + 26 files changed, 1369 insertions(+), 1367 deletions(-) delete mode 100644 arch/mips/alchemy/db1x00/Makefile delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c create mode 100644 arch/mips/alchemy/evalboards/Makefile create mode 100644 arch/mips/alchemy/evalboards/common.c create mode 100644 arch/mips/alchemy/evalboards/db1x00.c create mode 100644 arch/mips/alchemy/evalboards/pb1000.c create mode 100644 arch/mips/alchemy/evalboards/pb1100.c create mode 100644 arch/mips/alchemy/evalboards/pb1200.c create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c create mode 100644 arch/mips/alchemy/evalboards/pb1500.c create mode 100644 arch/mips/alchemy/evalboards/pb1550.c delete mode 100644 arch/mips/alchemy/pb1000/Makefile delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c delete mode 100644 arch/mips/alchemy/pb1100/Makefile delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c delete mode 100644 arch/mips/alchemy/pb1200/Makefile delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c delete mode 100644 arch/mips/alchemy/pb1200/platform.c delete mode 100644 arch/mips/alchemy/pb1500/Makefile delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c delete mode 100644 arch/mips/alchemy/pb1550/Makefile delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 28c55f6..b31764e 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -184,84 +184,84 @@ cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 # # AMD Alchemy Pb1000 eval board # -libs-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/pb1000/ +core-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 # # AMD Alchemy Pb1100 eval board # -libs-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/pb1100/ +core-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 # # AMD Alchemy Pb1500 eval board # -libs-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/pb1500/ +core-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 # # AMD Alchemy Pb1550 eval board # -libs-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/pb1550/ +core-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 # # AMD Alchemy Pb1200 eval board # -libs-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/pb1200/ +core-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 # # AMD Alchemy Db1000 eval board # -libs-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 # # AMD Alchemy Db1100 eval board # -libs-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 # # AMD Alchemy Db1500 eval board # -libs-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 # # AMD Alchemy Db1550 eval board # -libs-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 # # AMD Alchemy Db1200 eval board # -libs-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/pb1200/ +core-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 # # AMD Alchemy Bosporus eval board # -libs-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 # # AMD Alchemy Mirage eval board # -libs-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 diff --git a/arch/mips/alchemy/common/setup.c b/arch/mips/alchemy/common/setup.c index 1ac6b06..cd94985 100644 --- a/arch/mips/alchemy/common/setup.c +++ b/arch/mips/alchemy/common/setup.c @@ -46,7 +46,6 @@ extern void set_cpuspec(void); void __init plat_mem_setup(void) { struct cpu_spec *sp; - char *argptr; unsigned long prid, cpufreq, bclk; set_cpuspec(); @@ -79,30 +78,6 @@ void __init plat_mem_setup(void) /* Clear to obtain best system bus performance */ clear_c0_config(1 << 19); /* Clear Config[OD] */ - argptr = prom_getcmdline(); - -#ifdef CONFIG_SERIAL_8250_CONSOLE - argptr = strstr(argptr, "console="); - if (argptr == NULL) { - argptr = prom_getcmdline(); - strcat(argptr, " console=ttyS0,115200"); - } -#endif - -#ifdef CONFIG_FB_AU1100 - argptr = strstr(argptr, "video="); - if (argptr == NULL) { - argptr = prom_getcmdline(); - /* default panel */ - /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ - } -#endif - -#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) - /* au1000 does not support vra, au1500 and au1100 do */ - strcat(argptr, " au1000_audio=vra"); - argptr = prom_getcmdline(); -#endif _machine_restart = au1000_restart; _machine_halt = au1000_halt; pm_power_off = au1000_power_off; diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile deleted file mode 100644 index 9924aa0..0000000 --- a/arch/mips/alchemy/db1x00/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor DBAu1xx0 boards. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c deleted file mode 100644 index 507ded2..0000000 --- a/arch/mips/alchemy/db1x00/board_setup.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Db1x00 board support. - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <prom.h> - -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-db1x00/db1x00.h> - -#ifdef CONFIG_MIPS_DB1500 -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_BOSPORUS -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_MIRAGE -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ -}; -#endif - -#ifdef CONFIG_MIPS_DB1550 -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; -#endif - - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - -#ifndef CONFIG_MIPS_MIRAGE -#ifdef CONFIG_MIPS_DB1550 - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#else - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#endif -#else - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ -#endif - -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; - -const char *get_system_type(void) -{ -#ifdef CONFIG_MIPS_BOSPORUS - return "Alchemy Bosporus Gateway Reference"; -#else - return "Alchemy Db1x00"; -#endif -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.SW_RESET[RESET] */ - bcsr->swreset = 0x0000; -} - -void __init board_setup(void) -{ - u32 pin_func = 0; - - /* Not valid for Au1550 */ -#if defined(CONFIG_IRDA) && \ - (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) - /* Set IRFIRSEL instead of GPIO15 */ - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; - au_writel(pin_func, SYS_PINFUNC); - /* Power off until the driver is in use */ - bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; - bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; - au_sync(); -#endif - bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ - -#ifdef CONFIG_MIPS_MIRAGE - /* Enable GPIO[31:0] inputs */ - au_writel(0, SYS_PININPUTEN); - - /* GPIO[20] is output, tristate the other input primary GPIOs */ - au_writel(~(1 << 20), SYS_TRIOUTCLR); - - /* Set GPIO[210:208] instead of SSI_0 */ - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; - - /* Set GPIO[215:211] for LEDs */ - pin_func |= 5 << 2; - - /* Set GPIO[214:213] for more LEDs */ - pin_func |= 5 << 12; - - /* Set GPIO[207:200] instead of PCMCIA/LCD */ - pin_func |= SYS_PF_LCD | SYS_PF_PC; - au_writel(pin_func, SYS_PINFUNC); - - /* - * Enable speaker amplifier. This should - * be part of the audio driver. - */ - au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); - au_writel(0x02000200, GPIO2_OUTPUT); -#endif - - au_sync(); - -#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 -#ifdef CONFIG_MIPS_BOSPORUS - printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); -#endif -#ifdef CONFIG_MIPS_MIRAGE - printk(KERN_INFO "AMD Alchemy Mirage Board\n"); -#endif -#ifdef CONFIG_MIPS_DB1550 - printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); -#endif -} diff --git a/arch/mips/alchemy/evalboards/Makefile b/arch/mips/alchemy/evalboards/Makefile new file mode 100644 index 0000000..56a67c6 --- /dev/null +++ b/arch/mips/alchemy/evalboards/Makefile @@ -0,0 +1,17 @@ +# +# Alchemy demoboards (Db1xx0/Pb1xx0/Bosporus/Mirage series). +# + +obj-y += common.o +obj-$(CONFIG_MIPS_PB1000) += pb1000.o +obj-$(CONFIG_MIPS_PB1100) += pb1100.o +obj-$(CONFIG_MIPS_PB1200) += pb1200.o pb1200_platform.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_DB1200) += pb1200.o pb1200_platform.o +obj-$(CONFIG_MIPS_DB1500) += db1x00.o +obj-$(CONFIG_MIPS_DB1550) += db1x00.o +obj-$(CONFIG_MIPS_BOSPORUS) += db1x00.o +obj-$(CONFIG_MIPS_MIRAGE) += db1x00.o diff --git a/arch/mips/alchemy/evalboards/common.c b/arch/mips/alchemy/evalboards/common.c new file mode 100644 index 0000000..baf8300 --- /dev/null +++ b/arch/mips/alchemy/evalboards/common.c @@ -0,0 +1,62 @@ +/* + * Common code used by all Alchemy evalboards. + * + * Extracted from files which had this to say: + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> +#include <asm/mach-au1x00/au1000.h> +#include <prom.h> + +#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_DB1000) || \ + defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1100) || \ + defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_DB1500) || \ + defined(CONFIG_MIPS_BOSPORUS) || defined(CONFIG_MIPS_MIRAGE) +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x04000000 + +#else /* Au1550/Au1200-based evalboards */ +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x08000000 +#endif + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = ALCHEMY_BOARD_DEFAULT_MEMSIZE; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} diff --git a/arch/mips/alchemy/evalboards/db1x00.c b/arch/mips/alchemy/evalboards/db1x00.c new file mode 100644 index 0000000..2dacd74 --- /dev/null +++ b/arch/mips/alchemy/evalboards/db1x00.c @@ -0,0 +1,206 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Db1x00 board support. + * + * Copyright 2003 Embedded Edge, LLC + * dan@embeddededge.com + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-db1x00/db1x00.h> +#include <prom.h> + + +#ifdef CONFIG_MIPS_DB1500 +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_BOSPORUS +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_MIRAGE +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ +}; +#endif + +#ifdef CONFIG_MIPS_DB1550 +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; +#endif + + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + +#ifndef CONFIG_MIPS_MIRAGE +#ifdef CONFIG_MIPS_DB1550 + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#else + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#endif +#else + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ +#endif + +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; + + +const char *get_system_type(void) +{ +#ifdef CONFIG_MIPS_BOSPORUS + return "Alchemy Bosporus Gateway Reference"; +#else + return "Alchemy Db1x00"; +#endif +} + +void board_reset(void) +{ + /* Hit BCSR.SW_RESET[RESET] */ + bcsr->swreset = 0x0000; +} + +void __init board_setup(void) +{ + u32 pin_func; + char *argptr; + + argptr = prom_getcmdline(); + +#ifdef CONFIG_SERIAL_8250_CONSOLE + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif + +#ifdef CONFIG_FB_AU1100 + argptr = strstr(argptr, "video="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + /* default panel */ + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ + } +#endif + +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) + /* au1000 does not support vra, au1500 and au1100 do */ + strcat(argptr, " au1000_audio=vra"); + argptr = prom_getcmdline(); +#endif + + pin_func = 0; /* shut up "unused" warning */ + + /* Not valid for Au1550 */ +#if defined(CONFIG_IRDA) && \ + (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) + /* Set IRFIRSEL instead of GPIO15 */ + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; + au_writel(pin_func, SYS_PINFUNC); + /* Power off until the driver is in use */ + bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; + bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; + au_sync(); +#endif + bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ + +#ifdef CONFIG_MIPS_MIRAGE + /* Enable GPIO[31:0] inputs */ + au_writel(0, SYS_PININPUTEN); + + /* GPIO[20] is output, tristate the other input primary GPIOs */ + au_writel(~(1 << 20), SYS_TRIOUTCLR); + + /* Set GPIO[210:208] instead of SSI_0 */ + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; + + /* Set GPIO[215:211] for LEDs */ + pin_func |= 5 << 2; + + /* Set GPIO[214:213] for more LEDs */ + pin_func |= 5 << 12; + + /* Set GPIO[207:200] instead of PCMCIA/LCD */ + pin_func |= SYS_PF_LCD | SYS_PF_PC; + au_writel(pin_func, SYS_PINFUNC); + + /* + * Enable speaker amplifier. This should + * be part of the audio driver. + */ + au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); + au_writel(0x02000200, GPIO2_OUTPUT); +#endif + + au_sync(); + +#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 +#ifdef CONFIG_MIPS_BOSPORUS + printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); +#endif +#ifdef CONFIG_MIPS_MIRAGE + printk(KERN_INFO "AMD Alchemy Mirage Board\n"); +#endif +#ifdef CONFIG_MIPS_DB1550 + printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); +#endif +} diff --git a/arch/mips/alchemy/evalboards/pb1000.c b/arch/mips/alchemy/evalboards/pb1000.c new file mode 100644 index 0000000..6cd3c2b --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1000.c @@ -0,0 +1,196 @@ +/* + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1000.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +const char *get_system_type(void) +{ + return "Alchemy Pb1000"; +} + +void board_reset(void) +{ +} + +void __init board_setup(void) +{ + u32 pin_func, static_cfg0; + u32 sys_freqctrl, sys_clksrc; + u32 prid = read_c0_prid(); + char *argptr; + + argptr = prom_getcmdline(); + +#ifdef CONFIG_SERIAL_8250_CONSOLE + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif + +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) + /* au1000 does not support vra, au1500 and au1100 do */ + strcat(argptr, " au1000_audio=vra"); + argptr = prom_getcmdline(); +#endif + + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PINSTATERD); + udelay(100); + + sys_freqctrl = sys_clksrc = 0; /* shut up "unused" warnings */ + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* Zero and disable USBH/USBD clocks */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + + switch (prid & 0x000000FF) { + case 0x00: /* DA */ + case 0x01: /* HA */ + case 0x02: /* HB */ + /* CPU core freq to 48 MHz to slow it way down... */ + au_writel(4, SYS_CPUPLL); + + /* + * Setup 48 MHz FREQ2 from CPUPLL for USB Host + * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz + */ + sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* CPU core freq to 384 MHz */ + au_writel(0x20, SYS_CPUPLL); + + printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); + break; + + default: /* HC and newer */ + /* FREQ2 = aux / 2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | + SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + break; + } + + /* + * Route 48 MHz FREQ2 into USB Host and/or Device + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + /* Configure pins GPIO[14:9] as GPIO */ + pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); + + /* 2nd USB port is USB host */ + pin_func |= SYS_PF_USB; + + au_writel(pin_func, SYS_PINFUNC); + au_writel(0x2800, SYS_TRIOUTCLR); + au_writel(0x0030, SYS_OUTPUTCLR); +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + + /* Make GPIO 15 an input (for interrupt line) */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; + /* We don't need I2S, so make it available for GPIO[31:29] */ + pin_func |= SYS_PF_I2S; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0x8000, SYS_TRIOUTCLR); + + static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; + au_writel(static_cfg0, MEM_STCFG0); + + /* configure RCE2* for LCD */ + au_writel(0x00000004, MEM_STCFG2); + + /* MEM_STTIME2 */ + au_writel(0x09000000, MEM_STTIME2); + + /* Set 32-bit base address decoding for RCE2* */ + au_writel(0x10003ff0, MEM_STADDR2); + + /* + * PCI CPLD setup + * Expand CE0 to cover PCI + */ + au_writel(0x11803e40, MEM_STADDR1); + + /* Burst visibility on */ + au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); + + au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ + au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ + + /* Setup the static bus controller */ + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ + + /* + * Enable Au1000 BCLK switching - note: sed1356 must not use + * its BCLK (Au1000 LCLK) for any timings + */ + switch (prid & 0x000000FF) { + case 0x00: /* DA */ + case 0x01: /* HA */ + case 0x02: /* HB */ + break; + default: /* HC and newer */ + /* + * Enable sys bus clock divider when IDLE state or no bus + * activity. + */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + break; + } +} diff --git a/arch/mips/alchemy/evalboards/pb1100.c b/arch/mips/alchemy/evalboards/pb1100.c new file mode 100644 index 0000000..73bc831 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1100.c @@ -0,0 +1,150 @@ +/* + * Copyright 2002, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1100.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1100"; +} + +void board_reset(void) +{ + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ + au_writel(0x00000000, PB1100_RST_VDDI); +} + +void __init board_setup(void) +{ + volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; + char *argptr; + + argptr = prom_getcmdline(); +#ifdef CONFIG_SERIAL_8250_CONSOLE + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif + +#ifdef CONFIG_FB_AU1100 + argptr = strstr(argptr, "video="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + /* default panel */ + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ + } +#endif + +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) + /* au1000 does not support vra, au1500 and au1100 do */ + strcat(argptr, " au1000_audio=vra"); + argptr = prom_getcmdline(); +#endif + + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PININPUTEN); + udelay(100); + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + { + u32 pin_func, sys_freqctrl, sys_clksrc; + + /* Configure pins GPIO[14:9] as GPIO */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; + + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* Zero and disable USBH/USBD/IrDA clock */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); + + /* FREQ2 = aux / 2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | + SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* + * Route 48 MHz FREQ2 into USBH/USBD/IrDA + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + /* Setup the static bus controller */ + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ + + /* + * Get USB Functionality pin state (device vs host drive pins). + */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; + /* 2nd USB port is USB host. */ + pin_func |= SYS_PF_USB; + au_writel(pin_func, SYS_PINFUNC); + } +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + + /* Enable sys bus clock divider when IDLE state or no bus activity. */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + + /* Enable the RTC if not already enabled. */ + if (!(readb(base + 0x28) & 0x20)) { + writeb(readb(base + 0x28) | 0x20, base + 0x28); + au_sync(); + } + /* Put the clock in BCD mode. */ + if (readb(base + 0x2C) & 0x4) { /* reg B */ + writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); + au_sync(); + } +} diff --git a/arch/mips/alchemy/evalboards/pb1200.c b/arch/mips/alchemy/evalboards/pb1200.c new file mode 100644 index 0000000..ccaae62 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1200.c @@ -0,0 +1,301 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Pb1200/Db1200 board setup. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/interrupt.h> +#include <asm/mach-au1x00/au1000.h> + +#ifdef CONFIG_MIPS_PB1200 +#include <asm/mach-pb1x00/pb1200.h> +#endif + +#ifdef CONFIG_MIPS_DB1200 +#include <asm/mach-db1x00/db1200.h> +#define PB1200_INT_BEGIN DB1200_INT_BEGIN +#define PB1200_INT_END DB1200_INT_END +#endif + +#include <prom.h> + + +extern void (*board_init_irq)(void); + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + /* This is external interrupt cascade */ + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +/* + * Support for External interrupts on the Pb1200 Development platform. + */ +static volatile int pb1200_cascade_en; + +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) +{ + unsigned short bisr = bcsr->int_status; + int extirq_nr = 0; + + /* Clear all the edge interrupts. This has no effect on level. */ + bcsr->int_status = bisr; + for ( ; bisr; bisr &= bisr - 1) { + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); + /* Ack and dispatch IRQ */ + do_IRQ(extirq_nr); + } + + return IRQ_RETVAL(1); +} + +inline void pb1200_enable_irq(unsigned int irq_nr) +{ + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +inline void pb1200_disable_irq(unsigned int irq_nr) +{ + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +static unsigned int pb1200_setup_cascade(void) +{ + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, + 0, "Pb1200 Cascade", &pb1200_cascade_handler); +} + +static unsigned int pb1200_startup_irq(unsigned int irq) +{ + if (++pb1200_cascade_en == 1) { + int res; + + res = pb1200_setup_cascade(); + if (res) + return res; + } + + pb1200_enable_irq(irq); + + return 0; +} + +static void pb1200_shutdown_irq(unsigned int irq) +{ + pb1200_disable_irq(irq); + if (--pb1200_cascade_en == 0) + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); +} + +static struct irq_chip external_irq_type = { +#ifdef CONFIG_MIPS_PB1200 + .name = "Pb1200 Ext", +#endif +#ifdef CONFIG_MIPS_DB1200 + .name = "Db1200 Ext", +#endif + .startup = pb1200_startup_irq, + .shutdown = pb1200_shutdown_irq, + .ack = pb1200_disable_irq, + .mask = pb1200_disable_irq, + .mask_ack = pb1200_disable_irq, + .unmask = pb1200_enable_irq, +}; + +static void pb1200_init_irq(void) +{ + unsigned int irq; + +#ifdef CONFIG_MIPS_PB1200 + /* We have a problem with CPLD rev 3. */ + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); + printk(KERN_ERR "updated to latest revision. This software will\n"); + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + panic("Game over. Your score is 0."); + } +#endif + + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { + set_irq_chip_and_handler(irq, &external_irq_type, + handle_level_irq); + pb1200_disable_irq(irq); + } + + /* + * GPIO_7 can not be hooked here, so it is hooked upon first + * request of any source attached to the cascade. + */ +} + +const char *get_system_type(void) +{ + return "Alchemy Pb1200"; +} + +void board_reset(void) +{ + bcsr->resets = 0; + bcsr->system = 0; +} + +void __init board_setup(void) +{ + char *argptr; + + argptr = prom_getcmdline(); +#ifdef CONFIG_SERIAL_8250_CONSOLE + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif +#ifdef CONFIG_FB_AU1200 + strcat(argptr, " video=au1200fb:panel:bs"); +#endif + +#if 0 + { + u32 pin_func; + + /* + * Enable PSC1 SYNC for AC97. Normaly done in audio driver, + * but it is board specific code, so put it here. + */ + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ + au_sync(); + } +#endif + +#if defined(CONFIG_I2C_AU1550) + { + u32 freq0, clksrc; + u32 pin_func; + + /* Select SMBus in CPLD */ + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; + + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); + /* Set GPIOs correctly */ + pin_func |= 2 << 17; + au_writel(pin_func, SYS_PINFUNC); + au_sync(); + + /* The I2C driver depends on 50 MHz clock */ + freq0 = au_readl(SYS_FREQCTRL0); + au_sync(); + freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); + freq0 |= 3 << SYS_FC_FRDIV1_BIT; + /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ + au_writel(freq0, SYS_FREQCTRL0); + au_sync(); + freq0 |= SYS_FC_FE1; + au_writel(freq0, SYS_FREQCTRL0); + au_sync(); + + clksrc = au_readl(SYS_CLKSRC); + au_sync(); + clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); + /* Bit 22 is EXTCLK0 for PSC0 */ + clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; + au_writel(clksrc, SYS_CLKSRC); + au_sync(); + } +#endif + + /* + * The Pb1200 development board uses external MUX for PSC0 to + * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI + */ +#ifdef CONFIG_I2C_AU1550 + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; +#endif + au_sync(); + +#ifdef CONFIG_MIPS_PB1200 + printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); +#endif +#ifdef CONFIG_MIPS_DB1200 + printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); +#endif + + /* Setup Pb1200 External Interrupt Controller */ + board_init_irq = pb1200_init_irq; +} + +int board_au1200fb_panel(void) +{ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + int p; + + p = bcsr->switches; + p >>= 8; + p &= 0x0F; + return p; +} + +int board_au1200fb_panel_init(void) +{ + /* Apply power */ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + + bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; + /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ + return 0; +} + +int board_au1200fb_panel_shutdown(void) +{ + /* Remove power */ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + + bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | + BCSR_BOARD_LCDBL); + /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ + return 0; +} diff --git a/arch/mips/alchemy/evalboards/pb1200_platform.c b/arch/mips/alchemy/evalboards/pb1200_platform.c new file mode 100644 index 0000000..9530329 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1200_platform.c @@ -0,0 +1,166 @@ +/* + * Pb1200/DBAu1200 board platform device registration + * + * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <linux/dma-mapping.h> +#include <linux/init.h> +#include <linux/leds.h> +#include <linux/platform_device.h> + +#include <asm/mach-au1x00/au1xxx.h> +#include <asm/mach-au1x00/au1100_mmc.h> + +static int mmc_activity; + +static void pb1200mmc0_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD0PWR; + else + bcsr->board &= ~BCSR_BOARD_SD0PWR; + + au_sync_delay(1); +} + +static int pb1200mmc0_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; +} + +static int pb1200mmc0_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; +} + +static void pb1200_mmcled_set(struct led_classdev *led, + enum led_brightness brightness) +{ + if (brightness != LED_OFF) { + if (++mmc_activity == 1) + bcsr->disk_leds &= ~(1 << 8); + } else { + if (--mmc_activity == 0) + bcsr->disk_leds |= (1 << 8); + } +} + +static struct led_classdev pb1200mmc_led = { + .brightness_set = pb1200_mmcled_set, +}; + +#ifndef CONFIG_MIPS_DB1200 +static void pb1200mmc1_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD1PWR; + else + bcsr->board &= ~BCSR_BOARD_SD1PWR; + + au_sync_delay(1); +} + +static int pb1200mmc1_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; +} + +static int pb1200mmc1_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; +} +#endif + +const struct au1xmmc_platform_data au1xmmc_platdata[2] = { + [0] = { + .set_power = pb1200mmc0_set_power, + .card_inserted = pb1200mmc0_card_inserted, + .card_readonly = pb1200mmc0_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#ifndef CONFIG_MIPS_DB1200 + [1] = { + .set_power = pb1200mmc1_set_power, + .card_inserted = pb1200mmc1_card_inserted, + .card_readonly = pb1200mmc1_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#endif +}; + +static struct resource ide_resources[] = { + [0] = { + .start = IDE_PHYS_ADDR, + .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = IDE_INT, + .end = IDE_INT, + .flags = IORESOURCE_IRQ + } +}; + +static u64 ide_dmamask = DMA_32BIT_MASK; + +static struct platform_device ide_device = { + .name = "au1200-ide", + .id = 0, + .dev = { + .dma_mask = &ide_dmamask, + .coherent_dma_mask = DMA_32BIT_MASK, + }, + .num_resources = ARRAY_SIZE(ide_resources), + .resource = ide_resources +}; + +static struct resource smc91c111_resources[] = { + [0] = { + .name = "smc91x-regs", + .start = SMC91C111_PHYS_ADDR, + .end = SMC91C111_PHYS_ADDR + 0xf, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = SMC91C111_INT, + .end = SMC91C111_INT, + .flags = IORESOURCE_IRQ + }, +}; + +static struct platform_device smc91c111_device = { + .name = "smc91x", + .id = -1, + .num_resources = ARRAY_SIZE(smc91c111_resources), + .resource = smc91c111_resources +}; + +static struct platform_device *board_platform_devices[] __initdata = { + &ide_device, + &smc91c111_device +}; + +static int __init board_register_devices(void) +{ + return platform_add_devices(board_platform_devices, + ARRAY_SIZE(board_platform_devices)); +} + +arch_initcall(board_register_devices); diff --git a/arch/mips/alchemy/evalboards/pb1500.c b/arch/mips/alchemy/evalboards/pb1500.c new file mode 100644 index 0000000..a65f100 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1500.c @@ -0,0 +1,156 @@ +/* + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1500.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1500"; +} + +void board_reset(void) +{ + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ + au_writel(0x00000000, PB1500_RST_VDDI); +} + +void __init board_setup(void) +{ + u32 pin_func; + u32 sys_freqctrl, sys_clksrc; + char *argptr; + + argptr = prom_getcmdline(); +#ifdef CONFIG_SERIAL_8250_CONSOLE + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) + /* au1000 does not support vra, au1500 and au1100 do */ + strcat(argptr, " au1000_audio=vra"); + argptr = prom_getcmdline(); +#endif + + sys_clksrc = sys_freqctrl = pin_func = 0; + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PINSTATERD); + udelay(100); + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + + /* GPIO201 is input for PCMCIA card detect */ + /* GPIO203 is input for PCMCIA interrupt request */ + au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); + + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* zero and disable USBH/USBD clocks */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + + /* FREQ2 = aux/2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* + * Route 48MHz FREQ2 into USB Host and/or Device + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; + /* 2nd USB port is USB host */ + pin_func |= SYS_PF_USB; + au_writel(pin_func, SYS_PINFUNC); +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + +#ifdef CONFIG_PCI + /* Setup PCI bus controller */ + au_writel(0, Au1500_PCI_CMEM); + au_writel(0x00003fff, Au1500_CFG_BASE); +#if defined(__MIPSEB__) + au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); +#else + au_writel(0xf, Au1500_PCI_CFG); +#endif + au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); + au_writel(0, Au1500_PCI_MWBASE_REV_CCL); + au_writel(0x02a00356, Au1500_PCI_STATCMD); + au_writel(0x00003c04, Au1500_PCI_HDRTYPE); + au_writel(0x00000008, Au1500_PCI_MBAR); + au_sync(); +#endif + + /* Enable sys bus clock divider when IDLE state or no bus activity. */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + + /* Enable the RTC if not already enabled */ + if (!(au_readl(0xac000028) & 0x20)) { + printk(KERN_INFO "enabling clock ...\n"); + au_writel((au_readl(0xac000028) | 0x20), 0xac000028); + } + /* Put the clock in BCD mode */ + if (au_readl(0xac00002c) & 0x4) { /* reg B */ + au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); + au_sync(); + } +} diff --git a/arch/mips/alchemy/evalboards/pb1550.c b/arch/mips/alchemy/evalboards/pb1550.c new file mode 100644 index 0000000..bd7c3a9 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1550.c @@ -0,0 +1,86 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Pb1550 board setup. + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1550.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1550"; +} + +void board_reset(void) +{ + /* Hit BCSR.SYSTEM[RESET] */ + au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); +} + +void __init board_setup(void) +{ + u32 pin_func; + +#ifdef CONFIG_SERIAL_8250_CONSOLE + char *argptr = prom_getcmdline(); + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif + + /* + * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, + * but it is board specific code, so put it here. + */ + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ + au_sync(); + + printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); +} diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c index 2e26465..08d265c 100644 --- a/arch/mips/alchemy/mtx-1/board_setup.c +++ b/arch/mips/alchemy/mtx-1/board_setup.c @@ -92,6 +92,14 @@ void board_reset(void) void __init board_setup(void) { +#ifdef CONFIG_SERIAL_8250_CONSOLE + char *argptr = prom_getcmdline(); + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) /* Enable USB power switch */ au_writel(au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR); diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile deleted file mode 100644 index 4377ab3..0000000 --- a/arch/mips/alchemy/pb1000/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1000 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c deleted file mode 100644 index bd0b6f4..0000000 --- a/arch/mips/alchemy/pb1000/board_setup.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1000.h> -#include <prom.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -const char *get_system_type(void) -{ - return "Alchemy Pb1000"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ -} - -void __init board_setup(void) -{ - u32 pin_func, static_cfg0; - u32 sys_freqctrl, sys_clksrc; - u32 prid = read_c0_prid(); - - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PINSTATERD); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* Zero and disable USBH/USBD clocks */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - - switch (prid & 0x000000FF) { - case 0x00: /* DA */ - case 0x01: /* HA */ - case 0x02: /* HB */ - /* CPU core freq to 48 MHz to slow it way down... */ - au_writel(4, SYS_CPUPLL); - - /* - * Setup 48 MHz FREQ2 from CPUPLL for USB Host - * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz - */ - sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* CPU core freq to 384 MHz */ - au_writel(0x20, SYS_CPUPLL); - - printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); - break; - - default: /* HC and newer */ - /* FREQ2 = aux / 2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | - SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - break; - } - - /* - * Route 48 MHz FREQ2 into USB Host and/or Device - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - /* Configure pins GPIO[14:9] as GPIO */ - pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); - - /* 2nd USB port is USB host */ - pin_func |= SYS_PF_USB; - - au_writel(pin_func, SYS_PINFUNC); - au_writel(0x2800, SYS_TRIOUTCLR); - au_writel(0x0030, SYS_OUTPUTCLR); -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - - /* Make GPIO 15 an input (for interrupt line) */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; - /* We don't need I2S, so make it available for GPIO[31:29] */ - pin_func |= SYS_PF_I2S; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0x8000, SYS_TRIOUTCLR); - - static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; - au_writel(static_cfg0, MEM_STCFG0); - - /* configure RCE2* for LCD */ - au_writel(0x00000004, MEM_STCFG2); - - /* MEM_STTIME2 */ - au_writel(0x09000000, MEM_STTIME2); - - /* Set 32-bit base address decoding for RCE2* */ - au_writel(0x10003ff0, MEM_STADDR2); - - /* - * PCI CPLD setup - * Expand CE0 to cover PCI - */ - au_writel(0x11803e40, MEM_STADDR1); - - /* Burst visibility on */ - au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); - - au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ - au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ - - /* Setup the static bus controller */ - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ - - /* - * Enable Au1000 BCLK switching - note: sed1356 must not use - * its BCLK (Au1000 LCLK) for any timings - */ - switch (prid & 0x000000FF) { - case 0x00: /* DA */ - case 0x01: /* HA */ - case 0x02: /* HB */ - break; - default: /* HC and newer */ - /* - * Enable sys bus clock divider when IDLE state or no bus - * activity. - */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - break; - } -} diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile deleted file mode 100644 index 627a75c..0000000 --- a/arch/mips/alchemy/pb1100/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2001, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1100 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c deleted file mode 100644 index 87da4a5..0000000 --- a/arch/mips/alchemy/pb1100/board_setup.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2002, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1100.h> -#include <prom.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1100"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg3; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ - au_writel(0x00000000, PB1100_RST_VDDI); -} - -void __init board_setup(void) -{ - volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; - - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PININPUTEN); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - { - u32 pin_func, sys_freqctrl, sys_clksrc; - - /* Configure pins GPIO[14:9] as GPIO */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; - - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* Zero and disable USBH/USBD/IrDA clock */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); - - /* FREQ2 = aux / 2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | - SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* - * Route 48 MHz FREQ2 into USBH/USBD/IrDA - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - /* Setup the static bus controller */ - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ - - /* - * Get USB Functionality pin state (device vs host drive pins). - */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; - /* 2nd USB port is USB host. */ - pin_func |= SYS_PF_USB; - au_writel(pin_func, SYS_PINFUNC); - } -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - - /* Enable sys bus clock divider when IDLE state or no bus activity. */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - - /* Enable the RTC if not already enabled. */ - if (!(readb(base + 0x28) & 0x20)) { - writeb(readb(base + 0x28) | 0x20, base + 0x28); - au_sync(); - } - /* Put the clock in BCD mode. */ - if (readb(base + 0x2C) & 0x4) { /* reg B */ - writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); - au_sync(); - } -} diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile deleted file mode 100644 index e9b9d27..0000000 --- a/arch/mips/alchemy/pb1200/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. -# - -lib-y := board_setup.o -obj-y += platform.o - -EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c deleted file mode 100644 index a336a7a..0000000 --- a/arch/mips/alchemy/pb1200/board_setup.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Pb1200/Db1200 board setup. - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_PB1200 -#include <asm/mach-pb1x00/pb1200.h> -#endif - -#ifdef CONFIG_MIPS_DB1200 -#include <asm/mach-db1x00/db1200.h> -#define PB1200_INT_BEGIN DB1200_INT_BEGIN -#define PB1200_INT_END DB1200_INT_END -#endif - -#include <prom.h> - -extern void (*board_init_irq)(void); - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - /* This is external interrupt cascade */ - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -/* - * Support for External interrupts on the Pb1200 Development platform. - */ -static volatile int pb1200_cascade_en; - -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) -{ - unsigned short bisr = bcsr->int_status; - int extirq_nr = 0; - - /* Clear all the edge interrupts. This has no effect on level. */ - bcsr->int_status = bisr; - for ( ; bisr; bisr &= bisr - 1) { - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); - /* Ack and dispatch IRQ */ - do_IRQ(extirq_nr); - } - - return IRQ_RETVAL(1); -} - -inline void pb1200_enable_irq(unsigned int irq_nr) -{ - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -inline void pb1200_disable_irq(unsigned int irq_nr) -{ - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -static unsigned int pb1200_setup_cascade(void) -{ - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, - 0, "Pb1200 Cascade", &pb1200_cascade_handler); -} - -static unsigned int pb1200_startup_irq(unsigned int irq) -{ - if (++pb1200_cascade_en == 1) { - int res; - - res = pb1200_setup_cascade(); - if (res) - return res; - } - - pb1200_enable_irq(irq); - - return 0; -} - -static void pb1200_shutdown_irq(unsigned int irq) -{ - pb1200_disable_irq(irq); - if (--pb1200_cascade_en == 0) - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); -} - -static struct irq_chip external_irq_type = { -#ifdef CONFIG_MIPS_PB1200 - .name = "Pb1200 Ext", -#endif -#ifdef CONFIG_MIPS_DB1200 - .name = "Db1200 Ext", -#endif - .startup = pb1200_startup_irq, - .shutdown = pb1200_shutdown_irq, - .ack = pb1200_disable_irq, - .mask = pb1200_disable_irq, - .mask_ack = pb1200_disable_irq, - .unmask = pb1200_enable_irq, -}; - -static void pb1200_init_irq(void) -{ - unsigned int irq; - -#ifdef CONFIG_MIPS_PB1200 - /* We have a problem with CPLD rev 3. */ - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); - printk(KERN_ERR "updated to latest revision. This software will\n"); - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - panic("Game over. Your score is 0."); - } -#endif - - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { - set_irq_chip_and_handler(irq, &external_irq_type, - handle_level_irq); - pb1200_disable_irq(irq); - } - - /* - * GPIO_7 can not be hooked here, so it is hooked upon first - * request of any source attached to the cascade. - */ -} - -const char *get_system_type(void) -{ - return "Alchemy Pb1200"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - bcsr->resets = 0; - bcsr->system = 0; -} - -void __init board_setup(void) -{ - char *argptr = NULL; - -#if 0 - { - u32 pin_func; - - /* - * Enable PSC1 SYNC for AC97. Normaly done in audio driver, - * but it is board specific code, so put it here. - */ - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ - au_sync(); - } -#endif - -#if defined(CONFIG_I2C_AU1550) - { - u32 freq0, clksrc; - u32 pin_func; - - /* Select SMBus in CPLD */ - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; - - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); - /* Set GPIOs correctly */ - pin_func |= 2 << 17; - au_writel(pin_func, SYS_PINFUNC); - au_sync(); - - /* The I2C driver depends on 50 MHz clock */ - freq0 = au_readl(SYS_FREQCTRL0); - au_sync(); - freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); - freq0 |= 3 << SYS_FC_FRDIV1_BIT; - /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ - au_writel(freq0, SYS_FREQCTRL0); - au_sync(); - freq0 |= SYS_FC_FE1; - au_writel(freq0, SYS_FREQCTRL0); - au_sync(); - - clksrc = au_readl(SYS_CLKSRC); - au_sync(); - clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); - /* Bit 22 is EXTCLK0 for PSC0 */ - clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; - au_writel(clksrc, SYS_CLKSRC); - au_sync(); - } -#endif - -#ifdef CONFIG_FB_AU1200 - argptr = prom_getcmdline(); -#ifdef CONFIG_MIPS_PB1200 - strcat(argptr, " video=au1200fb:panel:bs"); -#endif -#ifdef CONFIG_MIPS_DB1200 - strcat(argptr, " video=au1200fb:panel:bs"); -#endif -#endif - - /* - * The Pb1200 development board uses external MUX for PSC0 to - * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI - */ -#ifdef CONFIG_I2C_AU1550 - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; -#endif - au_sync(); - -#ifdef CONFIG_MIPS_PB1200 - printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); -#endif -#ifdef CONFIG_MIPS_DB1200 - printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); -#endif - - /* Setup Pb1200 External Interrupt Controller */ - board_init_irq = pb1200_init_irq; -} - -int board_au1200fb_panel(void) -{ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - int p; - - p = bcsr->switches; - p >>= 8; - p &= 0x0F; - return p; -} - -int board_au1200fb_panel_init(void) -{ - /* Apply power */ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - - bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; - /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ - return 0; -} - -int board_au1200fb_panel_shutdown(void) -{ - /* Remove power */ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - - bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | - BCSR_BOARD_LCDBL); - /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ - return 0; -} diff --git a/arch/mips/alchemy/pb1200/platform.c b/arch/mips/alchemy/pb1200/platform.c deleted file mode 100644 index 9530329..0000000 --- a/arch/mips/alchemy/pb1200/platform.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Pb1200/DBAu1200 board platform device registration - * - * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <linux/dma-mapping.h> -#include <linux/init.h> -#include <linux/leds.h> -#include <linux/platform_device.h> - -#include <asm/mach-au1x00/au1xxx.h> -#include <asm/mach-au1x00/au1100_mmc.h> - -static int mmc_activity; - -static void pb1200mmc0_set_power(void *mmc_host, int state) -{ - if (state) - bcsr->board |= BCSR_BOARD_SD0PWR; - else - bcsr->board &= ~BCSR_BOARD_SD0PWR; - - au_sync_delay(1); -} - -static int pb1200mmc0_card_readonly(void *mmc_host) -{ - return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; -} - -static int pb1200mmc0_card_inserted(void *mmc_host) -{ - return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; -} - -static void pb1200_mmcled_set(struct led_classdev *led, - enum led_brightness brightness) -{ - if (brightness != LED_OFF) { - if (++mmc_activity == 1) - bcsr->disk_leds &= ~(1 << 8); - } else { - if (--mmc_activity == 0) - bcsr->disk_leds |= (1 << 8); - } -} - -static struct led_classdev pb1200mmc_led = { - .brightness_set = pb1200_mmcled_set, -}; - -#ifndef CONFIG_MIPS_DB1200 -static void pb1200mmc1_set_power(void *mmc_host, int state) -{ - if (state) - bcsr->board |= BCSR_BOARD_SD1PWR; - else - bcsr->board &= ~BCSR_BOARD_SD1PWR; - - au_sync_delay(1); -} - -static int pb1200mmc1_card_readonly(void *mmc_host) -{ - return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; -} - -static int pb1200mmc1_card_inserted(void *mmc_host) -{ - return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; -} -#endif - -const struct au1xmmc_platform_data au1xmmc_platdata[2] = { - [0] = { - .set_power = pb1200mmc0_set_power, - .card_inserted = pb1200mmc0_card_inserted, - .card_readonly = pb1200mmc0_card_readonly, - .cd_setup = NULL, /* use poll-timer in driver */ - .led = &pb1200mmc_led, - }, -#ifndef CONFIG_MIPS_DB1200 - [1] = { - .set_power = pb1200mmc1_set_power, - .card_inserted = pb1200mmc1_card_inserted, - .card_readonly = pb1200mmc1_card_readonly, - .cd_setup = NULL, /* use poll-timer in driver */ - .led = &pb1200mmc_led, - }, -#endif -}; - -static struct resource ide_resources[] = { - [0] = { - .start = IDE_PHYS_ADDR, - .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, - .flags = IORESOURCE_MEM - }, - [1] = { - .start = IDE_INT, - .end = IDE_INT, - .flags = IORESOURCE_IRQ - } -}; - -static u64 ide_dmamask = DMA_32BIT_MASK; - -static struct platform_device ide_device = { - .name = "au1200-ide", - .id = 0, - .dev = { - .dma_mask = &ide_dmamask, - .coherent_dma_mask = DMA_32BIT_MASK, - }, - .num_resources = ARRAY_SIZE(ide_resources), - .resource = ide_resources -}; - -static struct resource smc91c111_resources[] = { - [0] = { - .name = "smc91x-regs", - .start = SMC91C111_PHYS_ADDR, - .end = SMC91C111_PHYS_ADDR + 0xf, - .flags = IORESOURCE_MEM - }, - [1] = { - .start = SMC91C111_INT, - .end = SMC91C111_INT, - .flags = IORESOURCE_IRQ - }, -}; - -static struct platform_device smc91c111_device = { - .name = "smc91x", - .id = -1, - .num_resources = ARRAY_SIZE(smc91c111_resources), - .resource = smc91c111_resources -}; - -static struct platform_device *board_platform_devices[] __initdata = { - &ide_device, - &smc91c111_device -}; - -static int __init board_register_devices(void) -{ - return platform_add_devices(board_platform_devices, - ARRAY_SIZE(board_platform_devices)); -} - -arch_initcall(board_register_devices); diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile deleted file mode 100644 index 4664d61..0000000 --- a/arch/mips/alchemy/pb1500/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2001, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1500 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c deleted file mode 100644 index 1be1afc..0000000 --- a/arch/mips/alchemy/pb1500/board_setup.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1500.h> -#include <prom.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ - au_writel(0x00000000, PB1500_RST_VDDI); -} - -void __init board_setup(void) -{ - u32 pin_func; - u32 sys_freqctrl, sys_clksrc; - - sys_clksrc = sys_freqctrl = pin_func = 0; - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PINSTATERD); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - - /* GPIO201 is input for PCMCIA card detect */ - /* GPIO203 is input for PCMCIA interrupt request */ - au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); - - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* zero and disable USBH/USBD clocks */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - - /* FREQ2 = aux/2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* - * Route 48MHz FREQ2 into USB Host and/or Device - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; - /* 2nd USB port is USB host */ - pin_func |= SYS_PF_USB; - au_writel(pin_func, SYS_PINFUNC); -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - -#ifdef CONFIG_PCI - /* Setup PCI bus controller */ - au_writel(0, Au1500_PCI_CMEM); - au_writel(0x00003fff, Au1500_CFG_BASE); -#if defined(__MIPSEB__) - au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); -#else - au_writel(0xf, Au1500_PCI_CFG); -#endif - au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); - au_writel(0, Au1500_PCI_MWBASE_REV_CCL); - au_writel(0x02a00356, Au1500_PCI_STATCMD); - au_writel(0x00003c04, Au1500_PCI_HDRTYPE); - au_writel(0x00000008, Au1500_PCI_MBAR); - au_sync(); -#endif - - /* Enable sys bus clock divider when IDLE state or no bus activity. */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - - /* Enable the RTC if not already enabled */ - if (!(au_readl(0xac000028) & 0x20)) { - printk(KERN_INFO "enabling clock ...\n"); - au_writel((au_readl(0xac000028) | 0x20), 0xac000028); - } - /* Put the clock in BCD mode */ - if (au_readl(0xac00002c) & 0x4) { /* reg B */ - au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); - au_sync(); - } -} diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile deleted file mode 100644 index 7e6453d..0000000 --- a/arch/mips/alchemy/pb1550/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1550 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c deleted file mode 100644 index e844484..0000000 --- a/arch/mips/alchemy/pb1550/board_setup.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Pb1550 board setup. - * - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1550.h> -#include <prom.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1550"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.SYSTEM[RESET] */ - au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); -} - -void __init board_setup(void) -{ - u32 pin_func; - - /* - * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, - * but it is board specific code, so put it here. - */ - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ - au_sync(); - - printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); -} diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c index 813668f..1a83b2d 100644 --- a/arch/mips/alchemy/xxs1500/board_setup.c +++ b/arch/mips/alchemy/xxs1500/board_setup.c @@ -84,6 +84,15 @@ void __init board_setup(void) { u32 pin_func; +#ifdef CONFIG_SERIAL_8250_CONSOLE + char *argptr = prom_getcmdline(); + argptr = strstr(argptr, "console="); + if (argptr == NULL) { + argptr = prom_getcmdline(); + strcat(argptr, " console=ttyS0,115200"); + } +#endif + /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; pin_func |= SYS_PF_UR3; -- 1.6.0.3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-08 12:08 ` [PATCH 2/3] Alchemy: Move evalboard code to common directory Manuel Lauss @ 2008-11-12 4:00 ` Kevin Hickey 2008-11-12 6:06 ` Manuel Lauss 2008-11-12 10:35 ` Sergei Shtylyov 0 siblings, 2 replies; 19+ messages in thread From: Kevin Hickey @ 2008-11-12 4:00 UTC (permalink / raw) To: Manuel Lauss; +Cc: Linux-MIPS, Sergei Shtylyov, Florian Fainelli, Bruno Randolf Manuel, And in keeping with my other email, I think that the evalboards directory is a good idea (though I would recommend the name "develboards" as that is what DB stands for), but it should contain subdirectories for each board and a common directory for common DB code. Smashing all of the board code into one file doesn't leave any room to grow if that file gets too big. Also, a single common.c will not be sufficient in the future. =Kevin On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > Move all code of the Pb/Db boards to a single subdirectory and extract > some common code. > > Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> > --- > arch/mips/Makefile | 24 +- > arch/mips/alchemy/common/setup.c | 25 -- > arch/mips/alchemy/db1x00/Makefile | 8 - > arch/mips/alchemy/db1x00/board_setup.c | 198 --------------- > arch/mips/alchemy/evalboards/Makefile | 17 ++ > arch/mips/alchemy/evalboards/common.c | 62 +++++ > arch/mips/alchemy/evalboards/db1x00.c | 206 +++++++++++++++ > arch/mips/alchemy/evalboards/pb1000.c | 196 +++++++++++++++ > arch/mips/alchemy/evalboards/pb1100.c | 150 +++++++++++ > arch/mips/alchemy/evalboards/pb1200.c | 301 ++++++++++++++++++++++ > arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++ > arch/mips/alchemy/evalboards/pb1500.c | 156 ++++++++++++ > arch/mips/alchemy/evalboards/pb1550.c | 86 +++++++ > arch/mips/alchemy/mtx-1/board_setup.c | 8 + > arch/mips/alchemy/pb1000/Makefile | 8 - > arch/mips/alchemy/pb1000/board_setup.c | 197 --------------- > arch/mips/alchemy/pb1100/Makefile | 8 - > arch/mips/alchemy/pb1100/board_setup.c | 147 ----------- > arch/mips/alchemy/pb1200/Makefile | 8 - > arch/mips/alchemy/pb1200/board_setup.c | 316 ------------------------ > arch/mips/alchemy/pb1200/platform.c | 166 ------------- > arch/mips/alchemy/pb1500/Makefile | 8 - > arch/mips/alchemy/pb1500/board_setup.c | 161 ------------ > arch/mips/alchemy/pb1550/Makefile | 8 - > arch/mips/alchemy/pb1550/board_setup.c | 97 -------- > arch/mips/alchemy/xxs1500/board_setup.c | 9 + > 26 files changed, 1369 insertions(+), 1367 deletions(-) > delete mode 100644 arch/mips/alchemy/db1x00/Makefile > delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c > create mode 100644 arch/mips/alchemy/evalboards/Makefile > create mode 100644 arch/mips/alchemy/evalboards/common.c > create mode 100644 arch/mips/alchemy/evalboards/db1x00.c > create mode 100644 arch/mips/alchemy/evalboards/pb1000.c > create mode 100644 arch/mips/alchemy/evalboards/pb1100.c > create mode 100644 arch/mips/alchemy/evalboards/pb1200.c > create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c > create mode 100644 arch/mips/alchemy/evalboards/pb1500.c > create mode 100644 arch/mips/alchemy/evalboards/pb1550.c > delete mode 100644 arch/mips/alchemy/pb1000/Makefile > delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c > delete mode 100644 arch/mips/alchemy/pb1100/Makefile > delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c > delete mode 100644 arch/mips/alchemy/pb1200/Makefile > delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c > delete mode 100644 arch/mips/alchemy/pb1200/platform.c > delete mode 100644 arch/mips/alchemy/pb1500/Makefile > delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c > delete mode 100644 arch/mips/alchemy/pb1550/Makefile > delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c > > diff --git a/arch/mips/Makefile b/arch/mips/Makefile > index 28c55f6..b31764e 100644 > --- a/arch/mips/Makefile > +++ b/arch/mips/Makefile > @@ -184,84 +184,84 @@ cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 > # > # AMD Alchemy Pb1000 eval board > # > -libs-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/pb1000/ > +core-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 > > # > # AMD Alchemy Pb1100 eval board > # > -libs-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/pb1100/ > +core-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 > > # > # AMD Alchemy Pb1500 eval board > # > -libs-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/pb1500/ > +core-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 > > # > # AMD Alchemy Pb1550 eval board > # > -libs-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/pb1550/ > +core-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 > > # > # AMD Alchemy Pb1200 eval board > # > -libs-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/pb1200/ > +core-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 > > # > # AMD Alchemy Db1000 eval board > # > -libs-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 > > # > # AMD Alchemy Db1100 eval board > # > -libs-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 > > # > # AMD Alchemy Db1500 eval board > # > -libs-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 > > # > # AMD Alchemy Db1550 eval board > # > -libs-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 > > # > # AMD Alchemy Db1200 eval board > # > -libs-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/pb1200/ > +core-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 > > # > # AMD Alchemy Bosporus eval board > # > -libs-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 > > # > # AMD Alchemy Mirage eval board > # > -libs-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/db1x00/ > +core-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/evalboards/ > cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 > > diff --git a/arch/mips/alchemy/common/setup.c b/arch/mips/alchemy/common/setup.c > index 1ac6b06..cd94985 100644 > --- a/arch/mips/alchemy/common/setup.c > +++ b/arch/mips/alchemy/common/setup.c > @@ -46,7 +46,6 @@ extern void set_cpuspec(void); > void __init plat_mem_setup(void) > { > struct cpu_spec *sp; > - char *argptr; > unsigned long prid, cpufreq, bclk; > > set_cpuspec(); > @@ -79,30 +78,6 @@ void __init plat_mem_setup(void) > /* Clear to obtain best system bus performance */ > clear_c0_config(1 << 19); /* Clear Config[OD] */ > > - argptr = prom_getcmdline(); > - > -#ifdef CONFIG_SERIAL_8250_CONSOLE > - argptr = strstr(argptr, "console="); > - if (argptr == NULL) { > - argptr = prom_getcmdline(); > - strcat(argptr, " console=ttyS0,115200"); > - } > -#endif > - > -#ifdef CONFIG_FB_AU1100 > - argptr = strstr(argptr, "video="); > - if (argptr == NULL) { > - argptr = prom_getcmdline(); > - /* default panel */ > - /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > - } > -#endif > - > -#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > - /* au1000 does not support vra, au1500 and au1100 do */ > - strcat(argptr, " au1000_audio=vra"); > - argptr = prom_getcmdline(); > -#endif > _machine_restart = au1000_restart; > _machine_halt = au1000_halt; > pm_power_off = au1000_power_off; > diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile > deleted file mode 100644 > index 9924aa0..0000000 > --- a/arch/mips/alchemy/db1x00/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Copyright 2000, 2008 MontaVista Software Inc. > -# Author: MontaVista Software, Inc. <source@mvista.com> > -# > -# Makefile for the Alchemy Semiconductor DBAu1xx0 boards. > -# > - > -lib-y := board_setup.o > diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c > deleted file mode 100644 > index 507ded2..0000000 > --- a/arch/mips/alchemy/db1x00/board_setup.c > +++ /dev/null > @@ -1,198 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Alchemy Db1x00 board support. > - * > - * Copyright 2003 Embedded Edge, LLC > - * dan@embeddededge.com > - * > - * Copyright 2000, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/kernel.h> > -#include <asm/bootinfo.h> > -#include <prom.h> > - > -#include <asm/mach-au1x00/au1000.h> > -#include <asm/mach-db1x00/db1x00.h> > - > -#ifdef CONFIG_MIPS_DB1500 > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_BOSPORUS > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_MIRAGE > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > -}; > -#endif > - > -#ifdef CONFIG_MIPS_DB1550 > -char irq_tab_alchemy[][5] __initdata = { > - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > -}; > -#endif > - > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - > -#ifndef CONFIG_MIPS_MIRAGE > -#ifdef CONFIG_MIPS_DB1550 > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > -#else > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > - > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > -#endif > -#else > - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > -#endif > - > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > -static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > - > -const char *get_system_type(void) > -{ > -#ifdef CONFIG_MIPS_BOSPORUS > - return "Alchemy Bosporus Gateway Reference"; > -#else > - return "Alchemy Db1x00"; > -#endif > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > - /* Hit BCSR.SW_RESET[RESET] */ > - bcsr->swreset = 0x0000; > -} > - > -void __init board_setup(void) > -{ > - u32 pin_func = 0; > - > - /* Not valid for Au1550 */ > -#if defined(CONFIG_IRDA) && \ > - (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) > - /* Set IRFIRSEL instead of GPIO15 */ > - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; > - au_writel(pin_func, SYS_PINFUNC); > - /* Power off until the driver is in use */ > - bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; > - bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; > - au_sync(); > -#endif > - bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ > - > -#ifdef CONFIG_MIPS_MIRAGE > - /* Enable GPIO[31:0] inputs */ > - au_writel(0, SYS_PININPUTEN); > - > - /* GPIO[20] is output, tristate the other input primary GPIOs */ > - au_writel(~(1 << 20), SYS_TRIOUTCLR); > - > - /* Set GPIO[210:208] instead of SSI_0 */ > - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; > - > - /* Set GPIO[215:211] for LEDs */ > - pin_func |= 5 << 2; > - > - /* Set GPIO[214:213] for more LEDs */ > - pin_func |= 5 << 12; > - > - /* Set GPIO[207:200] instead of PCMCIA/LCD */ > - pin_func |= SYS_PF_LCD | SYS_PF_PC; > - au_writel(pin_func, SYS_PINFUNC); > - > - /* > - * Enable speaker amplifier. This should > - * be part of the audio driver. > - */ > - au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); > - au_writel(0x02000200, GPIO2_OUTPUT); > -#endif > - > - au_sync(); > - > -#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 > -#ifdef CONFIG_MIPS_BOSPORUS > - printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); > -#endif > -#ifdef CONFIG_MIPS_MIRAGE > - printk(KERN_INFO "AMD Alchemy Mirage Board\n"); > -#endif > -#ifdef CONFIG_MIPS_DB1550 > - printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); > -#endif > -} > diff --git a/arch/mips/alchemy/evalboards/Makefile b/arch/mips/alchemy/evalboards/Makefile > new file mode 100644 > index 0000000..56a67c6 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/Makefile > @@ -0,0 +1,17 @@ > +# > +# Alchemy demoboards (Db1xx0/Pb1xx0/Bosporus/Mirage series). > +# > + > +obj-y += common.o > +obj-$(CONFIG_MIPS_PB1000) += pb1000.o > +obj-$(CONFIG_MIPS_PB1100) += pb1100.o > +obj-$(CONFIG_MIPS_PB1200) += pb1200.o pb1200_platform.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_DB1200) += pb1200.o pb1200_platform.o > +obj-$(CONFIG_MIPS_DB1500) += db1x00.o > +obj-$(CONFIG_MIPS_DB1550) += db1x00.o > +obj-$(CONFIG_MIPS_BOSPORUS) += db1x00.o > +obj-$(CONFIG_MIPS_MIRAGE) += db1x00.o > diff --git a/arch/mips/alchemy/evalboards/common.c b/arch/mips/alchemy/evalboards/common.c > new file mode 100644 > index 0000000..baf8300 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/common.c > @@ -0,0 +1,62 @@ > +/* > + * Common code used by all Alchemy evalboards. > + * > + * Extracted from files which had this to say: > + * > + * Copyright 2000, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/bootinfo.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <prom.h> > + > +#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_DB1000) || \ > + defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1100) || \ > + defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_DB1500) || \ > + defined(CONFIG_MIPS_BOSPORUS) || defined(CONFIG_MIPS_MIRAGE) > +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x04000000 > + > +#else /* Au1550/Au1200-based evalboards */ > +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x08000000 > +#endif > + > +void __init prom_init(void) > +{ > + unsigned char *memsize_str; > + unsigned long memsize; > + > + prom_argc = (int)fw_arg0; > + prom_argv = (char **)fw_arg1; > + prom_envp = (char **)fw_arg2; > + > + prom_init_cmdline(); > + memsize_str = prom_getenv("memsize"); > + if (!memsize_str) > + memsize = ALCHEMY_BOARD_DEFAULT_MEMSIZE; > + else > + strict_strtol(memsize_str, 0, &memsize); > + add_memory_region(0, memsize, BOOT_MEM_RAM); > +} > diff --git a/arch/mips/alchemy/evalboards/db1x00.c b/arch/mips/alchemy/evalboards/db1x00.c > new file mode 100644 > index 0000000..2dacd74 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/db1x00.c > @@ -0,0 +1,206 @@ > +/* > + * > + * BRIEF MODULE DESCRIPTION > + * Alchemy Db1x00 board support. > + * > + * Copyright 2003 Embedded Edge, LLC > + * dan@embeddededge.com > + * > + * Copyright 2000, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <asm/mach-db1x00/db1x00.h> > +#include <prom.h> > + > + > +#ifdef CONFIG_MIPS_DB1500 > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_BOSPORUS > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_MIRAGE > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > +}; > +#endif > + > +#ifdef CONFIG_MIPS_DB1550 > +char irq_tab_alchemy[][5] __initdata = { > + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > +}; > +#endif > + > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + > +#ifndef CONFIG_MIPS_MIRAGE > +#ifdef CONFIG_MIPS_DB1550 > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > +#else > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > + > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > +#endif > +#else > + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > +#endif > + > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > +static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > + > + > +const char *get_system_type(void) > +{ > +#ifdef CONFIG_MIPS_BOSPORUS > + return "Alchemy Bosporus Gateway Reference"; > +#else > + return "Alchemy Db1x00"; > +#endif > +} > + > +void board_reset(void) > +{ > + /* Hit BCSR.SW_RESET[RESET] */ > + bcsr->swreset = 0x0000; > +} > + > +void __init board_setup(void) > +{ > + u32 pin_func; > + char *argptr; > + > + argptr = prom_getcmdline(); > + > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > + > +#ifdef CONFIG_FB_AU1100 > + argptr = strstr(argptr, "video="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + /* default panel */ > + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > + } > +#endif > + > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > + /* au1000 does not support vra, au1500 and au1100 do */ > + strcat(argptr, " au1000_audio=vra"); > + argptr = prom_getcmdline(); > +#endif > + > + pin_func = 0; /* shut up "unused" warning */ > + > + /* Not valid for Au1550 */ > +#if defined(CONFIG_IRDA) && \ > + (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) > + /* Set IRFIRSEL instead of GPIO15 */ > + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; > + au_writel(pin_func, SYS_PINFUNC); > + /* Power off until the driver is in use */ > + bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; > + bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; > + au_sync(); > +#endif > + bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ > + > +#ifdef CONFIG_MIPS_MIRAGE > + /* Enable GPIO[31:0] inputs */ > + au_writel(0, SYS_PININPUTEN); > + > + /* GPIO[20] is output, tristate the other input primary GPIOs */ > + au_writel(~(1 << 20), SYS_TRIOUTCLR); > + > + /* Set GPIO[210:208] instead of SSI_0 */ > + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; > + > + /* Set GPIO[215:211] for LEDs */ > + pin_func |= 5 << 2; > + > + /* Set GPIO[214:213] for more LEDs */ > + pin_func |= 5 << 12; > + > + /* Set GPIO[207:200] instead of PCMCIA/LCD */ > + pin_func |= SYS_PF_LCD | SYS_PF_PC; > + au_writel(pin_func, SYS_PINFUNC); > + > + /* > + * Enable speaker amplifier. This should > + * be part of the audio driver. > + */ > + au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); > + au_writel(0x02000200, GPIO2_OUTPUT); > +#endif > + > + au_sync(); > + > +#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 > +#ifdef CONFIG_MIPS_BOSPORUS > + printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); > +#endif > +#ifdef CONFIG_MIPS_MIRAGE > + printk(KERN_INFO "AMD Alchemy Mirage Board\n"); > +#endif > +#ifdef CONFIG_MIPS_DB1550 > + printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); > +#endif > +} > diff --git a/arch/mips/alchemy/evalboards/pb1000.c b/arch/mips/alchemy/evalboards/pb1000.c > new file mode 100644 > index 0000000..6cd3c2b > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1000.c > @@ -0,0 +1,196 @@ > +/* > + * Copyright 2000, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/delay.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <asm/mach-pb1x00/pb1000.h> > +#include <prom.h> > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1000"; > +} > + > +void board_reset(void) > +{ > +} > + > +void __init board_setup(void) > +{ > + u32 pin_func, static_cfg0; > + u32 sys_freqctrl, sys_clksrc; > + u32 prid = read_c0_prid(); > + char *argptr; > + > + argptr = prom_getcmdline(); > + > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > + > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > + /* au1000 does not support vra, au1500 and au1100 do */ > + strcat(argptr, " au1000_audio=vra"); > + argptr = prom_getcmdline(); > +#endif > + > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > + au_writel(8, SYS_AUXPLL); > + au_writel(0, SYS_PINSTATERD); > + udelay(100); > + > + sys_freqctrl = sys_clksrc = 0; /* shut up "unused" warnings */ > + > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > + /* Zero and disable FREQ2 */ > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* Zero and disable USBH/USBD clocks */ > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > + > + switch (prid & 0x000000FF) { > + case 0x00: /* DA */ > + case 0x01: /* HA */ > + case 0x02: /* HB */ > + /* CPU core freq to 48 MHz to slow it way down... */ > + au_writel(4, SYS_CPUPLL); > + > + /* > + * Setup 48 MHz FREQ2 from CPUPLL for USB Host > + * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz > + */ > + sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* CPU core freq to 384 MHz */ > + au_writel(0x20, SYS_CPUPLL); > + > + printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); > + break; > + > + default: /* HC and newer */ > + /* FREQ2 = aux / 2 = 48 MHz */ > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > + SYS_FC_FE2 | SYS_FC_FS2; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + break; > + } > + > + /* > + * Route 48 MHz FREQ2 into USB Host and/or Device > + */ > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + /* Configure pins GPIO[14:9] as GPIO */ > + pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); > + > + /* 2nd USB port is USB host */ > + pin_func |= SYS_PF_USB; > + > + au_writel(pin_func, SYS_PINFUNC); > + au_writel(0x2800, SYS_TRIOUTCLR); > + au_writel(0x0030, SYS_OUTPUTCLR); > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > + > + /* Make GPIO 15 an input (for interrupt line) */ > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; > + /* We don't need I2S, so make it available for GPIO[31:29] */ > + pin_func |= SYS_PF_I2S; > + au_writel(pin_func, SYS_PINFUNC); > + > + au_writel(0x8000, SYS_TRIOUTCLR); > + > + static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; > + au_writel(static_cfg0, MEM_STCFG0); > + > + /* configure RCE2* for LCD */ > + au_writel(0x00000004, MEM_STCFG2); > + > + /* MEM_STTIME2 */ > + au_writel(0x09000000, MEM_STTIME2); > + > + /* Set 32-bit base address decoding for RCE2* */ > + au_writel(0x10003ff0, MEM_STADDR2); > + > + /* > + * PCI CPLD setup > + * Expand CE0 to cover PCI > + */ > + au_writel(0x11803e40, MEM_STADDR1); > + > + /* Burst visibility on */ > + au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); > + > + au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ > + au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ > + > + /* Setup the static bus controller */ > + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > + > + /* > + * Enable Au1000 BCLK switching - note: sed1356 must not use > + * its BCLK (Au1000 LCLK) for any timings > + */ > + switch (prid & 0x000000FF) { > + case 0x00: /* DA */ > + case 0x01: /* HA */ > + case 0x02: /* HB */ > + break; > + default: /* HC and newer */ > + /* > + * Enable sys bus clock divider when IDLE state or no bus > + * activity. > + */ > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > + break; > + } > +} > diff --git a/arch/mips/alchemy/evalboards/pb1100.c b/arch/mips/alchemy/evalboards/pb1100.c > new file mode 100644 > index 0000000..73bc831 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1100.c > @@ -0,0 +1,150 @@ > +/* > + * Copyright 2002, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/delay.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <asm/mach-pb1x00/pb1100.h> > +#include <prom.h> > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1100"; > +} > + > +void board_reset(void) > +{ > + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > + au_writel(0x00000000, PB1100_RST_VDDI); > +} > + > +void __init board_setup(void) > +{ > + volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; > + char *argptr; > + > + argptr = prom_getcmdline(); > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > + > +#ifdef CONFIG_FB_AU1100 > + argptr = strstr(argptr, "video="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + /* default panel */ > + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > + } > +#endif > + > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > + /* au1000 does not support vra, au1500 and au1100 do */ > + strcat(argptr, " au1000_audio=vra"); > + argptr = prom_getcmdline(); > +#endif > + > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > + au_writel(8, SYS_AUXPLL); > + au_writel(0, SYS_PININPUTEN); > + udelay(100); > + > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > + { > + u32 pin_func, sys_freqctrl, sys_clksrc; > + > + /* Configure pins GPIO[14:9] as GPIO */ > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > + > + /* Zero and disable FREQ2 */ > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* Zero and disable USBH/USBD/IrDA clock */ > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > + > + /* FREQ2 = aux / 2 = 48 MHz */ > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > + SYS_FC_FE2 | SYS_FC_FS2; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* > + * Route 48 MHz FREQ2 into USBH/USBD/IrDA > + */ > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + /* Setup the static bus controller */ > + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > + > + /* > + * Get USB Functionality pin state (device vs host drive pins). > + */ > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > + /* 2nd USB port is USB host. */ > + pin_func |= SYS_PF_USB; > + au_writel(pin_func, SYS_PINFUNC); > + } > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > + > + /* Enable sys bus clock divider when IDLE state or no bus activity. */ > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > + > + /* Enable the RTC if not already enabled. */ > + if (!(readb(base + 0x28) & 0x20)) { > + writeb(readb(base + 0x28) | 0x20, base + 0x28); > + au_sync(); > + } > + /* Put the clock in BCD mode. */ > + if (readb(base + 0x2C) & 0x4) { /* reg B */ > + writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); > + au_sync(); > + } > +} > diff --git a/arch/mips/alchemy/evalboards/pb1200.c b/arch/mips/alchemy/evalboards/pb1200.c > new file mode 100644 > index 0000000..ccaae62 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1200.c > @@ -0,0 +1,301 @@ > +/* > + * > + * BRIEF MODULE DESCRIPTION > + * Alchemy Pb1200/Db1200 board setup. > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/init.h> > +#include <linux/interrupt.h> > +#include <asm/mach-au1x00/au1000.h> > + > +#ifdef CONFIG_MIPS_PB1200 > +#include <asm/mach-pb1x00/pb1200.h> > +#endif > + > +#ifdef CONFIG_MIPS_DB1200 > +#include <asm/mach-db1x00/db1200.h> > +#define PB1200_INT_BEGIN DB1200_INT_BEGIN > +#define PB1200_INT_END DB1200_INT_END > +#endif > + > +#include <prom.h> > + > + > +extern void (*board_init_irq)(void); > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + /* This is external interrupt cascade */ > + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +/* > + * Support for External interrupts on the Pb1200 Development platform. > + */ > +static volatile int pb1200_cascade_en; > + > +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > +{ > + unsigned short bisr = bcsr->int_status; > + int extirq_nr = 0; > + > + /* Clear all the edge interrupts. This has no effect on level. */ > + bcsr->int_status = bisr; > + for ( ; bisr; bisr &= bisr - 1) { > + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > + /* Ack and dispatch IRQ */ > + do_IRQ(extirq_nr); > + } > + > + return IRQ_RETVAL(1); > +} > + > +inline void pb1200_enable_irq(unsigned int irq_nr) > +{ > + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > +} > + > +inline void pb1200_disable_irq(unsigned int irq_nr) > +{ > + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > +} > + > +static unsigned int pb1200_setup_cascade(void) > +{ > + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > + 0, "Pb1200 Cascade", &pb1200_cascade_handler); > +} > + > +static unsigned int pb1200_startup_irq(unsigned int irq) > +{ > + if (++pb1200_cascade_en == 1) { > + int res; > + > + res = pb1200_setup_cascade(); > + if (res) > + return res; > + } > + > + pb1200_enable_irq(irq); > + > + return 0; > +} > + > +static void pb1200_shutdown_irq(unsigned int irq) > +{ > + pb1200_disable_irq(irq); > + if (--pb1200_cascade_en == 0) > + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > +} > + > +static struct irq_chip external_irq_type = { > +#ifdef CONFIG_MIPS_PB1200 > + .name = "Pb1200 Ext", > +#endif > +#ifdef CONFIG_MIPS_DB1200 > + .name = "Db1200 Ext", > +#endif > + .startup = pb1200_startup_irq, > + .shutdown = pb1200_shutdown_irq, > + .ack = pb1200_disable_irq, > + .mask = pb1200_disable_irq, > + .mask_ack = pb1200_disable_irq, > + .unmask = pb1200_enable_irq, > +}; > + > +static void pb1200_init_irq(void) > +{ > + unsigned int irq; > + > +#ifdef CONFIG_MIPS_PB1200 > + /* We have a problem with CPLD rev 3. */ > + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > + printk(KERN_ERR "updated to latest revision. This software will\n"); > + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + printk(KERN_ERR "WARNING!!!\n"); > + panic("Game over. Your score is 0."); > + } > +#endif > + > + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > + set_irq_chip_and_handler(irq, &external_irq_type, > + handle_level_irq); > + pb1200_disable_irq(irq); > + } > + > + /* > + * GPIO_7 can not be hooked here, so it is hooked upon first > + * request of any source attached to the cascade. > + */ > +} > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1200"; > +} > + > +void board_reset(void) > +{ > + bcsr->resets = 0; > + bcsr->system = 0; > +} > + > +void __init board_setup(void) > +{ > + char *argptr; > + > + argptr = prom_getcmdline(); > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > +#ifdef CONFIG_FB_AU1200 > + strcat(argptr, " video=au1200fb:panel:bs"); > +#endif > + > +#if 0 > + { > + u32 pin_func; > + > + /* > + * Enable PSC1 SYNC for AC97. Normaly done in audio driver, > + * but it is board specific code, so put it here. > + */ > + pin_func = au_readl(SYS_PINFUNC); > + au_sync(); > + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > + au_writel(pin_func, SYS_PINFUNC); > + > + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > + au_sync(); > + } > +#endif > + > +#if defined(CONFIG_I2C_AU1550) > + { > + u32 freq0, clksrc; > + u32 pin_func; > + > + /* Select SMBus in CPLD */ > + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > + > + pin_func = au_readl(SYS_PINFUNC); > + au_sync(); > + pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); > + /* Set GPIOs correctly */ > + pin_func |= 2 << 17; > + au_writel(pin_func, SYS_PINFUNC); > + au_sync(); > + > + /* The I2C driver depends on 50 MHz clock */ > + freq0 = au_readl(SYS_FREQCTRL0); > + au_sync(); > + freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); > + freq0 |= 3 << SYS_FC_FRDIV1_BIT; > + /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ > + au_writel(freq0, SYS_FREQCTRL0); > + au_sync(); > + freq0 |= SYS_FC_FE1; > + au_writel(freq0, SYS_FREQCTRL0); > + au_sync(); > + > + clksrc = au_readl(SYS_CLKSRC); > + au_sync(); > + clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); > + /* Bit 22 is EXTCLK0 for PSC0 */ > + clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; > + au_writel(clksrc, SYS_CLKSRC); > + au_sync(); > + } > +#endif > + > + /* > + * The Pb1200 development board uses external MUX for PSC0 to > + * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI > + */ > +#ifdef CONFIG_I2C_AU1550 > + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > +#endif > + au_sync(); > + > +#ifdef CONFIG_MIPS_PB1200 > + printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); > +#endif > +#ifdef CONFIG_MIPS_DB1200 > + printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); > +#endif > + > + /* Setup Pb1200 External Interrupt Controller */ > + board_init_irq = pb1200_init_irq; > +} > + > +int board_au1200fb_panel(void) > +{ > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > + int p; > + > + p = bcsr->switches; > + p >>= 8; > + p &= 0x0F; > + return p; > +} > + > +int board_au1200fb_panel_init(void) > +{ > + /* Apply power */ > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > + > + bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; > + /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ > + return 0; > +} > + > +int board_au1200fb_panel_shutdown(void) > +{ > + /* Remove power */ > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > + > + bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | > + BCSR_BOARD_LCDBL); > + /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ > + return 0; > +} > diff --git a/arch/mips/alchemy/evalboards/pb1200_platform.c b/arch/mips/alchemy/evalboards/pb1200_platform.c > new file mode 100644 > index 0000000..9530329 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1200_platform.c > @@ -0,0 +1,166 @@ > +/* > + * Pb1200/DBAu1200 board platform device registration > + * > + * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> > + * > + * 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. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#include <linux/dma-mapping.h> > +#include <linux/init.h> > +#include <linux/leds.h> > +#include <linux/platform_device.h> > + > +#include <asm/mach-au1x00/au1xxx.h> > +#include <asm/mach-au1x00/au1100_mmc.h> > + > +static int mmc_activity; > + > +static void pb1200mmc0_set_power(void *mmc_host, int state) > +{ > + if (state) > + bcsr->board |= BCSR_BOARD_SD0PWR; > + else > + bcsr->board &= ~BCSR_BOARD_SD0PWR; > + > + au_sync_delay(1); > +} > + > +static int pb1200mmc0_card_readonly(void *mmc_host) > +{ > + return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; > +} > + > +static int pb1200mmc0_card_inserted(void *mmc_host) > +{ > + return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; > +} > + > +static void pb1200_mmcled_set(struct led_classdev *led, > + enum led_brightness brightness) > +{ > + if (brightness != LED_OFF) { > + if (++mmc_activity == 1) > + bcsr->disk_leds &= ~(1 << 8); > + } else { > + if (--mmc_activity == 0) > + bcsr->disk_leds |= (1 << 8); > + } > +} > + > +static struct led_classdev pb1200mmc_led = { > + .brightness_set = pb1200_mmcled_set, > +}; > + > +#ifndef CONFIG_MIPS_DB1200 > +static void pb1200mmc1_set_power(void *mmc_host, int state) > +{ > + if (state) > + bcsr->board |= BCSR_BOARD_SD1PWR; > + else > + bcsr->board &= ~BCSR_BOARD_SD1PWR; > + > + au_sync_delay(1); > +} > + > +static int pb1200mmc1_card_readonly(void *mmc_host) > +{ > + return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; > +} > + > +static int pb1200mmc1_card_inserted(void *mmc_host) > +{ > + return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; > +} > +#endif > + > +const struct au1xmmc_platform_data au1xmmc_platdata[2] = { > + [0] = { > + .set_power = pb1200mmc0_set_power, > + .card_inserted = pb1200mmc0_card_inserted, > + .card_readonly = pb1200mmc0_card_readonly, > + .cd_setup = NULL, /* use poll-timer in driver */ > + .led = &pb1200mmc_led, > + }, > +#ifndef CONFIG_MIPS_DB1200 > + [1] = { > + .set_power = pb1200mmc1_set_power, > + .card_inserted = pb1200mmc1_card_inserted, > + .card_readonly = pb1200mmc1_card_readonly, > + .cd_setup = NULL, /* use poll-timer in driver */ > + .led = &pb1200mmc_led, > + }, > +#endif > +}; > + > +static struct resource ide_resources[] = { > + [0] = { > + .start = IDE_PHYS_ADDR, > + .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, > + .flags = IORESOURCE_MEM > + }, > + [1] = { > + .start = IDE_INT, > + .end = IDE_INT, > + .flags = IORESOURCE_IRQ > + } > +}; > + > +static u64 ide_dmamask = DMA_32BIT_MASK; > + > +static struct platform_device ide_device = { > + .name = "au1200-ide", > + .id = 0, > + .dev = { > + .dma_mask = &ide_dmamask, > + .coherent_dma_mask = DMA_32BIT_MASK, > + }, > + .num_resources = ARRAY_SIZE(ide_resources), > + .resource = ide_resources > +}; > + > +static struct resource smc91c111_resources[] = { > + [0] = { > + .name = "smc91x-regs", > + .start = SMC91C111_PHYS_ADDR, > + .end = SMC91C111_PHYS_ADDR + 0xf, > + .flags = IORESOURCE_MEM > + }, > + [1] = { > + .start = SMC91C111_INT, > + .end = SMC91C111_INT, > + .flags = IORESOURCE_IRQ > + }, > +}; > + > +static struct platform_device smc91c111_device = { > + .name = "smc91x", > + .id = -1, > + .num_resources = ARRAY_SIZE(smc91c111_resources), > + .resource = smc91c111_resources > +}; > + > +static struct platform_device *board_platform_devices[] __initdata = { > + &ide_device, > + &smc91c111_device > +}; > + > +static int __init board_register_devices(void) > +{ > + return platform_add_devices(board_platform_devices, > + ARRAY_SIZE(board_platform_devices)); > +} > + > +arch_initcall(board_register_devices); > diff --git a/arch/mips/alchemy/evalboards/pb1500.c b/arch/mips/alchemy/evalboards/pb1500.c > new file mode 100644 > index 0000000..a65f100 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1500.c > @@ -0,0 +1,156 @@ > +/* > + * Copyright 2000, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/delay.h> > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <asm/mach-pb1x00/pb1500.h> > +#include <prom.h> > + > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > +}; > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1500"; > +} > + > +void board_reset(void) > +{ > + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > + au_writel(0x00000000, PB1500_RST_VDDI); > +} > + > +void __init board_setup(void) > +{ > + u32 pin_func; > + u32 sys_freqctrl, sys_clksrc; > + char *argptr; > + > + argptr = prom_getcmdline(); > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > + /* au1000 does not support vra, au1500 and au1100 do */ > + strcat(argptr, " au1000_audio=vra"); > + argptr = prom_getcmdline(); > +#endif > + > + sys_clksrc = sys_freqctrl = pin_func = 0; > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > + au_writel(8, SYS_AUXPLL); > + au_writel(0, SYS_PINSTATERD); > + udelay(100); > + > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > + > + /* GPIO201 is input for PCMCIA card detect */ > + /* GPIO203 is input for PCMCIA interrupt request */ > + au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); > + > + /* Zero and disable FREQ2 */ > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* zero and disable USBH/USBD clocks */ > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > + sys_freqctrl &= ~0xFFF00000; > + > + sys_clksrc = au_readl(SYS_CLKSRC); > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > + > + /* FREQ2 = aux/2 = 48 MHz */ > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > + > + /* > + * Route 48MHz FREQ2 into USB Host and/or Device > + */ > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > + au_writel(sys_clksrc, SYS_CLKSRC); > + > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > + /* 2nd USB port is USB host */ > + pin_func |= SYS_PF_USB; > + au_writel(pin_func, SYS_PINFUNC); > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > + > +#ifdef CONFIG_PCI > + /* Setup PCI bus controller */ > + au_writel(0, Au1500_PCI_CMEM); > + au_writel(0x00003fff, Au1500_CFG_BASE); > +#if defined(__MIPSEB__) > + au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); > +#else > + au_writel(0xf, Au1500_PCI_CFG); > +#endif > + au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); > + au_writel(0, Au1500_PCI_MWBASE_REV_CCL); > + au_writel(0x02a00356, Au1500_PCI_STATCMD); > + au_writel(0x00003c04, Au1500_PCI_HDRTYPE); > + au_writel(0x00000008, Au1500_PCI_MBAR); > + au_sync(); > +#endif > + > + /* Enable sys bus clock divider when IDLE state or no bus activity. */ > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > + > + /* Enable the RTC if not already enabled */ > + if (!(au_readl(0xac000028) & 0x20)) { > + printk(KERN_INFO "enabling clock ...\n"); > + au_writel((au_readl(0xac000028) | 0x20), 0xac000028); > + } > + /* Put the clock in BCD mode */ > + if (au_readl(0xac00002c) & 0x4) { /* reg B */ > + au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); > + au_sync(); > + } > +} > diff --git a/arch/mips/alchemy/evalboards/pb1550.c b/arch/mips/alchemy/evalboards/pb1550.c > new file mode 100644 > index 0000000..bd7c3a9 > --- /dev/null > +++ b/arch/mips/alchemy/evalboards/pb1550.c > @@ -0,0 +1,86 @@ > +/* > + * > + * BRIEF MODULE DESCRIPTION > + * Alchemy Pb1550 board setup. > + * > + * Copyright 2000, 2008 MontaVista Software Inc. > + * Author: MontaVista Software, Inc. <source@mvista.com> > + * > + * 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. > + * > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + * > + * You should have received a copy of the GNU General Public License along > + * with this program; if not, write to the Free Software Foundation, Inc., > + * 675 Mass Ave, Cambridge, MA 02139, USA. > + */ > + > +#include <linux/init.h> > +#include <linux/kernel.h> > +#include <asm/mach-au1x00/au1000.h> > +#include <asm/mach-pb1x00/pb1550.h> > +#include <prom.h> > + > +char irq_tab_alchemy[][5] __initdata = { > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > +}; > + > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > +}; > + > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > + > + > +const char *get_system_type(void) > +{ > + return "Alchemy Pb1550"; > +} > + > +void board_reset(void) > +{ > + /* Hit BCSR.SYSTEM[RESET] */ > + au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); > +} > + > +void __init board_setup(void) > +{ > + u32 pin_func; > + > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + char *argptr = prom_getcmdline(); > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > + > + /* > + * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, > + * but it is board specific code, so put it here. > + */ > + pin_func = au_readl(SYS_PINFUNC); > + au_sync(); > + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > + au_writel(pin_func, SYS_PINFUNC); > + > + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > + au_sync(); > + > + printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); > +} > diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c > index 2e26465..08d265c 100644 > --- a/arch/mips/alchemy/mtx-1/board_setup.c > +++ b/arch/mips/alchemy/mtx-1/board_setup.c > @@ -92,6 +92,14 @@ void board_reset(void) > > void __init board_setup(void) > { > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + char *argptr = prom_getcmdline(); > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > /* Enable USB power switch */ > au_writel(au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR); > diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile > deleted file mode 100644 > index 4377ab3..0000000 > --- a/arch/mips/alchemy/pb1000/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Copyright 2000, 2008 MontaVista Software Inc. > -# Author: MontaVista Software, Inc. <source@mvista.com> > -# > -# Makefile for the Alchemy Semiconductor Pb1000 board. > -# > - > -lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c > deleted file mode 100644 > index bd0b6f4..0000000 > --- a/arch/mips/alchemy/pb1000/board_setup.c > +++ /dev/null > @@ -1,197 +0,0 @@ > -/* > - * Copyright 2000, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/delay.h> > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/kernel.h> > -#include <asm/bootinfo.h> > -#include <asm/mach-au1x00/au1000.h> > -#include <asm/mach-pb1x00/pb1000.h> > -#include <prom.h> > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1000"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > -} > - > -void __init board_setup(void) > -{ > - u32 pin_func, static_cfg0; > - u32 sys_freqctrl, sys_clksrc; > - u32 prid = read_c0_prid(); > - > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > - au_writel(8, SYS_AUXPLL); > - au_writel(0, SYS_PINSTATERD); > - udelay(100); > - > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > - /* Zero and disable FREQ2 */ > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* Zero and disable USBH/USBD clocks */ > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > - > - switch (prid & 0x000000FF) { > - case 0x00: /* DA */ > - case 0x01: /* HA */ > - case 0x02: /* HB */ > - /* CPU core freq to 48 MHz to slow it way down... */ > - au_writel(4, SYS_CPUPLL); > - > - /* > - * Setup 48 MHz FREQ2 from CPUPLL for USB Host > - * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz > - */ > - sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* CPU core freq to 384 MHz */ > - au_writel(0x20, SYS_CPUPLL); > - > - printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); > - break; > - > - default: /* HC and newer */ > - /* FREQ2 = aux / 2 = 48 MHz */ > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > - SYS_FC_FE2 | SYS_FC_FS2; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - break; > - } > - > - /* > - * Route 48 MHz FREQ2 into USB Host and/or Device > - */ > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - /* Configure pins GPIO[14:9] as GPIO */ > - pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); > - > - /* 2nd USB port is USB host */ > - pin_func |= SYS_PF_USB; > - > - au_writel(pin_func, SYS_PINFUNC); > - au_writel(0x2800, SYS_TRIOUTCLR); > - au_writel(0x0030, SYS_OUTPUTCLR); > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > - > - /* Make GPIO 15 an input (for interrupt line) */ > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; > - /* We don't need I2S, so make it available for GPIO[31:29] */ > - pin_func |= SYS_PF_I2S; > - au_writel(pin_func, SYS_PINFUNC); > - > - au_writel(0x8000, SYS_TRIOUTCLR); > - > - static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; > - au_writel(static_cfg0, MEM_STCFG0); > - > - /* configure RCE2* for LCD */ > - au_writel(0x00000004, MEM_STCFG2); > - > - /* MEM_STTIME2 */ > - au_writel(0x09000000, MEM_STTIME2); > - > - /* Set 32-bit base address decoding for RCE2* */ > - au_writel(0x10003ff0, MEM_STADDR2); > - > - /* > - * PCI CPLD setup > - * Expand CE0 to cover PCI > - */ > - au_writel(0x11803e40, MEM_STADDR1); > - > - /* Burst visibility on */ > - au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); > - > - au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ > - au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ > - > - /* Setup the static bus controller */ > - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > - > - /* > - * Enable Au1000 BCLK switching - note: sed1356 must not use > - * its BCLK (Au1000 LCLK) for any timings > - */ > - switch (prid & 0x000000FF) { > - case 0x00: /* DA */ > - case 0x01: /* HA */ > - case 0x02: /* HB */ > - break; > - default: /* HC and newer */ > - /* > - * Enable sys bus clock divider when IDLE state or no bus > - * activity. > - */ > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > - break; > - } > -} > diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile > deleted file mode 100644 > index 627a75c..0000000 > --- a/arch/mips/alchemy/pb1100/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Copyright 2000, 2001, 2008 MontaVista Software Inc. > -# Author: MontaVista Software, Inc. <source@mvista.com> > -# > -# Makefile for the Alchemy Semiconductor Pb1100 board. > -# > - > -lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c > deleted file mode 100644 > index 87da4a5..0000000 > --- a/arch/mips/alchemy/pb1100/board_setup.c > +++ /dev/null > @@ -1,147 +0,0 @@ > -/* > - * Copyright 2002, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/delay.h> > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/kernel.h> > -#include <asm/bootinfo.h> > -#include <asm/mach-au1x00/au1000.h> > -#include <asm/mach-pb1x00/pb1100.h> > -#include <prom.h> > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1100"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg3; > - > - prom_init_cmdline(); > - > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > - au_writel(0x00000000, PB1100_RST_VDDI); > -} > - > -void __init board_setup(void) > -{ > - volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; > - > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > - au_writel(8, SYS_AUXPLL); > - au_writel(0, SYS_PININPUTEN); > - udelay(100); > - > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > - { > - u32 pin_func, sys_freqctrl, sys_clksrc; > - > - /* Configure pins GPIO[14:9] as GPIO */ > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > - > - /* Zero and disable FREQ2 */ > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* Zero and disable USBH/USBD/IrDA clock */ > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > - > - /* FREQ2 = aux / 2 = 48 MHz */ > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > - SYS_FC_FE2 | SYS_FC_FS2; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* > - * Route 48 MHz FREQ2 into USBH/USBD/IrDA > - */ > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - /* Setup the static bus controller */ > - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > - > - /* > - * Get USB Functionality pin state (device vs host drive pins). > - */ > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > - /* 2nd USB port is USB host. */ > - pin_func |= SYS_PF_USB; > - au_writel(pin_func, SYS_PINFUNC); > - } > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > - > - /* Enable sys bus clock divider when IDLE state or no bus activity. */ > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > - > - /* Enable the RTC if not already enabled. */ > - if (!(readb(base + 0x28) & 0x20)) { > - writeb(readb(base + 0x28) | 0x20, base + 0x28); > - au_sync(); > - } > - /* Put the clock in BCD mode. */ > - if (readb(base + 0x2C) & 0x4) { /* reg B */ > - writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); > - au_sync(); > - } > -} > diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile > deleted file mode 100644 > index e9b9d27..0000000 > --- a/arch/mips/alchemy/pb1200/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. > -# > - > -lib-y := board_setup.o > -obj-y += platform.o > - > -EXTRA_CFLAGS += -Werror > diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c > deleted file mode 100644 > index a336a7a..0000000 > --- a/arch/mips/alchemy/pb1200/board_setup.c > +++ /dev/null > @@ -1,316 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Alchemy Pb1200/Db1200 board setup. > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <asm/bootinfo.h> > -#include <asm/mach-au1x00/au1000.h> > - > -#ifdef CONFIG_MIPS_PB1200 > -#include <asm/mach-pb1x00/pb1200.h> > -#endif > - > -#ifdef CONFIG_MIPS_DB1200 > -#include <asm/mach-db1x00/db1200.h> > -#define PB1200_INT_BEGIN DB1200_INT_BEGIN > -#define PB1200_INT_END DB1200_INT_END > -#endif > - > -#include <prom.h> > - > -extern void (*board_init_irq)(void); > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - /* This is external interrupt cascade */ > - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > -/* > - * Support for External interrupts on the Pb1200 Development platform. > - */ > -static volatile int pb1200_cascade_en; > - > -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > -{ > - unsigned short bisr = bcsr->int_status; > - int extirq_nr = 0; > - > - /* Clear all the edge interrupts. This has no effect on level. */ > - bcsr->int_status = bisr; > - for ( ; bisr; bisr &= bisr - 1) { > - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > - /* Ack and dispatch IRQ */ > - do_IRQ(extirq_nr); > - } > - > - return IRQ_RETVAL(1); > -} > - > -inline void pb1200_enable_irq(unsigned int irq_nr) > -{ > - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > -} > - > -inline void pb1200_disable_irq(unsigned int irq_nr) > -{ > - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > -} > - > -static unsigned int pb1200_setup_cascade(void) > -{ > - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > - 0, "Pb1200 Cascade", &pb1200_cascade_handler); > -} > - > -static unsigned int pb1200_startup_irq(unsigned int irq) > -{ > - if (++pb1200_cascade_en == 1) { > - int res; > - > - res = pb1200_setup_cascade(); > - if (res) > - return res; > - } > - > - pb1200_enable_irq(irq); > - > - return 0; > -} > - > -static void pb1200_shutdown_irq(unsigned int irq) > -{ > - pb1200_disable_irq(irq); > - if (--pb1200_cascade_en == 0) > - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > -} > - > -static struct irq_chip external_irq_type = { > -#ifdef CONFIG_MIPS_PB1200 > - .name = "Pb1200 Ext", > -#endif > -#ifdef CONFIG_MIPS_DB1200 > - .name = "Db1200 Ext", > -#endif > - .startup = pb1200_startup_irq, > - .shutdown = pb1200_shutdown_irq, > - .ack = pb1200_disable_irq, > - .mask = pb1200_disable_irq, > - .mask_ack = pb1200_disable_irq, > - .unmask = pb1200_enable_irq, > -}; > - > -static void pb1200_init_irq(void) > -{ > - unsigned int irq; > - > -#ifdef CONFIG_MIPS_PB1200 > - /* We have a problem with CPLD rev 3. */ > - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > - printk(KERN_ERR "updated to latest revision. This software will\n"); > - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - printk(KERN_ERR "WARNING!!!\n"); > - panic("Game over. Your score is 0."); > - } > -#endif > - > - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > - set_irq_chip_and_handler(irq, &external_irq_type, > - handle_level_irq); > - pb1200_disable_irq(irq); > - } > - > - /* > - * GPIO_7 can not be hooked here, so it is hooked upon first > - * request of any source attached to the cascade. > - */ > -} > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1200"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x08000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > - bcsr->resets = 0; > - bcsr->system = 0; > -} > - > -void __init board_setup(void) > -{ > - char *argptr = NULL; > - > -#if 0 > - { > - u32 pin_func; > - > - /* > - * Enable PSC1 SYNC for AC97. Normaly done in audio driver, > - * but it is board specific code, so put it here. > - */ > - pin_func = au_readl(SYS_PINFUNC); > - au_sync(); > - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > - au_writel(pin_func, SYS_PINFUNC); > - > - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > - au_sync(); > - } > -#endif > - > -#if defined(CONFIG_I2C_AU1550) > - { > - u32 freq0, clksrc; > - u32 pin_func; > - > - /* Select SMBus in CPLD */ > - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > - > - pin_func = au_readl(SYS_PINFUNC); > - au_sync(); > - pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); > - /* Set GPIOs correctly */ > - pin_func |= 2 << 17; > - au_writel(pin_func, SYS_PINFUNC); > - au_sync(); > - > - /* The I2C driver depends on 50 MHz clock */ > - freq0 = au_readl(SYS_FREQCTRL0); > - au_sync(); > - freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); > - freq0 |= 3 << SYS_FC_FRDIV1_BIT; > - /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ > - au_writel(freq0, SYS_FREQCTRL0); > - au_sync(); > - freq0 |= SYS_FC_FE1; > - au_writel(freq0, SYS_FREQCTRL0); > - au_sync(); > - > - clksrc = au_readl(SYS_CLKSRC); > - au_sync(); > - clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); > - /* Bit 22 is EXTCLK0 for PSC0 */ > - clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; > - au_writel(clksrc, SYS_CLKSRC); > - au_sync(); > - } > -#endif > - > -#ifdef CONFIG_FB_AU1200 > - argptr = prom_getcmdline(); > -#ifdef CONFIG_MIPS_PB1200 > - strcat(argptr, " video=au1200fb:panel:bs"); > -#endif > -#ifdef CONFIG_MIPS_DB1200 > - strcat(argptr, " video=au1200fb:panel:bs"); > -#endif > -#endif > - > - /* > - * The Pb1200 development board uses external MUX for PSC0 to > - * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI > - */ > -#ifdef CONFIG_I2C_AU1550 > - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > -#endif > - au_sync(); > - > -#ifdef CONFIG_MIPS_PB1200 > - printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); > -#endif > -#ifdef CONFIG_MIPS_DB1200 > - printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); > -#endif > - > - /* Setup Pb1200 External Interrupt Controller */ > - board_init_irq = pb1200_init_irq; > -} > - > -int board_au1200fb_panel(void) > -{ > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > - int p; > - > - p = bcsr->switches; > - p >>= 8; > - p &= 0x0F; > - return p; > -} > - > -int board_au1200fb_panel_init(void) > -{ > - /* Apply power */ > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > - > - bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; > - /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ > - return 0; > -} > - > -int board_au1200fb_panel_shutdown(void) > -{ > - /* Remove power */ > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > - > - bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | > - BCSR_BOARD_LCDBL); > - /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ > - return 0; > -} > diff --git a/arch/mips/alchemy/pb1200/platform.c b/arch/mips/alchemy/pb1200/platform.c > deleted file mode 100644 > index 9530329..0000000 > --- a/arch/mips/alchemy/pb1200/platform.c > +++ /dev/null > @@ -1,166 +0,0 @@ > -/* > - * Pb1200/DBAu1200 board platform device registration > - * > - * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> > - * > - * 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. > - * > - * This program is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > - * GNU General Public License for more details. > - * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > - */ > - > -#include <linux/dma-mapping.h> > -#include <linux/init.h> > -#include <linux/leds.h> > -#include <linux/platform_device.h> > - > -#include <asm/mach-au1x00/au1xxx.h> > -#include <asm/mach-au1x00/au1100_mmc.h> > - > -static int mmc_activity; > - > -static void pb1200mmc0_set_power(void *mmc_host, int state) > -{ > - if (state) > - bcsr->board |= BCSR_BOARD_SD0PWR; > - else > - bcsr->board &= ~BCSR_BOARD_SD0PWR; > - > - au_sync_delay(1); > -} > - > -static int pb1200mmc0_card_readonly(void *mmc_host) > -{ > - return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; > -} > - > -static int pb1200mmc0_card_inserted(void *mmc_host) > -{ > - return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; > -} > - > -static void pb1200_mmcled_set(struct led_classdev *led, > - enum led_brightness brightness) > -{ > - if (brightness != LED_OFF) { > - if (++mmc_activity == 1) > - bcsr->disk_leds &= ~(1 << 8); > - } else { > - if (--mmc_activity == 0) > - bcsr->disk_leds |= (1 << 8); > - } > -} > - > -static struct led_classdev pb1200mmc_led = { > - .brightness_set = pb1200_mmcled_set, > -}; > - > -#ifndef CONFIG_MIPS_DB1200 > -static void pb1200mmc1_set_power(void *mmc_host, int state) > -{ > - if (state) > - bcsr->board |= BCSR_BOARD_SD1PWR; > - else > - bcsr->board &= ~BCSR_BOARD_SD1PWR; > - > - au_sync_delay(1); > -} > - > -static int pb1200mmc1_card_readonly(void *mmc_host) > -{ > - return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; > -} > - > -static int pb1200mmc1_card_inserted(void *mmc_host) > -{ > - return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; > -} > -#endif > - > -const struct au1xmmc_platform_data au1xmmc_platdata[2] = { > - [0] = { > - .set_power = pb1200mmc0_set_power, > - .card_inserted = pb1200mmc0_card_inserted, > - .card_readonly = pb1200mmc0_card_readonly, > - .cd_setup = NULL, /* use poll-timer in driver */ > - .led = &pb1200mmc_led, > - }, > -#ifndef CONFIG_MIPS_DB1200 > - [1] = { > - .set_power = pb1200mmc1_set_power, > - .card_inserted = pb1200mmc1_card_inserted, > - .card_readonly = pb1200mmc1_card_readonly, > - .cd_setup = NULL, /* use poll-timer in driver */ > - .led = &pb1200mmc_led, > - }, > -#endif > -}; > - > -static struct resource ide_resources[] = { > - [0] = { > - .start = IDE_PHYS_ADDR, > - .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, > - .flags = IORESOURCE_MEM > - }, > - [1] = { > - .start = IDE_INT, > - .end = IDE_INT, > - .flags = IORESOURCE_IRQ > - } > -}; > - > -static u64 ide_dmamask = DMA_32BIT_MASK; > - > -static struct platform_device ide_device = { > - .name = "au1200-ide", > - .id = 0, > - .dev = { > - .dma_mask = &ide_dmamask, > - .coherent_dma_mask = DMA_32BIT_MASK, > - }, > - .num_resources = ARRAY_SIZE(ide_resources), > - .resource = ide_resources > -}; > - > -static struct resource smc91c111_resources[] = { > - [0] = { > - .name = "smc91x-regs", > - .start = SMC91C111_PHYS_ADDR, > - .end = SMC91C111_PHYS_ADDR + 0xf, > - .flags = IORESOURCE_MEM > - }, > - [1] = { > - .start = SMC91C111_INT, > - .end = SMC91C111_INT, > - .flags = IORESOURCE_IRQ > - }, > -}; > - > -static struct platform_device smc91c111_device = { > - .name = "smc91x", > - .id = -1, > - .num_resources = ARRAY_SIZE(smc91c111_resources), > - .resource = smc91c111_resources > -}; > - > -static struct platform_device *board_platform_devices[] __initdata = { > - &ide_device, > - &smc91c111_device > -}; > - > -static int __init board_register_devices(void) > -{ > - return platform_add_devices(board_platform_devices, > - ARRAY_SIZE(board_platform_devices)); > -} > - > -arch_initcall(board_register_devices); > diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile > deleted file mode 100644 > index 4664d61..0000000 > --- a/arch/mips/alchemy/pb1500/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Copyright 2000, 2001, 2008 MontaVista Software Inc. > -# Author: MontaVista Software, Inc. <source@mvista.com> > -# > -# Makefile for the Alchemy Semiconductor Pb1500 board. > -# > - > -lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c > deleted file mode 100644 > index 1be1afc..0000000 > --- a/arch/mips/alchemy/pb1500/board_setup.c > +++ /dev/null > @@ -1,161 +0,0 @@ > -/* > - * Copyright 2000, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/delay.h> > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/kernel.h> > -#include <asm/bootinfo.h> > -#include <asm/mach-au1x00/au1000.h> > -#include <asm/mach-pb1x00/pb1500.h> > -#include <prom.h> > - > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > -}; > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1500"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x04000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > - au_writel(0x00000000, PB1500_RST_VDDI); > -} > - > -void __init board_setup(void) > -{ > - u32 pin_func; > - u32 sys_freqctrl, sys_clksrc; > - > - sys_clksrc = sys_freqctrl = pin_func = 0; > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > - au_writel(8, SYS_AUXPLL); > - au_writel(0, SYS_PINSTATERD); > - udelay(100); > - > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > - > - /* GPIO201 is input for PCMCIA card detect */ > - /* GPIO203 is input for PCMCIA interrupt request */ > - au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); > - > - /* Zero and disable FREQ2 */ > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* zero and disable USBH/USBD clocks */ > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > - sys_freqctrl &= ~0xFFF00000; > - > - sys_clksrc = au_readl(SYS_CLKSRC); > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > - > - /* FREQ2 = aux/2 = 48 MHz */ > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > - > - /* > - * Route 48MHz FREQ2 into USB Host and/or Device > - */ > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > - au_writel(sys_clksrc, SYS_CLKSRC); > - > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > - /* 2nd USB port is USB host */ > - pin_func |= SYS_PF_USB; > - au_writel(pin_func, SYS_PINFUNC); > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > - > -#ifdef CONFIG_PCI > - /* Setup PCI bus controller */ > - au_writel(0, Au1500_PCI_CMEM); > - au_writel(0x00003fff, Au1500_CFG_BASE); > -#if defined(__MIPSEB__) > - au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); > -#else > - au_writel(0xf, Au1500_PCI_CFG); > -#endif > - au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); > - au_writel(0, Au1500_PCI_MWBASE_REV_CCL); > - au_writel(0x02a00356, Au1500_PCI_STATCMD); > - au_writel(0x00003c04, Au1500_PCI_HDRTYPE); > - au_writel(0x00000008, Au1500_PCI_MBAR); > - au_sync(); > -#endif > - > - /* Enable sys bus clock divider when IDLE state or no bus activity. */ > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > - > - /* Enable the RTC if not already enabled */ > - if (!(au_readl(0xac000028) & 0x20)) { > - printk(KERN_INFO "enabling clock ...\n"); > - au_writel((au_readl(0xac000028) | 0x20), 0xac000028); > - } > - /* Put the clock in BCD mode */ > - if (au_readl(0xac00002c) & 0x4) { /* reg B */ > - au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); > - au_sync(); > - } > -} > diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile > deleted file mode 100644 > index 7e6453d..0000000 > --- a/arch/mips/alchemy/pb1550/Makefile > +++ /dev/null > @@ -1,8 +0,0 @@ > -# > -# Copyright 2000, 2008 MontaVista Software Inc. > -# Author: MontaVista Software, Inc. <source@mvista.com> > -# > -# Makefile for the Alchemy Semiconductor Pb1550 board. > -# > - > -lib-y := board_setup.o > diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c > deleted file mode 100644 > index e844484..0000000 > --- a/arch/mips/alchemy/pb1550/board_setup.c > +++ /dev/null > @@ -1,97 +0,0 @@ > -/* > - * > - * BRIEF MODULE DESCRIPTION > - * Alchemy Pb1550 board setup. > - * > - * Copyright 2000, 2008 MontaVista Software Inc. > - * Author: MontaVista Software, Inc. <source@mvista.com> > - * > - * 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. > - * > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > - * > - * You should have received a copy of the GNU General Public License along > - * with this program; if not, write to the Free Software Foundation, Inc., > - * 675 Mass Ave, Cambridge, MA 02139, USA. > - */ > - > -#include <linux/init.h> > -#include <linux/interrupt.h> > -#include <linux/kernel.h> > -#include <asm/bootinfo.h> > -#include <asm/mach-au1x00/au1000.h> > -#include <asm/mach-pb1x00/pb1550.h> > -#include <prom.h> > - > -char irq_tab_alchemy[][5] __initdata = { > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > -}; > - > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > -}; > - > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > - > - > -const char *get_system_type(void) > -{ > - return "Alchemy Pb1550"; > -} > - > -void __init prom_init(void) > -{ > - unsigned char *memsize_str; > - unsigned long memsize; > - > - prom_argc = (int)fw_arg0; > - prom_argv = (char **)fw_arg1; > - prom_envp = (char **)fw_arg2; > - > - prom_init_cmdline(); > - memsize_str = prom_getenv("memsize"); > - if (!memsize_str) > - memsize = 0x08000000; > - else > - strict_strtol(memsize_str, 0, &memsize); > - add_memory_region(0, memsize, BOOT_MEM_RAM); > -} > - > -void board_reset(void) > -{ > - /* Hit BCSR.SYSTEM[RESET] */ > - au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); > -} > - > -void __init board_setup(void) > -{ > - u32 pin_func; > - > - /* > - * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, > - * but it is board specific code, so put it here. > - */ > - pin_func = au_readl(SYS_PINFUNC); > - au_sync(); > - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > - au_writel(pin_func, SYS_PINFUNC); > - > - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > - au_sync(); > - > - printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); > -} > diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c > index 813668f..1a83b2d 100644 > --- a/arch/mips/alchemy/xxs1500/board_setup.c > +++ b/arch/mips/alchemy/xxs1500/board_setup.c > @@ -84,6 +84,15 @@ void __init board_setup(void) > { > u32 pin_func; > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > + char *argptr = prom_getcmdline(); > + argptr = strstr(argptr, "console="); > + if (argptr == NULL) { > + argptr = prom_getcmdline(); > + strcat(argptr, " console=ttyS0,115200"); > + } > +#endif > + > /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ > pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > pin_func |= SYS_PF_UR3; -- Kevin Hickey Alchemy Solutions RMI Corporation khickey@rmicorp.com P: 512.691.8044 ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 4:00 ` Kevin Hickey @ 2008-11-12 6:06 ` Manuel Lauss 2008-11-12 10:38 ` Sergei Shtylyov 2008-11-12 10:35 ` Sergei Shtylyov 1 sibling, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-12 6:06 UTC (permalink / raw) To: Kevin Hickey; +Cc: Linux-MIPS, Sergei Shtylyov, Florian Fainelli, Bruno Randolf On Tue, Nov 11, 2008 at 10:00:33PM -0600, Kevin Hickey wrote: > Manuel, > > And in keeping with my other email, I think that the evalboards > directory is a good idea (though I would recommend the name > "develboards" as that is what DB stands for), but it should contain > subdirectories for each board and a common directory for common DB code. > Smashing all of the board code into one file doesn't leave any room to > grow if that file gets too big. Also, a single common.c will not be > sufficient in the future. Okay, I'll change that, test and resend. Thanks, Manuel Lauss > > On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > > Move all code of the Pb/Db boards to a single subdirectory and extract > > some common code. > > > > Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> > > --- > > arch/mips/Makefile | 24 +- > > arch/mips/alchemy/common/setup.c | 25 -- > > arch/mips/alchemy/db1x00/Makefile | 8 - > > arch/mips/alchemy/db1x00/board_setup.c | 198 --------------- > > arch/mips/alchemy/evalboards/Makefile | 17 ++ > > arch/mips/alchemy/evalboards/common.c | 62 +++++ > > arch/mips/alchemy/evalboards/db1x00.c | 206 +++++++++++++++ > > arch/mips/alchemy/evalboards/pb1000.c | 196 +++++++++++++++ > > arch/mips/alchemy/evalboards/pb1100.c | 150 +++++++++++ > > arch/mips/alchemy/evalboards/pb1200.c | 301 ++++++++++++++++++++++ > > arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++ > > arch/mips/alchemy/evalboards/pb1500.c | 156 ++++++++++++ > > arch/mips/alchemy/evalboards/pb1550.c | 86 +++++++ > > arch/mips/alchemy/mtx-1/board_setup.c | 8 + > > arch/mips/alchemy/pb1000/Makefile | 8 - > > arch/mips/alchemy/pb1000/board_setup.c | 197 --------------- > > arch/mips/alchemy/pb1100/Makefile | 8 - > > arch/mips/alchemy/pb1100/board_setup.c | 147 ----------- > > arch/mips/alchemy/pb1200/Makefile | 8 - > > arch/mips/alchemy/pb1200/board_setup.c | 316 ------------------------ > > arch/mips/alchemy/pb1200/platform.c | 166 ------------- > > arch/mips/alchemy/pb1500/Makefile | 8 - > > arch/mips/alchemy/pb1500/board_setup.c | 161 ------------ > > arch/mips/alchemy/pb1550/Makefile | 8 - > > arch/mips/alchemy/pb1550/board_setup.c | 97 -------- > > arch/mips/alchemy/xxs1500/board_setup.c | 9 + > > 26 files changed, 1369 insertions(+), 1367 deletions(-) > > delete mode 100644 arch/mips/alchemy/db1x00/Makefile > > delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c > > create mode 100644 arch/mips/alchemy/evalboards/Makefile > > create mode 100644 arch/mips/alchemy/evalboards/common.c > > create mode 100644 arch/mips/alchemy/evalboards/db1x00.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1000.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1100.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1200.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1500.c > > create mode 100644 arch/mips/alchemy/evalboards/pb1550.c > > delete mode 100644 arch/mips/alchemy/pb1000/Makefile > > delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c > > delete mode 100644 arch/mips/alchemy/pb1100/Makefile > > delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c > > delete mode 100644 arch/mips/alchemy/pb1200/Makefile > > delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c > > delete mode 100644 arch/mips/alchemy/pb1200/platform.c > > delete mode 100644 arch/mips/alchemy/pb1500/Makefile > > delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c > > delete mode 100644 arch/mips/alchemy/pb1550/Makefile > > delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c > > > > diff --git a/arch/mips/Makefile b/arch/mips/Makefile > > index 28c55f6..b31764e 100644 > > --- a/arch/mips/Makefile > > +++ b/arch/mips/Makefile > > @@ -184,84 +184,84 @@ cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 > > # > > # AMD Alchemy Pb1000 eval board > > # > > -libs-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/pb1000/ > > +core-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > > load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Pb1100 eval board > > # > > -libs-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/pb1100/ > > +core-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > > load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Pb1500 eval board > > # > > -libs-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/pb1500/ > > +core-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > > load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Pb1550 eval board > > # > > -libs-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/pb1550/ > > +core-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > > load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Pb1200 eval board > > # > > -libs-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/pb1200/ > > +core-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 > > load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Db1000 eval board > > # > > -libs-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Db1100 eval board > > # > > -libs-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Db1500 eval board > > # > > -libs-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Db1550 eval board > > # > > -libs-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Db1200 eval board > > # > > -libs-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/pb1200/ > > +core-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Bosporus eval board > > # > > -libs-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 > > > > # > > # AMD Alchemy Mirage eval board > > # > > -libs-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/db1x00/ > > +core-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/evalboards/ > > cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 > > load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 > > > > diff --git a/arch/mips/alchemy/common/setup.c b/arch/mips/alchemy/common/setup.c > > index 1ac6b06..cd94985 100644 > > --- a/arch/mips/alchemy/common/setup.c > > +++ b/arch/mips/alchemy/common/setup.c > > @@ -46,7 +46,6 @@ extern void set_cpuspec(void); > > void __init plat_mem_setup(void) > > { > > struct cpu_spec *sp; > > - char *argptr; > > unsigned long prid, cpufreq, bclk; > > > > set_cpuspec(); > > @@ -79,30 +78,6 @@ void __init plat_mem_setup(void) > > /* Clear to obtain best system bus performance */ > > clear_c0_config(1 << 19); /* Clear Config[OD] */ > > > > - argptr = prom_getcmdline(); > > - > > -#ifdef CONFIG_SERIAL_8250_CONSOLE > > - argptr = strstr(argptr, "console="); > > - if (argptr == NULL) { > > - argptr = prom_getcmdline(); > > - strcat(argptr, " console=ttyS0,115200"); > > - } > > -#endif > > - > > -#ifdef CONFIG_FB_AU1100 > > - argptr = strstr(argptr, "video="); > > - if (argptr == NULL) { > > - argptr = prom_getcmdline(); > > - /* default panel */ > > - /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > > - } > > -#endif > > - > > -#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > > - /* au1000 does not support vra, au1500 and au1100 do */ > > - strcat(argptr, " au1000_audio=vra"); > > - argptr = prom_getcmdline(); > > -#endif > > _machine_restart = au1000_restart; > > _machine_halt = au1000_halt; > > pm_power_off = au1000_power_off; > > diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile > > deleted file mode 100644 > > index 9924aa0..0000000 > > --- a/arch/mips/alchemy/db1x00/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Copyright 2000, 2008 MontaVista Software Inc. > > -# Author: MontaVista Software, Inc. <source@mvista.com> > > -# > > -# Makefile for the Alchemy Semiconductor DBAu1xx0 boards. > > -# > > - > > -lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c > > deleted file mode 100644 > > index 507ded2..0000000 > > --- a/arch/mips/alchemy/db1x00/board_setup.c > > +++ /dev/null > > @@ -1,198 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Alchemy Db1x00 board support. > > - * > > - * Copyright 2003 Embedded Edge, LLC > > - * dan@embeddededge.com > > - * > > - * Copyright 2000, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <linux/kernel.h> > > -#include <asm/bootinfo.h> > > -#include <prom.h> > > - > > -#include <asm/mach-au1x00/au1000.h> > > -#include <asm/mach-db1x00/db1x00.h> > > - > > -#ifdef CONFIG_MIPS_DB1500 > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_BOSPORUS > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_MIRAGE > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > > - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > > - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > > -}; > > -#endif > > - > > -#ifdef CONFIG_MIPS_DB1550 > > -char irq_tab_alchemy[][5] __initdata = { > > - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > -}; > > -#endif > > - > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - > > -#ifndef CONFIG_MIPS_MIRAGE > > -#ifdef CONFIG_MIPS_DB1550 > > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > -#else > > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > > - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > - > > - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > > - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > > - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > -#endif > > -#else > > - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > > -#endif > > - > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > -static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > - > > -const char *get_system_type(void) > > -{ > > -#ifdef CONFIG_MIPS_BOSPORUS > > - return "Alchemy Bosporus Gateway Reference"; > > -#else > > - return "Alchemy Db1x00"; > > -#endif > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > - /* Hit BCSR.SW_RESET[RESET] */ > > - bcsr->swreset = 0x0000; > > -} > > - > > -void __init board_setup(void) > > -{ > > - u32 pin_func = 0; > > - > > - /* Not valid for Au1550 */ > > -#if defined(CONFIG_IRDA) && \ > > - (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) > > - /* Set IRFIRSEL instead of GPIO15 */ > > - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; > > - au_writel(pin_func, SYS_PINFUNC); > > - /* Power off until the driver is in use */ > > - bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; > > - bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; > > - au_sync(); > > -#endif > > - bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ > > - > > -#ifdef CONFIG_MIPS_MIRAGE > > - /* Enable GPIO[31:0] inputs */ > > - au_writel(0, SYS_PININPUTEN); > > - > > - /* GPIO[20] is output, tristate the other input primary GPIOs */ > > - au_writel(~(1 << 20), SYS_TRIOUTCLR); > > - > > - /* Set GPIO[210:208] instead of SSI_0 */ > > - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; > > - > > - /* Set GPIO[215:211] for LEDs */ > > - pin_func |= 5 << 2; > > - > > - /* Set GPIO[214:213] for more LEDs */ > > - pin_func |= 5 << 12; > > - > > - /* Set GPIO[207:200] instead of PCMCIA/LCD */ > > - pin_func |= SYS_PF_LCD | SYS_PF_PC; > > - au_writel(pin_func, SYS_PINFUNC); > > - > > - /* > > - * Enable speaker amplifier. This should > > - * be part of the audio driver. > > - */ > > - au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); > > - au_writel(0x02000200, GPIO2_OUTPUT); > > -#endif > > - > > - au_sync(); > > - > > -#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 > > -#ifdef CONFIG_MIPS_BOSPORUS > > - printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); > > -#endif > > -#ifdef CONFIG_MIPS_MIRAGE > > - printk(KERN_INFO "AMD Alchemy Mirage Board\n"); > > -#endif > > -#ifdef CONFIG_MIPS_DB1550 > > - printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); > > -#endif > > -} > > diff --git a/arch/mips/alchemy/evalboards/Makefile b/arch/mips/alchemy/evalboards/Makefile > > new file mode 100644 > > index 0000000..56a67c6 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/Makefile > > @@ -0,0 +1,17 @@ > > +# > > +# Alchemy demoboards (Db1xx0/Pb1xx0/Bosporus/Mirage series). > > +# > > + > > +obj-y += common.o > > +obj-$(CONFIG_MIPS_PB1000) += pb1000.o > > +obj-$(CONFIG_MIPS_PB1100) += pb1100.o > > +obj-$(CONFIG_MIPS_PB1200) += pb1200.o pb1200_platform.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_DB1200) += pb1200.o pb1200_platform.o > > +obj-$(CONFIG_MIPS_DB1500) += db1x00.o > > +obj-$(CONFIG_MIPS_DB1550) += db1x00.o > > +obj-$(CONFIG_MIPS_BOSPORUS) += db1x00.o > > +obj-$(CONFIG_MIPS_MIRAGE) += db1x00.o > > diff --git a/arch/mips/alchemy/evalboards/common.c b/arch/mips/alchemy/evalboards/common.c > > new file mode 100644 > > index 0000000..baf8300 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/common.c > > @@ -0,0 +1,62 @@ > > +/* > > + * Common code used by all Alchemy evalboards. > > + * > > + * Extracted from files which had this to say: > > + * > > + * Copyright 2000, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/bootinfo.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <prom.h> > > + > > +#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_DB1000) || \ > > + defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1100) || \ > > + defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_DB1500) || \ > > + defined(CONFIG_MIPS_BOSPORUS) || defined(CONFIG_MIPS_MIRAGE) > > +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x04000000 > > + > > +#else /* Au1550/Au1200-based evalboards */ > > +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x08000000 > > +#endif > > + > > +void __init prom_init(void) > > +{ > > + unsigned char *memsize_str; > > + unsigned long memsize; > > + > > + prom_argc = (int)fw_arg0; > > + prom_argv = (char **)fw_arg1; > > + prom_envp = (char **)fw_arg2; > > + > > + prom_init_cmdline(); > > + memsize_str = prom_getenv("memsize"); > > + if (!memsize_str) > > + memsize = ALCHEMY_BOARD_DEFAULT_MEMSIZE; > > + else > > + strict_strtol(memsize_str, 0, &memsize); > > + add_memory_region(0, memsize, BOOT_MEM_RAM); > > +} > > diff --git a/arch/mips/alchemy/evalboards/db1x00.c b/arch/mips/alchemy/evalboards/db1x00.c > > new file mode 100644 > > index 0000000..2dacd74 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/db1x00.c > > @@ -0,0 +1,206 @@ > > +/* > > + * > > + * BRIEF MODULE DESCRIPTION > > + * Alchemy Db1x00 board support. > > + * > > + * Copyright 2003 Embedded Edge, LLC > > + * dan@embeddededge.com > > + * > > + * Copyright 2000, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <asm/mach-db1x00/db1x00.h> > > +#include <prom.h> > > + > > + > > +#ifdef CONFIG_MIPS_DB1500 > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_BOSPORUS > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_MIRAGE > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ > > + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ > > + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ > > +}; > > +#endif > > + > > +#ifdef CONFIG_MIPS_DB1550 > > +char irq_tab_alchemy[][5] __initdata = { > > + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ > > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > +}; > > +#endif > > + > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + > > +#ifndef CONFIG_MIPS_MIRAGE > > +#ifdef CONFIG_MIPS_DB1550 > > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > +#else > > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ > > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ > > + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ > > + > > + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ > > + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ > > + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ > > +#endif > > +#else > > + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ > > +#endif > > + > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > +static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > + > > + > > +const char *get_system_type(void) > > +{ > > +#ifdef CONFIG_MIPS_BOSPORUS > > + return "Alchemy Bosporus Gateway Reference"; > > +#else > > + return "Alchemy Db1x00"; > > +#endif > > +} > > + > > +void board_reset(void) > > +{ > > + /* Hit BCSR.SW_RESET[RESET] */ > > + bcsr->swreset = 0x0000; > > +} > > + > > +void __init board_setup(void) > > +{ > > + u32 pin_func; > > + char *argptr; > > + > > + argptr = prom_getcmdline(); > > + > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > + > > +#ifdef CONFIG_FB_AU1100 > > + argptr = strstr(argptr, "video="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + /* default panel */ > > + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > > + } > > +#endif > > + > > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > > + /* au1000 does not support vra, au1500 and au1100 do */ > > + strcat(argptr, " au1000_audio=vra"); > > + argptr = prom_getcmdline(); > > +#endif > > + > > + pin_func = 0; /* shut up "unused" warning */ > > + > > + /* Not valid for Au1550 */ > > +#if defined(CONFIG_IRDA) && \ > > + (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) > > + /* Set IRFIRSEL instead of GPIO15 */ > > + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; > > + au_writel(pin_func, SYS_PINFUNC); > > + /* Power off until the driver is in use */ > > + bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; > > + bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; > > + au_sync(); > > +#endif > > + bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ > > + > > +#ifdef CONFIG_MIPS_MIRAGE > > + /* Enable GPIO[31:0] inputs */ > > + au_writel(0, SYS_PININPUTEN); > > + > > + /* GPIO[20] is output, tristate the other input primary GPIOs */ > > + au_writel(~(1 << 20), SYS_TRIOUTCLR); > > + > > + /* Set GPIO[210:208] instead of SSI_0 */ > > + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; > > + > > + /* Set GPIO[215:211] for LEDs */ > > + pin_func |= 5 << 2; > > + > > + /* Set GPIO[214:213] for more LEDs */ > > + pin_func |= 5 << 12; > > + > > + /* Set GPIO[207:200] instead of PCMCIA/LCD */ > > + pin_func |= SYS_PF_LCD | SYS_PF_PC; > > + au_writel(pin_func, SYS_PINFUNC); > > + > > + /* > > + * Enable speaker amplifier. This should > > + * be part of the audio driver. > > + */ > > + au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); > > + au_writel(0x02000200, GPIO2_OUTPUT); > > +#endif > > + > > + au_sync(); > > + > > +#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 > > +#ifdef CONFIG_MIPS_BOSPORUS > > + printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); > > +#endif > > +#ifdef CONFIG_MIPS_MIRAGE > > + printk(KERN_INFO "AMD Alchemy Mirage Board\n"); > > +#endif > > +#ifdef CONFIG_MIPS_DB1550 > > + printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); > > +#endif > > +} > > diff --git a/arch/mips/alchemy/evalboards/pb1000.c b/arch/mips/alchemy/evalboards/pb1000.c > > new file mode 100644 > > index 0000000..6cd3c2b > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1000.c > > @@ -0,0 +1,196 @@ > > +/* > > + * Copyright 2000, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/delay.h> > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <asm/mach-pb1x00/pb1000.h> > > +#include <prom.h> > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1000"; > > +} > > + > > +void board_reset(void) > > +{ > > +} > > + > > +void __init board_setup(void) > > +{ > > + u32 pin_func, static_cfg0; > > + u32 sys_freqctrl, sys_clksrc; > > + u32 prid = read_c0_prid(); > > + char *argptr; > > + > > + argptr = prom_getcmdline(); > > + > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > + > > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > > + /* au1000 does not support vra, au1500 and au1100 do */ > > + strcat(argptr, " au1000_audio=vra"); > > + argptr = prom_getcmdline(); > > +#endif > > + > > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > + au_writel(8, SYS_AUXPLL); > > + au_writel(0, SYS_PINSTATERD); > > + udelay(100); > > + > > + sys_freqctrl = sys_clksrc = 0; /* shut up "unused" warnings */ > > + > > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > + /* Zero and disable FREQ2 */ > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* Zero and disable USBH/USBD clocks */ > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > + > > + switch (prid & 0x000000FF) { > > + case 0x00: /* DA */ > > + case 0x01: /* HA */ > > + case 0x02: /* HB */ > > + /* CPU core freq to 48 MHz to slow it way down... */ > > + au_writel(4, SYS_CPUPLL); > > + > > + /* > > + * Setup 48 MHz FREQ2 from CPUPLL for USB Host > > + * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz > > + */ > > + sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* CPU core freq to 384 MHz */ > > + au_writel(0x20, SYS_CPUPLL); > > + > > + printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); > > + break; > > + > > + default: /* HC and newer */ > > + /* FREQ2 = aux / 2 = 48 MHz */ > > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > > + SYS_FC_FE2 | SYS_FC_FS2; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + break; > > + } > > + > > + /* > > + * Route 48 MHz FREQ2 into USB Host and/or Device > > + */ > > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + /* Configure pins GPIO[14:9] as GPIO */ > > + pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); > > + > > + /* 2nd USB port is USB host */ > > + pin_func |= SYS_PF_USB; > > + > > + au_writel(pin_func, SYS_PINFUNC); > > + au_writel(0x2800, SYS_TRIOUTCLR); > > + au_writel(0x0030, SYS_OUTPUTCLR); > > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > + > > + /* Make GPIO 15 an input (for interrupt line) */ > > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; > > + /* We don't need I2S, so make it available for GPIO[31:29] */ > > + pin_func |= SYS_PF_I2S; > > + au_writel(pin_func, SYS_PINFUNC); > > + > > + au_writel(0x8000, SYS_TRIOUTCLR); > > + > > + static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; > > + au_writel(static_cfg0, MEM_STCFG0); > > + > > + /* configure RCE2* for LCD */ > > + au_writel(0x00000004, MEM_STCFG2); > > + > > + /* MEM_STTIME2 */ > > + au_writel(0x09000000, MEM_STTIME2); > > + > > + /* Set 32-bit base address decoding for RCE2* */ > > + au_writel(0x10003ff0, MEM_STADDR2); > > + > > + /* > > + * PCI CPLD setup > > + * Expand CE0 to cover PCI > > + */ > > + au_writel(0x11803e40, MEM_STADDR1); > > + > > + /* Burst visibility on */ > > + au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); > > + > > + au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ > > + au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ > > + > > + /* Setup the static bus controller */ > > + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > > + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > > + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > > + > > + /* > > + * Enable Au1000 BCLK switching - note: sed1356 must not use > > + * its BCLK (Au1000 LCLK) for any timings > > + */ > > + switch (prid & 0x000000FF) { > > + case 0x00: /* DA */ > > + case 0x01: /* HA */ > > + case 0x02: /* HB */ > > + break; > > + default: /* HC and newer */ > > + /* > > + * Enable sys bus clock divider when IDLE state or no bus > > + * activity. > > + */ > > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > + break; > > + } > > +} > > diff --git a/arch/mips/alchemy/evalboards/pb1100.c b/arch/mips/alchemy/evalboards/pb1100.c > > new file mode 100644 > > index 0000000..73bc831 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1100.c > > @@ -0,0 +1,150 @@ > > +/* > > + * Copyright 2002, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/delay.h> > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <asm/mach-pb1x00/pb1100.h> > > +#include <prom.h> > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > > + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > > + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > > + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1100"; > > +} > > + > > +void board_reset(void) > > +{ > > + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > > + au_writel(0x00000000, PB1100_RST_VDDI); > > +} > > + > > +void __init board_setup(void) > > +{ > > + volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; > > + char *argptr; > > + > > + argptr = prom_getcmdline(); > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > + > > +#ifdef CONFIG_FB_AU1100 > > + argptr = strstr(argptr, "video="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + /* default panel */ > > + /*strcat(argptr, " video=au1100fb:panel:Sharp_320x240_16");*/ > > + } > > +#endif > > + > > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > > + /* au1000 does not support vra, au1500 and au1100 do */ > > + strcat(argptr, " au1000_audio=vra"); > > + argptr = prom_getcmdline(); > > +#endif > > + > > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > + au_writel(8, SYS_AUXPLL); > > + au_writel(0, SYS_PININPUTEN); > > + udelay(100); > > + > > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > + { > > + u32 pin_func, sys_freqctrl, sys_clksrc; > > + > > + /* Configure pins GPIO[14:9] as GPIO */ > > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > > + > > + /* Zero and disable FREQ2 */ > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* Zero and disable USBH/USBD/IrDA clock */ > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > > + > > + /* FREQ2 = aux / 2 = 48 MHz */ > > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > > + SYS_FC_FE2 | SYS_FC_FS2; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* > > + * Route 48 MHz FREQ2 into USBH/USBD/IrDA > > + */ > > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + /* Setup the static bus controller */ > > + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > > + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > > + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > > + > > + /* > > + * Get USB Functionality pin state (device vs host drive pins). > > + */ > > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > > + /* 2nd USB port is USB host. */ > > + pin_func |= SYS_PF_USB; > > + au_writel(pin_func, SYS_PINFUNC); > > + } > > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > + > > + /* Enable sys bus clock divider when IDLE state or no bus activity. */ > > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > + > > + /* Enable the RTC if not already enabled. */ > > + if (!(readb(base + 0x28) & 0x20)) { > > + writeb(readb(base + 0x28) | 0x20, base + 0x28); > > + au_sync(); > > + } > > + /* Put the clock in BCD mode. */ > > + if (readb(base + 0x2C) & 0x4) { /* reg B */ > > + writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); > > + au_sync(); > > + } > > +} > > diff --git a/arch/mips/alchemy/evalboards/pb1200.c b/arch/mips/alchemy/evalboards/pb1200.c > > new file mode 100644 > > index 0000000..ccaae62 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1200.c > > @@ -0,0 +1,301 @@ > > +/* > > + * > > + * BRIEF MODULE DESCRIPTION > > + * Alchemy Pb1200/Db1200 board setup. > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/init.h> > > +#include <linux/interrupt.h> > > +#include <asm/mach-au1x00/au1000.h> > > + > > +#ifdef CONFIG_MIPS_PB1200 > > +#include <asm/mach-pb1x00/pb1200.h> > > +#endif > > + > > +#ifdef CONFIG_MIPS_DB1200 > > +#include <asm/mach-db1x00/db1200.h> > > +#define PB1200_INT_BEGIN DB1200_INT_BEGIN > > +#define PB1200_INT_END DB1200_INT_END > > +#endif > > + > > +#include <prom.h> > > + > > + > > +extern void (*board_init_irq)(void); > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + /* This is external interrupt cascade */ > > + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +/* > > + * Support for External interrupts on the Pb1200 Development platform. > > + */ > > +static volatile int pb1200_cascade_en; > > + > > +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > > +{ > > + unsigned short bisr = bcsr->int_status; > > + int extirq_nr = 0; > > + > > + /* Clear all the edge interrupts. This has no effect on level. */ > > + bcsr->int_status = bisr; > > + for ( ; bisr; bisr &= bisr - 1) { > > + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > > + /* Ack and dispatch IRQ */ > > + do_IRQ(extirq_nr); > > + } > > + > > + return IRQ_RETVAL(1); > > +} > > + > > +inline void pb1200_enable_irq(unsigned int irq_nr) > > +{ > > + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > > +} > > + > > +inline void pb1200_disable_irq(unsigned int irq_nr) > > +{ > > + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > > +} > > + > > +static unsigned int pb1200_setup_cascade(void) > > +{ > > + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > > + 0, "Pb1200 Cascade", &pb1200_cascade_handler); > > +} > > + > > +static unsigned int pb1200_startup_irq(unsigned int irq) > > +{ > > + if (++pb1200_cascade_en == 1) { > > + int res; > > + > > + res = pb1200_setup_cascade(); > > + if (res) > > + return res; > > + } > > + > > + pb1200_enable_irq(irq); > > + > > + return 0; > > +} > > + > > +static void pb1200_shutdown_irq(unsigned int irq) > > +{ > > + pb1200_disable_irq(irq); > > + if (--pb1200_cascade_en == 0) > > + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > > +} > > + > > +static struct irq_chip external_irq_type = { > > +#ifdef CONFIG_MIPS_PB1200 > > + .name = "Pb1200 Ext", > > +#endif > > +#ifdef CONFIG_MIPS_DB1200 > > + .name = "Db1200 Ext", > > +#endif > > + .startup = pb1200_startup_irq, > > + .shutdown = pb1200_shutdown_irq, > > + .ack = pb1200_disable_irq, > > + .mask = pb1200_disable_irq, > > + .mask_ack = pb1200_disable_irq, > > + .unmask = pb1200_enable_irq, > > +}; > > + > > +static void pb1200_init_irq(void) > > +{ > > + unsigned int irq; > > + > > +#ifdef CONFIG_MIPS_PB1200 > > + /* We have a problem with CPLD rev 3. */ > > + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > > + printk(KERN_ERR "updated to latest revision. This software will\n"); > > + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + printk(KERN_ERR "WARNING!!!\n"); > > + panic("Game over. Your score is 0."); > > + } > > +#endif > > + > > + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > > + set_irq_chip_and_handler(irq, &external_irq_type, > > + handle_level_irq); > > + pb1200_disable_irq(irq); > > + } > > + > > + /* > > + * GPIO_7 can not be hooked here, so it is hooked upon first > > + * request of any source attached to the cascade. > > + */ > > +} > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1200"; > > +} > > + > > +void board_reset(void) > > +{ > > + bcsr->resets = 0; > > + bcsr->system = 0; > > +} > > + > > +void __init board_setup(void) > > +{ > > + char *argptr; > > + > > + argptr = prom_getcmdline(); > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > +#ifdef CONFIG_FB_AU1200 > > + strcat(argptr, " video=au1200fb:panel:bs"); > > +#endif > > + > > +#if 0 > > + { > > + u32 pin_func; > > + > > + /* > > + * Enable PSC1 SYNC for AC97. Normaly done in audio driver, > > + * but it is board specific code, so put it here. > > + */ > > + pin_func = au_readl(SYS_PINFUNC); > > + au_sync(); > > + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > > + au_writel(pin_func, SYS_PINFUNC); > > + > > + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > > + au_sync(); > > + } > > +#endif > > + > > +#if defined(CONFIG_I2C_AU1550) > > + { > > + u32 freq0, clksrc; > > + u32 pin_func; > > + > > + /* Select SMBus in CPLD */ > > + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > > + > > + pin_func = au_readl(SYS_PINFUNC); > > + au_sync(); > > + pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); > > + /* Set GPIOs correctly */ > > + pin_func |= 2 << 17; > > + au_writel(pin_func, SYS_PINFUNC); > > + au_sync(); > > + > > + /* The I2C driver depends on 50 MHz clock */ > > + freq0 = au_readl(SYS_FREQCTRL0); > > + au_sync(); > > + freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); > > + freq0 |= 3 << SYS_FC_FRDIV1_BIT; > > + /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ > > + au_writel(freq0, SYS_FREQCTRL0); > > + au_sync(); > > + freq0 |= SYS_FC_FE1; > > + au_writel(freq0, SYS_FREQCTRL0); > > + au_sync(); > > + > > + clksrc = au_readl(SYS_CLKSRC); > > + au_sync(); > > + clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); > > + /* Bit 22 is EXTCLK0 for PSC0 */ > > + clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; > > + au_writel(clksrc, SYS_CLKSRC); > > + au_sync(); > > + } > > +#endif > > + > > + /* > > + * The Pb1200 development board uses external MUX for PSC0 to > > + * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI > > + */ > > +#ifdef CONFIG_I2C_AU1550 > > + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > > +#endif > > + au_sync(); > > + > > +#ifdef CONFIG_MIPS_PB1200 > > + printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); > > +#endif > > +#ifdef CONFIG_MIPS_DB1200 > > + printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); > > +#endif > > + > > + /* Setup Pb1200 External Interrupt Controller */ > > + board_init_irq = pb1200_init_irq; > > +} > > + > > +int board_au1200fb_panel(void) > > +{ > > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > + int p; > > + > > + p = bcsr->switches; > > + p >>= 8; > > + p &= 0x0F; > > + return p; > > +} > > + > > +int board_au1200fb_panel_init(void) > > +{ > > + /* Apply power */ > > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > + > > + bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; > > + /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ > > + return 0; > > +} > > + > > +int board_au1200fb_panel_shutdown(void) > > +{ > > + /* Remove power */ > > + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > + > > + bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | > > + BCSR_BOARD_LCDBL); > > + /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ > > + return 0; > > +} > > diff --git a/arch/mips/alchemy/evalboards/pb1200_platform.c b/arch/mips/alchemy/evalboards/pb1200_platform.c > > new file mode 100644 > > index 0000000..9530329 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1200_platform.c > > @@ -0,0 +1,166 @@ > > +/* > > + * Pb1200/DBAu1200 board platform device registration > > + * > > + * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + * You should have received a copy of the GNU General Public License > > + * along with this program; if not, write to the Free Software > > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > + */ > > + > > +#include <linux/dma-mapping.h> > > +#include <linux/init.h> > > +#include <linux/leds.h> > > +#include <linux/platform_device.h> > > + > > +#include <asm/mach-au1x00/au1xxx.h> > > +#include <asm/mach-au1x00/au1100_mmc.h> > > + > > +static int mmc_activity; > > + > > +static void pb1200mmc0_set_power(void *mmc_host, int state) > > +{ > > + if (state) > > + bcsr->board |= BCSR_BOARD_SD0PWR; > > + else > > + bcsr->board &= ~BCSR_BOARD_SD0PWR; > > + > > + au_sync_delay(1); > > +} > > + > > +static int pb1200mmc0_card_readonly(void *mmc_host) > > +{ > > + return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; > > +} > > + > > +static int pb1200mmc0_card_inserted(void *mmc_host) > > +{ > > + return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; > > +} > > + > > +static void pb1200_mmcled_set(struct led_classdev *led, > > + enum led_brightness brightness) > > +{ > > + if (brightness != LED_OFF) { > > + if (++mmc_activity == 1) > > + bcsr->disk_leds &= ~(1 << 8); > > + } else { > > + if (--mmc_activity == 0) > > + bcsr->disk_leds |= (1 << 8); > > + } > > +} > > + > > +static struct led_classdev pb1200mmc_led = { > > + .brightness_set = pb1200_mmcled_set, > > +}; > > + > > +#ifndef CONFIG_MIPS_DB1200 > > +static void pb1200mmc1_set_power(void *mmc_host, int state) > > +{ > > + if (state) > > + bcsr->board |= BCSR_BOARD_SD1PWR; > > + else > > + bcsr->board &= ~BCSR_BOARD_SD1PWR; > > + > > + au_sync_delay(1); > > +} > > + > > +static int pb1200mmc1_card_readonly(void *mmc_host) > > +{ > > + return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; > > +} > > + > > +static int pb1200mmc1_card_inserted(void *mmc_host) > > +{ > > + return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; > > +} > > +#endif > > + > > +const struct au1xmmc_platform_data au1xmmc_platdata[2] = { > > + [0] = { > > + .set_power = pb1200mmc0_set_power, > > + .card_inserted = pb1200mmc0_card_inserted, > > + .card_readonly = pb1200mmc0_card_readonly, > > + .cd_setup = NULL, /* use poll-timer in driver */ > > + .led = &pb1200mmc_led, > > + }, > > +#ifndef CONFIG_MIPS_DB1200 > > + [1] = { > > + .set_power = pb1200mmc1_set_power, > > + .card_inserted = pb1200mmc1_card_inserted, > > + .card_readonly = pb1200mmc1_card_readonly, > > + .cd_setup = NULL, /* use poll-timer in driver */ > > + .led = &pb1200mmc_led, > > + }, > > +#endif > > +}; > > + > > +static struct resource ide_resources[] = { > > + [0] = { > > + .start = IDE_PHYS_ADDR, > > + .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, > > + .flags = IORESOURCE_MEM > > + }, > > + [1] = { > > + .start = IDE_INT, > > + .end = IDE_INT, > > + .flags = IORESOURCE_IRQ > > + } > > +}; > > + > > +static u64 ide_dmamask = DMA_32BIT_MASK; > > + > > +static struct platform_device ide_device = { > > + .name = "au1200-ide", > > + .id = 0, > > + .dev = { > > + .dma_mask = &ide_dmamask, > > + .coherent_dma_mask = DMA_32BIT_MASK, > > + }, > > + .num_resources = ARRAY_SIZE(ide_resources), > > + .resource = ide_resources > > +}; > > + > > +static struct resource smc91c111_resources[] = { > > + [0] = { > > + .name = "smc91x-regs", > > + .start = SMC91C111_PHYS_ADDR, > > + .end = SMC91C111_PHYS_ADDR + 0xf, > > + .flags = IORESOURCE_MEM > > + }, > > + [1] = { > > + .start = SMC91C111_INT, > > + .end = SMC91C111_INT, > > + .flags = IORESOURCE_IRQ > > + }, > > +}; > > + > > +static struct platform_device smc91c111_device = { > > + .name = "smc91x", > > + .id = -1, > > + .num_resources = ARRAY_SIZE(smc91c111_resources), > > + .resource = smc91c111_resources > > +}; > > + > > +static struct platform_device *board_platform_devices[] __initdata = { > > + &ide_device, > > + &smc91c111_device > > +}; > > + > > +static int __init board_register_devices(void) > > +{ > > + return platform_add_devices(board_platform_devices, > > + ARRAY_SIZE(board_platform_devices)); > > +} > > + > > +arch_initcall(board_register_devices); > > diff --git a/arch/mips/alchemy/evalboards/pb1500.c b/arch/mips/alchemy/evalboards/pb1500.c > > new file mode 100644 > > index 0000000..a65f100 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1500.c > > @@ -0,0 +1,156 @@ > > +/* > > + * Copyright 2000, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/delay.h> > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <asm/mach-pb1x00/pb1500.h> > > +#include <prom.h> > > + > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > +}; > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1500"; > > +} > > + > > +void board_reset(void) > > +{ > > + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > > + au_writel(0x00000000, PB1500_RST_VDDI); > > +} > > + > > +void __init board_setup(void) > > +{ > > + u32 pin_func; > > + u32 sys_freqctrl, sys_clksrc; > > + char *argptr; > > + > > + argptr = prom_getcmdline(); > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > +#if defined(CONFIG_SOUND_AU1X00) && !defined(CONFIG_SOC_AU1000) > > + /* au1000 does not support vra, au1500 and au1100 do */ > > + strcat(argptr, " au1000_audio=vra"); > > + argptr = prom_getcmdline(); > > +#endif > > + > > + sys_clksrc = sys_freqctrl = pin_func = 0; > > + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > + au_writel(8, SYS_AUXPLL); > > + au_writel(0, SYS_PINSTATERD); > > + udelay(100); > > + > > +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > + > > + /* GPIO201 is input for PCMCIA card detect */ > > + /* GPIO203 is input for PCMCIA interrupt request */ > > + au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); > > + > > + /* Zero and disable FREQ2 */ > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* zero and disable USBH/USBD clocks */ > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + sys_freqctrl = au_readl(SYS_FREQCTRL0); > > + sys_freqctrl &= ~0xFFF00000; > > + > > + sys_clksrc = au_readl(SYS_CLKSRC); > > + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > + > > + /* FREQ2 = aux/2 = 48 MHz */ > > + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; > > + au_writel(sys_freqctrl, SYS_FREQCTRL0); > > + > > + /* > > + * Route 48MHz FREQ2 into USB Host and/or Device > > + */ > > + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > > + au_writel(sys_clksrc, SYS_CLKSRC); > > + > > + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > > + /* 2nd USB port is USB host */ > > + pin_func |= SYS_PF_USB; > > + au_writel(pin_func, SYS_PINFUNC); > > +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > + > > +#ifdef CONFIG_PCI > > + /* Setup PCI bus controller */ > > + au_writel(0, Au1500_PCI_CMEM); > > + au_writel(0x00003fff, Au1500_CFG_BASE); > > +#if defined(__MIPSEB__) > > + au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); > > +#else > > + au_writel(0xf, Au1500_PCI_CFG); > > +#endif > > + au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); > > + au_writel(0, Au1500_PCI_MWBASE_REV_CCL); > > + au_writel(0x02a00356, Au1500_PCI_STATCMD); > > + au_writel(0x00003c04, Au1500_PCI_HDRTYPE); > > + au_writel(0x00000008, Au1500_PCI_MBAR); > > + au_sync(); > > +#endif > > + > > + /* Enable sys bus clock divider when IDLE state or no bus activity. */ > > + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > + > > + /* Enable the RTC if not already enabled */ > > + if (!(au_readl(0xac000028) & 0x20)) { > > + printk(KERN_INFO "enabling clock ...\n"); > > + au_writel((au_readl(0xac000028) | 0x20), 0xac000028); > > + } > > + /* Put the clock in BCD mode */ > > + if (au_readl(0xac00002c) & 0x4) { /* reg B */ > > + au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); > > + au_sync(); > > + } > > +} > > diff --git a/arch/mips/alchemy/evalboards/pb1550.c b/arch/mips/alchemy/evalboards/pb1550.c > > new file mode 100644 > > index 0000000..bd7c3a9 > > --- /dev/null > > +++ b/arch/mips/alchemy/evalboards/pb1550.c > > @@ -0,0 +1,86 @@ > > +/* > > + * > > + * BRIEF MODULE DESCRIPTION > > + * Alchemy Pb1550 board setup. > > + * > > + * Copyright 2000, 2008 MontaVista Software Inc. > > + * Author: MontaVista Software, Inc. <source@mvista.com> > > + * > > + * 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. > > + * > > + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + * > > + * You should have received a copy of the GNU General Public License along > > + * with this program; if not, write to the Free Software Foundation, Inc., > > + * 675 Mass Ave, Cambridge, MA 02139, USA. > > + */ > > + > > +#include <linux/init.h> > > +#include <linux/kernel.h> > > +#include <asm/mach-au1x00/au1000.h> > > +#include <asm/mach-pb1x00/pb1550.h> > > +#include <prom.h> > > + > > +char irq_tab_alchemy[][5] __initdata = { > > + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > +}; > > + > > +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > +}; > > + > > +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > + > > + > > +const char *get_system_type(void) > > +{ > > + return "Alchemy Pb1550"; > > +} > > + > > +void board_reset(void) > > +{ > > + /* Hit BCSR.SYSTEM[RESET] */ > > + au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); > > +} > > + > > +void __init board_setup(void) > > +{ > > + u32 pin_func; > > + > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + char *argptr = prom_getcmdline(); > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > + > > + /* > > + * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, > > + * but it is board specific code, so put it here. > > + */ > > + pin_func = au_readl(SYS_PINFUNC); > > + au_sync(); > > + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > > + au_writel(pin_func, SYS_PINFUNC); > > + > > + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > > + au_sync(); > > + > > + printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); > > +} > > diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c > > index 2e26465..08d265c 100644 > > --- a/arch/mips/alchemy/mtx-1/board_setup.c > > +++ b/arch/mips/alchemy/mtx-1/board_setup.c > > @@ -92,6 +92,14 @@ void board_reset(void) > > > > void __init board_setup(void) > > { > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + char *argptr = prom_getcmdline(); > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > #if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > /* Enable USB power switch */ > > au_writel(au_readl(GPIO2_DIR) | 0x10, GPIO2_DIR); > > diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile > > deleted file mode 100644 > > index 4377ab3..0000000 > > --- a/arch/mips/alchemy/pb1000/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Copyright 2000, 2008 MontaVista Software Inc. > > -# Author: MontaVista Software, Inc. <source@mvista.com> > > -# > > -# Makefile for the Alchemy Semiconductor Pb1000 board. > > -# > > - > > -lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c > > deleted file mode 100644 > > index bd0b6f4..0000000 > > --- a/arch/mips/alchemy/pb1000/board_setup.c > > +++ /dev/null > > @@ -1,197 +0,0 @@ > > -/* > > - * Copyright 2000, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/delay.h> > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <linux/kernel.h> > > -#include <asm/bootinfo.h> > > -#include <asm/mach-au1x00/au1000.h> > > -#include <asm/mach-pb1x00/pb1000.h> > > -#include <prom.h> > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1000"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > -} > > - > > -void __init board_setup(void) > > -{ > > - u32 pin_func, static_cfg0; > > - u32 sys_freqctrl, sys_clksrc; > > - u32 prid = read_c0_prid(); > > - > > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > - au_writel(8, SYS_AUXPLL); > > - au_writel(0, SYS_PINSTATERD); > > - udelay(100); > > - > > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > - /* Zero and disable FREQ2 */ > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* Zero and disable USBH/USBD clocks */ > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > - > > - switch (prid & 0x000000FF) { > > - case 0x00: /* DA */ > > - case 0x01: /* HA */ > > - case 0x02: /* HB */ > > - /* CPU core freq to 48 MHz to slow it way down... */ > > - au_writel(4, SYS_CPUPLL); > > - > > - /* > > - * Setup 48 MHz FREQ2 from CPUPLL for USB Host > > - * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz > > - */ > > - sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* CPU core freq to 384 MHz */ > > - au_writel(0x20, SYS_CPUPLL); > > - > > - printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); > > - break; > > - > > - default: /* HC and newer */ > > - /* FREQ2 = aux / 2 = 48 MHz */ > > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > > - SYS_FC_FE2 | SYS_FC_FS2; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - break; > > - } > > - > > - /* > > - * Route 48 MHz FREQ2 into USB Host and/or Device > > - */ > > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - /* Configure pins GPIO[14:9] as GPIO */ > > - pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); > > - > > - /* 2nd USB port is USB host */ > > - pin_func |= SYS_PF_USB; > > - > > - au_writel(pin_func, SYS_PINFUNC); > > - au_writel(0x2800, SYS_TRIOUTCLR); > > - au_writel(0x0030, SYS_OUTPUTCLR); > > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > - > > - /* Make GPIO 15 an input (for interrupt line) */ > > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; > > - /* We don't need I2S, so make it available for GPIO[31:29] */ > > - pin_func |= SYS_PF_I2S; > > - au_writel(pin_func, SYS_PINFUNC); > > - > > - au_writel(0x8000, SYS_TRIOUTCLR); > > - > > - static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; > > - au_writel(static_cfg0, MEM_STCFG0); > > - > > - /* configure RCE2* for LCD */ > > - au_writel(0x00000004, MEM_STCFG2); > > - > > - /* MEM_STTIME2 */ > > - au_writel(0x09000000, MEM_STTIME2); > > - > > - /* Set 32-bit base address decoding for RCE2* */ > > - au_writel(0x10003ff0, MEM_STADDR2); > > - > > - /* > > - * PCI CPLD setup > > - * Expand CE0 to cover PCI > > - */ > > - au_writel(0x11803e40, MEM_STADDR1); > > - > > - /* Burst visibility on */ > > - au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); > > - > > - au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ > > - au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ > > - > > - /* Setup the static bus controller */ > > - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > > - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > > - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > > - > > - /* > > - * Enable Au1000 BCLK switching - note: sed1356 must not use > > - * its BCLK (Au1000 LCLK) for any timings > > - */ > > - switch (prid & 0x000000FF) { > > - case 0x00: /* DA */ > > - case 0x01: /* HA */ > > - case 0x02: /* HB */ > > - break; > > - default: /* HC and newer */ > > - /* > > - * Enable sys bus clock divider when IDLE state or no bus > > - * activity. > > - */ > > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > - break; > > - } > > -} > > diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile > > deleted file mode 100644 > > index 627a75c..0000000 > > --- a/arch/mips/alchemy/pb1100/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Copyright 2000, 2001, 2008 MontaVista Software Inc. > > -# Author: MontaVista Software, Inc. <source@mvista.com> > > -# > > -# Makefile for the Alchemy Semiconductor Pb1100 board. > > -# > > - > > -lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c > > deleted file mode 100644 > > index 87da4a5..0000000 > > --- a/arch/mips/alchemy/pb1100/board_setup.c > > +++ /dev/null > > @@ -1,147 +0,0 @@ > > -/* > > - * Copyright 2002, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/delay.h> > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <linux/kernel.h> > > -#include <asm/bootinfo.h> > > -#include <asm/mach-au1x00/au1000.h> > > -#include <asm/mach-pb1x00/pb1100.h> > > -#include <prom.h> > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ > > - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ > > - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ > > - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1100"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg3; > > - > > - prom_init_cmdline(); > > - > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > > - au_writel(0x00000000, PB1100_RST_VDDI); > > -} > > - > > -void __init board_setup(void) > > -{ > > - volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; > > - > > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > - au_writel(8, SYS_AUXPLL); > > - au_writel(0, SYS_PININPUTEN); > > - udelay(100); > > - > > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > - { > > - u32 pin_func, sys_freqctrl, sys_clksrc; > > - > > - /* Configure pins GPIO[14:9] as GPIO */ > > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > > - > > - /* Zero and disable FREQ2 */ > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* Zero and disable USBH/USBD/IrDA clock */ > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); > > - > > - /* FREQ2 = aux / 2 = 48 MHz */ > > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | > > - SYS_FC_FE2 | SYS_FC_FS2; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* > > - * Route 48 MHz FREQ2 into USBH/USBD/IrDA > > - */ > > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - /* Setup the static bus controller */ > > - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ > > - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ > > - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ > > - > > - /* > > - * Get USB Functionality pin state (device vs host drive pins). > > - */ > > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > > - /* 2nd USB port is USB host. */ > > - pin_func |= SYS_PF_USB; > > - au_writel(pin_func, SYS_PINFUNC); > > - } > > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > - > > - /* Enable sys bus clock divider when IDLE state or no bus activity. */ > > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > - > > - /* Enable the RTC if not already enabled. */ > > - if (!(readb(base + 0x28) & 0x20)) { > > - writeb(readb(base + 0x28) | 0x20, base + 0x28); > > - au_sync(); > > - } > > - /* Put the clock in BCD mode. */ > > - if (readb(base + 0x2C) & 0x4) { /* reg B */ > > - writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); > > - au_sync(); > > - } > > -} > > diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile > > deleted file mode 100644 > > index e9b9d27..0000000 > > --- a/arch/mips/alchemy/pb1200/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. > > -# > > - > > -lib-y := board_setup.o > > -obj-y += platform.o > > - > > -EXTRA_CFLAGS += -Werror > > diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c > > deleted file mode 100644 > > index a336a7a..0000000 > > --- a/arch/mips/alchemy/pb1200/board_setup.c > > +++ /dev/null > > @@ -1,316 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Alchemy Pb1200/Db1200 board setup. > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <asm/bootinfo.h> > > -#include <asm/mach-au1x00/au1000.h> > > - > > -#ifdef CONFIG_MIPS_PB1200 > > -#include <asm/mach-pb1x00/pb1200.h> > > -#endif > > - > > -#ifdef CONFIG_MIPS_DB1200 > > -#include <asm/mach-db1x00/db1200.h> > > -#define PB1200_INT_BEGIN DB1200_INT_BEGIN > > -#define PB1200_INT_END DB1200_INT_END > > -#endif > > - > > -#include <prom.h> > > - > > -extern void (*board_init_irq)(void); > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - /* This is external interrupt cascade */ > > - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > -/* > > - * Support for External interrupts on the Pb1200 Development platform. > > - */ > > -static volatile int pb1200_cascade_en; > > - > > -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) > > -{ > > - unsigned short bisr = bcsr->int_status; > > - int extirq_nr = 0; > > - > > - /* Clear all the edge interrupts. This has no effect on level. */ > > - bcsr->int_status = bisr; > > - for ( ; bisr; bisr &= bisr - 1) { > > - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); > > - /* Ack and dispatch IRQ */ > > - do_IRQ(extirq_nr); > > - } > > - > > - return IRQ_RETVAL(1); > > -} > > - > > -inline void pb1200_enable_irq(unsigned int irq_nr) > > -{ > > - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); > > -} > > - > > -inline void pb1200_disable_irq(unsigned int irq_nr) > > -{ > > - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); > > - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); > > -} > > - > > -static unsigned int pb1200_setup_cascade(void) > > -{ > > - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, > > - 0, "Pb1200 Cascade", &pb1200_cascade_handler); > > -} > > - > > -static unsigned int pb1200_startup_irq(unsigned int irq) > > -{ > > - if (++pb1200_cascade_en == 1) { > > - int res; > > - > > - res = pb1200_setup_cascade(); > > - if (res) > > - return res; > > - } > > - > > - pb1200_enable_irq(irq); > > - > > - return 0; > > -} > > - > > -static void pb1200_shutdown_irq(unsigned int irq) > > -{ > > - pb1200_disable_irq(irq); > > - if (--pb1200_cascade_en == 0) > > - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); > > -} > > - > > -static struct irq_chip external_irq_type = { > > -#ifdef CONFIG_MIPS_PB1200 > > - .name = "Pb1200 Ext", > > -#endif > > -#ifdef CONFIG_MIPS_DB1200 > > - .name = "Db1200 Ext", > > -#endif > > - .startup = pb1200_startup_irq, > > - .shutdown = pb1200_shutdown_irq, > > - .ack = pb1200_disable_irq, > > - .mask = pb1200_disable_irq, > > - .mask_ack = pb1200_disable_irq, > > - .unmask = pb1200_enable_irq, > > -}; > > - > > -static void pb1200_init_irq(void) > > -{ > > - unsigned int irq; > > - > > -#ifdef CONFIG_MIPS_PB1200 > > - /* We have a problem with CPLD rev 3. */ > > - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); > > - printk(KERN_ERR "updated to latest revision. This software will\n"); > > - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - printk(KERN_ERR "WARNING!!!\n"); > > - panic("Game over. Your score is 0."); > > - } > > -#endif > > - > > - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { > > - set_irq_chip_and_handler(irq, &external_irq_type, > > - handle_level_irq); > > - pb1200_disable_irq(irq); > > - } > > - > > - /* > > - * GPIO_7 can not be hooked here, so it is hooked upon first > > - * request of any source attached to the cascade. > > - */ > > -} > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1200"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x08000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > - bcsr->resets = 0; > > - bcsr->system = 0; > > -} > > - > > -void __init board_setup(void) > > -{ > > - char *argptr = NULL; > > - > > -#if 0 > > - { > > - u32 pin_func; > > - > > - /* > > - * Enable PSC1 SYNC for AC97. Normaly done in audio driver, > > - * but it is board specific code, so put it here. > > - */ > > - pin_func = au_readl(SYS_PINFUNC); > > - au_sync(); > > - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > > - au_writel(pin_func, SYS_PINFUNC); > > - > > - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > > - au_sync(); > > - } > > -#endif > > - > > -#if defined(CONFIG_I2C_AU1550) > > - { > > - u32 freq0, clksrc; > > - u32 pin_func; > > - > > - /* Select SMBus in CPLD */ > > - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > > - > > - pin_func = au_readl(SYS_PINFUNC); > > - au_sync(); > > - pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); > > - /* Set GPIOs correctly */ > > - pin_func |= 2 << 17; > > - au_writel(pin_func, SYS_PINFUNC); > > - au_sync(); > > - > > - /* The I2C driver depends on 50 MHz clock */ > > - freq0 = au_readl(SYS_FREQCTRL0); > > - au_sync(); > > - freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); > > - freq0 |= 3 << SYS_FC_FRDIV1_BIT; > > - /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ > > - au_writel(freq0, SYS_FREQCTRL0); > > - au_sync(); > > - freq0 |= SYS_FC_FE1; > > - au_writel(freq0, SYS_FREQCTRL0); > > - au_sync(); > > - > > - clksrc = au_readl(SYS_CLKSRC); > > - au_sync(); > > - clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); > > - /* Bit 22 is EXTCLK0 for PSC0 */ > > - clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; > > - au_writel(clksrc, SYS_CLKSRC); > > - au_sync(); > > - } > > -#endif > > - > > -#ifdef CONFIG_FB_AU1200 > > - argptr = prom_getcmdline(); > > -#ifdef CONFIG_MIPS_PB1200 > > - strcat(argptr, " video=au1200fb:panel:bs"); > > -#endif > > -#ifdef CONFIG_MIPS_DB1200 > > - strcat(argptr, " video=au1200fb:panel:bs"); > > -#endif > > -#endif > > - > > - /* > > - * The Pb1200 development board uses external MUX for PSC0 to > > - * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI > > - */ > > -#ifdef CONFIG_I2C_AU1550 > > - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; > > -#endif > > - au_sync(); > > - > > -#ifdef CONFIG_MIPS_PB1200 > > - printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); > > -#endif > > -#ifdef CONFIG_MIPS_DB1200 > > - printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); > > -#endif > > - > > - /* Setup Pb1200 External Interrupt Controller */ > > - board_init_irq = pb1200_init_irq; > > -} > > - > > -int board_au1200fb_panel(void) > > -{ > > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > - int p; > > - > > - p = bcsr->switches; > > - p >>= 8; > > - p &= 0x0F; > > - return p; > > -} > > - > > -int board_au1200fb_panel_init(void) > > -{ > > - /* Apply power */ > > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > - > > - bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; > > - /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ > > - return 0; > > -} > > - > > -int board_au1200fb_panel_shutdown(void) > > -{ > > - /* Remove power */ > > - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; > > - > > - bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | > > - BCSR_BOARD_LCDBL); > > - /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ > > - return 0; > > -} > > diff --git a/arch/mips/alchemy/pb1200/platform.c b/arch/mips/alchemy/pb1200/platform.c > > deleted file mode 100644 > > index 9530329..0000000 > > --- a/arch/mips/alchemy/pb1200/platform.c > > +++ /dev/null > > @@ -1,166 +0,0 @@ > > -/* > > - * Pb1200/DBAu1200 board platform device registration > > - * > > - * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * This program is distributed in the hope that it will be useful, > > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > - * GNU General Public License for more details. > > - * > > - * You should have received a copy of the GNU General Public License > > - * along with this program; if not, write to the Free Software > > - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > - */ > > - > > -#include <linux/dma-mapping.h> > > -#include <linux/init.h> > > -#include <linux/leds.h> > > -#include <linux/platform_device.h> > > - > > -#include <asm/mach-au1x00/au1xxx.h> > > -#include <asm/mach-au1x00/au1100_mmc.h> > > - > > -static int mmc_activity; > > - > > -static void pb1200mmc0_set_power(void *mmc_host, int state) > > -{ > > - if (state) > > - bcsr->board |= BCSR_BOARD_SD0PWR; > > - else > > - bcsr->board &= ~BCSR_BOARD_SD0PWR; > > - > > - au_sync_delay(1); > > -} > > - > > -static int pb1200mmc0_card_readonly(void *mmc_host) > > -{ > > - return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; > > -} > > - > > -static int pb1200mmc0_card_inserted(void *mmc_host) > > -{ > > - return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; > > -} > > - > > -static void pb1200_mmcled_set(struct led_classdev *led, > > - enum led_brightness brightness) > > -{ > > - if (brightness != LED_OFF) { > > - if (++mmc_activity == 1) > > - bcsr->disk_leds &= ~(1 << 8); > > - } else { > > - if (--mmc_activity == 0) > > - bcsr->disk_leds |= (1 << 8); > > - } > > -} > > - > > -static struct led_classdev pb1200mmc_led = { > > - .brightness_set = pb1200_mmcled_set, > > -}; > > - > > -#ifndef CONFIG_MIPS_DB1200 > > -static void pb1200mmc1_set_power(void *mmc_host, int state) > > -{ > > - if (state) > > - bcsr->board |= BCSR_BOARD_SD1PWR; > > - else > > - bcsr->board &= ~BCSR_BOARD_SD1PWR; > > - > > - au_sync_delay(1); > > -} > > - > > -static int pb1200mmc1_card_readonly(void *mmc_host) > > -{ > > - return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; > > -} > > - > > -static int pb1200mmc1_card_inserted(void *mmc_host) > > -{ > > - return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; > > -} > > -#endif > > - > > -const struct au1xmmc_platform_data au1xmmc_platdata[2] = { > > - [0] = { > > - .set_power = pb1200mmc0_set_power, > > - .card_inserted = pb1200mmc0_card_inserted, > > - .card_readonly = pb1200mmc0_card_readonly, > > - .cd_setup = NULL, /* use poll-timer in driver */ > > - .led = &pb1200mmc_led, > > - }, > > -#ifndef CONFIG_MIPS_DB1200 > > - [1] = { > > - .set_power = pb1200mmc1_set_power, > > - .card_inserted = pb1200mmc1_card_inserted, > > - .card_readonly = pb1200mmc1_card_readonly, > > - .cd_setup = NULL, /* use poll-timer in driver */ > > - .led = &pb1200mmc_led, > > - }, > > -#endif > > -}; > > - > > -static struct resource ide_resources[] = { > > - [0] = { > > - .start = IDE_PHYS_ADDR, > > - .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, > > - .flags = IORESOURCE_MEM > > - }, > > - [1] = { > > - .start = IDE_INT, > > - .end = IDE_INT, > > - .flags = IORESOURCE_IRQ > > - } > > -}; > > - > > -static u64 ide_dmamask = DMA_32BIT_MASK; > > - > > -static struct platform_device ide_device = { > > - .name = "au1200-ide", > > - .id = 0, > > - .dev = { > > - .dma_mask = &ide_dmamask, > > - .coherent_dma_mask = DMA_32BIT_MASK, > > - }, > > - .num_resources = ARRAY_SIZE(ide_resources), > > - .resource = ide_resources > > -}; > > - > > -static struct resource smc91c111_resources[] = { > > - [0] = { > > - .name = "smc91x-regs", > > - .start = SMC91C111_PHYS_ADDR, > > - .end = SMC91C111_PHYS_ADDR + 0xf, > > - .flags = IORESOURCE_MEM > > - }, > > - [1] = { > > - .start = SMC91C111_INT, > > - .end = SMC91C111_INT, > > - .flags = IORESOURCE_IRQ > > - }, > > -}; > > - > > -static struct platform_device smc91c111_device = { > > - .name = "smc91x", > > - .id = -1, > > - .num_resources = ARRAY_SIZE(smc91c111_resources), > > - .resource = smc91c111_resources > > -}; > > - > > -static struct platform_device *board_platform_devices[] __initdata = { > > - &ide_device, > > - &smc91c111_device > > -}; > > - > > -static int __init board_register_devices(void) > > -{ > > - return platform_add_devices(board_platform_devices, > > - ARRAY_SIZE(board_platform_devices)); > > -} > > - > > -arch_initcall(board_register_devices); > > diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile > > deleted file mode 100644 > > index 4664d61..0000000 > > --- a/arch/mips/alchemy/pb1500/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Copyright 2000, 2001, 2008 MontaVista Software Inc. > > -# Author: MontaVista Software, Inc. <source@mvista.com> > > -# > > -# Makefile for the Alchemy Semiconductor Pb1500 board. > > -# > > - > > -lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c > > deleted file mode 100644 > > index 1be1afc..0000000 > > --- a/arch/mips/alchemy/pb1500/board_setup.c > > +++ /dev/null > > @@ -1,161 +0,0 @@ > > -/* > > - * Copyright 2000, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/delay.h> > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <linux/kernel.h> > > -#include <asm/bootinfo.h> > > -#include <asm/mach-au1x00/au1000.h> > > -#include <asm/mach-pb1x00/pb1500.h> > > -#include <prom.h> > > - > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ > > -}; > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, > > - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1500"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x04000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ > > - au_writel(0x00000000, PB1500_RST_VDDI); > > -} > > - > > -void __init board_setup(void) > > -{ > > - u32 pin_func; > > - u32 sys_freqctrl, sys_clksrc; > > - > > - sys_clksrc = sys_freqctrl = pin_func = 0; > > - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ > > - au_writel(8, SYS_AUXPLL); > > - au_writel(0, SYS_PINSTATERD); > > - udelay(100); > > - > > -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) > > - > > - /* GPIO201 is input for PCMCIA card detect */ > > - /* GPIO203 is input for PCMCIA interrupt request */ > > - au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); > > - > > - /* Zero and disable FREQ2 */ > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* zero and disable USBH/USBD clocks */ > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - sys_freqctrl = au_readl(SYS_FREQCTRL0); > > - sys_freqctrl &= ~0xFFF00000; > > - > > - sys_clksrc = au_readl(SYS_CLKSRC); > > - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | > > - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); > > - > > - /* FREQ2 = aux/2 = 48 MHz */ > > - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; > > - au_writel(sys_freqctrl, SYS_FREQCTRL0); > > - > > - /* > > - * Route 48MHz FREQ2 into USB Host and/or Device > > - */ > > - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; > > - au_writel(sys_clksrc, SYS_CLKSRC); > > - > > - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; > > - /* 2nd USB port is USB host */ > > - pin_func |= SYS_PF_USB; > > - au_writel(pin_func, SYS_PINFUNC); > > -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ > > - > > -#ifdef CONFIG_PCI > > - /* Setup PCI bus controller */ > > - au_writel(0, Au1500_PCI_CMEM); > > - au_writel(0x00003fff, Au1500_CFG_BASE); > > -#if defined(__MIPSEB__) > > - au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); > > -#else > > - au_writel(0xf, Au1500_PCI_CFG); > > -#endif > > - au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); > > - au_writel(0, Au1500_PCI_MWBASE_REV_CCL); > > - au_writel(0x02a00356, Au1500_PCI_STATCMD); > > - au_writel(0x00003c04, Au1500_PCI_HDRTYPE); > > - au_writel(0x00000008, Au1500_PCI_MBAR); > > - au_sync(); > > -#endif > > - > > - /* Enable sys bus clock divider when IDLE state or no bus activity. */ > > - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); > > - > > - /* Enable the RTC if not already enabled */ > > - if (!(au_readl(0xac000028) & 0x20)) { > > - printk(KERN_INFO "enabling clock ...\n"); > > - au_writel((au_readl(0xac000028) | 0x20), 0xac000028); > > - } > > - /* Put the clock in BCD mode */ > > - if (au_readl(0xac00002c) & 0x4) { /* reg B */ > > - au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); > > - au_sync(); > > - } > > -} > > diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile > > deleted file mode 100644 > > index 7e6453d..0000000 > > --- a/arch/mips/alchemy/pb1550/Makefile > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -# > > -# Copyright 2000, 2008 MontaVista Software Inc. > > -# Author: MontaVista Software, Inc. <source@mvista.com> > > -# > > -# Makefile for the Alchemy Semiconductor Pb1550 board. > > -# > > - > > -lib-y := board_setup.o > > diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c > > deleted file mode 100644 > > index e844484..0000000 > > --- a/arch/mips/alchemy/pb1550/board_setup.c > > +++ /dev/null > > @@ -1,97 +0,0 @@ > > -/* > > - * > > - * BRIEF MODULE DESCRIPTION > > - * Alchemy Pb1550 board setup. > > - * > > - * Copyright 2000, 2008 MontaVista Software Inc. > > - * Author: MontaVista Software, Inc. <source@mvista.com> > > - * > > - * 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. > > - * > > - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED > > - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF > > - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN > > - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, > > - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > > - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > > - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON > > - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF > > - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > - * > > - * You should have received a copy of the GNU General Public License along > > - * with this program; if not, write to the Free Software Foundation, Inc., > > - * 675 Mass Ave, Cambridge, MA 02139, USA. > > - */ > > - > > -#include <linux/init.h> > > -#include <linux/interrupt.h> > > -#include <linux/kernel.h> > > -#include <asm/bootinfo.h> > > -#include <asm/mach-au1x00/au1000.h> > > -#include <asm/mach-pb1x00/pb1550.h> > > -#include <prom.h> > > - > > -char irq_tab_alchemy[][5] __initdata = { > > - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ > > - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ > > -}; > > - > > -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { > > - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, > > - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, > > -}; > > - > > -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); > > - > > - > > -const char *get_system_type(void) > > -{ > > - return "Alchemy Pb1550"; > > -} > > - > > -void __init prom_init(void) > > -{ > > - unsigned char *memsize_str; > > - unsigned long memsize; > > - > > - prom_argc = (int)fw_arg0; > > - prom_argv = (char **)fw_arg1; > > - prom_envp = (char **)fw_arg2; > > - > > - prom_init_cmdline(); > > - memsize_str = prom_getenv("memsize"); > > - if (!memsize_str) > > - memsize = 0x08000000; > > - else > > - strict_strtol(memsize_str, 0, &memsize); > > - add_memory_region(0, memsize, BOOT_MEM_RAM); > > -} > > - > > -void board_reset(void) > > -{ > > - /* Hit BCSR.SYSTEM[RESET] */ > > - au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); > > -} > > - > > -void __init board_setup(void) > > -{ > > - u32 pin_func; > > - > > - /* > > - * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, > > - * but it is board specific code, so put it here. > > - */ > > - pin_func = au_readl(SYS_PINFUNC); > > - au_sync(); > > - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; > > - au_writel(pin_func, SYS_PINFUNC); > > - > > - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ > > - au_sync(); > > - > > - printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); > > -} > > diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c > > index 813668f..1a83b2d 100644 > > --- a/arch/mips/alchemy/xxs1500/board_setup.c > > +++ b/arch/mips/alchemy/xxs1500/board_setup.c > > @@ -84,6 +84,15 @@ void __init board_setup(void) > > { > > u32 pin_func; > > > > +#ifdef CONFIG_SERIAL_8250_CONSOLE > > + char *argptr = prom_getcmdline(); > > + argptr = strstr(argptr, "console="); > > + if (argptr == NULL) { > > + argptr = prom_getcmdline(); > > + strcat(argptr, " console=ttyS0,115200"); > > + } > > +#endif > > + > > /* Set multiple use pins (UART3/GPIO) to UART (it's used as UART too) */ > > pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; > > pin_func |= SYS_PF_UR3; > -- > Kevin Hickey > Alchemy Solutions > RMI Corporation > khickey@rmicorp.com > P: 512.691.8044 > ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 6:06 ` Manuel Lauss @ 2008-11-12 10:38 ` Sergei Shtylyov 2008-11-12 10:55 ` Sergei Shtylyov 0 siblings, 1 reply; 19+ messages in thread From: Sergei Shtylyov @ 2008-11-12 10:38 UTC (permalink / raw) To: Manuel Lauss; +Cc: Kevin Hickey, Linux-MIPS, Florian Fainelli, Bruno Randolf Hello. Manuel Lauss wrote: >> And in keeping with my other email, I think that the evalboards >> directory is a good idea (though I would recommend the name >> "develboards" as that is what DB stands for), but it should contain >> subdirectories for each board and a common directory for common DB code. >> Smashing all of the board code into one file doesn't leave any room to >> grow if that file gets too big. Also, a single common.c will not be >> sufficient in the future. >> > > Okay, I'll change that, test and resend. > > Thanks, > Manuel Lauss > [...] >>> Move all code of the Pb/Db boards to a single subdirectory and extract >>> some common code. >>> >>> Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> >>> I see you, Manuel is no better. :-) Please avoid leaving unquoted patch behind your reply. WBR, Sergei ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 10:38 ` Sergei Shtylyov @ 2008-11-12 10:55 ` Sergei Shtylyov 0 siblings, 0 replies; 19+ messages in thread From: Sergei Shtylyov @ 2008-11-12 10:55 UTC (permalink / raw) To: Manuel Lauss; +Cc: Kevin Hickey, Linux-MIPS, Florian Fainelli, Bruno Randolf Hello, I wrote: > I see you, Manuel is no better. :-) > Please avoid leaving unquoted patch behind your reply. Oops, s/unquoted/uncommented/. WBR, Sergei ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 4:00 ` Kevin Hickey 2008-11-12 6:06 ` Manuel Lauss @ 2008-11-12 10:35 ` Sergei Shtylyov 2008-11-12 12:05 ` Manuel Lauss 2008-11-12 13:38 ` Kevin Hickey 1 sibling, 2 replies; 19+ messages in thread From: Sergei Shtylyov @ 2008-11-12 10:35 UTC (permalink / raw) To: Kevin Hickey; +Cc: Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf Hello. Kevin Hickey wrote: > And in keeping with my other email, I think that the evalboards > directory is a good idea (though I would recommend the name > "develboards" as that is what DB stands for), but it should contain > I'd prefer devel-boards, or dev-boards. > subdirectories for each board and a common directory for common DB code. > Smashing all of the board code into one file doesn't leave any room to > grow if that file gets too big. I doubt that this could be the case here. And I don't think anybody has placed limits on the source file size so far. > Also, a single common.c will not be sufficient in the future. > Wait, the file only includes prom_init() for now, so might be worth renaming it... > =Kevin > > On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > >> Move all code of the Pb/Db boards to a single subdirectory and extract >> some common code. >> >> Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> >> And now I'll have to give Kevin two lessons of the network etiquette: - don't top-post (your comments should be below the quoted text you're replying to); - above all, don't leave tens of KBs of uncommented patch behind, do spend several seconds to delete it! WBR, Sergei ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 10:35 ` Sergei Shtylyov @ 2008-11-12 12:05 ` Manuel Lauss 2008-11-12 13:39 ` Kevin Hickey 2008-11-12 13:38 ` Kevin Hickey 1 sibling, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-12 12:05 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: Kevin Hickey, Linux-MIPS, Florian Fainelli, Bruno Randolf Hello, On Wed, Nov 12, 2008 at 01:35:22PM +0300, Sergei Shtylyov wrote: > Hello. > > Kevin Hickey wrote: > >> And in keeping with my other email, I think that the evalboards >> directory is a good idea (though I would recommend the name >> "develboards" as that is what DB stands for), but it should contain >> > > I'd prefer devel-boards, or dev-boards. Can we settle on "devboards" without the hyphen? Everybody okay with that? >> subdirectories for each board and a common directory for common DB code. >> Smashing all of the board code into one file doesn't leave any room to >> grow if that file gets too big. > > I doubt that this could be the case here. And I don't think anybody has > placed limits on the source file size so far. > >> Also, a single common.c will not be sufficient in the future. >> > > Wait, the file only includes prom_init() for now, so might be worth > renaming it... I planned on putting some of the code currently living in common/ into it. Not a good idea? Then I'll rename it to prom.c and leave it alone. Thoughts? Thanks, Manuel Lauss ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 12:05 ` Manuel Lauss @ 2008-11-12 13:39 ` Kevin Hickey 0 siblings, 0 replies; 19+ messages in thread From: Kevin Hickey @ 2008-11-12 13:39 UTC (permalink / raw) To: Manuel Lauss; +Cc: Sergei Shtylyov, Linux-MIPS, Florian Fainelli, Bruno Randolf On Wed, 2008-11-12 at 13:05 +0100, Manuel Lauss wrote: > Hello, > > On Wed, Nov 12, 2008 at 01:35:22PM +0300, Sergei Shtylyov wrote: > > Hello. > > > > Kevin Hickey wrote: > > > >> And in keeping with my other email, I think that the evalboards > >> directory is a good idea (though I would recommend the name > >> "develboards" as that is what DB stands for), but it should contain > >> > > > > I'd prefer devel-boards, or dev-boards. > > Can we settle on "devboards" without the hyphen? Everybody okay with that? I'd prefer dev-boards but I'm not so vested that I'm willing to get into a protracted semantic argument about it. > > > >> subdirectories for each board and a common directory for common DB code. > >> Smashing all of the board code into one file doesn't leave any room to > >> grow if that file gets too big. > > > > I doubt that this could be the case here. And I don't think anybody has > > placed limits on the source file size so far. > > > >> Also, a single common.c will not be sufficient in the future. > >> > > > > Wait, the file only includes prom_init() for now, so might be worth > > renaming it... > > I planned on putting some of the code currently living in common/ into it. > Not a good idea? Then I'll rename it to prom.c and leave it alone. If you do that then keep it common.c; otherwise rename. > > > Thoughts? > > Thanks, > Manuel Lauss =Kevin -- Kevin Hickey Alchemy Solutions RMI Corporation khickey@rmicorp.com P: 512.691.8044 ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 10:35 ` Sergei Shtylyov 2008-11-12 12:05 ` Manuel Lauss @ 2008-11-12 13:38 ` Kevin Hickey 2008-11-12 15:45 ` Maciej W. Rozycki 1 sibling, 1 reply; 19+ messages in thread From: Kevin Hickey @ 2008-11-12 13:38 UTC (permalink / raw) To: Sergei Shtylyov; +Cc: Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf On Wed, 2008-11-12 at 13:35 +0300, Sergei Shtylyov wrote: > Hello. > > Kevin Hickey wrote: > > > And in keeping with my other email, I think that the evalboards > > directory is a good idea (though I would recommend the name > > "develboards" as that is what DB stands for), but it should contain > > > I'd prefer devel-boards, or dev-boards. dev-boards works for me. > > > subdirectories for each board and a common directory for common DB code. > > Smashing all of the board code into one file doesn't leave any room to > > grow if that file gets too big. > > I doubt that this could be the case here. And I don't think anybody > has placed limits on the source file size so far. I agree from a technical standpoint. I meant that if the files logically grew too much and it was desirable to split them, there would be nowhere to put the split files. On the other hand, I suppose that we don't need that today and we can always create the directory later if necessary... > > > Also, a single common.c will not be sufficient in the future. > > > > Wait, the file only includes prom_init() for now, so might be worth > renaming it... > > > =Kevin > > > > On Sat, 2008-11-08 at 13:08 +0100, Manuel Lauss wrote: > > > >> Move all code of the Pb/Db boards to a single subdirectory and extract > >> some common code. > >> > >> Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> > >> > > And now I'll have to give Kevin two lessons of the network etiquette: > > - don't top-post (your comments should be below the quoted text you're > replying to); > - above all, don't leave tens of KBs of uncommented patch behind, do > spend several seconds to delete it! My apologies. I will comply in this and future posts. > > WBR, Sergei > > =Kevin -- Kevin Hickey Alchemy Solutions RMI Corporation khickey@rmicorp.com P: 512.691.8044 ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 13:38 ` Kevin Hickey @ 2008-11-12 15:45 ` Maciej W. Rozycki 2008-11-12 15:52 ` Sergei Shtylyov 0 siblings, 1 reply; 19+ messages in thread From: Maciej W. Rozycki @ 2008-11-12 15:45 UTC (permalink / raw) To: Kevin Hickey Cc: Sergei Shtylyov, Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf On Wed, 12 Nov 2008, Kevin Hickey wrote: > > > And in keeping with my other email, I think that the evalboards > > > directory is a good idea (though I would recommend the name > > > "develboards" as that is what DB stands for), but it should contain > > > > > I'd prefer devel-boards, or dev-boards. > dev-boards works for me. FWIW, I'd call it "boards" -- it's shorter, sounds and looks right, no question about hyphens and clear. That is I do hope it is and everybody involved will know it's not about wood or directors. Maciej ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 15:45 ` Maciej W. Rozycki @ 2008-11-12 15:52 ` Sergei Shtylyov 2008-11-12 16:16 ` Maciej W. Rozycki 0 siblings, 1 reply; 19+ messages in thread From: Sergei Shtylyov @ 2008-11-12 15:52 UTC (permalink / raw) To: Maciej W. Rozycki Cc: Kevin Hickey, Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf Maciej W. Rozycki wrote: >>>>And in keeping with my other email, I think that the evalboards >>>>directory is a good idea (though I would recommend the name >>>>"develboards" as that is what DB stands for), but it should contain >>> I'd prefer devel-boards, or dev-boards. >>dev-boards works for me. > FWIW, I'd call it "boards" -- it's shorter, sounds and looks right, no > question about hyphens and clear. That is I do hope it is and everybody > involved will know it's not about wood or directors. This directory has only been meant for the AMD/RMI own development boards so far, so this won't do. > Maciej WBR, Sergei ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 15:52 ` Sergei Shtylyov @ 2008-11-12 16:16 ` Maciej W. Rozycki 2008-11-12 16:20 ` Sergei Shtylyov 0 siblings, 1 reply; 19+ messages in thread From: Maciej W. Rozycki @ 2008-11-12 16:16 UTC (permalink / raw) To: Sergei Shtylyov Cc: Kevin Hickey, Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf On Wed, 12 Nov 2008, Sergei Shtylyov wrote: > > FWIW, I'd call it "boards" -- it's shorter, sounds and looks right, no > > question about hyphens and clear. That is I do hope it is and everybody > > involved will know it's not about wood or directors. > > This directory has only been meant for the AMD/RMI own development boards > so far, so this won't do. Then please tell me why arch/mips/alchemy/boards/ won't do while arch/mips/alchemy/dev-boards/ (or whichever variant is agreed upon) would. Maciej ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] Alchemy: Move evalboard code to common directory 2008-11-12 16:16 ` Maciej W. Rozycki @ 2008-11-12 16:20 ` Sergei Shtylyov 0 siblings, 0 replies; 19+ messages in thread From: Sergei Shtylyov @ 2008-11-12 16:20 UTC (permalink / raw) To: Maciej W. Rozycki Cc: Kevin Hickey, Manuel Lauss, Linux-MIPS, Florian Fainelli, Bruno Randolf Hello. Maciej W. Rozycki wrote: >>> FWIW, I'd call it "boards" -- it's shorter, sounds and looks right, no >>>question about hyphens and clear. That is I do hope it is and everybody >>>involved will know it's not about wood or directors. >> This directory has only been meant for the AMD/RMI own development boards >>so far, so this won't do. > Then please tell me why arch/mips/alchemy/boards/ won't do while > arch/mips/alchemy/dev-boards/ (or whichever variant is agreed upon) would. Let me remind you that arch/alchemy/ contains the code for the *real* Au1xx0 based boards produced by other vendors as well. The patch leaves their code where it was. > Maciej WBR, Sergei ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 3/3] Alchemy: allow boards to override default reset/poweroff functions. 2008-11-08 12:08 [PATCH 0/3] Alchemy: consolidate board code, v2 Manuel Lauss 2008-11-08 12:08 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss 2008-11-08 12:08 ` [PATCH 2/3] Alchemy: Move evalboard code to common directory Manuel Lauss @ 2008-11-08 12:08 ` Manuel Lauss 2 siblings, 0 replies; 19+ messages in thread From: Manuel Lauss @ 2008-11-08 12:08 UTC (permalink / raw) To: Linux-MIPS; +Cc: Sergei Shtylyov, Florian Fainelli, Bruno Randolf, Manuel Lauss Not all boards may want to use the alchemy reset/poweroff functions; set the defaults before calling board init code so boards can override them if necessary. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> --- arch/mips/alchemy/common/setup.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/mips/alchemy/common/setup.c b/arch/mips/alchemy/common/setup.c index cd94985..b533d91 100644 --- a/arch/mips/alchemy/common/setup.c +++ b/arch/mips/alchemy/common/setup.c @@ -51,6 +51,10 @@ void __init plat_mem_setup(void) set_cpuspec(); sp = cur_cpu_spec[0]; + _machine_restart = au1000_restart; + _machine_halt = au1000_halt; + pm_power_off = au1000_power_off; + board_setup(); /* board specific setup */ prid = read_c0_prid(); @@ -78,10 +82,6 @@ void __init plat_mem_setup(void) /* Clear to obtain best system bus performance */ clear_c0_config(1 << 19); /* Clear Config[OD] */ - _machine_restart = au1000_restart; - _machine_halt = au1000_halt; - pm_power_off = au1000_power_off; - /* IO/MEM resources. */ set_io_port_base(0); ioport_resource.start = IOPORT_RESOURCE_START; -- 1.6.0.3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 0/3] Alchemy: consolidate board code @ 2008-11-07 18:41 Manuel Lauss 2008-11-07 18:41 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss 0 siblings, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-07 18:41 UTC (permalink / raw) To: Linux-MIPS; +Cc: Manuel Lauss The following 3 patches aim to consolidate the alchemy board code at bit. The patched basically only move code around; no functional changes (and tons of checkpatch warnings from the original code). 1/3: in all evalboard dirs, merge the irqmap.c/init.c files into board_setup.c 2/3: create a common subdirectory for Alchemy evalboards. 3/3: extract remaining reset/init code from common/ subdir and move it to evalboard/. I added reboot hook initialization to the mtx-1 and xxs1500 boards since the removal of common/reset.c their reboot functions no longer get called automagically. All patches have been compile-tested with all Alchemy boards available for selection in KConfig and tested on Db1200. I have a few other patched which overhaul Alchemy IRQ code, so I'd like to get this out of the way first. Feedback and Testers welcome! Thanks, Manuel Lauss --- Manuel Lauss (3): Alchemy: merge small board files into single files Alchemy: Move evalboard code to common directory Alchemy: common reset code is evalboard code. arch/mips/Makefile | 24 +- arch/mips/alchemy/common/Makefile | 2 +- arch/mips/alchemy/common/reset.c | 189 --------------- arch/mips/alchemy/common/setup.c | 39 --- arch/mips/alchemy/db1x00/Makefile | 8 - arch/mips/alchemy/db1x00/board_setup.c | 108 --------- arch/mips/alchemy/db1x00/init.c | 62 ----- arch/mips/alchemy/db1x00/irqmap.c | 86 ------- arch/mips/alchemy/evalboards/Makefile | 17 ++ arch/mips/alchemy/evalboards/common.c | 253 ++++++++++++++++++++ arch/mips/alchemy/evalboards/db1x00.c | 182 +++++++++++++++ arch/mips/alchemy/evalboards/pb1000.c | 181 +++++++++++++++ arch/mips/alchemy/evalboards/pb1100.c | 127 ++++++++++ arch/mips/alchemy/evalboards/pb1200.c | 296 ++++++++++++++++++++++++ arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++ arch/mips/alchemy/evalboards/pb1500.c | 143 ++++++++++++ arch/mips/alchemy/evalboards/pb1550.c | 79 +++++++ arch/mips/alchemy/mtx-1/Makefile | 2 +- arch/mips/alchemy/mtx-1/board_setup.c | 57 +++++- arch/mips/alchemy/mtx-1/init.c | 60 ----- arch/mips/alchemy/mtx-1/irqmap.c | 52 ---- arch/mips/alchemy/pb1000/Makefile | 8 - arch/mips/alchemy/pb1000/board_setup.c | 165 ------------- arch/mips/alchemy/pb1000/init.c | 57 ----- arch/mips/alchemy/pb1000/irqmap.c | 38 --- arch/mips/alchemy/pb1100/Makefile | 8 - arch/mips/alchemy/pb1100/board_setup.c | 109 --------- arch/mips/alchemy/pb1100/init.c | 60 ----- arch/mips/alchemy/pb1100/irqmap.c | 40 ---- arch/mips/alchemy/pb1200/Makefile | 8 - arch/mips/alchemy/pb1200/board_setup.c | 162 ------------- arch/mips/alchemy/pb1200/init.c | 58 ----- arch/mips/alchemy/pb1200/irqmap.c | 160 ------------- arch/mips/alchemy/pb1200/platform.c | 166 ------------- arch/mips/alchemy/pb1500/Makefile | 8 - arch/mips/alchemy/pb1500/board_setup.c | 119 ---------- arch/mips/alchemy/pb1500/init.c | 58 ----- arch/mips/alchemy/pb1500/irqmap.c | 46 ---- arch/mips/alchemy/pb1550/Makefile | 8 - arch/mips/alchemy/pb1550/board_setup.c | 58 ----- arch/mips/alchemy/pb1550/init.c | 58 ----- arch/mips/alchemy/pb1550/irqmap.c | 43 ---- arch/mips/alchemy/xxs1500/Makefile | 2 +- arch/mips/alchemy/xxs1500/board_setup.c | 55 ++++- arch/mips/alchemy/xxs1500/init.c | 58 ----- arch/mips/alchemy/xxs1500/irqmap.c | 49 ---- 46 files changed, 1565 insertions(+), 2169 deletions(-) delete mode 100644 arch/mips/alchemy/common/reset.c delete mode 100644 arch/mips/alchemy/db1x00/Makefile delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c delete mode 100644 arch/mips/alchemy/db1x00/init.c delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c create mode 100644 arch/mips/alchemy/evalboards/Makefile create mode 100644 arch/mips/alchemy/evalboards/common.c create mode 100644 arch/mips/alchemy/evalboards/db1x00.c create mode 100644 arch/mips/alchemy/evalboards/pb1000.c create mode 100644 arch/mips/alchemy/evalboards/pb1100.c create mode 100644 arch/mips/alchemy/evalboards/pb1200.c create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c create mode 100644 arch/mips/alchemy/evalboards/pb1500.c create mode 100644 arch/mips/alchemy/evalboards/pb1550.c delete mode 100644 arch/mips/alchemy/mtx-1/init.c delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c delete mode 100644 arch/mips/alchemy/pb1000/Makefile delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c delete mode 100644 arch/mips/alchemy/pb1000/init.c delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c delete mode 100644 arch/mips/alchemy/pb1100/Makefile delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c delete mode 100644 arch/mips/alchemy/pb1100/init.c delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c delete mode 100644 arch/mips/alchemy/pb1200/Makefile delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c delete mode 100644 arch/mips/alchemy/pb1200/init.c delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c delete mode 100644 arch/mips/alchemy/pb1200/platform.c delete mode 100644 arch/mips/alchemy/pb1500/Makefile delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c delete mode 100644 arch/mips/alchemy/pb1500/init.c delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c delete mode 100644 arch/mips/alchemy/pb1550/Makefile delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c delete mode 100644 arch/mips/alchemy/pb1550/init.c delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c delete mode 100644 arch/mips/alchemy/xxs1500/init.c delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 1/3] Alchemy: merge small board files into single files [not found] ` <cover.1226083170.git.mano@roarinelk.homelinux.net> @ 2008-11-07 18:41 ` Manuel Lauss [not found] ` <cover.1226083170.git.mano@roarinelk.homelinux.net> 0 siblings, 1 reply; 19+ messages in thread From: Manuel Lauss @ 2008-11-07 18:41 UTC (permalink / raw) To: Linux-MIPS; +Cc: Manuel Lauss Most files of the Alchemy boards are very small. Merge them. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> --- arch/mips/alchemy/db1x00/Makefile | 2 +- arch/mips/alchemy/db1x00/board_setup.c | 92 +++++++++++++++++- arch/mips/alchemy/db1x00/init.c | 62 ------------ arch/mips/alchemy/db1x00/irqmap.c | 86 ---------------- arch/mips/alchemy/mtx-1/Makefile | 2 +- arch/mips/alchemy/mtx-1/board_setup.c | 52 ++++++++++- arch/mips/alchemy/mtx-1/init.c | 60 ----------- arch/mips/alchemy/mtx-1/irqmap.c | 52 ---------- arch/mips/alchemy/pb1000/Makefile | 2 +- arch/mips/alchemy/pb1000/board_setup.c | 36 +++++++- arch/mips/alchemy/pb1000/init.c | 57 ----------- arch/mips/alchemy/pb1000/irqmap.c | 38 ------- arch/mips/alchemy/pb1100/Makefile | 2 +- arch/mips/alchemy/pb1100/board_setup.c | 42 ++++++++- arch/mips/alchemy/pb1100/init.c | 60 ----------- arch/mips/alchemy/pb1100/irqmap.c | 40 -------- arch/mips/alchemy/pb1200/Makefile | 2 +- arch/mips/alchemy/pb1200/board_setup.c | 162 ++++++++++++++++++++++++++++++- arch/mips/alchemy/pb1200/init.c | 58 ----------- arch/mips/alchemy/pb1200/irqmap.c | 160 ------------------------------ arch/mips/alchemy/pb1500/Makefile | 2 +- arch/mips/alchemy/pb1500/board_setup.c | 46 +++++++++- arch/mips/alchemy/pb1500/init.c | 58 ----------- arch/mips/alchemy/pb1500/irqmap.c | 46 --------- arch/mips/alchemy/pb1550/Makefile | 2 +- arch/mips/alchemy/pb1550/board_setup.c | 41 ++++++++- arch/mips/alchemy/pb1550/init.c | 58 ----------- arch/mips/alchemy/pb1550/irqmap.c | 43 -------- arch/mips/alchemy/xxs1500/Makefile | 2 +- arch/mips/alchemy/xxs1500/board_setup.c | 50 +++++++++- arch/mips/alchemy/xxs1500/init.c | 58 ----------- arch/mips/alchemy/xxs1500/irqmap.c | 49 --------- 32 files changed, 513 insertions(+), 1009 deletions(-) delete mode 100644 arch/mips/alchemy/db1x00/init.c delete mode 100644 arch/mips/alchemy/db1x00/irqmap.c delete mode 100644 arch/mips/alchemy/mtx-1/init.c delete mode 100644 arch/mips/alchemy/mtx-1/irqmap.c delete mode 100644 arch/mips/alchemy/pb1000/init.c delete mode 100644 arch/mips/alchemy/pb1000/irqmap.c delete mode 100644 arch/mips/alchemy/pb1100/init.c delete mode 100644 arch/mips/alchemy/pb1100/irqmap.c delete mode 100644 arch/mips/alchemy/pb1200/init.c delete mode 100644 arch/mips/alchemy/pb1200/irqmap.c delete mode 100644 arch/mips/alchemy/pb1500/init.c delete mode 100644 arch/mips/alchemy/pb1500/irqmap.c delete mode 100644 arch/mips/alchemy/pb1550/init.c delete mode 100644 arch/mips/alchemy/pb1550/irqmap.c delete mode 100644 arch/mips/alchemy/xxs1500/init.c delete mode 100644 arch/mips/alchemy/xxs1500/irqmap.c diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile index 274db3b..9924aa0 100644 --- a/arch/mips/alchemy/db1x00/Makefile +++ b/arch/mips/alchemy/db1x00/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor DBAu1xx0 boards. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c index 9e5ccbb..507ded2 100644 --- a/arch/mips/alchemy/db1x00/board_setup.c +++ b/arch/mips/alchemy/db1x00/board_setup.c @@ -1,7 +1,10 @@ /* * * BRIEF MODULE DESCRIPTION - * Alchemy Db1x00 board setup. + * Alchemy Db1x00 board support. + * + * Copyright 2003 Embedded Edge, LLC + * dan@embeddededge.com * * Copyright 2000, 2008 MontaVista Software Inc. * Author: MontaVista Software, Inc. <source@mvista.com> @@ -28,12 +31,99 @@ */ #include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> +#include <prom.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-db1x00/db1x00.h> +#ifdef CONFIG_MIPS_DB1500 +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_BOSPORUS +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_MIRAGE +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ +}; +#endif + +#ifdef CONFIG_MIPS_DB1550 +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; +#endif + + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + +#ifndef CONFIG_MIPS_MIRAGE +#ifdef CONFIG_MIPS_DB1550 + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#else + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#endif +#else + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ +#endif + +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; +const char *get_system_type(void) +{ +#ifdef CONFIG_MIPS_BOSPORUS + return "Alchemy Bosporus Gateway Reference"; +#else + return "Alchemy Db1x00"; +#endif +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { /* Hit BCSR.SW_RESET[RESET] */ diff --git a/arch/mips/alchemy/db1x00/init.c b/arch/mips/alchemy/db1x00/init.c deleted file mode 100644 index 8474135..0000000 --- a/arch/mips/alchemy/db1x00/init.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * PB1000 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ -#ifdef CONFIG_MIPS_BOSPORUS - return "Alchemy Bosporus Gateway Reference"; -#else - return "Alchemy Db1x00"; -#endif -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/db1x00/irqmap.c b/arch/mips/alchemy/db1x00/irqmap.c deleted file mode 100644 index 94c090e..0000000 --- a/arch/mips/alchemy/db1x00/irqmap.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_DB1500 -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_BOSPORUS -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_MIRAGE -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ -}; -#endif - -#ifdef CONFIG_MIPS_DB1550 -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; -#endif - - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - -#ifndef CONFIG_MIPS_MIRAGE -#ifdef CONFIG_MIPS_DB1550 - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#else - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#endif -#else - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ -#endif - -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/mtx-1/Makefile b/arch/mips/alchemy/mtx-1/Makefile index 7c67b3d..f011b2d 100644 --- a/arch/mips/alchemy/mtx-1/Makefile +++ b/arch/mips/alchemy/mtx-1/Makefile @@ -6,7 +6,7 @@ # Makefile for 4G Systems MTX-1 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o obj-y := platform.o EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c index 3f80791..2e26465 100644 --- a/arch/mips/alchemy/mtx-1/board_setup.c +++ b/arch/mips/alchemy/mtx-1/board_setup.c @@ -29,12 +29,61 @@ */ #include <linux/init.h> - +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> +#include <prom.h> extern int (*board_pci_idsel)(unsigned int devsel, int assert); int mtx1_pci_idsel(unsigned int devsel, int assert); +char irq_tab_alchemy[][5] __initdata = { + [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ + [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ + [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ + [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ + [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ + [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ + [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ + [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "MTX-1"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */ @@ -95,4 +144,3 @@ mtx1_pci_idsel(unsigned int devsel, int assert) au_sync_udelay(1); return 1; } - diff --git a/arch/mips/alchemy/mtx-1/init.c b/arch/mips/alchemy/mtx-1/init.c deleted file mode 100644 index 3bae13c..0000000 --- a/arch/mips/alchemy/mtx-1/init.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * 4G Systems MTX-1 board setup - * - * Copyright 2003, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * Bruno Randolf <bruno.randolf@4g-systems.biz> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/kernel.h> -#include <linux/init.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "MTX-1"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/mtx-1/irqmap.c b/arch/mips/alchemy/mtx-1/irqmap.c deleted file mode 100644 index f2bf029..0000000 --- a/arch/mips/alchemy/mtx-1/irqmap.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [0] = { -1, INTA, INTA, INTX, INTX }, /* IDSEL 00 - AdapterA-Slot0 (top) */ - [1] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 01 - AdapterA-Slot1 (bottom) */ - [2] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 02 - AdapterB-Slot0 (top) */ - [3] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 03 - AdapterB-Slot1 (bottom) */ - [4] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 04 - AdapterC-Slot0 (top) */ - [5] = { -1, INTB, INTA, INTX, INTX }, /* IDSEL 05 - AdapterC-Slot1 (bottom) */ - [6] = { -1, INTC, INTD, INTX, INTX }, /* IDSEL 06 - AdapterD-Slot0 (top) */ - [7] = { -1, INTD, INTC, INTX, INTX }, /* IDSEL 07 - AdapterD-Slot1 (bottom) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile index 99bbec0..4377ab3 100644 --- a/arch/mips/alchemy/pb1000/Makefile +++ b/arch/mips/alchemy/pb1000/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1000 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c index 25df167..bd0b6f4 100644 --- a/arch/mips/alchemy/pb1000/board_setup.c +++ b/arch/mips/alchemy/pb1000/board_setup.c @@ -23,11 +23,43 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1000.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +const char *get_system_type(void) +{ + return "Alchemy Pb1000"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1000/init.c b/arch/mips/alchemy/pb1000/init.c deleted file mode 100644 index 8a9c7d5..0000000 --- a/arch/mips/alchemy/pb1000/init.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Pb1000 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1000"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1000/irqmap.c b/arch/mips/alchemy/pb1000/irqmap.c deleted file mode 100644 index b3d56b0..0000000 --- a/arch/mips/alchemy/pb1000/irqmap.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile index 793e97c..627a75c 100644 --- a/arch/mips/alchemy/pb1100/Makefile +++ b/arch/mips/alchemy/pb1100/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1100 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c index c0bfd59..87da4a5 100644 --- a/arch/mips/alchemy/pb1100/board_setup.c +++ b/arch/mips/alchemy/pb1100/board_setup.c @@ -23,11 +23,49 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1100.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1100"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg3; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1100/init.c b/arch/mips/alchemy/pb1100/init.c deleted file mode 100644 index 7c67923..0000000 --- a/arch/mips/alchemy/pb1100/init.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1100 board setup - * - * Copyright 2002, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1100"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg3; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1100/irqmap.c b/arch/mips/alchemy/pb1100/irqmap.c deleted file mode 100644 index 9b7dd8b..0000000 --- a/arch/mips/alchemy/pb1100/irqmap.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xx0 IRQ map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile index d678adf..e9b9d27 100644 --- a/arch/mips/alchemy/pb1200/Makefile +++ b/arch/mips/alchemy/pb1200/Makefile @@ -2,7 +2,7 @@ # Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o obj-y += platform.o EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c index 6cb2115..a336a7a 100644 --- a/arch/mips/alchemy/pb1200/board_setup.c +++ b/arch/mips/alchemy/pb1200/board_setup.c @@ -25,14 +25,168 @@ */ #include <linux/init.h> -#include <linux/sched.h> +#include <linux/interrupt.h> +#include <asm/bootinfo.h> +#include <asm/mach-au1x00/au1000.h> + +#ifdef CONFIG_MIPS_PB1200 +#include <asm/mach-pb1x00/pb1200.h> +#endif + +#ifdef CONFIG_MIPS_DB1200 +#include <asm/mach-db1x00/db1200.h> +#define PB1200_INT_BEGIN DB1200_INT_BEGIN +#define PB1200_INT_END DB1200_INT_END +#endif #include <prom.h> -#include <au1xxx.h> -extern void _board_init_irq(void); extern void (*board_init_irq)(void); +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + /* This is external interrupt cascade */ + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +/* + * Support for External interrupts on the Pb1200 Development platform. + */ +static volatile int pb1200_cascade_en; + +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) +{ + unsigned short bisr = bcsr->int_status; + int extirq_nr = 0; + + /* Clear all the edge interrupts. This has no effect on level. */ + bcsr->int_status = bisr; + for ( ; bisr; bisr &= bisr - 1) { + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); + /* Ack and dispatch IRQ */ + do_IRQ(extirq_nr); + } + + return IRQ_RETVAL(1); +} + +inline void pb1200_enable_irq(unsigned int irq_nr) +{ + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +inline void pb1200_disable_irq(unsigned int irq_nr) +{ + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +static unsigned int pb1200_setup_cascade(void) +{ + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, + 0, "Pb1200 Cascade", &pb1200_cascade_handler); +} + +static unsigned int pb1200_startup_irq(unsigned int irq) +{ + if (++pb1200_cascade_en == 1) { + int res; + + res = pb1200_setup_cascade(); + if (res) + return res; + } + + pb1200_enable_irq(irq); + + return 0; +} + +static void pb1200_shutdown_irq(unsigned int irq) +{ + pb1200_disable_irq(irq); + if (--pb1200_cascade_en == 0) + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); +} + +static struct irq_chip external_irq_type = { +#ifdef CONFIG_MIPS_PB1200 + .name = "Pb1200 Ext", +#endif +#ifdef CONFIG_MIPS_DB1200 + .name = "Db1200 Ext", +#endif + .startup = pb1200_startup_irq, + .shutdown = pb1200_shutdown_irq, + .ack = pb1200_disable_irq, + .mask = pb1200_disable_irq, + .mask_ack = pb1200_disable_irq, + .unmask = pb1200_enable_irq, +}; + +static void pb1200_init_irq(void) +{ + unsigned int irq; + +#ifdef CONFIG_MIPS_PB1200 + /* We have a problem with CPLD rev 3. */ + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); + printk(KERN_ERR "updated to latest revision. This software will\n"); + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + panic("Game over. Your score is 0."); + } +#endif + + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { + set_irq_chip_and_handler(irq, &external_irq_type, + handle_level_irq); + pb1200_disable_irq(irq); + } + + /* + * GPIO_7 can not be hooked here, so it is hooked upon first + * request of any source attached to the cascade. + */ +} + +const char *get_system_type(void) +{ + return "Alchemy Pb1200"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x08000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} + void board_reset(void) { bcsr->resets = 0; @@ -126,7 +280,7 @@ void __init board_setup(void) #endif /* Setup Pb1200 External Interrupt Controller */ - board_init_irq = _board_init_irq; + board_init_irq = pb1200_init_irq; } int board_au1200fb_panel(void) diff --git a/arch/mips/alchemy/pb1200/init.c b/arch/mips/alchemy/pb1200/init.c deleted file mode 100644 index e9b2a0f..0000000 --- a/arch/mips/alchemy/pb1200/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * PB1200 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1200"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1200/irqmap.c b/arch/mips/alchemy/pb1200/irqmap.c deleted file mode 100644 index 2a505ad..0000000 --- a/arch/mips/alchemy/pb1200/irqmap.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> - -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_PB1200 -#include <asm/mach-pb1x00/pb1200.h> -#endif - -#ifdef CONFIG_MIPS_DB1200 -#include <asm/mach-db1x00/db1200.h> -#define PB1200_INT_BEGIN DB1200_INT_BEGIN -#define PB1200_INT_END DB1200_INT_END -#endif - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - /* This is external interrupt cascade */ - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -/* - * Support for External interrupts on the Pb1200 Development platform. - */ -static volatile int pb1200_cascade_en; - -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) -{ - unsigned short bisr = bcsr->int_status; - int extirq_nr = 0; - - /* Clear all the edge interrupts. This has no effect on level. */ - bcsr->int_status = bisr; - for ( ; bisr; bisr &= bisr - 1) { - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); - /* Ack and dispatch IRQ */ - do_IRQ(extirq_nr); - } - - return IRQ_RETVAL(1); -} - -inline void pb1200_enable_irq(unsigned int irq_nr) -{ - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -inline void pb1200_disable_irq(unsigned int irq_nr) -{ - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -static unsigned int pb1200_setup_cascade(void) -{ - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, - 0, "Pb1200 Cascade", &pb1200_cascade_handler); -} - -static unsigned int pb1200_startup_irq(unsigned int irq) -{ - if (++pb1200_cascade_en == 1) { - int res; - - res = pb1200_setup_cascade(); - if (res) - return res; - } - - pb1200_enable_irq(irq); - - return 0; -} - -static void pb1200_shutdown_irq(unsigned int irq) -{ - pb1200_disable_irq(irq); - if (--pb1200_cascade_en == 0) - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); -} - -static struct irq_chip external_irq_type = { -#ifdef CONFIG_MIPS_PB1200 - .name = "Pb1200 Ext", -#endif -#ifdef CONFIG_MIPS_DB1200 - .name = "Db1200 Ext", -#endif - .startup = pb1200_startup_irq, - .shutdown = pb1200_shutdown_irq, - .ack = pb1200_disable_irq, - .mask = pb1200_disable_irq, - .mask_ack = pb1200_disable_irq, - .unmask = pb1200_enable_irq, -}; - -void _board_init_irq(void) -{ - unsigned int irq; - -#ifdef CONFIG_MIPS_PB1200 - /* We have a problem with CPLD rev 3. */ - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); - printk(KERN_ERR "updated to latest revision. This software will\n"); - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - panic("Game over. Your score is 0."); - } -#endif - - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { - set_irq_chip_and_handler(irq, &external_irq_type, - handle_level_irq); - pb1200_disable_irq(irq); - } - - /* - * GPIO_7 can not be hooked here, so it is hooked upon first - * request of any source attached to the cascade. - */ -} diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile index 602f38d..4664d61 100644 --- a/arch/mips/alchemy/pb1500/Makefile +++ b/arch/mips/alchemy/pb1500/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1500 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c index 035771c..1be1afc 100644 --- a/arch/mips/alchemy/pb1500/board_setup.c +++ b/arch/mips/alchemy/pb1500/board_setup.c @@ -23,11 +23,53 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1500.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1500"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1500/init.c b/arch/mips/alchemy/pb1500/init.c deleted file mode 100644 index 3b6e395..0000000 --- a/arch/mips/alchemy/pb1500/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1500 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1500/irqmap.c b/arch/mips/alchemy/pb1500/irqmap.c deleted file mode 100644 index 39c4682..0000000 --- a/arch/mips/alchemy/pb1500/irqmap.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile index 7d8beca..7e6453d 100644 --- a/arch/mips/alchemy/pb1550/Makefile +++ b/arch/mips/alchemy/pb1550/Makefile @@ -5,4 +5,4 @@ # Makefile for the Alchemy Semiconductor Pb1550 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c index 0ed76b6..e844484 100644 --- a/arch/mips/alchemy/pb1550/board_setup.c +++ b/arch/mips/alchemy/pb1550/board_setup.c @@ -28,9 +28,48 @@ */ #include <linux/init.h> - +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> #include <asm/mach-pb1x00/pb1550.h> +#include <prom.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1550"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x08000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/pb1550/init.c b/arch/mips/alchemy/pb1550/init.c deleted file mode 100644 index e1055a1..0000000 --- a/arch/mips/alchemy/pb1550/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Pb1550 board setup - * - * Copyright 2001, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "Alchemy Pb1550"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/pb1550/irqmap.c b/arch/mips/alchemy/pb1550/irqmap.c deleted file mode 100644 index a02a4d1..0000000 --- a/arch/mips/alchemy/pb1550/irqmap.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xx0 IRQ map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); diff --git a/arch/mips/alchemy/xxs1500/Makefile b/arch/mips/alchemy/xxs1500/Makefile index db3c526..9ec3b54 100644 --- a/arch/mips/alchemy/xxs1500/Makefile +++ b/arch/mips/alchemy/xxs1500/Makefile @@ -5,4 +5,4 @@ # Makefile for MyCable XXS1500 board. # -lib-y := init.o board_setup.o irqmap.o +lib-y := board_setup.o diff --git a/arch/mips/alchemy/xxs1500/board_setup.c b/arch/mips/alchemy/xxs1500/board_setup.c index 4c587ac..813668f 100644 --- a/arch/mips/alchemy/xxs1500/board_setup.c +++ b/arch/mips/alchemy/xxs1500/board_setup.c @@ -23,10 +23,56 @@ * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <linux/init.h> #include <linux/delay.h> - +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> #include <asm/mach-au1x00/au1000.h> +#include <prom.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, + + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "XXS1500"; +} + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = 0x04000000; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} void board_reset(void) { diff --git a/arch/mips/alchemy/xxs1500/init.c b/arch/mips/alchemy/xxs1500/init.c deleted file mode 100644 index 7516434..0000000 --- a/arch/mips/alchemy/xxs1500/init.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * XXS1500 board setup - * - * Copyright 2003, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/kernel.h> - -#include <asm/bootinfo.h> - -#include <prom.h> - -const char *get_system_type(void) -{ - return "XXS1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} diff --git a/arch/mips/alchemy/xxs1500/irqmap.c b/arch/mips/alchemy/xxs1500/irqmap.c deleted file mode 100644 index edf06ed..0000000 --- a/arch/mips/alchemy/xxs1500/irqmap.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * BRIEF MODULE DESCRIPTION - * Au1xxx irq map table - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> - -#include <asm/mach-au1x00/au1000.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 }, - - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* CF interrupt */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); -- 1.6.0.3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
[parent not found: <cover.1226083170.git.mano@roarinelk.homelinux.net>]
* [PATCH 2/3] Alchemy: Move evalboard code to common directory [not found] ` <cover.1226083170.git.mano@roarinelk.homelinux.net> @ 2008-11-07 18:41 ` Manuel Lauss 0 siblings, 0 replies; 19+ messages in thread From: Manuel Lauss @ 2008-11-07 18:41 UTC (permalink / raw) To: Linux-MIPS; +Cc: Manuel Lauss Move all code of the Pb/Db boards to a single subdirectory and extract some common code. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> --- arch/mips/Makefile | 24 +- arch/mips/alchemy/db1x00/Makefile | 8 - arch/mips/alchemy/db1x00/board_setup.c | 198 --------------- arch/mips/alchemy/evalboards/Makefile | 17 ++ arch/mips/alchemy/evalboards/common.c | 62 +++++ arch/mips/alchemy/evalboards/db1x00.c | 178 +++++++++++++ arch/mips/alchemy/evalboards/pb1000.c | 178 +++++++++++++ arch/mips/alchemy/evalboards/pb1100.c | 124 +++++++++ arch/mips/alchemy/evalboards/pb1200.c | 293 ++++++++++++++++++++++ arch/mips/alchemy/evalboards/pb1200_platform.c | 166 +++++++++++++ arch/mips/alchemy/evalboards/pb1500.c | 140 +++++++++++ arch/mips/alchemy/evalboards/pb1550.c | 76 ++++++ arch/mips/alchemy/pb1000/Makefile | 8 - arch/mips/alchemy/pb1000/board_setup.c | 197 --------------- arch/mips/alchemy/pb1100/Makefile | 8 - arch/mips/alchemy/pb1100/board_setup.c | 147 ----------- arch/mips/alchemy/pb1200/Makefile | 8 - arch/mips/alchemy/pb1200/board_setup.c | 316 ------------------------ arch/mips/alchemy/pb1200/platform.c | 166 ------------- arch/mips/alchemy/pb1500/Makefile | 8 - arch/mips/alchemy/pb1500/board_setup.c | 161 ------------ arch/mips/alchemy/pb1550/Makefile | 8 - arch/mips/alchemy/pb1550/board_setup.c | 97 -------- 23 files changed, 1246 insertions(+), 1342 deletions(-) delete mode 100644 arch/mips/alchemy/db1x00/Makefile delete mode 100644 arch/mips/alchemy/db1x00/board_setup.c create mode 100644 arch/mips/alchemy/evalboards/Makefile create mode 100644 arch/mips/alchemy/evalboards/common.c create mode 100644 arch/mips/alchemy/evalboards/db1x00.c create mode 100644 arch/mips/alchemy/evalboards/pb1000.c create mode 100644 arch/mips/alchemy/evalboards/pb1100.c create mode 100644 arch/mips/alchemy/evalboards/pb1200.c create mode 100644 arch/mips/alchemy/evalboards/pb1200_platform.c create mode 100644 arch/mips/alchemy/evalboards/pb1500.c create mode 100644 arch/mips/alchemy/evalboards/pb1550.c delete mode 100644 arch/mips/alchemy/pb1000/Makefile delete mode 100644 arch/mips/alchemy/pb1000/board_setup.c delete mode 100644 arch/mips/alchemy/pb1100/Makefile delete mode 100644 arch/mips/alchemy/pb1100/board_setup.c delete mode 100644 arch/mips/alchemy/pb1200/Makefile delete mode 100644 arch/mips/alchemy/pb1200/board_setup.c delete mode 100644 arch/mips/alchemy/pb1200/platform.c delete mode 100644 arch/mips/alchemy/pb1500/Makefile delete mode 100644 arch/mips/alchemy/pb1500/board_setup.c delete mode 100644 arch/mips/alchemy/pb1550/Makefile delete mode 100644 arch/mips/alchemy/pb1550/board_setup.c diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 28c55f6..b31764e 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -184,84 +184,84 @@ cflags-$(CONFIG_SOC_AU1X00) += -I$(srctree)/arch/mips/include/asm/mach-au1x00 # # AMD Alchemy Pb1000 eval board # -libs-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/pb1000/ +core-$(CONFIG_MIPS_PB1000) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1000) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1000) += 0xffffffff80100000 # # AMD Alchemy Pb1100 eval board # -libs-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/pb1100/ +core-$(CONFIG_MIPS_PB1100) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1100) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1100) += 0xffffffff80100000 # # AMD Alchemy Pb1500 eval board # -libs-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/pb1500/ +core-$(CONFIG_MIPS_PB1500) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1500) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1500) += 0xffffffff80100000 # # AMD Alchemy Pb1550 eval board # -libs-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/pb1550/ +core-$(CONFIG_MIPS_PB1550) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1550) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1550) += 0xffffffff80100000 # # AMD Alchemy Pb1200 eval board # -libs-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/pb1200/ +core-$(CONFIG_MIPS_PB1200) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_PB1200) += -I$(srctree)/arch/mips/include/asm/mach-pb1x00 load-$(CONFIG_MIPS_PB1200) += 0xffffffff80100000 # # AMD Alchemy Db1000 eval board # -libs-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1000) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1000) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1000) += 0xffffffff80100000 # # AMD Alchemy Db1100 eval board # -libs-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1100) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1100) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1100) += 0xffffffff80100000 # # AMD Alchemy Db1500 eval board # -libs-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1500) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1500) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1500) += 0xffffffff80100000 # # AMD Alchemy Db1550 eval board # -libs-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_DB1550) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1550) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1550) += 0xffffffff80100000 # # AMD Alchemy Db1200 eval board # -libs-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/pb1200/ +core-$(CONFIG_MIPS_DB1200) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_DB1200) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_DB1200) += 0xffffffff80100000 # # AMD Alchemy Bosporus eval board # -libs-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_BOSPORUS) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_BOSPORUS) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_BOSPORUS) += 0xffffffff80100000 # # AMD Alchemy Mirage eval board # -libs-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/db1x00/ +core-$(CONFIG_MIPS_MIRAGE) += arch/mips/alchemy/evalboards/ cflags-$(CONFIG_MIPS_MIRAGE) += -I$(srctree)/arch/mips/include/asm/mach-db1x00 load-$(CONFIG_MIPS_MIRAGE) += 0xffffffff80100000 diff --git a/arch/mips/alchemy/db1x00/Makefile b/arch/mips/alchemy/db1x00/Makefile deleted file mode 100644 index 9924aa0..0000000 --- a/arch/mips/alchemy/db1x00/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor DBAu1xx0 boards. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/db1x00/board_setup.c b/arch/mips/alchemy/db1x00/board_setup.c deleted file mode 100644 index 507ded2..0000000 --- a/arch/mips/alchemy/db1x00/board_setup.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Db1x00 board support. - * - * Copyright 2003 Embedded Edge, LLC - * dan@embeddededge.com - * - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <prom.h> - -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-db1x00/db1x00.h> - -#ifdef CONFIG_MIPS_DB1500 -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_BOSPORUS -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; -#endif - -#ifdef CONFIG_MIPS_MIRAGE -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ - [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ - [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ -}; -#endif - -#ifdef CONFIG_MIPS_DB1550 -char irq_tab_alchemy[][5] __initdata = { - [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; -#endif - - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - -#ifndef CONFIG_MIPS_MIRAGE -#ifdef CONFIG_MIPS_DB1550 - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#else - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ - { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ - - { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ - { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ - { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ -#endif -#else - { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ -#endif - -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; - -const char *get_system_type(void) -{ -#ifdef CONFIG_MIPS_BOSPORUS - return "Alchemy Bosporus Gateway Reference"; -#else - return "Alchemy Db1x00"; -#endif -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.SW_RESET[RESET] */ - bcsr->swreset = 0x0000; -} - -void __init board_setup(void) -{ - u32 pin_func = 0; - - /* Not valid for Au1550 */ -#if defined(CONFIG_IRDA) && \ - (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) - /* Set IRFIRSEL instead of GPIO15 */ - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; - au_writel(pin_func, SYS_PINFUNC); - /* Power off until the driver is in use */ - bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; - bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; - au_sync(); -#endif - bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ - -#ifdef CONFIG_MIPS_MIRAGE - /* Enable GPIO[31:0] inputs */ - au_writel(0, SYS_PININPUTEN); - - /* GPIO[20] is output, tristate the other input primary GPIOs */ - au_writel(~(1 << 20), SYS_TRIOUTCLR); - - /* Set GPIO[210:208] instead of SSI_0 */ - pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; - - /* Set GPIO[215:211] for LEDs */ - pin_func |= 5 << 2; - - /* Set GPIO[214:213] for more LEDs */ - pin_func |= 5 << 12; - - /* Set GPIO[207:200] instead of PCMCIA/LCD */ - pin_func |= SYS_PF_LCD | SYS_PF_PC; - au_writel(pin_func, SYS_PINFUNC); - - /* - * Enable speaker amplifier. This should - * be part of the audio driver. - */ - au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); - au_writel(0x02000200, GPIO2_OUTPUT); -#endif - - au_sync(); - -#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 -#ifdef CONFIG_MIPS_BOSPORUS - printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); -#endif -#ifdef CONFIG_MIPS_MIRAGE - printk(KERN_INFO "AMD Alchemy Mirage Board\n"); -#endif -#ifdef CONFIG_MIPS_DB1550 - printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); -#endif -} diff --git a/arch/mips/alchemy/evalboards/Makefile b/arch/mips/alchemy/evalboards/Makefile new file mode 100644 index 0000000..56a67c6 --- /dev/null +++ b/arch/mips/alchemy/evalboards/Makefile @@ -0,0 +1,17 @@ +# +# Alchemy demoboards (Db1xx0/Pb1xx0/Bosporus/Mirage series). +# + +obj-y += common.o +obj-$(CONFIG_MIPS_PB1000) += pb1000.o +obj-$(CONFIG_MIPS_PB1100) += pb1100.o +obj-$(CONFIG_MIPS_PB1200) += pb1200.o pb1200_platform.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_DB1200) += pb1200.o pb1200_platform.o +obj-$(CONFIG_MIPS_DB1500) += db1x00.o +obj-$(CONFIG_MIPS_DB1550) += db1x00.o +obj-$(CONFIG_MIPS_BOSPORUS) += db1x00.o +obj-$(CONFIG_MIPS_MIRAGE) += db1x00.o diff --git a/arch/mips/alchemy/evalboards/common.c b/arch/mips/alchemy/evalboards/common.c new file mode 100644 index 0000000..d112fcf --- /dev/null +++ b/arch/mips/alchemy/evalboards/common.c @@ -0,0 +1,62 @@ +/* + * Common code used by all Alchemy evalboards. + * + * Extracted from files which had this to say: + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/bootinfo.h> +#include <asm/mach-au1x00/au1000.h> +#include <prom.h> + +#if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_DB1000) || \ + defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1100) || \ + defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_DB1500) || \ + defined(CONFIG_MIPS_BOSPORUS) || defined(CONFIG_MIPS_MIRAGE) +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x04000000 + +#else +#define ALCHEMY_BOARD_DEFAULT_MEMSIZE 0x08000000 +#endif + +void __init prom_init(void) +{ + unsigned char *memsize_str; + unsigned long memsize; + + prom_argc = (int)fw_arg0; + prom_argv = (char **)fw_arg1; + prom_envp = (char **)fw_arg2; + + prom_init_cmdline(); + memsize_str = prom_getenv("memsize"); + if (!memsize_str) + memsize = ALCHEMY_BOARD_DEFAULT_MEMSIZE; + else + strict_strtol(memsize_str, 0, &memsize); + add_memory_region(0, memsize, BOOT_MEM_RAM); +} diff --git a/arch/mips/alchemy/evalboards/db1x00.c b/arch/mips/alchemy/evalboards/db1x00.c new file mode 100644 index 0000000..868ad3e --- /dev/null +++ b/arch/mips/alchemy/evalboards/db1x00.c @@ -0,0 +1,178 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Db1x00 board support. + * + * Copyright 2003 Embedded Edge, LLC + * dan@embeddededge.com + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> + +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-db1x00/db1x00.h> + +#ifdef CONFIG_MIPS_DB1500 +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT371 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_BOSPORUS +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 11 - miniPCI */ + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - SN1741 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; +#endif + +#ifdef CONFIG_MIPS_MIRAGE +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTD, INTX, INTX, INTX }, /* IDSEL 11 - SMI VGX */ + [12] = { -1, INTX, INTX, INTC, INTX }, /* IDSEL 12 - PNX1300 */ + [13] = { -1, INTA, INTB, INTX, INTX }, /* IDSEL 13 - miniPCI */ +}; +#endif + +#ifdef CONFIG_MIPS_DB1550 +char irq_tab_alchemy[][5] __initdata = { + [11] = { -1, INTC, INTX, INTX, INTX }, /* IDSEL 11 - on-board HPT371 */ + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; +#endif + + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + +#ifndef CONFIG_MIPS_MIRAGE +#ifdef CONFIG_MIPS_DB1550 + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#else + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 Fully_Interted# */ + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 STSCHG# */ + { AU1000_GPIO_2, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 0 IRQ# */ + + { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 Fully_Interted# */ + { AU1000_GPIO_4, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 STSCHG# */ + { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card 1 IRQ# */ +#endif +#else + { AU1000_GPIO_7, INTC_INT_RISE_EDGE, 0 }, /* touchscreen pen down */ +#endif + +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +static BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR; + +const char *get_system_type(void) +{ +#ifdef CONFIG_MIPS_BOSPORUS + return "Alchemy Bosporus Gateway Reference"; +#else + return "Alchemy Db1x00"; +#endif +} + +void board_reset(void) +{ + /* Hit BCSR.SW_RESET[RESET] */ + bcsr->swreset = 0x0000; +} + +void __init board_setup(void) +{ + u32 pin_func; + + pin_func = 0; + + /* Not valid for Au1550 */ +#if defined(CONFIG_IRDA) && \ + (defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100)) + /* Set IRFIRSEL instead of GPIO15 */ + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_IRF; + au_writel(pin_func, SYS_PINFUNC); + /* Power off until the driver is in use */ + bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK; + bcsr->resets |= BCSR_RESETS_IRDA_MODE_OFF; + au_sync(); +#endif + bcsr->pcmcia = 0x0000; /* turn off PCMCIA power */ + +#ifdef CONFIG_MIPS_MIRAGE + /* Enable GPIO[31:0] inputs */ + au_writel(0, SYS_PININPUTEN); + + /* GPIO[20] is output, tristate the other input primary GPIOs */ + au_writel(~(1 << 20), SYS_TRIOUTCLR); + + /* Set GPIO[210:208] instead of SSI_0 */ + pin_func = au_readl(SYS_PINFUNC) | SYS_PF_S0; + + /* Set GPIO[215:211] for LEDs */ + pin_func |= 5 << 2; + + /* Set GPIO[214:213] for more LEDs */ + pin_func |= 5 << 12; + + /* Set GPIO[207:200] instead of PCMCIA/LCD */ + pin_func |= SYS_PF_LCD | SYS_PF_PC; + au_writel(pin_func, SYS_PINFUNC); + + /* + * Enable speaker amplifier. This should + * be part of the audio driver. + */ + au_writel(au_readl(GPIO2_DIR) | 0x200, GPIO2_DIR); + au_writel(0x02000200, GPIO2_OUTPUT); +#endif + + au_sync(); + +#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 +#ifdef CONFIG_MIPS_BOSPORUS + printk(KERN_INFO "AMD Alchemy Bosporus Board\n"); +#endif +#ifdef CONFIG_MIPS_MIRAGE + printk(KERN_INFO "AMD Alchemy Mirage Board\n"); +#endif +#ifdef CONFIG_MIPS_DB1550 + printk(KERN_INFO "AMD Alchemy Au1550/Db1550 Board\n"); +#endif +} diff --git a/arch/mips/alchemy/evalboards/pb1000.c b/arch/mips/alchemy/evalboards/pb1000.c new file mode 100644 index 0000000..e795eaf --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1000.c @@ -0,0 +1,178 @@ +/* + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1000.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + +const char *get_system_type(void) +{ + return "Alchemy Pb1000"; +} + +void board_reset(void) +{ +} + +void __init board_setup(void) +{ + u32 pin_func, static_cfg0; + u32 sys_freqctrl, sys_clksrc; + u32 prid = read_c0_prid(); + + sys_freqctrl = sys_clksrc = 0; + + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PINSTATERD); + udelay(100); + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* Zero and disable USBH/USBD clocks */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + + switch (prid & 0x000000FF) { + case 0x00: /* DA */ + case 0x01: /* HA */ + case 0x02: /* HB */ + /* CPU core freq to 48 MHz to slow it way down... */ + au_writel(4, SYS_CPUPLL); + + /* + * Setup 48 MHz FREQ2 from CPUPLL for USB Host + * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz + */ + sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* CPU core freq to 384 MHz */ + au_writel(0x20, SYS_CPUPLL); + + printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); + break; + + default: /* HC and newer */ + /* FREQ2 = aux / 2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | + SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + break; + } + + /* + * Route 48 MHz FREQ2 into USB Host and/or Device + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + /* Configure pins GPIO[14:9] as GPIO */ + pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); + + /* 2nd USB port is USB host */ + pin_func |= SYS_PF_USB; + + au_writel(pin_func, SYS_PINFUNC); + au_writel(0x2800, SYS_TRIOUTCLR); + au_writel(0x0030, SYS_OUTPUTCLR); +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + + /* Make GPIO 15 an input (for interrupt line) */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; + /* We don't need I2S, so make it available for GPIO[31:29] */ + pin_func |= SYS_PF_I2S; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0x8000, SYS_TRIOUTCLR); + + static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; + au_writel(static_cfg0, MEM_STCFG0); + + /* configure RCE2* for LCD */ + au_writel(0x00000004, MEM_STCFG2); + + /* MEM_STTIME2 */ + au_writel(0x09000000, MEM_STTIME2); + + /* Set 32-bit base address decoding for RCE2* */ + au_writel(0x10003ff0, MEM_STADDR2); + + /* + * PCI CPLD setup + * Expand CE0 to cover PCI + */ + au_writel(0x11803e40, MEM_STADDR1); + + /* Burst visibility on */ + au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); + + au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ + au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ + + /* Setup the static bus controller */ + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ + + /* + * Enable Au1000 BCLK switching - note: sed1356 must not use + * its BCLK (Au1000 LCLK) for any timings + */ + switch (prid & 0x000000FF) { + case 0x00: /* DA */ + case 0x01: /* HA */ + case 0x02: /* HB */ + break; + default: /* HC and newer */ + /* + * Enable sys bus clock divider when IDLE state or no bus + * activity. + */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + break; + } +} diff --git a/arch/mips/alchemy/evalboards/pb1100.c b/arch/mips/alchemy/evalboards/pb1100.c new file mode 100644 index 0000000..dbd9605 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1100.c @@ -0,0 +1,124 @@ +/* + * Copyright 2002, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1100.h> + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ + { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ + { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ + { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1100"; +} + +void board_reset(void) +{ + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ + au_writel(0x00000000, PB1100_RST_VDDI); +} + +void __init board_setup(void) +{ + volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; + + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PININPUTEN); + udelay(100); + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + { + u32 pin_func, sys_freqctrl, sys_clksrc; + + /* Configure pins GPIO[14:9] as GPIO */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; + + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* Zero and disable USBH/USBD/IrDA clock */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); + + /* FREQ2 = aux / 2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | + SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* + * Route 48 MHz FREQ2 into USBH/USBD/IrDA + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + /* Setup the static bus controller */ + au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ + au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ + au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ + + /* + * Get USB Functionality pin state (device vs host drive pins). + */ + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; + /* 2nd USB port is USB host. */ + pin_func |= SYS_PF_USB; + au_writel(pin_func, SYS_PINFUNC); + } +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + + /* Enable sys bus clock divider when IDLE state or no bus activity. */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + + /* Enable the RTC if not already enabled. */ + if (!(readb(base + 0x28) & 0x20)) { + writeb(readb(base + 0x28) | 0x20, base + 0x28); + au_sync(); + } + /* Put the clock in BCD mode. */ + if (readb(base + 0x2C) & 0x4) { /* reg B */ + writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); + au_sync(); + } +} diff --git a/arch/mips/alchemy/evalboards/pb1200.c b/arch/mips/alchemy/evalboards/pb1200.c new file mode 100644 index 0000000..4a24874 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1200.c @@ -0,0 +1,293 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Pb1200/Db1200 board setup. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/interrupt.h> +#include <asm/mach-au1x00/au1000.h> + +#ifdef CONFIG_MIPS_PB1200 +#include <asm/mach-pb1x00/pb1200.h> +#endif + +#ifdef CONFIG_MIPS_DB1200 +#include <asm/mach-db1x00/db1200.h> +#define PB1200_INT_BEGIN DB1200_INT_BEGIN +#define PB1200_INT_END DB1200_INT_END +#endif + +#include <prom.h> + +extern void (*board_init_irq)(void); + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + /* This is external interrupt cascade */ + { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +/* + * Support for External interrupts on the Pb1200 Development platform. + */ +static volatile int pb1200_cascade_en; + +irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) +{ + unsigned short bisr = bcsr->int_status; + int extirq_nr = 0; + + /* Clear all the edge interrupts. This has no effect on level. */ + bcsr->int_status = bisr; + for ( ; bisr; bisr &= bisr - 1) { + extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); + /* Ack and dispatch IRQ */ + do_IRQ(extirq_nr); + } + + return IRQ_RETVAL(1); +} + +inline void pb1200_enable_irq(unsigned int irq_nr) +{ + bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +inline void pb1200_disable_irq(unsigned int irq_nr) +{ + bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); + bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); +} + +static unsigned int pb1200_setup_cascade(void) +{ + return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, + 0, "Pb1200 Cascade", &pb1200_cascade_handler); +} + +static unsigned int pb1200_startup_irq(unsigned int irq) +{ + if (++pb1200_cascade_en == 1) { + int res; + + res = pb1200_setup_cascade(); + if (res) + return res; + } + + pb1200_enable_irq(irq); + + return 0; +} + +static void pb1200_shutdown_irq(unsigned int irq) +{ + pb1200_disable_irq(irq); + if (--pb1200_cascade_en == 0) + free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); +} + +static struct irq_chip external_irq_type = { +#ifdef CONFIG_MIPS_PB1200 + .name = "Pb1200 Ext", +#endif +#ifdef CONFIG_MIPS_DB1200 + .name = "Db1200 Ext", +#endif + .startup = pb1200_startup_irq, + .shutdown = pb1200_shutdown_irq, + .ack = pb1200_disable_irq, + .mask = pb1200_disable_irq, + .mask_ack = pb1200_disable_irq, + .unmask = pb1200_enable_irq, +}; + +static void pb1200_init_irq(void) +{ + unsigned int irq; + +#ifdef CONFIG_MIPS_PB1200 + /* We have a problem with CPLD rev 3. */ + if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); + printk(KERN_ERR "updated to latest revision. This software will\n"); + printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + printk(KERN_ERR "WARNING!!!\n"); + panic("Game over. Your score is 0."); + } +#endif + + for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { + set_irq_chip_and_handler(irq, &external_irq_type, + handle_level_irq); + pb1200_disable_irq(irq); + } + + /* + * GPIO_7 can not be hooked here, so it is hooked upon first + * request of any source attached to the cascade. + */ +} + +const char *get_system_type(void) +{ + return "Alchemy Pb1200"; +} + +void board_reset(void) +{ + bcsr->resets = 0; + bcsr->system = 0; +} + +void __init board_setup(void) +{ +#ifdef CONFIG_FB_AU1200 + char *argptr; + + argptr = prom_getcmdline(); + strcat(argptr, " video=au1200fb:panel:bs"); +#endif + +#if 0 + { + u32 pin_func; + + /* + * Enable PSC1 SYNC for AC97. Normaly done in audio driver, + * but it is board specific code, so put it here. + */ + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ + au_sync(); + } +#endif + +#if defined(CONFIG_I2C_AU1550) + { + u32 freq0, clksrc; + u32 pin_func; + + /* Select SMBus in CPLD */ + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; + + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); + /* Set GPIOs correctly */ + pin_func |= 2 << 17; + au_writel(pin_func, SYS_PINFUNC); + au_sync(); + + /* The I2C driver depends on 50 MHz clock */ + freq0 = au_readl(SYS_FREQCTRL0); + au_sync(); + freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); + freq0 |= 3 << SYS_FC_FRDIV1_BIT; + /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ + au_writel(freq0, SYS_FREQCTRL0); + au_sync(); + freq0 |= SYS_FC_FE1; + au_writel(freq0, SYS_FREQCTRL0); + au_sync(); + + clksrc = au_readl(SYS_CLKSRC); + au_sync(); + clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); + /* Bit 22 is EXTCLK0 for PSC0 */ + clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; + au_writel(clksrc, SYS_CLKSRC); + au_sync(); + } +#endif + + /* + * The Pb1200 development board uses external MUX for PSC0 to + * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI + */ +#ifdef CONFIG_I2C_AU1550 + bcsr->resets &= ~BCSR_RESETS_PCS0MUX; +#endif + au_sync(); + +#ifdef CONFIG_MIPS_PB1200 + printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); +#endif +#ifdef CONFIG_MIPS_DB1200 + printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); +#endif + + /* Setup Pb1200 External Interrupt Controller */ + board_init_irq = pb1200_init_irq; +} + +int board_au1200fb_panel(void) +{ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + int p; + + p = bcsr->switches; + p >>= 8; + p &= 0x0F; + return p; +} + +int board_au1200fb_panel_init(void) +{ + /* Apply power */ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + + bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; + /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ + return 0; +} + +int board_au1200fb_panel_shutdown(void) +{ + /* Remove power */ + BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; + + bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | + BCSR_BOARD_LCDBL); + /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ + return 0; +} diff --git a/arch/mips/alchemy/evalboards/pb1200_platform.c b/arch/mips/alchemy/evalboards/pb1200_platform.c new file mode 100644 index 0000000..9530329 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1200_platform.c @@ -0,0 +1,166 @@ +/* + * Pb1200/DBAu1200 board platform device registration + * + * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <linux/dma-mapping.h> +#include <linux/init.h> +#include <linux/leds.h> +#include <linux/platform_device.h> + +#include <asm/mach-au1x00/au1xxx.h> +#include <asm/mach-au1x00/au1100_mmc.h> + +static int mmc_activity; + +static void pb1200mmc0_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD0PWR; + else + bcsr->board &= ~BCSR_BOARD_SD0PWR; + + au_sync_delay(1); +} + +static int pb1200mmc0_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; +} + +static int pb1200mmc0_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; +} + +static void pb1200_mmcled_set(struct led_classdev *led, + enum led_brightness brightness) +{ + if (brightness != LED_OFF) { + if (++mmc_activity == 1) + bcsr->disk_leds &= ~(1 << 8); + } else { + if (--mmc_activity == 0) + bcsr->disk_leds |= (1 << 8); + } +} + +static struct led_classdev pb1200mmc_led = { + .brightness_set = pb1200_mmcled_set, +}; + +#ifndef CONFIG_MIPS_DB1200 +static void pb1200mmc1_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD1PWR; + else + bcsr->board &= ~BCSR_BOARD_SD1PWR; + + au_sync_delay(1); +} + +static int pb1200mmc1_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; +} + +static int pb1200mmc1_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; +} +#endif + +const struct au1xmmc_platform_data au1xmmc_platdata[2] = { + [0] = { + .set_power = pb1200mmc0_set_power, + .card_inserted = pb1200mmc0_card_inserted, + .card_readonly = pb1200mmc0_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#ifndef CONFIG_MIPS_DB1200 + [1] = { + .set_power = pb1200mmc1_set_power, + .card_inserted = pb1200mmc1_card_inserted, + .card_readonly = pb1200mmc1_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#endif +}; + +static struct resource ide_resources[] = { + [0] = { + .start = IDE_PHYS_ADDR, + .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = IDE_INT, + .end = IDE_INT, + .flags = IORESOURCE_IRQ + } +}; + +static u64 ide_dmamask = DMA_32BIT_MASK; + +static struct platform_device ide_device = { + .name = "au1200-ide", + .id = 0, + .dev = { + .dma_mask = &ide_dmamask, + .coherent_dma_mask = DMA_32BIT_MASK, + }, + .num_resources = ARRAY_SIZE(ide_resources), + .resource = ide_resources +}; + +static struct resource smc91c111_resources[] = { + [0] = { + .name = "smc91x-regs", + .start = SMC91C111_PHYS_ADDR, + .end = SMC91C111_PHYS_ADDR + 0xf, + .flags = IORESOURCE_MEM + }, + [1] = { + .start = SMC91C111_INT, + .end = SMC91C111_INT, + .flags = IORESOURCE_IRQ + }, +}; + +static struct platform_device smc91c111_device = { + .name = "smc91x", + .id = -1, + .num_resources = ARRAY_SIZE(smc91c111_resources), + .resource = smc91c111_resources +}; + +static struct platform_device *board_platform_devices[] __initdata = { + &ide_device, + &smc91c111_device +}; + +static int __init board_register_devices(void) +{ + return platform_add_devices(board_platform_devices, + ARRAY_SIZE(board_platform_devices)); +} + +arch_initcall(board_register_devices); diff --git a/arch/mips/alchemy/evalboards/pb1500.c b/arch/mips/alchemy/evalboards/pb1500.c new file mode 100644 index 0000000..72c5222 --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1500.c @@ -0,0 +1,140 @@ +/* + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/delay.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1500.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, + { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, + { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1500"; +} + +void board_reset(void) +{ + /* Hit BCSR.RST_VDDI[SOFT_RESET] */ + au_writel(0x00000000, PB1500_RST_VDDI); +} + +void __init board_setup(void) +{ + u32 pin_func; + u32 sys_freqctrl, sys_clksrc; + + sys_clksrc = sys_freqctrl = pin_func = 0; + /* Set AUX clock to 12 MHz * 8 = 96 MHz */ + au_writel(8, SYS_AUXPLL); + au_writel(0, SYS_PINSTATERD); + udelay(100); + +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) + + /* GPIO201 is input for PCMCIA card detect */ + /* GPIO203 is input for PCMCIA interrupt request */ + au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); + + /* Zero and disable FREQ2 */ + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* zero and disable USBH/USBD clocks */ + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + au_writel(sys_clksrc, SYS_CLKSRC); + + sys_freqctrl = au_readl(SYS_FREQCTRL0); + sys_freqctrl &= ~0xFFF00000; + + sys_clksrc = au_readl(SYS_CLKSRC); + sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | + SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); + + /* FREQ2 = aux/2 = 48 MHz */ + sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; + au_writel(sys_freqctrl, SYS_FREQCTRL0); + + /* + * Route 48MHz FREQ2 into USB Host and/or Device + */ + sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; + au_writel(sys_clksrc, SYS_CLKSRC); + + pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; + /* 2nd USB port is USB host */ + pin_func |= SYS_PF_USB; + au_writel(pin_func, SYS_PINFUNC); +#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ + +#ifdef CONFIG_PCI + /* Setup PCI bus controller */ + au_writel(0, Au1500_PCI_CMEM); + au_writel(0x00003fff, Au1500_CFG_BASE); +#if defined(__MIPSEB__) + au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); +#else + au_writel(0xf, Au1500_PCI_CFG); +#endif + au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); + au_writel(0, Au1500_PCI_MWBASE_REV_CCL); + au_writel(0x02a00356, Au1500_PCI_STATCMD); + au_writel(0x00003c04, Au1500_PCI_HDRTYPE); + au_writel(0x00000008, Au1500_PCI_MBAR); + au_sync(); +#endif + + /* Enable sys bus clock divider when IDLE state or no bus activity. */ + au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); + + /* Enable the RTC if not already enabled */ + if (!(au_readl(0xac000028) & 0x20)) { + printk(KERN_INFO "enabling clock ...\n"); + au_writel((au_readl(0xac000028) | 0x20), 0xac000028); + } + /* Put the clock in BCD mode */ + if (au_readl(0xac00002c) & 0x4) { /* reg B */ + au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); + au_sync(); + } +} diff --git a/arch/mips/alchemy/evalboards/pb1550.c b/arch/mips/alchemy/evalboards/pb1550.c new file mode 100644 index 0000000..15bcf6b --- /dev/null +++ b/arch/mips/alchemy/evalboards/pb1550.c @@ -0,0 +1,76 @@ +/* + * + * BRIEF MODULE DESCRIPTION + * Alchemy Pb1550 board setup. + * + * Copyright 2000, 2008 MontaVista Software Inc. + * Author: MontaVista Software, Inc. <source@mvista.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <linux/init.h> +#include <linux/kernel.h> +#include <asm/mach-au1x00/au1000.h> +#include <asm/mach-pb1x00/pb1550.h> + +char irq_tab_alchemy[][5] __initdata = { + [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ + [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ +}; + +struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { + { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, + { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, +}; + +int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); + + +const char *get_system_type(void) +{ + return "Alchemy Pb1550"; +} + +void board_reset(void) +{ + /* Hit BCSR.SYSTEM[RESET] */ + au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); +} + +void __init board_setup(void) +{ + u32 pin_func; + + /* + * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, + * but it is board specific code, so put it here. + */ + pin_func = au_readl(SYS_PINFUNC); + au_sync(); + pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; + au_writel(pin_func, SYS_PINFUNC); + + au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ + au_sync(); + + printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); +} diff --git a/arch/mips/alchemy/pb1000/Makefile b/arch/mips/alchemy/pb1000/Makefile deleted file mode 100644 index 4377ab3..0000000 --- a/arch/mips/alchemy/pb1000/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1000 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1000/board_setup.c b/arch/mips/alchemy/pb1000/board_setup.c deleted file mode 100644 index bd0b6f4..0000000 --- a/arch/mips/alchemy/pb1000/board_setup.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1000.h> -#include <prom.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -const char *get_system_type(void) -{ - return "Alchemy Pb1000"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ -} - -void __init board_setup(void) -{ - u32 pin_func, static_cfg0; - u32 sys_freqctrl, sys_clksrc; - u32 prid = read_c0_prid(); - - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PINSTATERD); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* Zero and disable USBH/USBD clocks */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - - switch (prid & 0x000000FF) { - case 0x00: /* DA */ - case 0x01: /* HA */ - case 0x02: /* HB */ - /* CPU core freq to 48 MHz to slow it way down... */ - au_writel(4, SYS_CPUPLL); - - /* - * Setup 48 MHz FREQ2 from CPUPLL for USB Host - * FRDIV2 = 3 -> div by 8 of 384 MHz -> 48 MHz - */ - sys_freqctrl |= (3 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* CPU core freq to 384 MHz */ - au_writel(0x20, SYS_CPUPLL); - - printk(KERN_INFO "Au1000: 48 MHz OHCI workaround enabled\n"); - break; - - default: /* HC and newer */ - /* FREQ2 = aux / 2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | - SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - break; - } - - /* - * Route 48 MHz FREQ2 into USB Host and/or Device - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - /* Configure pins GPIO[14:9] as GPIO */ - pin_func = au_readl(SYS_PINFUNC) & ~(SYS_PF_UR3 | SYS_PF_USB); - - /* 2nd USB port is USB host */ - pin_func |= SYS_PF_USB; - - au_writel(pin_func, SYS_PINFUNC); - au_writel(0x2800, SYS_TRIOUTCLR); - au_writel(0x0030, SYS_OUTPUTCLR); -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - - /* Make GPIO 15 an input (for interrupt line) */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_IRF; - /* We don't need I2S, so make it available for GPIO[31:29] */ - pin_func |= SYS_PF_I2S; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0x8000, SYS_TRIOUTCLR); - - static_cfg0 = au_readl(MEM_STCFG0) & ~0xc00; - au_writel(static_cfg0, MEM_STCFG0); - - /* configure RCE2* for LCD */ - au_writel(0x00000004, MEM_STCFG2); - - /* MEM_STTIME2 */ - au_writel(0x09000000, MEM_STTIME2); - - /* Set 32-bit base address decoding for RCE2* */ - au_writel(0x10003ff0, MEM_STADDR2); - - /* - * PCI CPLD setup - * Expand CE0 to cover PCI - */ - au_writel(0x11803e40, MEM_STADDR1); - - /* Burst visibility on */ - au_writel(au_readl(MEM_STCFG0) | 0x1000, MEM_STCFG0); - - au_writel(0x83, MEM_STCFG1); /* ewait enabled, flash timing */ - au_writel(0x33030a10, MEM_STTIME1); /* slower timing for FPGA */ - - /* Setup the static bus controller */ - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ - - /* - * Enable Au1000 BCLK switching - note: sed1356 must not use - * its BCLK (Au1000 LCLK) for any timings - */ - switch (prid & 0x000000FF) { - case 0x00: /* DA */ - case 0x01: /* HA */ - case 0x02: /* HB */ - break; - default: /* HC and newer */ - /* - * Enable sys bus clock divider when IDLE state or no bus - * activity. - */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - break; - } -} diff --git a/arch/mips/alchemy/pb1100/Makefile b/arch/mips/alchemy/pb1100/Makefile deleted file mode 100644 index 627a75c..0000000 --- a/arch/mips/alchemy/pb1100/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2001, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1100 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1100/board_setup.c b/arch/mips/alchemy/pb1100/board_setup.c deleted file mode 100644 index 87da4a5..0000000 --- a/arch/mips/alchemy/pb1100/board_setup.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright 2002, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1100.h> -#include <prom.h> - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card Fully_Inserted# */ - { AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card STSCHG# */ - { AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, /* PCMCIA Card IRQ# */ - { AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, /* DC_IRQ# */ -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1100"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg3; - - prom_init_cmdline(); - - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ - au_writel(0x00000000, PB1100_RST_VDDI); -} - -void __init board_setup(void) -{ - volatile void __iomem *base = (volatile void __iomem *)0xac000000UL; - - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PININPUTEN); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - { - u32 pin_func, sys_freqctrl, sys_clksrc; - - /* Configure pins GPIO[14:9] as GPIO */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_UR3; - - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* Zero and disable USBH/USBD/IrDA clock */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CIR | SYS_CS_DIR | SYS_CS_MIR_MASK); - - /* FREQ2 = aux / 2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | - SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* - * Route 48 MHz FREQ2 into USBH/USBD/IrDA - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MIR_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - /* Setup the static bus controller */ - au_writel(0x00000002, MEM_STCFG3); /* type = PCMCIA */ - au_writel(0x280E3D07, MEM_STTIME3); /* 250ns cycle time */ - au_writel(0x10000000, MEM_STADDR3); /* any PCMCIA select */ - - /* - * Get USB Functionality pin state (device vs host drive pins). - */ - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; - /* 2nd USB port is USB host. */ - pin_func |= SYS_PF_USB; - au_writel(pin_func, SYS_PINFUNC); - } -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - - /* Enable sys bus clock divider when IDLE state or no bus activity. */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - - /* Enable the RTC if not already enabled. */ - if (!(readb(base + 0x28) & 0x20)) { - writeb(readb(base + 0x28) | 0x20, base + 0x28); - au_sync(); - } - /* Put the clock in BCD mode. */ - if (readb(base + 0x2C) & 0x4) { /* reg B */ - writeb(readb(base + 0x2c) & ~0x4, base + 0x2c); - au_sync(); - } -} diff --git a/arch/mips/alchemy/pb1200/Makefile b/arch/mips/alchemy/pb1200/Makefile deleted file mode 100644 index e9b9d27..0000000 --- a/arch/mips/alchemy/pb1200/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Makefile for the Alchemy Semiconductor Pb1200/DBAu1200 boards. -# - -lib-y := board_setup.o -obj-y += platform.o - -EXTRA_CFLAGS += -Werror diff --git a/arch/mips/alchemy/pb1200/board_setup.c b/arch/mips/alchemy/pb1200/board_setup.c deleted file mode 100644 index a336a7a..0000000 --- a/arch/mips/alchemy/pb1200/board_setup.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Pb1200/Db1200 board setup. - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> - -#ifdef CONFIG_MIPS_PB1200 -#include <asm/mach-pb1x00/pb1200.h> -#endif - -#ifdef CONFIG_MIPS_DB1200 -#include <asm/mach-db1x00/db1200.h> -#define PB1200_INT_BEGIN DB1200_INT_BEGIN -#define PB1200_INT_END DB1200_INT_END -#endif - -#include <prom.h> - -extern void (*board_init_irq)(void); - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - /* This is external interrupt cascade */ - { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - -/* - * Support for External interrupts on the Pb1200 Development platform. - */ -static volatile int pb1200_cascade_en; - -irqreturn_t pb1200_cascade_handler(int irq, void *dev_id) -{ - unsigned short bisr = bcsr->int_status; - int extirq_nr = 0; - - /* Clear all the edge interrupts. This has no effect on level. */ - bcsr->int_status = bisr; - for ( ; bisr; bisr &= bisr - 1) { - extirq_nr = PB1200_INT_BEGIN + __ffs(bisr); - /* Ack and dispatch IRQ */ - do_IRQ(extirq_nr); - } - - return IRQ_RETVAL(1); -} - -inline void pb1200_enable_irq(unsigned int irq_nr) -{ - bcsr->intset_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intset = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -inline void pb1200_disable_irq(unsigned int irq_nr) -{ - bcsr->intclr_mask = 1 << (irq_nr - PB1200_INT_BEGIN); - bcsr->intclr = 1 << (irq_nr - PB1200_INT_BEGIN); -} - -static unsigned int pb1200_setup_cascade(void) -{ - return request_irq(AU1000_GPIO_7, &pb1200_cascade_handler, - 0, "Pb1200 Cascade", &pb1200_cascade_handler); -} - -static unsigned int pb1200_startup_irq(unsigned int irq) -{ - if (++pb1200_cascade_en == 1) { - int res; - - res = pb1200_setup_cascade(); - if (res) - return res; - } - - pb1200_enable_irq(irq); - - return 0; -} - -static void pb1200_shutdown_irq(unsigned int irq) -{ - pb1200_disable_irq(irq); - if (--pb1200_cascade_en == 0) - free_irq(AU1000_GPIO_7, &pb1200_cascade_handler); -} - -static struct irq_chip external_irq_type = { -#ifdef CONFIG_MIPS_PB1200 - .name = "Pb1200 Ext", -#endif -#ifdef CONFIG_MIPS_DB1200 - .name = "Db1200 Ext", -#endif - .startup = pb1200_startup_irq, - .shutdown = pb1200_shutdown_irq, - .ack = pb1200_disable_irq, - .mask = pb1200_disable_irq, - .mask_ack = pb1200_disable_irq, - .unmask = pb1200_enable_irq, -}; - -static void pb1200_init_irq(void) -{ - unsigned int irq; - -#ifdef CONFIG_MIPS_PB1200 - /* We have a problem with CPLD rev 3. */ - if (((bcsr->whoami & BCSR_WHOAMI_CPLD) >> 4) <= 3) { - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "Pb1200 must be at CPLD rev 4. Please have Pb1200\n"); - printk(KERN_ERR "updated to latest revision. This software will\n"); - printk(KERN_ERR "not work on anything less than CPLD rev 4.\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - printk(KERN_ERR "WARNING!!!\n"); - panic("Game over. Your score is 0."); - } -#endif - - for (irq = PB1200_INT_BEGIN; irq <= PB1200_INT_END; irq++) { - set_irq_chip_and_handler(irq, &external_irq_type, - handle_level_irq); - pb1200_disable_irq(irq); - } - - /* - * GPIO_7 can not be hooked here, so it is hooked upon first - * request of any source attached to the cascade. - */ -} - -const char *get_system_type(void) -{ - return "Alchemy Pb1200"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - bcsr->resets = 0; - bcsr->system = 0; -} - -void __init board_setup(void) -{ - char *argptr = NULL; - -#if 0 - { - u32 pin_func; - - /* - * Enable PSC1 SYNC for AC97. Normaly done in audio driver, - * but it is board specific code, so put it here. - */ - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ - au_sync(); - } -#endif - -#if defined(CONFIG_I2C_AU1550) - { - u32 freq0, clksrc; - u32 pin_func; - - /* Select SMBus in CPLD */ - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; - - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func &= ~(SYS_PINFUNC_P0A | SYS_PINFUNC_P0B); - /* Set GPIOs correctly */ - pin_func |= 2 << 17; - au_writel(pin_func, SYS_PINFUNC); - au_sync(); - - /* The I2C driver depends on 50 MHz clock */ - freq0 = au_readl(SYS_FREQCTRL0); - au_sync(); - freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1); - freq0 |= 3 << SYS_FC_FRDIV1_BIT; - /* 396 MHz / (3 + 1) * 2 == 49.5 MHz */ - au_writel(freq0, SYS_FREQCTRL0); - au_sync(); - freq0 |= SYS_FC_FE1; - au_writel(freq0, SYS_FREQCTRL0); - au_sync(); - - clksrc = au_readl(SYS_CLKSRC); - au_sync(); - clksrc &= ~(SYS_CS_CE0 | SYS_CS_DE0 | SYS_CS_ME0_MASK); - /* Bit 22 is EXTCLK0 for PSC0 */ - clksrc |= SYS_CS_MUX_FQ1 << SYS_CS_ME0_BIT; - au_writel(clksrc, SYS_CLKSRC); - au_sync(); - } -#endif - -#ifdef CONFIG_FB_AU1200 - argptr = prom_getcmdline(); -#ifdef CONFIG_MIPS_PB1200 - strcat(argptr, " video=au1200fb:panel:bs"); -#endif -#ifdef CONFIG_MIPS_DB1200 - strcat(argptr, " video=au1200fb:panel:bs"); -#endif -#endif - - /* - * The Pb1200 development board uses external MUX for PSC0 to - * support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI - */ -#ifdef CONFIG_I2C_AU1550 - bcsr->resets &= ~BCSR_RESETS_PCS0MUX; -#endif - au_sync(); - -#ifdef CONFIG_MIPS_PB1200 - printk(KERN_INFO "AMD Alchemy Pb1200 Board\n"); -#endif -#ifdef CONFIG_MIPS_DB1200 - printk(KERN_INFO "AMD Alchemy Db1200 Board\n"); -#endif - - /* Setup Pb1200 External Interrupt Controller */ - board_init_irq = pb1200_init_irq; -} - -int board_au1200fb_panel(void) -{ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - int p; - - p = bcsr->switches; - p >>= 8; - p &= 0x0F; - return p; -} - -int board_au1200fb_panel_init(void) -{ - /* Apply power */ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - - bcsr->board |= BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL; - /* printk(KERN_DEBUG "board_au1200fb_panel_init()\n"); */ - return 0; -} - -int board_au1200fb_panel_shutdown(void) -{ - /* Remove power */ - BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; - - bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | - BCSR_BOARD_LCDBL); - /* printk(KERN_DEBUG "board_au1200fb_panel_shutdown()\n"); */ - return 0; -} diff --git a/arch/mips/alchemy/pb1200/platform.c b/arch/mips/alchemy/pb1200/platform.c deleted file mode 100644 index 9530329..0000000 --- a/arch/mips/alchemy/pb1200/platform.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Pb1200/DBAu1200 board platform device registration - * - * Copyright (C) 2008 MontaVista Software Inc. <source@mvista.com> - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <linux/dma-mapping.h> -#include <linux/init.h> -#include <linux/leds.h> -#include <linux/platform_device.h> - -#include <asm/mach-au1x00/au1xxx.h> -#include <asm/mach-au1x00/au1100_mmc.h> - -static int mmc_activity; - -static void pb1200mmc0_set_power(void *mmc_host, int state) -{ - if (state) - bcsr->board |= BCSR_BOARD_SD0PWR; - else - bcsr->board &= ~BCSR_BOARD_SD0PWR; - - au_sync_delay(1); -} - -static int pb1200mmc0_card_readonly(void *mmc_host) -{ - return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; -} - -static int pb1200mmc0_card_inserted(void *mmc_host) -{ - return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; -} - -static void pb1200_mmcled_set(struct led_classdev *led, - enum led_brightness brightness) -{ - if (brightness != LED_OFF) { - if (++mmc_activity == 1) - bcsr->disk_leds &= ~(1 << 8); - } else { - if (--mmc_activity == 0) - bcsr->disk_leds |= (1 << 8); - } -} - -static struct led_classdev pb1200mmc_led = { - .brightness_set = pb1200_mmcled_set, -}; - -#ifndef CONFIG_MIPS_DB1200 -static void pb1200mmc1_set_power(void *mmc_host, int state) -{ - if (state) - bcsr->board |= BCSR_BOARD_SD1PWR; - else - bcsr->board &= ~BCSR_BOARD_SD1PWR; - - au_sync_delay(1); -} - -static int pb1200mmc1_card_readonly(void *mmc_host) -{ - return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; -} - -static int pb1200mmc1_card_inserted(void *mmc_host) -{ - return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; -} -#endif - -const struct au1xmmc_platform_data au1xmmc_platdata[2] = { - [0] = { - .set_power = pb1200mmc0_set_power, - .card_inserted = pb1200mmc0_card_inserted, - .card_readonly = pb1200mmc0_card_readonly, - .cd_setup = NULL, /* use poll-timer in driver */ - .led = &pb1200mmc_led, - }, -#ifndef CONFIG_MIPS_DB1200 - [1] = { - .set_power = pb1200mmc1_set_power, - .card_inserted = pb1200mmc1_card_inserted, - .card_readonly = pb1200mmc1_card_readonly, - .cd_setup = NULL, /* use poll-timer in driver */ - .led = &pb1200mmc_led, - }, -#endif -}; - -static struct resource ide_resources[] = { - [0] = { - .start = IDE_PHYS_ADDR, - .end = IDE_PHYS_ADDR + IDE_PHYS_LEN - 1, - .flags = IORESOURCE_MEM - }, - [1] = { - .start = IDE_INT, - .end = IDE_INT, - .flags = IORESOURCE_IRQ - } -}; - -static u64 ide_dmamask = DMA_32BIT_MASK; - -static struct platform_device ide_device = { - .name = "au1200-ide", - .id = 0, - .dev = { - .dma_mask = &ide_dmamask, - .coherent_dma_mask = DMA_32BIT_MASK, - }, - .num_resources = ARRAY_SIZE(ide_resources), - .resource = ide_resources -}; - -static struct resource smc91c111_resources[] = { - [0] = { - .name = "smc91x-regs", - .start = SMC91C111_PHYS_ADDR, - .end = SMC91C111_PHYS_ADDR + 0xf, - .flags = IORESOURCE_MEM - }, - [1] = { - .start = SMC91C111_INT, - .end = SMC91C111_INT, - .flags = IORESOURCE_IRQ - }, -}; - -static struct platform_device smc91c111_device = { - .name = "smc91x", - .id = -1, - .num_resources = ARRAY_SIZE(smc91c111_resources), - .resource = smc91c111_resources -}; - -static struct platform_device *board_platform_devices[] __initdata = { - &ide_device, - &smc91c111_device -}; - -static int __init board_register_devices(void) -{ - return platform_add_devices(board_platform_devices, - ARRAY_SIZE(board_platform_devices)); -} - -arch_initcall(board_register_devices); diff --git a/arch/mips/alchemy/pb1500/Makefile b/arch/mips/alchemy/pb1500/Makefile deleted file mode 100644 index 4664d61..0000000 --- a/arch/mips/alchemy/pb1500/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2001, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1500 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1500/board_setup.c b/arch/mips/alchemy/pb1500/board_setup.c deleted file mode 100644 index 1be1afc..0000000 --- a/arch/mips/alchemy/pb1500/board_setup.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1500.h> -#include <prom.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTA, INTX, INTX, INTX }, /* IDSEL 12 - HPT370 */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0 }, - { AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_203, INTC_INT_LOW_LEVEL, 0 }, - { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1500"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x04000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.RST_VDDI[SOFT_RESET] */ - au_writel(0x00000000, PB1500_RST_VDDI); -} - -void __init board_setup(void) -{ - u32 pin_func; - u32 sys_freqctrl, sys_clksrc; - - sys_clksrc = sys_freqctrl = pin_func = 0; - /* Set AUX clock to 12 MHz * 8 = 96 MHz */ - au_writel(8, SYS_AUXPLL); - au_writel(0, SYS_PINSTATERD); - udelay(100); - -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - - /* GPIO201 is input for PCMCIA card detect */ - /* GPIO203 is input for PCMCIA interrupt request */ - au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR); - - /* Zero and disable FREQ2 */ - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* zero and disable USBH/USBD clocks */ - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - au_writel(sys_clksrc, SYS_CLKSRC); - - sys_freqctrl = au_readl(SYS_FREQCTRL0); - sys_freqctrl &= ~0xFFF00000; - - sys_clksrc = au_readl(SYS_CLKSRC); - sys_clksrc &= ~(SYS_CS_CUD | SYS_CS_DUD | SYS_CS_MUD_MASK | - SYS_CS_CUH | SYS_CS_DUH | SYS_CS_MUH_MASK); - - /* FREQ2 = aux/2 = 48 MHz */ - sys_freqctrl |= (0 << SYS_FC_FRDIV2_BIT) | SYS_FC_FE2 | SYS_FC_FS2; - au_writel(sys_freqctrl, SYS_FREQCTRL0); - - /* - * Route 48MHz FREQ2 into USB Host and/or Device - */ - sys_clksrc |= SYS_CS_MUX_FQ2 << SYS_CS_MUH_BIT; - au_writel(sys_clksrc, SYS_CLKSRC); - - pin_func = au_readl(SYS_PINFUNC) & ~SYS_PF_USB; - /* 2nd USB port is USB host */ - pin_func |= SYS_PF_USB; - au_writel(pin_func, SYS_PINFUNC); -#endif /* defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) */ - -#ifdef CONFIG_PCI - /* Setup PCI bus controller */ - au_writel(0, Au1500_PCI_CMEM); - au_writel(0x00003fff, Au1500_CFG_BASE); -#if defined(__MIPSEB__) - au_writel(0xf | (2 << 6) | (1 << 4), Au1500_PCI_CFG); -#else - au_writel(0xf, Au1500_PCI_CFG); -#endif - au_writel(0xf0000000, Au1500_PCI_MWMASK_DEV); - au_writel(0, Au1500_PCI_MWBASE_REV_CCL); - au_writel(0x02a00356, Au1500_PCI_STATCMD); - au_writel(0x00003c04, Au1500_PCI_HDRTYPE); - au_writel(0x00000008, Au1500_PCI_MBAR); - au_sync(); -#endif - - /* Enable sys bus clock divider when IDLE state or no bus activity. */ - au_writel(au_readl(SYS_POWERCTRL) | (0x3 << 5), SYS_POWERCTRL); - - /* Enable the RTC if not already enabled */ - if (!(au_readl(0xac000028) & 0x20)) { - printk(KERN_INFO "enabling clock ...\n"); - au_writel((au_readl(0xac000028) | 0x20), 0xac000028); - } - /* Put the clock in BCD mode */ - if (au_readl(0xac00002c) & 0x4) { /* reg B */ - au_writel(au_readl(0xac00002c) & ~0x4, 0xac00002c); - au_sync(); - } -} diff --git a/arch/mips/alchemy/pb1550/Makefile b/arch/mips/alchemy/pb1550/Makefile deleted file mode 100644 index 7e6453d..0000000 --- a/arch/mips/alchemy/pb1550/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright 2000, 2008 MontaVista Software Inc. -# Author: MontaVista Software, Inc. <source@mvista.com> -# -# Makefile for the Alchemy Semiconductor Pb1550 board. -# - -lib-y := board_setup.o diff --git a/arch/mips/alchemy/pb1550/board_setup.c b/arch/mips/alchemy/pb1550/board_setup.c deleted file mode 100644 index e844484..0000000 --- a/arch/mips/alchemy/pb1550/board_setup.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - * - * BRIEF MODULE DESCRIPTION - * Alchemy Pb1550 board setup. - * - * Copyright 2000, 2008 MontaVista Software Inc. - * Author: MontaVista Software, Inc. <source@mvista.com> - * - * 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <asm/bootinfo.h> -#include <asm/mach-au1x00/au1000.h> -#include <asm/mach-pb1x00/pb1550.h> -#include <prom.h> - -char irq_tab_alchemy[][5] __initdata = { - [12] = { -1, INTB, INTC, INTD, INTA }, /* IDSEL 12 - PCI slot 2 (left) */ - [13] = { -1, INTA, INTB, INTC, INTD }, /* IDSEL 13 - PCI slot 1 (right) */ -}; - -struct au1xxx_irqmap __initdata au1xxx_irq_map[] = { - { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, - { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, -}; - -int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map); - - -const char *get_system_type(void) -{ - return "Alchemy Pb1550"; -} - -void __init prom_init(void) -{ - unsigned char *memsize_str; - unsigned long memsize; - - prom_argc = (int)fw_arg0; - prom_argv = (char **)fw_arg1; - prom_envp = (char **)fw_arg2; - - prom_init_cmdline(); - memsize_str = prom_getenv("memsize"); - if (!memsize_str) - memsize = 0x08000000; - else - strict_strtol(memsize_str, 0, &memsize); - add_memory_region(0, memsize, BOOT_MEM_RAM); -} - -void board_reset(void) -{ - /* Hit BCSR.SYSTEM[RESET] */ - au_writew(au_readw(0xAF00001C) & ~BCSR_SYSTEM_RESET, 0xAF00001C); -} - -void __init board_setup(void) -{ - u32 pin_func; - - /* - * Enable PSC1 SYNC for AC'97. Normaly done in audio driver, - * but it is board specific code, so put it here. - */ - pin_func = au_readl(SYS_PINFUNC); - au_sync(); - pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1; - au_writel(pin_func, SYS_PINFUNC); - - au_writel(0, (u32)bcsr | 0x10); /* turn off PCMCIA power */ - au_sync(); - - printk(KERN_INFO "AMD Alchemy Pb1550 Board\n"); -} -- 1.6.0.3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2008-11-12 16:20 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-08 12:08 [PATCH 0/3] Alchemy: consolidate board code, v2 Manuel Lauss
2008-11-08 12:08 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss
2008-11-12 3:54 ` Kevin Hickey
2008-11-12 6:05 ` Manuel Lauss
2008-11-08 12:08 ` [PATCH 2/3] Alchemy: Move evalboard code to common directory Manuel Lauss
2008-11-12 4:00 ` Kevin Hickey
2008-11-12 6:06 ` Manuel Lauss
2008-11-12 10:38 ` Sergei Shtylyov
2008-11-12 10:55 ` Sergei Shtylyov
2008-11-12 10:35 ` Sergei Shtylyov
2008-11-12 12:05 ` Manuel Lauss
2008-11-12 13:39 ` Kevin Hickey
2008-11-12 13:38 ` Kevin Hickey
2008-11-12 15:45 ` Maciej W. Rozycki
2008-11-12 15:52 ` Sergei Shtylyov
2008-11-12 16:16 ` Maciej W. Rozycki
2008-11-12 16:20 ` Sergei Shtylyov
2008-11-08 12:08 ` [PATCH 3/3] Alchemy: allow boards to override default reset/poweroff functions Manuel Lauss
-- strict thread matches above, loose matches on Subject: below --
2008-11-07 18:41 [PATCH 0/3] Alchemy: consolidate board code Manuel Lauss
2008-11-07 18:41 ` [PATCH 1/3] Alchemy: merge small board files into single files Manuel Lauss
[not found] ` <cover.1226083170.git.mano@roarinelk.homelinux.net>
2008-11-07 18:41 ` [PATCH 2/3] Alchemy: Move evalboard code to common directory Manuel Lauss
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox