summaryrefslogtreecommitdiff
path: root/target/linux/brcm63xx/files/arch/mips/bcm963xx
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/files/arch/mips/bcm963xx')
-rw-r--r--target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c39
-rw-r--r--target/linux/brcm63xx/files/arch/mips/bcm963xx/prom.c6
-rw-r--r--target/linux/brcm63xx/files/arch/mips/bcm963xx/setup.c2
-rw-r--r--target/linux/brcm63xx/files/arch/mips/bcm963xx/time.c8
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