From d4e976a36f3d6374ecb8090fde407211fb3fc260 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 13 Feb 2008 17:31:17 +0000 Subject: Upgrade brcm63xx to 2.6.24 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10455 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/brcm63xx/files/arch/mips/bcm963xx/irq.c | 39 +++++++++++----------- .../linux/brcm63xx/files/arch/mips/bcm963xx/prom.c | 6 ---- .../brcm63xx/files/arch/mips/bcm963xx/setup.c | 2 +- .../linux/brcm63xx/files/arch/mips/bcm963xx/time.c | 8 +++-- .../brcm63xx/files/arch/mips/pci/fixup-bcm96348.c | 2 +- .../brcm63xx/files/drivers/serial/bcm63xx_cons.c | 2 +- .../files/include/asm-mips/mach-bcm963xx/war.h | 25 ++++++++++++++ 7 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 target/linux/brcm63xx/files/include/asm-mips/mach-bcm963xx/war.h (limited to 'target/linux/brcm63xx/files') diff --git a/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c b/target/linux/brcm63xx/files/arch/mips/bcm963xx/irq.c index 962cd374d..62a848bd7 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 #include -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 e02d31c9e..5ebadc667 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 70c6ebe60..58472783f 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 8b82ada37..fa0fa71a7 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 ae71ebc73..e3703a94c 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 b026aa10a..8fff16dd9 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 000000000..0f09a31e6 --- /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 + */ +#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 */ -- cgit v1.2.3