|
@@ -6,35 +6,14 @@
|
|
|
* 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/io.h>
|
|
|
-#include <linux/init.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
-#include <linux/irq.h>
|
|
|
|
|
|
#include <asm/irq_cpu.h>
|
|
|
#include <asm/i8259.h>
|
|
|
-#include <asm/mipsregs.h>
|
|
|
-#include <asm/mips-boards/bonito64.h>
|
|
|
-
|
|
|
|
|
|
+#include <loongson.h>
|
|
|
/*
|
|
|
* the first level int-handler will jump here if it is a bonito irq
|
|
|
*/
|
|
@@ -67,27 +46,24 @@ static void i8259_irqdispatch(void)
|
|
|
int irq;
|
|
|
|
|
|
irq = i8259_irq();
|
|
|
- if (irq >= 0) {
|
|
|
+ if (irq >= 0)
|
|
|
do_IRQ(irq);
|
|
|
- } else {
|
|
|
+ else
|
|
|
spurious_interrupt();
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
|
|
|
asmlinkage void plat_irq_dispatch(void)
|
|
|
{
|
|
|
unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;
|
|
|
|
|
|
- if (pending & CAUSEF_IP7) {
|
|
|
+ if (pending & CAUSEF_IP7)
|
|
|
do_IRQ(MIPS_CPU_IRQ_BASE + 7);
|
|
|
- } else if (pending & CAUSEF_IP5) {
|
|
|
+ else if (pending & CAUSEF_IP5)
|
|
|
i8259_irqdispatch();
|
|
|
- } else if (pending & CAUSEF_IP2) {
|
|
|
+ else if (pending & CAUSEF_IP2)
|
|
|
bonito_irqdispatch();
|
|
|
- } else {
|
|
|
+ else
|
|
|
spurious_interrupt();
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
static struct irqaction cascade_irqaction = {
|
|
@@ -97,8 +73,6 @@ static struct irqaction cascade_irqaction = {
|
|
|
|
|
|
void __init arch_init_irq(void)
|
|
|
{
|
|
|
- extern void bonito_irq_init(void);
|
|
|
-
|
|
|
/*
|
|
|
* Clear all of the interrupts while we change the able around a bit.
|
|
|
* int-handler is not on bootstrap
|
|
@@ -128,16 +102,8 @@ void __init arch_init_irq(void)
|
|
|
init_i8259_irqs();
|
|
|
bonito_irq_init();
|
|
|
|
|
|
- /*
|
|
|
- printk("GPIODATA=%x, GPIOIE=%x\n", BONITO_GPIODATA, BONITO_GPIOIE);
|
|
|
- printk("INTEN=%x, INTSET=%x, INTCLR=%x, INTISR=%x\n",
|
|
|
- BONITO_INTEN, BONITO_INTENSET,
|
|
|
- BONITO_INTENCLR, BONITO_INTISR);
|
|
|
- */
|
|
|
-
|
|
|
/* bonito irq at IP2 */
|
|
|
setup_irq(MIPS_CPU_IRQ_BASE + 2, &cascade_irqaction);
|
|
|
/* 8259 irq at IP5 */
|
|
|
setup_irq(MIPS_CPU_IRQ_BASE + 5, &cascade_irqaction);
|
|
|
-
|
|
|
}
|