diff options
Diffstat (limited to 'target/linux/brcm63xx/files/arch/mips/bcm963xx')
4 files changed, 26 insertions, 29 deletions
diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c index 962cd37..62a848b 100644 --- a/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c +++ b/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c @@ -40,7 +40,7 @@ #include <bcm_map_part.h> #include <bcm_intr.h> -static void irq_dispatch_int(struct pt_regs *regs) +static void irq_dispatch_int(void) { unsigned int pendingIrqs; static unsigned int irqBit; @@ -78,24 +78,25 @@ static void irq_dispatch_ext(uint32 irq) } -extern void brcm_timer_interrupt(struct pt_regs *regs); +//extern void brcm_timer_interrupt(struct pt_regs *regs); -asmlinkage void plat_irq_dispatch(struct pt_regs *regs) +asmlinkage void plat_irq_dispatch(void) { - u32 cause; - while((cause = (read_c0_cause()& CAUSEF_IP))) { - if (cause & CAUSEF_IP7) - brcm_timer_interrupt(regs); - else if (cause & CAUSEF_IP2) - irq_dispatch_int(regs); - else if (cause & CAUSEF_IP3) - irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_0); - else if (cause & CAUSEF_IP4) - irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_1); - else if (cause & CAUSEF_IP5) - irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_2); - else if (cause & CAUSEF_IP6) - irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_3); + unsigned long cause; + + cause = read_c0_status() & read_c0_cause() & ST0_IM; + if (cause & CAUSEF_IP7) + do_IRQ(7); + else if (cause & CAUSEF_IP2) + irq_dispatch_int(); + else if (cause & CAUSEF_IP3) + irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_0); + else if (cause & CAUSEF_IP4) + irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_1); + else if (cause & CAUSEF_IP5) + irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_2); + else if (cause & CAUSEF_IP6) { + irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_3); local_irq_disable(); } } @@ -239,12 +240,12 @@ unsigned int BcmHalMapInterrupt(FN_HANDLER pfunc, unsigned int param, if( interruptId >= INTERNAL_ISR_TABLE_OFFSET ) { printk("BcmHalMapInterrupt : internal IRQ\n"); - nRet = request_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT, devname, (void *) param ); + nRet = request_irq( interruptId, pfunc, IRQF_DISABLED, devname, (void *) param ); } else if (interruptId >= INTERRUPT_ID_EXTERNAL_0 && interruptId <= INTERRUPT_ID_EXTERNAL_3) { printk("BcmHalMapInterrupt : external IRQ\n"); - nRet = request_external_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT, devname, (void *) param ); + nRet = request_external_irq( interruptId, pfunc, IRQF_DISABLED, devname, (void *) param ); } return( nRet ); diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/prom.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/prom.c index e02d31c..5ebadc6 100644 --- a/target/linux/brcm63xx/files/arch/mips/bcm963xx/prom.c +++ b/target/linux/brcm63xx/files/arch/mips/bcm963xx/prom.c @@ -56,15 +56,9 @@ void __init prom_init(void) /* Detect the bootloader */ detect_bootloader(); - /* Do further initialisations depending on the bootloader */ - if (boot_loader_type == BOOT_LOADER_CFE || boot_loader_type == BOOT_LOADER_CFE2) { - cfe_setup(fw_arg0, fw_arg1, fw_arg2, fw_arg3); - } /* Register 16MB RAM minus the ADSL SDRAM by default */ add_memory_region(0, (0x01000000 - ADSL_SDRAM_IMAGE_SIZE), BOOT_MEM_RAM); - mips_machgroup = MACH_GROUP_BRCM; - mips_machtype = MACH_BCM; } void __init prom_free_prom_memory(void) diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/setup.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/setup.c index 70c6ebe..5847278 100644 --- a/target/linux/brcm63xx/files/arch/mips/bcm963xx/setup.c +++ b/target/linux/brcm63xx/files/arch/mips/bcm963xx/setup.c @@ -465,7 +465,7 @@ void __init plat_mem_setup(void) _machine_halt = brcm_machine_halt; pm_power_off = brcm_machine_halt; - board_time_init = brcm_time_init; + //board_time_init = brcm_time_init; /* mpi initialization */ mpi_init(); diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/time.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/time.c index 8b82ada..fa0fa71 100644 --- a/target/linux/brcm63xx/files/arch/mips/bcm963xx/time.c +++ b/target/linux/brcm63xx/files/arch/mips/bcm963xx/time.c @@ -77,6 +77,7 @@ static inline unsigned long __init cal_r4koff(void) * handler floating around. This one is rather different, but the algorithm * is provably more robust. */ +#if 0 irqreturn_t brcm_timer_interrupt(struct pt_regs *regs) { int irq = MIPS_TIMER_INT; @@ -88,9 +89,9 @@ irqreturn_t brcm_timer_interrupt(struct pt_regs *regs) irq_exit(); return IRQ_HANDLED; } +#endif - -void __init brcm_time_init(void) +void __init plat_time_init(void) { unsigned int est_freq, flags; local_irq_save(flags); @@ -107,10 +108,11 @@ void __init brcm_time_init(void) local_irq_restore(flags); } - +#if 0 void __init plat_timer_setup(struct irqaction *irq) { r4k_cur = (read_c0_count() + r4k_offset); write_c0_compare(r4k_cur); set_c0_status(IE_IRQ5); } +#endif |