Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
OpenBMC Firmware
talos-obmc-linux
Commits
e9d52234
Commit
e9d52234
authored
19 years ago
by
Linus Torvalds
Browse files
Options
Download
Plain Diff
Merge branch 'upstream' of
git://ftp.linux-mips.org/pub/scm/upstream-linus
parents
955c5038
09af7b44
Changes
522
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
690 additions
and
203 deletions
+690
-203
arch/mips/au1000/csb250/init.c
arch/mips/au1000/csb250/init.c
+0
-1
arch/mips/au1000/db1x00/irqmap.c
arch/mips/au1000/db1x00/irqmap.c
+32
-0
arch/mips/au1000/db1x00/mirage_ts.c
arch/mips/au1000/db1x00/mirage_ts.c
+8
-8
arch/mips/au1000/hydrogen3/init.c
arch/mips/au1000/hydrogen3/init.c
+0
-1
arch/mips/au1000/mtx-1/init.c
arch/mips/au1000/mtx-1/init.c
+0
-1
arch/mips/au1000/mtx-1/irqmap.c
arch/mips/au1000/mtx-1/irqmap.c
+11
-0
arch/mips/au1000/pb1000/init.c
arch/mips/au1000/pb1000/init.c
+0
-1
arch/mips/au1000/pb1200/Makefile
arch/mips/au1000/pb1200/Makefile
+5
-0
arch/mips/au1000/pb1200/board_setup.c
arch/mips/au1000/pb1200/board_setup.c
+193
-0
arch/mips/au1000/pb1200/init.c
arch/mips/au1000/pb1200/init.c
+69
-0
arch/mips/au1000/pb1200/irqmap.c
arch/mips/au1000/pb1200/irqmap.c
+182
-0
arch/mips/au1000/pb1500/irqmap.c
arch/mips/au1000/pb1500/irqmap.c
+5
-0
arch/mips/au1000/pb1550/irqmap.c
arch/mips/au1000/pb1550/irqmap.c
+5
-0
arch/mips/boot/Makefile
arch/mips/boot/Makefile
+4
-0
arch/mips/cobalt/Makefile
arch/mips/cobalt/Makefile
+1
-1
arch/mips/cobalt/int-handler.S
arch/mips/cobalt/int-handler.S
+2
-2
arch/mips/cobalt/irq.c
arch/mips/cobalt/irq.c
+73
-38
arch/mips/cobalt/promcon.c
arch/mips/cobalt/promcon.c
+0
-87
arch/mips/cobalt/reset.c
arch/mips/cobalt/reset.c
+28
-31
arch/mips/cobalt/setup.c
arch/mips/cobalt/setup.c
+72
-32
No files found.
arch/mips/au1000/csb250/init.c
View file @
e9d52234
...
...
@@ -35,7 +35,6 @@
#include <asm/bootinfo.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/sched.h>
int
prom_argc
;
char
**
prom_argv
,
**
prom_envp
;
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/db1x00/irqmap.c
View file @
e9d52234
...
...
@@ -48,6 +48,38 @@
#include <asm/system.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
au1xxx_irq_map_t
au1xxx_irq_map
[]
=
{
#ifndef CONFIG_MIPS_MIRAGE
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/db1x00/mirage_ts.c
View file @
e9d52234
...
...
@@ -102,15 +102,15 @@ static struct {
}
mirage_ts_cal
=
{
#if 0
xscale
:
84,
xtrans
:
-157,
yscale
:
66,
ytrans
:
-150,
.
xscale
=
84,
.
xtrans
=
-157,
.
yscale
=
66,
.
ytrans
=
-150,
#else
xscale
:
84
,
xtrans
:
-
150
,
yscale
:
66
,
ytrans
:
-
146
,
.
xscale
=
84
,
.
xtrans
=
-
150
,
.
yscale
=
66
,
.
ytrans
=
-
146
,
#endif
};
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/hydrogen3/init.c
View file @
e9d52234
...
...
@@ -37,7 +37,6 @@
#include <linux/config.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/sched.h>
int
prom_argc
;
char
**
prom_argv
,
**
prom_envp
;
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/mtx-1/init.c
View file @
e9d52234
...
...
@@ -33,7 +33,6 @@
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/bootmem.h>
#include <asm/addrspace.h>
#include <asm/bootinfo.h>
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/mtx-1/irqmap.c
View file @
e9d52234
...
...
@@ -47,6 +47,17 @@
#include <asm/system.h>
#include <asm/mach-au1x00/au1000.h>
char
irq_tab_alchemy
[][
5
]
__initdata
=
{
[
0
]
=
{
-
1
,
INTA
,
INTB
,
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) */
};
au1xxx_irq_map_t
au1xxx_irq_map
[]
=
{
{
AU1500_GPIO_204
,
INTC_INT_HIGH_LEVEL
,
0
},
{
AU1500_GPIO_201
,
INTC_INT_LOW_LEVEL
,
0
},
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1000/init.c
View file @
e9d52234
...
...
@@ -65,5 +65,4 @@ void __init prom_init(void)
memsize
=
simple_strtol
(
memsize_str
,
NULL
,
0
);
}
add_memory_region
(
0
,
memsize
,
BOOT_MEM_RAM
);
return
0
;
}
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1200/Makefile
0 → 100644
View file @
e9d52234
#
# Makefile for the Alchemy Semiconductor PB1200 board.
#
lib-y
:=
init.o board_setup.o irqmap.o
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1200/board_setup.c
0 → 100644
View file @
e9d52234
/*
*
* 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/config.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/ioport.h>
#include <linux/mm.h>
#include <linux/console.h>
#include <linux/mc146818rtc.h>
#include <linux/delay.h>
#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
#include <linux/ide.h>
#endif
#include <asm/cpu.h>
#include <asm/bootinfo.h>
#include <asm/irq.h>
#include <asm/mipsregs.h>
#include <asm/reboot.h>
#include <asm/pgtable.h>
#include <asm/mach-au1x00/au1000.h>
#include <asm/mach-au1x00/au1xxx_dbdma.h>
#ifdef CONFIG_MIPS_PB1200
#include <asm/mach-pb1x00/pb1200.h>
#endif
#ifdef CONFIG_MIPS_DB1200
#include <asm/mach-db1x00/db1200.h>
#define PB1200_ETH_INT DB1200_ETH_INT
#define PB1200_IDE_INT DB1200_IDE_INT
#endif
extern
void
_board_init_irq
(
void
);
extern
void
(
*
board_init_irq
)(
void
);
void
board_reset
(
void
)
{
bcsr
->
resets
=
0
;
bcsr
->
system
=
0
;
}
void
__init
board_setup
(
void
)
{
char
*
argptr
=
NULL
;
u32
pin_func
;
#if 0
/* 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
;
/* Select SMBUS in CPLD */
bcsr
->
resets
&=
~
(
BCSR_RESETS_PCS0MUX
);
pin_func
=
au_readl
(
SYS_PINFUNC
);
au_sync
();
pin_func
&=
~
(
3
<<
17
|
1
<<
4
);
/* Set GPIOs correctly */
pin_func
|=
2
<<
17
;
au_writel
(
pin_func
,
SYS_PINFUNC
);
au_sync
();
/* The i2c driver depends on 50Mhz 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
);
/* 396Mhz / (3+1)*2 == 49.5Mhz */
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
&=
~
0x01f00000
;
/* bit 22 is EXTCLK0 for PSC0 */
clksrc
|=
(
0x3
<<
22
);
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
*/
#if defined(CONFIG_AU1XXX_PSC_SPI) && defined(CONFIG_I2C_AU1550)
#error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\
Refer to Pb1200/Db1200 documentation.
#elif defined( CONFIG_AU1XXX_PSC_SPI )
bcsr
->
resets
|=
BCSR_RESETS_PCS0MUX
;
/*Hard Coding Value to enable Temp Sensors [bit 14] Value for SOC Au1200. Pls refer documentation*/
bcsr
->
resets
=
0x900f
;
#elif defined( CONFIG_I2C_AU1550 )
bcsr
->
resets
&=
(
~
BCSR_RESETS_PCS0MUX
);
#endif
au_sync
();
#ifdef CONFIG_MIPS_PB1200
printk
(
"AMD Alchemy Pb1200 Board
\n
"
);
#endif
#ifdef CONFIG_MIPS_DB1200
printk
(
"AMD Alchemy Db1200 Board
\n
"
);
#endif
/* Setup Pb1200 External Interrupt Controller */
{
extern
void
(
*
board_init_irq
)(
void
);
extern
void
_board_init_irq
(
void
);
board_init_irq
=
_board_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("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("board_au1200fb_panel_shutdown()\n"); */
return
0
;
}
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1200/init.c
0 → 100644
View file @
e9d52234
/*
*
* BRIEF MODULE DESCRIPTION
* PB1200 board setup
*
* Copyright 2001 MontaVista Software Inc.
* Author: MontaVista Software, Inc.
* ppopov@mvista.com or 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/mm.h>
#include <linux/sched.h>
#include <linux/bootmem.h>
#include <asm/addrspace.h>
#include <asm/bootinfo.h>
#include <linux/string.h>
#include <linux/kernel.h>
int
prom_argc
;
char
**
prom_argv
,
**
prom_envp
;
extern
void
__init
prom_init_cmdline
(
void
);
extern
char
*
prom_getenv
(
char
*
envname
);
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
;
mips_machgroup
=
MACH_GROUP_ALCHEMY
;
mips_machtype
=
MACH_PB1200
;
prom_init_cmdline
();
memsize_str
=
prom_getenv
(
"memsize"
);
if
(
!
memsize_str
)
{
memsize
=
0x08000000
;
}
else
{
memsize
=
simple_strtol
(
memsize_str
,
NULL
,
0
);
}
add_memory_region
(
0
,
memsize
,
BOOT_MEM_RAM
);
}
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1200/irqmap.c
0 → 100644
View file @
e9d52234
/*
* 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/config.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/kernel_stat.h>
#include <linux/module.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/timex.h>
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/delay.h>
#include <asm/bitops.h>
#include <asm/bootinfo.h>
#include <asm/io.h>
#include <asm/mipsregs.h>
#include <asm/system.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
au1xxx_irq_map_t
au1xxx_irq_map
[]
=
{
{
AU1000_GPIO_7
,
INTC_INT_LOW_LEVEL
,
0
},
// This is exteranl interrupt cascade
};
int
au1xxx_nr_irqs
=
sizeof
(
au1xxx_irq_map
)
/
sizeof
(
au1xxx_irq_map_t
);
/*
* Support for External interrupts on the PbAu1200 Development platform.
*/
static
volatile
int
pb1200_cascade_en
=
0
;
irqreturn_t
pb1200_cascade_handler
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
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
-
1
)
+
au_ffs
(
bisr
);
/* Ack and dispatch IRQ */
do_IRQ
(
extirq_nr
,
regs
);
}
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_startup_irq
(
unsigned
int
irq_nr
)
{
if
(
++
pb1200_cascade_en
==
1
)
{
request_irq
(
AU1000_GPIO_7
,
&
pb1200_cascade_handler
,
0
,
"Pb1200 Cascade"
,
(
void
*
)
&
pb1200_cascade_handler
);
#ifdef CONFIG_MIPS_PB1200
/* We have a problem with CPLD rev3. Enable a workaround */
if
(
((
bcsr
->
whoami
&
BCSR_WHOAMI_CPLD
)
>>
4
)
<=
3
)
{
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"Pb1200 must be at CPLD rev4. Please have Pb1200
\n
"
);
printk
(
"updated to latest revision. This software will not
\n
"
);
printk
(
"work on anything less than CPLD rev4
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
printk
(
"
\n
WARNING!!!
\n
"
);
while
(
1
);
}
#endif
}
pb1200_enable_irq
(
irq_nr
);
return
0
;
}
static
void
pb1200_shutdown_irq
(
unsigned
int
irq_nr
)
{
pb1200_disable_irq
(
irq_nr
);
if
(
--
pb1200_cascade_en
==
0
)
{
free_irq
(
AU1000_GPIO_7
,
&
pb1200_cascade_handler
);
}
return
;
}
static
inline
void
pb1200_mask_and_ack_irq
(
unsigned
int
irq_nr
)
{
pb1200_disable_irq
(
irq_nr
);
}
static
void
pb1200_end_irq
(
unsigned
int
irq_nr
)
{
if
(
!
(
irq_desc
[
irq_nr
].
status
&
(
IRQ_DISABLED
|
IRQ_INPROGRESS
)))
{
pb1200_enable_irq
(
irq_nr
);
}
}
static
struct
hw_interrupt_type
external_irq_type
=
{
#ifdef CONFIG_MIPS_PB1200
"Pb1200 Ext"
,
#endif
#ifdef CONFIG_MIPS_DB1200
"Db1200 Ext"
,
#endif
pb1200_startup_irq
,
pb1200_shutdown_irq
,
pb1200_enable_irq
,
pb1200_disable_irq
,
pb1200_mask_and_ack_irq
,
pb1200_end_irq
,
NULL
};
void
_board_init_irq
(
void
)
{
int
irq_nr
;
for
(
irq_nr
=
PB1200_INT_BEGIN
;
irq_nr
<=
PB1200_INT_END
;
irq_nr
++
)
{
irq_desc
[
irq_nr
].
handler
=
&
external_irq_type
;
pb1200_disable_irq
(
irq_nr
);
}
/* GPIO_7 can not be hooked here, so it is hooked upon first
request of any source attached to the cascade */
}
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1500/irqmap.c
View file @
e9d52234
...
...
@@ -47,6 +47,11 @@
#include <asm/system.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 */
};
au1xxx_irq_map_t
au1xxx_irq_map
[]
=
{
{
AU1500_GPIO_204
,
INTC_INT_HIGH_LEVEL
,
0
},
{
AU1500_GPIO_201
,
INTC_INT_LOW_LEVEL
,
0
},
...
...
This diff is collapsed.
Click to expand it.
arch/mips/au1000/pb1550/irqmap.c
View file @
e9d52234
...
...
@@ -47,6 +47,11 @@
#include <asm/system.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) */
};
au1xxx_irq_map_t
au1xxx_irq_map
[]
=
{
{
AU1000_GPIO_0
,
INTC_INT_LOW_LEVEL
,
0
},
{
AU1000_GPIO_1
,
INTC_INT_LOW_LEVEL
,
0
},
...
...
This diff is collapsed.
Click to expand it.
arch/mips/boot/Makefile
View file @
e9d52234
...
...
@@ -33,6 +33,9 @@ vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX)
$(obj)/elf2ecoff
:
$(obj)/elf2ecoff.c
$(HOSTCC)
-o
$@
$^
vmlinux.bin
:
$(VMLINUX)
$(OBJCOPY)
-O
binary
$
(
strip-flags
)
$(VMLINUX)
$(obj)
/vmlinux.bin
vmlinux.srec
:
$(VMLINUX)
$(OBJCOPY)
-S
-O
srec
$
(
strip-flags
)
$(VMLINUX)
$(obj)
/vmlinux.srec
...
...
@@ -45,5 +48,6 @@ archhelp:
clean-files
+=
addinitrd
\
elf2ecoff
\
vmlinux.bin
\
vmlinux.ecoff
\
vmlinux.srec
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/Makefile
View file @
e9d52234
...
...
@@ -2,6 +2,6 @@
# Makefile for the Cobalt micro systems family specific parts of the kernel
#
obj-y
:=
irq.o int-handler.o reset.o setup.o
promcon.o
obj-y
:=
irq.o int-handler.o reset.o setup.o
EXTRA_AFLAGS
:=
$(CFLAGS)
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/int-handler.S
View file @
e9d52234
...
...
@@ -18,8 +18,8 @@
SAVE_ALL
CLI
la
ra
,
ret_from_irq
move
a
1
,
sp
PTR_LA
ra
,
ret_from_irq
move
a
0
,
sp
j
cobalt_irq
END
(
cobalt_handle_int
)
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/irq.c
View file @
e9d52234
...
...
@@ -10,6 +10,8 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <asm/i8259.h>
#include <asm/irq_cpu.h>
...
...
@@ -25,8 +27,8 @@ extern void cobalt_handle_int(void);
* the CPU interrupt lines, and ones that come in on the via chip. The CPU
* mappings are:
*
* 16
,
- Software interrupt 0 (unused) IE_SW0
* 17 - Software interrupt 1 (unused) IE_SW
0
* 16
- Software interrupt 0 (unused) IE_SW0
* 17 - Software interrupt 1 (unused) IE_SW
1
* 18 - Galileo chip (timer) IE_IRQ0
* 19 - Tulip 0 + NCR SCSI IE_IRQ1
* 20 - Tulip 1 IE_IRQ2
...
...
@@ -42,61 +44,94 @@ extern void cobalt_handle_int(void);
* 15 - IDE1
*/
asmlinkage
void
cobalt
_irq
(
struct
pt_regs
*
regs
)
static
inline
void
galileo
_irq
(
struct
pt_regs
*
regs
)
{
unsigned
int
pending
=
read_c0_status
()
&
read_c0_cause
();
if
(
pending
&
CAUSEF_IP2
)
{
/* int 18 */
unsigned
long
irq_src
=
GALILEO_INL
(
GT_INTRCAUSE_OFS
);
/* Check for timer irq ... */
if
(
irq_src
&
GALILEO_T0EXP
)
{
/* Clear the int line */
GALILEO_OUTL
(
0
,
GT_INTRCAUSE_OFS
);
do_IRQ
(
COBALT_TIMER_IRQ
,
regs
);
}
return
;
}
unsigned
int
mask
,
pending
,
devfn
;
if
(
pending
&
CAUSEF_IP6
)
{
/* int 22 */
int
irq
=
i8259_irq
()
;
mask
=
GALILEO_INL
(
GT_INTRMASK_OFS
);
pending
=
GALILEO_INL
(
GT_INTRCAUSE_OFS
)
&
mask
;
if
(
irq
>=
0
)
do_IRQ
(
irq
,
regs
);
return
;
}
if
(
pending
&
GALILEO_INTR_T0EXP
)
{
if
(
pending
&
CAUSEF_IP3
)
{
/* int 19 */
do_IRQ
(
COBALT_ETH0_IRQ
,
regs
);
return
;
}
GALILEO_OUTL
(
~
GALILEO_INTR_T0EXP
,
GT_INTRCAUSE_OFS
);
do_IRQ
(
COBALT_GALILEO_IRQ
,
regs
);
if
(
pending
&
CAUSEF_IP4
)
{
/* int 20 */
do_IRQ
(
COBALT_ETH1_IRQ
,
regs
);
return
;
}
}
else
if
(
pending
&
GALILEO_INTR_RETRY_CTR
)
{
if
(
pending
&
CAUSEF_IP5
)
{
/* int 21 */
do_IRQ
(
COBALT_SERIAL_IRQ
,
regs
);
return
;
}
devfn
=
GALILEO_INL
(
GT_PCI0_CFGADDR_OFS
)
>>
8
;
GALILEO_OUTL
(
~
GALILEO_INTR_RETRY_CTR
,
GT_INTRCAUSE_OFS
);
printk
(
KERN_WARNING
"Galileo: PCI retry count exceeded (%02x.%u)
\n
"
,
PCI_SLOT
(
devfn
),
PCI_FUNC
(
devfn
));
}
else
{
if
(
pending
&
CAUSEF_IP7
)
{
/* int 23 */
do_IRQ
(
COBALT_QUBE_SLOT_IRQ
,
regs
);
return
;
GALILEO_OUTL
(
mask
&
~
pending
,
GT_INTRMASK_OFS
);
printk
(
KERN_WARNING
"Galileo: masking unexpected interrupt %08x
\n
"
,
pending
);
}
}
static
inline
void
via_pic_irq
(
struct
pt_regs
*
regs
)
{
int
irq
;
irq
=
i8259_irq
();
if
(
irq
>=
0
)
do_IRQ
(
irq
,
regs
);
}
asmlinkage
void
cobalt_irq
(
struct
pt_regs
*
regs
)
{
unsigned
pending
;
pending
=
read_c0_status
()
&
read_c0_cause
();
if
(
pending
&
CAUSEF_IP2
)
/* COBALT_GALILEO_IRQ (18) */
galileo_irq
(
regs
);
else
if
(
pending
&
CAUSEF_IP6
)
/* COBALT_VIA_IRQ (22) */
via_pic_irq
(
regs
);
else
if
(
pending
&
CAUSEF_IP3
)
/* COBALT_ETH0_IRQ (19) */
do_IRQ
(
COBALT_CPU_IRQ
+
3
,
regs
);
else
if
(
pending
&
CAUSEF_IP4
)
/* COBALT_ETH1_IRQ (20) */
do_IRQ
(
COBALT_CPU_IRQ
+
4
,
regs
);
else
if
(
pending
&
CAUSEF_IP5
)
/* COBALT_SERIAL_IRQ (21) */
do_IRQ
(
COBALT_CPU_IRQ
+
5
,
regs
);
else
if
(
pending
&
CAUSEF_IP7
)
/* IRQ 23 */
do_IRQ
(
COBALT_CPU_IRQ
+
7
,
regs
);
}
static
struct
irqaction
irq_via
=
{
no_action
,
0
,
{
{
0
,
}
},
"cascade"
,
NULL
,
NULL
};
void
__init
arch_init_irq
(
void
)
{
/*
* Mask all Galileo interrupts. The Galileo
* handler is set in cobalt_timer_setup()
*/
GALILEO_OUTL
(
0
,
GT_INTRMASK_OFS
);
set_except_vector
(
0
,
cobalt_handle_int
);
init_i8259_irqs
();
/* 0 ... 15 */
mips_cpu_irq_init
(
16
);
/* 16 ... 23 */
mips_cpu_irq_init
(
COBALT_CPU_IRQ
);
/* 16 ... 23 */
/*
* Mask all cpu interrupts
* (except IE4, we already masked those at VIA level)
*/
change_c0_status
(
ST0_IM
,
IE_IRQ4
);
setup_irq
(
COBALT_VIA_IRQ
,
&
irq_via
);
}
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/promcon.c
deleted
100644 → 0
View file @
955c5038
/*
* PROM console for Cobalt Raq2
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 1995, 1996, 1997 by Ralf Baechle
* Copyright (C) 2001 by Liam Davies (ldavies@agile.tv)
*
*/
#include <linux/init.h>
#include <linux/console.h>
#include <linux/kdev_t.h>
#include <linux/serial_reg.h>
#include <asm/delay.h>
#include <asm/serial.h>
#include <asm/io.h>
static
unsigned
long
port
=
0xc800000
;
static
__inline__
void
ns16550_cons_put_char
(
char
ch
,
unsigned
long
ioaddr
)
{
char
lsr
;
do
{
lsr
=
inb
(
ioaddr
+
UART_LSR
);
}
while
((
lsr
&
(
UART_LSR_TEMT
|
UART_LSR_THRE
))
!=
(
UART_LSR_TEMT
|
UART_LSR_THRE
));
outb
(
ch
,
ioaddr
+
UART_TX
);
}
static
__inline__
char
ns16550_cons_get_char
(
unsigned
long
ioaddr
)
{
while
((
inb
(
ioaddr
+
UART_LSR
)
&
UART_LSR_DR
)
==
0
)
udelay
(
1
);
return
inb
(
ioaddr
+
UART_RX
);
}
void
ns16550_console_write
(
struct
console
*
co
,
const
char
*
s
,
unsigned
count
)
{
char
lsr
,
ier
;
unsigned
i
;
ier
=
inb
(
port
+
UART_IER
);
outb
(
0x00
,
port
+
UART_IER
);
for
(
i
=
0
;
i
<
count
;
i
++
,
s
++
)
{
if
(
*
s
==
'\n'
)
ns16550_cons_put_char
(
'\r'
,
port
);
ns16550_cons_put_char
(
*
s
,
port
);
}
do
{
lsr
=
inb
(
port
+
UART_LSR
);
}
while
((
lsr
&
(
UART_LSR_TEMT
|
UART_LSR_THRE
))
!=
(
UART_LSR_TEMT
|
UART_LSR_THRE
));
outb
(
ier
,
port
+
UART_IER
);
}
char
getDebugChar
(
void
)
{
return
ns16550_cons_get_char
(
port
);
}
void
putDebugChar
(
char
kgdb_char
)
{
ns16550_cons_put_char
(
kgdb_char
,
port
);
}
static
struct
console
ns16550_console
=
{
.
name
=
"prom"
,
.
setup
=
NULL
,
.
write
=
ns16550_console_write
,
.
flags
=
CON_PRINTBUFFER
,
.
index
=
-
1
,
};
static
int
__init
ns16550_setup_console
(
void
)
{
register_console
(
&
ns16550_console
);
return
0
;
}
console_initcall
(
ns16550_setup_console
);
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/reset.c
View file @
e9d52234
This diff is collapsed.
Click to expand it.
arch/mips/cobalt/setup.c
View file @
e9d52234
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
5
6
…
27
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment