diff options
author | Florian Fainelli <florian@openwrt.org> | 2008-02-13 17:31:17 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2008-02-13 17:31:17 +0000 |
commit | 7aa45daae1ec73c3048a68607a1cb2526eb6c480 (patch) | |
tree | 34765593f0261475e528702a307c755d28538ca6 /target/linux/brcm63xx/files | |
parent | d315f17d40e7506a154b70a7150d6f4ab6555bc1 (diff) | |
download | upstream-7aa45daae1ec73c3048a68607a1cb2526eb6c480.tar.gz upstream-7aa45daae1ec73c3048a68607a1cb2526eb6c480.tar.bz2 upstream-7aa45daae1ec73c3048a68607a1cb2526eb6c480.zip |
Upgrade brcm63xx to 2.6.24
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10455 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm63xx/files')
7 files changed, 53 insertions, 31 deletions
diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c index 962cd374dd..62a848bd7d 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 e02d31c9ed..5ebadc6679 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 70c6ebe601..58472783f4 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 8b82ada371..fa0fa71a7f 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 diff --git a/target/linux/brcm63xx/files/arch/mips/pci/fixup-bcm96348.c b/target/linux/brcm63xx/files/arch/mips/pci/fixup-bcm96348.c index ae71ebc73b..e3703a94c2 100644 --- a/target/linux/brcm63xx/files/arch/mips/pci/fixup-bcm96348.c +++ b/target/linux/brcm63xx/files/arch/mips/pci/fixup-bcm96348.c @@ -36,7 +36,7 @@ static char irq_tab_bcm96348[] __initdata = { #endif }; -int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { return irq_tab_bcm96348[slot]; } diff --git a/target/linux/brcm63xx/files/drivers/serial/bcm63xx_cons.c b/target/linux/brcm63xx/files/drivers/serial/bcm63xx_cons.c index b026aa10ab..8fff16dd9c 100644 --- a/target/linux/brcm63xx/files/drivers/serial/bcm63xx_cons.c +++ b/target/linux/brcm63xx/files/drivers/serial/bcm63xx_cons.c @@ -893,7 +893,7 @@ static int bcm63xx_cons_open(struct tty_struct *tty, struct file *filp) #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) - info->pgrp = process_group(current); + info->pgrp = task_pgrp(current); #else info->session = current->session; info->pgrp = current->pgrp; diff --git a/target/linux/brcm63xx/files/include/asm-mips/mach-bcm963xx/war.h b/target/linux/brcm63xx/files/include/asm-mips/mach-bcm963xx/war.h new file mode 100644 index 0000000000..0f09a31e67 --- /dev/null +++ b/target/linux/brcm63xx/files/include/asm-mips/mach-bcm963xx/war.h @@ -0,0 +1,25 @@ +/* + * 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) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org> + */ +#ifndef __ASM_MIPS_MACH_BCM963XX_WAR_H +#define __ASM_MIPS_MACH_BCM963XX_WAR_H + +#define R4600_V1_INDEX_ICACHEOP_WAR 0 +#define R4600_V1_HIT_CACHEOP_WAR 0 +#define R4600_V2_HIT_CACHEOP_WAR 0 +#define R5432_CP0_INTERRUPT_WAR 0 +#define BCM1250_M3_WAR 0 +#define SIBYTE_1956_WAR 0 +#define MIPS4K_ICACHE_REFILL_WAR 0 +#define MIPS_CACHE_SYNC_WAR 0 +#define TX49XX_ICACHE_INDEX_INV_WAR 0 +#define RM9000_CDEX_SMP_WAR 0 +#define ICACHE_REFILLS_WORKAROUND_WAR 0 +#define R10000_LLSC_WAR 0 +#define MIPS34K_MISSED_ITLB_WAR 0 + +#endif /* __ASM_MIPS_MACH_BCM963XX_WAR_H */ |