Commit 90bc1a65 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus

* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (32 commits)
  MIPS: Wire up accept4 syscall.
  MIPS: VPE: Delete unused function get_tc_unused().
  MIPS: VPE: Fix bogus indentation.
  MIPS: VPE: Make various functions static.
  MIPS: VPE: Free relocation chain on error.
  MIPS: VPE: Fix compiler warning.
  MIPS: Module: Make error messages unique.
  MIPS: Octeon: Run IPI code with interrupts disabled.
  MIPS: Jazz: Fix read buffer overflow
  MIPS: Use DIV_ROUND_CLOSEST
  MIPS: MTX-1: Request button GPIO before setting its direction
  MIPS: AR7: Override CFLAGS with -Werror
  MIPS: AR7: Remove unused tnetd7200_get_clock function
  MIPS: AR7: Use DMA_BIT_MASK(nn) instead of deprecated DMA_nnBIT_MASK
  MIPS: AR7: Fix build failures when CONFIG_SERIAL_8250 is not enabled
  MIPS: Fix read buffer overflow
  MIPS: AR7: Fix build warning on memory.c
  MIPS: Octeon PCIe: Make hardware and software bus numbers match.
  MIPS: RBTX4939: Fix IOC pin-enable register updating
  MIPS: Simplify and correct interrupt handling for MSP4200
  ...
parents 6ce90c43 54822de7
/* /*
* MTX-1 platform devices registration * MTX-1 platform devices registration
* *
* Copyright (C) 2007, Florian Fainelli <florian@openwrt.org> * Copyright (C) 2007-2009, Florian Fainelli <florian@openwrt.org>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -142,7 +142,17 @@ static struct __initdata platform_device * mtx1_devs[] = { ...@@ -142,7 +142,17 @@ static struct __initdata platform_device * mtx1_devs[] = {
static int __init mtx1_register_devices(void) static int __init mtx1_register_devices(void)
{ {
gpio_direction_input(207); int rc;
rc = gpio_request(mtx1_gpio_button[0].gpio,
mtx1_gpio_button[0].desc);
if (rc < 0) {
printk(KERN_INFO "mtx1: failed to request %d\n",
mtx1_gpio_button[0].gpio);
goto out;
}
gpio_direction_input(mtx1_gpio_button[0].gpio);
out:
return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs)); return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
} }
......
...@@ -8,3 +8,4 @@ obj-y := \ ...@@ -8,3 +8,4 @@ obj-y := \
platform.o \ platform.o \
gpio.o \ gpio.o \
clock.o clock.o
EXTRA_CFLAGS += -Werror
...@@ -264,19 +264,6 @@ static void __init tnetd7300_init_clocks(void) ...@@ -264,19 +264,6 @@ static void __init tnetd7300_init_clocks(void)
iounmap(bootcr); iounmap(bootcr);
} }
static int tnetd7200_get_clock(int base, struct tnetd7200_clock *clock,
u32 *bootcr, u32 bus_clock)
{
int divisor = ((readl(&clock->prediv) & 0x1f) + 1) *
((readl(&clock->postdiv) & 0x1f) + 1);
if (*bootcr & BOOT_PLL_BYPASS)
return base / divisor;
return base * ((readl(&clock->mul) & 0xf) + 1) / divisor;
}
static void tnetd7200_set_clock(int base, struct tnetd7200_clock *clock, static void tnetd7200_set_clock(int base, struct tnetd7200_clock *clock,
int prediv, int postdiv, int postdiv2, int mul, u32 frequency) int prediv, int postdiv, int postdiv2, int mul, u32 frequency)
{ {
......
...@@ -52,7 +52,7 @@ static int __init memsize(void) ...@@ -52,7 +52,7 @@ static int __init memsize(void)
size <<= 1; size <<= 1;
} while (size < (64 << 20)); } while (size < (64 << 20));
writel(tmpaddr, &addr); writel((u32)tmpaddr, &addr);
return size; return size;
} }
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/version.h>
#include <linux/vlynq.h> #include <linux/vlynq.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/string.h> #include <linux/string.h>
...@@ -243,13 +242,13 @@ static struct platform_device physmap_flash = { ...@@ -243,13 +242,13 @@ static struct platform_device physmap_flash = {
.num_resources = 1, .num_resources = 1,
}; };
static u64 cpmac_dma_mask = DMA_32BIT_MASK; static u64 cpmac_dma_mask = DMA_BIT_MASK(32);
static struct platform_device cpmac_low = { static struct platform_device cpmac_low = {
.id = 0, .id = 0,
.name = "cpmac", .name = "cpmac",
.dev = { .dev = {
.dma_mask = &cpmac_dma_mask, .dma_mask = &cpmac_dma_mask,
.coherent_dma_mask = DMA_32BIT_MASK, .coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &cpmac_low_data, .platform_data = &cpmac_low_data,
}, },
.resource = cpmac_low_res, .resource = cpmac_low_res,
...@@ -261,7 +260,7 @@ static struct platform_device cpmac_high = { ...@@ -261,7 +260,7 @@ static struct platform_device cpmac_high = {
.name = "cpmac", .name = "cpmac",
.dev = { .dev = {
.dma_mask = &cpmac_dma_mask, .dma_mask = &cpmac_dma_mask,
.coherent_dma_mask = DMA_32BIT_MASK, .coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &cpmac_high_data, .platform_data = &cpmac_high_data,
}, },
.resource = cpmac_high_res, .resource = cpmac_high_res,
...@@ -481,6 +480,7 @@ static void __init detect_leds(void) ...@@ -481,6 +480,7 @@ static void __init detect_leds(void)
static int __init ar7_register_devices(void) static int __init ar7_register_devices(void)
{ {
int res; int res;
#ifdef CONFIG_SERIAL_8250
static struct uart_port uart_port[2]; static struct uart_port uart_port[2];
memset(uart_port, 0, sizeof(struct uart_port) * 2); memset(uart_port, 0, sizeof(struct uart_port) * 2);
...@@ -512,7 +512,7 @@ static int __init ar7_register_devices(void) ...@@ -512,7 +512,7 @@ static int __init ar7_register_devices(void)
if (res) if (res)
return res; return res;
} }
#endif /* CONFIG_SERIAL_8250 */
res = platform_device_register(&physmap_flash); res = platform_device_register(&physmap_flash);
if (res) if (res)
return res; return res;
......
...@@ -144,7 +144,7 @@ static char * __init lookup_psp_var_map(u8 num) ...@@ -144,7 +144,7 @@ static char * __init lookup_psp_var_map(u8 num)
{ {
int i; int i;
for (i = 0; i < sizeof(psp_var_map); i++) for (i = 0; i < ARRAY_SIZE(psp_var_map); i++)
if (psp_var_map[i].num == num) if (psp_var_map[i].num == num)
return psp_var_map[i].value; return psp_var_map[i].value;
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
* with this program; if not, write to the Free Software Foundation, Inc., * with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
*/ */
#include <linux/version.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/pm.h> #include <linux/pm.h>
......
...@@ -194,11 +194,11 @@ static void octeon_init_secondary(void) ...@@ -194,11 +194,11 @@ static void octeon_init_secondary(void)
void octeon_prepare_cpus(unsigned int max_cpus) void octeon_prepare_cpus(unsigned int max_cpus)
{ {
cvmx_write_csr(CVMX_CIU_MBOX_CLRX(cvmx_get_core_num()), 0xffffffff); cvmx_write_csr(CVMX_CIU_MBOX_CLRX(cvmx_get_core_num()), 0xffffffff);
if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, IRQF_SHARED, if (request_irq(OCTEON_IRQ_MBOX0, mailbox_interrupt, IRQF_DISABLED,
"mailbox0", mailbox_interrupt)) { "mailbox0", mailbox_interrupt)) {
panic("Cannot request_irq(OCTEON_IRQ_MBOX0)\n"); panic("Cannot request_irq(OCTEON_IRQ_MBOX0)\n");
} }
if (request_irq(OCTEON_IRQ_MBOX1, mailbox_interrupt, IRQF_SHARED, if (request_irq(OCTEON_IRQ_MBOX1, mailbox_interrupt, IRQF_DISABLED,
"mailbox1", mailbox_interrupt)) { "mailbox1", mailbox_interrupt)) {
panic("Cannot request_irq(OCTEON_IRQ_MBOX1)\n"); panic("Cannot request_irq(OCTEON_IRQ_MBOX1)\n");
} }
......
/* /*
* linux/arch/mips/dec/ecc-berr.c
*
* Bus error event handling code for systems equipped with ECC * Bus error event handling code for systems equipped with ECC
* handling logic, i.e. DECstation/DECsystem 5000/200 (KN02), * handling logic, i.e. DECstation/DECsystem 5000/200 (KN02),
* 5000/240 (KN03), 5000/260 (KN05) and DECsystem 5900 (KN03), * 5000/240 (KN03), 5000/260 (KN05) and DECsystem 5900 (KN03),
......
/* /*
* arch/mips/dec/int-handler.S
*
* Copyright (C) 1995, 1996, 1997 Paul M. Antoine and Harald Koerfgen * Copyright (C) 1995, 1996, 1997 Paul M. Antoine and Harald Koerfgen
* Copyright (C) 2000, 2001, 2002, 2003, 2005 Maciej W. Rozycki * Copyright (C) 2000, 2001, 2002, 2003, 2005 Maciej W. Rozycki
* *
......
/* /*
* linux/arch/mips/dec/ioasic-irq.c
*
* DEC I/O ASIC interrupts. * DEC I/O ASIC interrupts.
* *
* Copyright (c) 2002, 2003 Maciej W. Rozycki * Copyright (c) 2002, 2003 Maciej W. Rozycki
......
/* /*
* linux/arch/mips/dec/kn01-berr.c
*
* Bus error event handling code for DECstation/DECsystem 3100 * Bus error event handling code for DECstation/DECsystem 3100
* and 2100 (KN01) systems equipped with parity error detection * and 2100 (KN01) systems equipped with parity error detection
* logic. * logic.
......
/* /*
* linux/arch/mips/dec/kn02-irq.c
*
* DECstation 5000/200 (KN02) Control and Status Register * DECstation 5000/200 (KN02) Control and Status Register
* interrupts. * interrupts.
* *
......
/* /*
* linux/arch/mips/dec/kn02xa-berr.c
*
* Bus error event handling code for 5000-series systems equipped * Bus error event handling code for 5000-series systems equipped
* with parity error detection logic, i.e. DECstation/DECsystem * with parity error detection logic, i.e. DECstation/DECsystem
* 5000/120, /125, /133 (KN02-BA), 5000/150 (KN04-BA) and Personal * 5000/120, /125, /133 (KN02-BA), 5000/150 (KN04-BA) and Personal
......
/* /*
* arch/mips/dec/prom/call_o32.S
*
* O32 interface for the 64 (or N32) ABI. * O32 interface for the 64 (or N32) ABI.
* *
* Copyright (C) 2002 Maciej W. Rozycki * Copyright (C) 2002 Maciej W. Rozycki
......
/* /*
* arch/mips/dec/prom/console.c
*
* DECstation PROM-based early console support. * DECstation PROM-based early console support.
* *
* Copyright (C) 2004, 2007 Maciej W. Rozycki * Copyright (C) 2004, 2007 Maciej W. Rozycki
......
/* /*
* linux/arch/mips/dec/time.c
*
* Copyright (C) 1991, 1992, 1995 Linus Torvalds * Copyright (C) 1991, 1992, 1995 Linus Torvalds
* Copyright (C) 2000, 2003 Maciej W. Rozycki * Copyright (C) 2000, 2003 Maciej W. Rozycki
* *
......
# #
# arch/mips/emma2rh/common/Makefile
# Makefile for the common code of NEC EMMA2RH based board.
#
# Copyright (C) NEC Electronics Corporation 2005-2006 # Copyright (C) NEC Electronics Corporation 2005-2006
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
......
/* /*
* arch/mips/emma2rh/common/prom.c
* This file is prom file.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/ddb5xxx/common/prom.c * This file is based on the arch/mips/ddb5xxx/common/prom.c
......
# #
# arch/mips/emma2rh/markeins/Makefile
# Makefile for the common code of NEC EMMA2RH based board.
#
# Copyright (C) NEC Electronics Corporation 2005-2006 # Copyright (C) NEC Electronics Corporation 2005-2006
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
......
/* /*
* arch/mips/emma2rh/markeins/irq.c
* This file defines the irq handler for EMMA2RH.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/ddb5xxx/ddb5477/irq.c * This file is based on the arch/mips/ddb5xxx/ddb5477/irq.c
......
/* /*
* arch/mips/emma2rh/markeins/led.c
* This file defines the led display for Mark-eins.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
......
/* /*
* arch/mips/emma2rh/markeins/platofrm.c
* This file sets up platform devices for EMMA2RH Mark-eins.
*
* Copyright(C) MontaVista Software Inc, 2006 * Copyright(C) MontaVista Software Inc, 2006
* *
* Author: dmitry pervushin <dpervushin@ru.mvista.com> * Author: dmitry pervushin <dpervushin@ru.mvista.com>
......
/* /*
* arch/mips/emma2rh/markeins/setup.c
* This file is setup for EMMA2RH Mark-eins.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/ddb5xxx/ddb5477/setup.c. * This file is based on the arch/mips/ddb5xxx/ddb5477/setup.c.
......
/* /*
* arch/mips/dec/prom/call_o32.S
*
* O32 interface for the 64 (or N32) ABI. * O32 interface for the 64 (or N32) ABI.
* *
* Copyright (C) 2002 Maciej W. Rozycki * Copyright (C) 2002 Maciej W. Rozycki
......
/* /*
* arch/mips/include/asm/emma/emma2rh.h
* This file is EMMA2RH common header.
*
* Copyright (C) NEC Electronics Corporation 2005-2006 * Copyright (C) NEC Electronics Corporation 2005-2006
* *
* This file based on include/asm-mips/ddb5xxx/ddb5xxx.h * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h
......
/* /*
* include/asm-mips/emma2rh/markeins.h
* This file is EMMA2RH board depended header.
*
* Copyright (C) NEC Electronics Corporation 2005-2006 * Copyright (C) NEC Electronics Corporation 2005-2006
* *
* This file based on include/asm-mips/ddb5xxx/ddb5xxx.h * This file based on include/asm-mips/ddb5xxx/ddb5xxx.h
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#define GIC_TRIG_EDGE 1 #define GIC_TRIG_EDGE 1
#define GIC_TRIG_LEVEL 0 #define GIC_TRIG_LEVEL 0
#if CONFIG_SMP #ifdef CONFIG_SMP
#define GIC_NUM_INTRS (24 + NR_CPUS * 2) #define GIC_NUM_INTRS (24 + NR_CPUS * 2)
#else #else
#define GIC_NUM_INTRS 32 #define GIC_NUM_INTRS 32
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#if defined(CONFIG_PMC_MSP7120_EVAL) || defined(CONFIG_PMC_MSP7120_GW) || \ #if defined(CONFIG_PMC_MSP7120_EVAL) || defined(CONFIG_PMC_MSP7120_GW) || \
defined(CONFIG_PMC_MSP7120_FPGA) defined(CONFIG_PMC_MSP7120_FPGA)
#define MIPS34K_MISSED_ITLB_WAR 1 #define MIPS34K_MISSED_ITLB_WAR 1
#else
#define MIPS34K_MISSED_ITLB_WAR 0
#endif #endif
#endif /* __ASM_MIPS_PMC_SIERRA_WAR_H */ #endif /* __ASM_MIPS_PMC_SIERRA_WAR_H */
...@@ -311,8 +311,9 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long ...@@ -311,8 +311,9 @@ extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long
unsigned long get_wchan(struct task_struct *p); unsigned long get_wchan(struct task_struct *p);
#define __KSTK_TOS(tsk) ((unsigned long)task_stack_page(tsk) + THREAD_SIZE - 32) #define __KSTK_TOS(tsk) ((unsigned long)task_stack_page(tsk) + \
#define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk) - 1) THREAD_SIZE - 32 - sizeof(struct pt_regs))
#define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk))
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc) #define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc)
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29]) #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29])
#define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status)
......
...@@ -354,16 +354,17 @@ ...@@ -354,16 +354,17 @@
#define __NR_pwritev (__NR_Linux + 331) #define __NR_pwritev (__NR_Linux + 331)
#define __NR_rt_tgsigqueueinfo (__NR_Linux + 332) #define __NR_rt_tgsigqueueinfo (__NR_Linux + 332)
#define __NR_perf_counter_open (__NR_Linux + 333) #define __NR_perf_counter_open (__NR_Linux + 333)
#define __NR_accept4 (__NR_Linux + 334)
/* /*
* Offset of the last Linux o32 flavoured syscall * Offset of the last Linux o32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 333 #define __NR_Linux_syscalls 334
#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
#define __NR_O32_Linux 4000 #define __NR_O32_Linux 4000
#define __NR_O32_Linux_syscalls 333 #define __NR_O32_Linux_syscalls 334
#if _MIPS_SIM == _MIPS_SIM_ABI64 #if _MIPS_SIM == _MIPS_SIM_ABI64
...@@ -664,16 +665,17 @@ ...@@ -664,16 +665,17 @@
#define __NR_pwritev (__NR_Linux + 290) #define __NR_pwritev (__NR_Linux + 290)
#define __NR_rt_tgsigqueueinfo (__NR_Linux + 291) #define __NR_rt_tgsigqueueinfo (__NR_Linux + 291)
#define __NR_perf_counter_open (__NR_Linux + 292) #define __NR_perf_counter_open (__NR_Linux + 292)
#define __NR_accept4 (__NR_Linux + 293)
/* /*
* Offset of the last Linux 64-bit flavoured syscall * Offset of the last Linux 64-bit flavoured syscall
*/ */
#define __NR_Linux_syscalls 292 #define __NR_Linux_syscalls 293
#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
#define __NR_64_Linux 5000 #define __NR_64_Linux 5000
#define __NR_64_Linux_syscalls 292 #define __NR_64_Linux_syscalls 293
#if _MIPS_SIM == _MIPS_SIM_NABI32 #if _MIPS_SIM == _MIPS_SIM_NABI32
...@@ -978,16 +980,17 @@ ...@@ -978,16 +980,17 @@
#define __NR_pwritev (__NR_Linux + 294) #define __NR_pwritev (__NR_Linux + 294)
#define __NR_rt_tgsigqueueinfo (__NR_Linux + 295) #define __NR_rt_tgsigqueueinfo (__NR_Linux + 295)
#define __NR_perf_counter_open (__NR_Linux + 296) #define __NR_perf_counter_open (__NR_Linux + 296)
#define __NR_accept4 (__NR_Linux + 297)
/* /*
* Offset of the last N32 flavoured syscall * Offset of the last N32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 296 #define __NR_Linux_syscalls 297
#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
#define __NR_N32_Linux 6000 #define __NR_N32_Linux 6000
#define __NR_N32_Linux_syscalls 296 #define __NR_N32_Linux_syscalls 297
#ifdef __KERNEL__ #ifdef __KERNEL__
......
...@@ -190,7 +190,7 @@ int vdma_free(unsigned long laddr) ...@@ -190,7 +190,7 @@ int vdma_free(unsigned long laddr)
return -1; return -1;
} }
while (pgtbl[i].owner == laddr && i < VDMA_PGTBL_ENTRIES) { while (i < VDMA_PGTBL_ENTRIES && pgtbl[i].owner == laddr) {
pgtbl[i].owner = VDMA_PAGE_EMPTY; pgtbl[i].owner = VDMA_PAGE_EMPTY;
i++; i++;
} }
......
...@@ -188,7 +188,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point ...@@ -188,7 +188,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
MTC0 zero, CP0_CONTEXT # clear context register MTC0 zero, CP0_CONTEXT # clear context register
PTR_LA $28, init_thread_union PTR_LA $28, init_thread_union
PTR_LI sp, _THREAD_SIZE - 32 /* Set the SP after an empty pt_regs. */
PTR_LI sp, _THREAD_SIZE - 32 - PT_SIZE
PTR_ADDU sp, $28 PTR_ADDU sp, $28
set_saved_sp sp, t0, t1 set_saved_sp sp, t0, t1
PTR_SUBU sp, 4 * SZREG # init stack pointer PTR_SUBU sp, 4 * SZREG # init stack pointer
......
/* /*
* linux/arch/mips/kernel/irq_txx9.c
*
* Based on linux/arch/mips/jmr3927/rbhma3100/irq.c, * Based on linux/arch/mips/jmr3927/rbhma3100/irq.c,
* linux/arch/mips/tx4927/common/tx4927_irq.c, * linux/arch/mips/tx4927/common/tx4927_irq.c,
* linux/arch/mips/tx4938/common/irq.c * linux/arch/mips/tx4938/common/irq.c
......
...@@ -98,7 +98,8 @@ static int apply_r_mips_32_rela(struct module *me, u32 *location, Elf_Addr v) ...@@ -98,7 +98,8 @@ static int apply_r_mips_32_rela(struct module *me, u32 *location, Elf_Addr v)
static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v) static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
{ {
if (v % 4) { if (v % 4) {
printk(KERN_ERR "module %s: dangerous relocation\n", me->name); pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
me->name);
return -ENOEXEC; return -ENOEXEC;
} }
...@@ -118,7 +119,8 @@ static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v) ...@@ -118,7 +119,8 @@ static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v) static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
{ {
if (v % 4) { if (v % 4) {
printk(KERN_ERR "module %s: dangerous relocation\n", me->name); pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
me->name);
return -ENOEXEC; return -ENOEXEC;
} }
...@@ -222,7 +224,7 @@ static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v) ...@@ -222,7 +224,7 @@ static int apply_r_mips_lo16_rel(struct module *me, u32 *location, Elf_Addr v)
return 0; return 0;
out_danger: out_danger:
printk(KERN_ERR "module %s: dangerous " "relocation\n", me->name); pr_err("module %s: dangerous R_MIPS_LO16 REL relocation\n", me->name);
return -ENOEXEC; return -ENOEXEC;
} }
...@@ -301,7 +303,7 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab, ...@@ -301,7 +303,7 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab,
/* This is the symbol it is referring to */ /* This is the symbol it is referring to */
sym = (Elf_Sym *)sechdrs[symindex].sh_addr sym = (Elf_Sym *)sechdrs[symindex].sh_addr
+ ELF_MIPS_R_SYM(rel[i]); + ELF_MIPS_R_SYM(rel[i]);
if (!sym->st_value) { if (IS_ERR_VALUE(sym->st_value)) {
/* Ignore unresolved weak symbol */ /* Ignore unresolved weak symbol */
if (ELF_ST_BIND(sym->st_info) == STB_WEAK) if (ELF_ST_BIND(sym->st_info) == STB_WEAK)
continue; continue;
...@@ -341,7 +343,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab, ...@@ -341,7 +343,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
/* This is the symbol it is referring to */ /* This is the symbol it is referring to */
sym = (Elf_Sym *)sechdrs[symindex].sh_addr sym = (Elf_Sym *)sechdrs[symindex].sh_addr
+ ELF_MIPS_R_SYM(rel[i]); + ELF_MIPS_R_SYM(rel[i]);
if (!sym->st_value) { if (IS_ERR_VALUE(sym->st_value)) {
/* Ignore unresolved weak symbol */ /* Ignore unresolved weak symbol */
if (ELF_ST_BIND(sym->st_info) == STB_WEAK) if (ELF_ST_BIND(sym->st_info) == STB_WEAK)
continue; continue;
......
/* /*
* linux/arch/mips/kernel/proc.c
*
* Copyright (C) 1995, 1996, 2001 Ralf Baechle * Copyright (C) 1995, 1996, 2001 Ralf Baechle
* Copyright (C) 2001, 2004 MIPS Technologies, Inc. * Copyright (C) 2001, 2004 MIPS Technologies, Inc.
* Copyright (C) 2004 Maciej W. Rozycki * Copyright (C) 2004 Maciej W. Rozycki
......
...@@ -115,7 +115,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, ...@@ -115,7 +115,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
{ {
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);
struct pt_regs *childregs; struct pt_regs *childregs;
long childksp; unsigned long childksp;
p->set_child_tid = p->clear_child_tid = NULL; p->set_child_tid = p->clear_child_tid = NULL;
childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32; childksp = (unsigned long)task_stack_page(p) + THREAD_SIZE - 32;
...@@ -132,6 +132,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, ...@@ -132,6 +132,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
/* set up new TSS. */ /* set up new TSS. */
childregs = (struct pt_regs *) childksp - 1; childregs = (struct pt_regs *) childksp - 1;
/* Put the stack after the struct pt_regs. */
childksp = (unsigned long) childregs;
*childregs = *regs; *childregs = *regs;
childregs->regs[7] = 0; /* Clear error flag */ childregs->regs[7] = 0; /* Clear error flag */
......
...@@ -654,6 +654,7 @@ einval: li v0, -ENOSYS ...@@ -654,6 +654,7 @@ einval: li v0, -ENOSYS
sys sys_pwritev 6 sys sys_pwritev 6
sys sys_rt_tgsigqueueinfo 4 sys sys_rt_tgsigqueueinfo 4
sys sys_perf_counter_open 5 sys sys_perf_counter_open 5
sys sys_accept4 4
.endm .endm
/* We pre-compute the number of _instruction_ bytes needed to /* We pre-compute the number of _instruction_ bytes needed to
......
...@@ -491,4 +491,5 @@ sys_call_table: ...@@ -491,4 +491,5 @@ sys_call_table:
PTR sys_pwritev /* 5390 */ PTR sys_pwritev /* 5390 */
PTR sys_rt_tgsigqueueinfo PTR sys_rt_tgsigqueueinfo
PTR sys_perf_counter_open PTR sys_perf_counter_open
PTR sys_accept4
.size sys_call_table,.-sys_call_table .size sys_call_table,.-sys_call_table
...@@ -417,4 +417,5 @@ EXPORT(sysn32_call_table) ...@@ -417,4 +417,5 @@ EXPORT(sysn32_call_table)
PTR sys_pwritev PTR sys_pwritev
PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ PTR compat_sys_rt_tgsigqueueinfo /* 5295 */
PTR sys_perf_counter_open PTR sys_perf_counter_open
PTR sys_accept4
.size sysn32_call_table,.-sysn32_call_table .size sysn32_call_table,.-sysn32_call_table
...@@ -537,4 +537,5 @@ sys_call_table: ...@@ -537,4 +537,5 @@ sys_call_table:
PTR compat_sys_pwritev PTR compat_sys_pwritev
PTR compat_sys_rt_tgsigqueueinfo PTR compat_sys_rt_tgsigqueueinfo
PTR sys_perf_counter_open PTR sys_perf_counter_open
PTR sys_accept4
.size sys_call_table,.-sys_call_table .size sys_call_table,.-sys_call_table
...@@ -465,11 +465,8 @@ void smtc_prepare_cpus(int cpus) ...@@ -465,11 +465,8 @@ void smtc_prepare_cpus(int cpus)
smtc_configure_tlb(); smtc_configure_tlb();
for (tc = 0, vpe = 0 ; (vpe < nvpe) && (tc < ntc) ; vpe++) { for (tc = 0, vpe = 0 ; (vpe < nvpe) && (tc < ntc) ; vpe++) {
/* if (tcpervpe[vpe] == 0)
* Set the MVP bits. continue;
*/
settc(tc);
write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() | VPECONF0_MVP);
if (vpe != 0) if (vpe != 0)
printk(", "); printk(", ");
printk("VPE %d: TC", vpe); printk("VPE %d: TC", vpe);
...@@ -487,6 +484,12 @@ void smtc_prepare_cpus(int cpus) ...@@ -487,6 +484,12 @@ void smtc_prepare_cpus(int cpus)
tc++; tc++;
} }
if (vpe != 0) { if (vpe != 0) {
/*
* Allow this VPE to control others.
*/
write_vpe_c0_vpeconf0(read_vpe_c0_vpeconf0() |
VPECONF0_MVP);
/* /*
* Clear any stale software interrupts from VPE's Cause * Clear any stale software interrupts from VPE's Cause
*/ */
......
/* /*
* arch/mips/kernel/stacktrace.c
*
* Stack trace management functions * Stack trace management functions
* *
* Copyright (C) 2006 Atsushi Nemoto <anemo@mba.ocn.ne.jp> * Copyright (C) 2006 Atsushi Nemoto <anemo@mba.ocn.ne.jp>
......
...@@ -73,7 +73,7 @@ static int major; ...@@ -73,7 +73,7 @@ static int major;
static const int minor = 1; /* fixed for now */ static const int minor = 1; /* fixed for now */
#ifdef CONFIG_MIPS_APSP_KSPD #ifdef CONFIG_MIPS_APSP_KSPD
static struct kspd_notifications kspd_events; static struct kspd_notifications kspd_events;
static int kspd_events_reqd = 0; static int kspd_events_reqd = 0;
#endif #endif
...@@ -155,10 +155,9 @@ struct { ...@@ -155,10 +155,9 @@ struct {
}; };
static void release_progmem(void *ptr); static void release_progmem(void *ptr);
extern void save_gp_address(unsigned int secbase, unsigned int rel);
/* get the vpe associated with this minor */ /* get the vpe associated with this minor */
struct vpe *get_vpe(int minor) static struct vpe *get_vpe(int minor)
{ {
struct vpe *v; struct vpe *v;
...@@ -174,7 +173,7 @@ struct vpe *get_vpe(int minor) ...@@ -174,7 +173,7 @@ struct vpe *get_vpe(int minor)
} }
/* get the vpe associated with this minor */ /* get the vpe associated with this minor */
struct tc *get_tc(int index) static struct tc *get_tc(int index)
{ {
struct tc *t; struct tc *t;
...@@ -186,20 +185,8 @@ struct tc *get_tc(int index) ...@@ -186,20 +185,8 @@ struct tc *get_tc(int index)
return NULL; return NULL;
} }
struct tc *get_tc_unused(void)
{
struct tc *t;
list_for_each_entry(t, &vpecontrol.tc_list, list) {
if (t->state == TC_STATE_UNUSED)
return t;
}
return NULL;
}
/* allocate a vpe and associate it with this minor (or index) */ /* allocate a vpe and associate it with this minor (or index) */
struct vpe *alloc_vpe(int minor) static struct vpe *alloc_vpe(int minor)
{ {
struct vpe *v; struct vpe *v;
...@@ -216,7 +203,7 @@ struct vpe *alloc_vpe(int minor) ...@@ -216,7 +203,7 @@ struct vpe *alloc_vpe(int minor)
} }
/* allocate a tc. At startup only tc0 is running, all other can be halted. */ /* allocate a tc. At startup only tc0 is running, all other can be halted. */
struct tc *alloc_tc(int index) static struct tc *alloc_tc(int index)
{ {
struct tc *tc; struct tc *tc;
...@@ -232,7 +219,7 @@ struct tc *alloc_tc(int index) ...@@ -232,7 +219,7 @@ struct tc *alloc_tc(int index)
} }
/* clean up and free everything */ /* clean up and free everything */
void release_vpe(struct vpe *v) static void release_vpe(struct vpe *v)
{ {
list_del(&v->list); list_del(&v->list);
if (v->load_addr) if (v->load_addr)
...@@ -240,7 +227,7 @@ void release_vpe(struct vpe *v) ...@@ -240,7 +227,7 @@ void release_vpe(struct vpe *v)
kfree(v); kfree(v);
} }
void dump_mtregs(void) static void dump_mtregs(void)
{ {
unsigned long val; unsigned long val;
...@@ -327,7 +314,8 @@ static void layout_sections(struct module *mod, const Elf_Ehdr * hdr, ...@@ -327,7 +314,8 @@ static void layout_sections(struct module *mod, const Elf_Ehdr * hdr,
|| (s->sh_flags & masks[m][1]) || (s->sh_flags & masks[m][1])
|| s->sh_entsize != ~0UL) || s->sh_entsize != ~0UL)
continue; continue;
s->sh_entsize = get_offset(&mod->core_size, s); s->sh_entsize =
get_offset((unsigned long *)&mod->core_size, s);
} }
if (m == 0) if (m == 0)
...@@ -461,16 +449,15 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location, ...@@ -461,16 +449,15 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
{ {
unsigned long insnlo = *location; unsigned long insnlo = *location;
Elf32_Addr val, vallo; Elf32_Addr val, vallo;
struct mips_hi16 *l, *next;
/* Sign extend the addend we extract from the lo insn. */ /* Sign extend the addend we extract from the lo insn. */
vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000; vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;
if (mips_hi16_list != NULL) { if (mips_hi16_list != NULL) {
struct mips_hi16 *l;
l = mips_hi16_list; l = mips_hi16_list;
while (l != NULL) { while (l != NULL) {
struct mips_hi16 *next;
unsigned long insn; unsigned long insn;
/* /*
...@@ -480,7 +467,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location, ...@@ -480,7 +467,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
printk(KERN_DEBUG "VPE loader: " printk(KERN_DEBUG "VPE loader: "
"apply_r_mips_lo16/hi16: \t" "apply_r_mips_lo16/hi16: \t"
"inconsistent value information\n"); "inconsistent value information\n");
return -ENOEXEC; goto out_free;
} }
/* /*
...@@ -518,6 +505,16 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location, ...@@ -518,6 +505,16 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
*location = insnlo; *location = insnlo;
return 0; return 0;
out_free:
while (l != NULL) {
next = l->next;
kfree(l);
l = next;
}
mips_hi16_list = NULL;
return -ENOEXEC;
} }
static int (*reloc_handlers[]) (struct module *me, uint32_t *location, static int (*reloc_handlers[]) (struct module *me, uint32_t *location,
...@@ -541,7 +538,7 @@ static char *rstrs[] = { ...@@ -541,7 +538,7 @@ static char *rstrs[] = {
[R_MIPS_PC16] = "MIPS_PC16" [R_MIPS_PC16] = "MIPS_PC16"
}; };
int apply_relocations(Elf32_Shdr *sechdrs, static int apply_relocations(Elf32_Shdr *sechdrs,
const char *strtab, const char *strtab,
unsigned int symindex, unsigned int symindex,
unsigned int relsec, unsigned int relsec,
...@@ -586,7 +583,7 @@ int apply_relocations(Elf32_Shdr *sechdrs, ...@@ -586,7 +583,7 @@ int apply_relocations(Elf32_Shdr *sechdrs,
return 0; return 0;
} }
void save_gp_address(unsigned int secbase, unsigned int rel) static inline void save_gp_address(unsigned int secbase, unsigned int rel)
{ {
gp_addr = secbase + rel; gp_addr = secbase + rel;
gp_offs = gp_addr - (secbase & 0xffff0000); gp_offs = gp_addr - (secbase & 0xffff0000);
......
...@@ -89,13 +89,13 @@ unsigned __cpuinit get_c0_compare_int(void) ...@@ -89,13 +89,13 @@ unsigned __cpuinit get_c0_compare_int(void)
if (cpu_has_veic) { if (cpu_has_veic) {
set_vi_handler(MSC01E_INT_CPUCTR, mips_timer_dispatch); set_vi_handler(MSC01E_INT_CPUCTR, mips_timer_dispatch);
mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR; mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR;
} else {
#endif return mips_cpu_timer_irq;
{
if (cpu_has_vint)
set_vi_handler(cp0_compare_irq, mips_timer_dispatch);
mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
} }
#endif
if (cpu_has_vint)
set_vi_handler(cp0_compare_irq, mips_timer_dispatch);
mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
return mips_cpu_timer_irq; return mips_cpu_timer_irq;
} }
......
...@@ -289,7 +289,7 @@ static void cache_parity_error_octeon(int non_recoverable) ...@@ -289,7 +289,7 @@ static void cache_parity_error_octeon(int non_recoverable)
} }
/** /**
* Called when the the exception is not recoverable * Called when the the exception is recoverable
*/ */
asmlinkage void cache_parity_error_octeon_recoverable(void) asmlinkage void cache_parity_error_octeon_recoverable(void)
...@@ -298,7 +298,7 @@ asmlinkage void cache_parity_error_octeon_recoverable(void) ...@@ -298,7 +298,7 @@ asmlinkage void cache_parity_error_octeon_recoverable(void)
} }
/** /**
* Called when the the exception is recoverable * Called when the the exception is not recoverable
*/ */
asmlinkage void cache_parity_error_octeon_non_recoverable(void) asmlinkage void cache_parity_error_octeon_non_recoverable(void)
......
/* /*
* linux/arch/mips/mm/extable.c * 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) 1997, 99, 2001 - 2004 Ralf Baechle <ralf@linux-mips.org>
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
......
...@@ -171,6 +171,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, ...@@ -171,6 +171,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
* We ran out of memory, call the OOM killer, and return the userspace * We ran out of memory, call the OOM killer, and return the userspace
* (which will retry the fault, or kill us if we got oom-killed). * (which will retry the fault, or kill us if we got oom-killed).
*/ */
up_read(&mm->mmap_sem);
pagefault_out_of_memory(); pagefault_out_of_memory();
return; return;
......
...@@ -331,6 +331,7 @@ static struct irqaction irq_call = { ...@@ -331,6 +331,7 @@ static struct irqaction irq_call = {
.flags = IRQF_DISABLED|IRQF_PERCPU, .flags = IRQF_DISABLED|IRQF_PERCPU,
.name = "IPI_call" .name = "IPI_call"
}; };
#endif /* CONFIG_MIPS_MT_SMP */
static int gic_resched_int_base; static int gic_resched_int_base;
static int gic_call_int_base; static int gic_call_int_base;
...@@ -346,7 +347,6 @@ unsigned int plat_ipi_resched_int_xlate(unsigned int cpu) ...@@ -346,7 +347,6 @@ unsigned int plat_ipi_resched_int_xlate(unsigned int cpu)
{ {
return GIC_RESCHED_INT(cpu); return GIC_RESCHED_INT(cpu);
} }
#endif /* CONFIG_MIPS_MT_SMP */
static struct irqaction i8259irq = { static struct irqaction i8259irq = {
.handler = no_action, .handler = no_action,
......
...@@ -138,7 +138,7 @@ __init void plat_time_init(void) ...@@ -138,7 +138,7 @@ __init void plat_time_init(void)
* HZ timer interrupts per second. * HZ timer interrupts per second.
*/ */
mips_hpt_frequency = 27UL * ((1000000UL * n)/(m * pow2p)); mips_hpt_frequency = 27UL * ((1000000UL * n)/(m * pow2p));
cpj = (mips_hpt_frequency + HZ / 2) / HZ; cpj = DIV_ROUND_CLOSEST(mips_hpt_frequency, HZ);
write_c0_count(0); write_c0_count(0);
timer_ack(); timer_ack();
......
/* /*
* arch/mips/pci/fixup-emma2rh.c
* This file defines the PCI configration.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c
......
/* /*
* arch/mips/pci/fixup-sb1250.c
*
* Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved. * Copyright (C) 2004, 2006 MIPS Technologies, Inc. All rights reserved.
* Author: Maciej W. Rozycki <macro@mips.com> * Author: Maciej W. Rozycki <macro@mips.com>
* *
......
/* /*
* arch/mips/pci/ops-emma2rh.c
* This file defines the PCI operation for EMMA2RH.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/pci/ops-vr41xx.c * This file is based on the arch/mips/pci/ops-vr41xx.c
......
/* /*
* arch/mips/pci/pci-emma2rh.c
* This file defines the PCI configration.
*
* Copyright (C) NEC Electronics Corporation 2004-2006 * Copyright (C) NEC Electronics Corporation 2004-2006
* *
* This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c * This file is based on the arch/mips/ddb5xxx/ddb5477/pci.c
......
/* /*
* linux/arch/mips/pci/pci-tx4927.c
*
* Based on linux/arch/mips/txx9/rbtx4938/setup.c, * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
* and RBTX49xx patch from CELF patch archive. * and RBTX49xx patch from CELF patch archive.
* *
......
/* /*
* linux/arch/mips/pci/pci-tx4938.c
*
* Based on linux/arch/mips/txx9/rbtx4938/setup.c, * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
* and RBTX49xx patch from CELF patch archive. * and RBTX49xx patch from CELF patch archive.
* *
......
/* /*
* linux/arch/mips/pci/pci-tx4939.c
*
* Based on linux/arch/mips/txx9/rbtx4939/setup.c, * Based on linux/arch/mips/txx9/rbtx4939/setup.c,
* and RBTX49xx patch from CELF patch archive. * and RBTX49xx patch from CELF patch archive.
* *
......
...@@ -1040,19 +1040,29 @@ static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus, ...@@ -1040,19 +1040,29 @@ static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus,
int bus_number = bus->number; int bus_number = bus->number;
/* /*
* We need to force the bus number to be zero on the root * For the top level bus make sure our hardware bus number
* bus. Linux numbers the 2nd root bus to start after all * matches the software one.
* buses on root 0.
*/ */
if (bus->parent == NULL) if (bus->parent == NULL) {
bus_number = 0; union cvmx_pciercx_cfg006 pciercx_cfg006;
pciercx_cfg006.u32 = cvmx_pcie_cfgx_read(pcie_port,
CVMX_PCIERCX_CFG006(pcie_port));
if (pciercx_cfg006.s.pbnum != bus_number) {
pciercx_cfg006.s.pbnum = bus_number;
pciercx_cfg006.s.sbnum = bus_number;
pciercx_cfg006.s.subbnum = bus_number;
cvmx_pcie_cfgx_write(pcie_port,
CVMX_PCIERCX_CFG006(pcie_port),
pciercx_cfg006.u32);
}
}
/* /*
* PCIe only has a single device connected to Octeon. It is * PCIe only has a single device connected to Octeon. It is
* always device ID 0. Don't bother doing reads for other * always device ID 0. Don't bother doing reads for other
* device IDs on the first segment. * device IDs on the first segment.
*/ */
if ((bus_number == 0) && (devfn >> 3 != 0)) if ((bus->parent == NULL) && (devfn >> 3 != 0))
return PCIBIOS_FUNC_NOT_SUPPORTED; return PCIBIOS_FUNC_NOT_SUPPORTED;
/* /*
...@@ -1070,7 +1080,7 @@ static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus, ...@@ -1070,7 +1080,7 @@ static inline int octeon_pcie_read_config(int pcie_port, struct pci_bus *bus,
* bridge only respondes to device ID 0, function * bridge only respondes to device ID 0, function
* 0-1 * 0-1
*/ */
if ((bus_number == 0) && (devfn >= 2)) if ((bus->parent == NULL) && (devfn >= 2))
return PCIBIOS_FUNC_NOT_SUPPORTED; return PCIBIOS_FUNC_NOT_SUPPORTED;
/* /*
* The PCI-X slots are device ID 2,3. Choose one of * The PCI-X slots are device ID 2,3. Choose one of
...@@ -1167,13 +1177,6 @@ static inline int octeon_pcie_write_config(int pcie_port, struct pci_bus *bus, ...@@ -1167,13 +1177,6 @@ static inline int octeon_pcie_write_config(int pcie_port, struct pci_bus *bus,
int size, u32 val) int size, u32 val)
{ {
int bus_number = bus->number; int bus_number = bus->number;
/*
* We need to force the bus number to be zero on the root
* bus. Linux numbers the 2nd root bus to start after all
* busses on root 0.
*/
if (bus->parent == NULL)
bus_number = 0;
switch (size) { switch (size) {
case 4: case 4:
......
/* /*
* @file /arch/mips/pmc-sierra/msp71xx/gpio.c
*
* Generic PMC MSP71xx GPIO handling. These base gpio are controlled by two * Generic PMC MSP71xx GPIO handling. These base gpio are controlled by two
* types of registers. The data register sets the output level when in output * types of registers. The data register sets the output level when in output
* mode and when in input mode will contain the value at the input. The config * mode and when in input mode will contain the value at the input. The config
......
/* /*
* @file /arch/mips/pmc-sierra/msp71xx/gpio_extended.c
*
* Generic PMC MSP71xx EXTENDED (EXD) GPIO handling. The extended gpio is * Generic PMC MSP71xx EXTENDED (EXD) GPIO handling. The extended gpio is
* a set of hardware registers that have no need for explicit locking as * a set of hardware registers that have no need for explicit locking as
* it is handled by unique method of writing individual set/clr bits. * it is handled by unique method of writing individual set/clr bits.
......
...@@ -45,13 +45,6 @@ static inline void mask_msp_slp_irq(unsigned int irq) ...@@ -45,13 +45,6 @@ static inline void mask_msp_slp_irq(unsigned int irq)
*/ */
static inline void ack_msp_slp_irq(unsigned int irq) static inline void ack_msp_slp_irq(unsigned int irq)
{ {
mask_slp_irq(irq);
/*
* only really necessary for 18, 16-14 and sometimes 3:0 (since
* these can be edge sensitive) but it doesn't hurt for the others.
*/
/* check for PER interrupt range */ /* check for PER interrupt range */
if (irq < MSP_PER_INTBASE) if (irq < MSP_PER_INTBASE)
*SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE)); *SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE));
...@@ -62,8 +55,7 @@ static inline void ack_msp_slp_irq(unsigned int irq) ...@@ -62,8 +55,7 @@ static inline void ack_msp_slp_irq(unsigned int irq)
static struct irq_chip msp_slp_irq_controller = { static struct irq_chip msp_slp_irq_controller = {
.name = "MSP_SLP", .name = "MSP_SLP",
.ack = ack_msp_slp_irq, .ack = ack_msp_slp_irq,
.mask = ack_msp_slp_irq, .mask = mask_msp_slp_irq,
.mask_ack = ack_msp_slp_irq,
.unmask = unmask_msp_slp_irq, .unmask = unmask_msp_slp_irq,
}; };
...@@ -79,7 +71,7 @@ void __init msp_slp_irq_init(void) ...@@ -79,7 +71,7 @@ void __init msp_slp_irq_init(void)
/* initialize all the IRQ descriptors */ /* initialize all the IRQ descriptors */
for (i = MSP_SLP_INTBASE; i < MSP_PER_INTBASE + 32; i++) for (i = MSP_SLP_INTBASE; i < MSP_PER_INTBASE + 32; i++)
set_irq_chip_and_handler(i, &msp_slp_irq_controller set_irq_chip_and_handler(i, &msp_slp_irq_controller,
handle_level_irq); handle_level_irq);
} }
......
/* /*
* arch/mips/pmc-sierra/yosemite/atmel_read_eeprom.c
*
* Copyright (C) 2003 PMC-Sierra Inc. * Copyright (C) 2003 PMC-Sierra Inc.
* Author: Manish Lachwani (lachwani@pmc-sierra.com) * Author: Manish Lachwani (lachwani@pmc-sierra.com)
* *
......
/* /*
* arch/mips/sibyte/swarm/swarm-i2c.c
*
* Broadcom BCM91250A (SWARM), etc. I2C platform setup. * Broadcom BCM91250A (SWARM), etc. I2C platform setup.
* *
* Copyright (c) 2008 Maciej W. Rozycki * Copyright (c) 2008 Maciej W. Rozycki
......
/* /*
* linux/arch/mips/txx9/generic/mem_tx4927.c
*
* common tx4927 memory interface * common tx4927 memory interface
* *
* Author: MontaVista Software, Inc. * Author: MontaVista Software, Inc.
......
/* /*
* linux/arch/mips/txx9/generic/setup.c
*
* Based on linux/arch/mips/txx9/rbtx4938/setup.c, * Based on linux/arch/mips/txx9/rbtx4938/setup.c,
* and RBTX49xx patch from CELF patch archive. * and RBTX49xx patch from CELF patch archive.
* *
......
...@@ -512,10 +512,10 @@ static void __init rbtx4939_setup(void) ...@@ -512,10 +512,10 @@ static void __init rbtx4939_setup(void)
rbtx4939_ebusc_setup(); rbtx4939_ebusc_setup();
/* always enable ATA0 */ /* always enable ATA0 */
txx9_set64(&tx4939_ccfgptr->pcfg, TX4939_PCFG_ATA0MODE); txx9_set64(&tx4939_ccfgptr->pcfg, TX4939_PCFG_ATA0MODE);
rbtx4939_update_ioc_pen();
if (txx9_master_clock == 0) if (txx9_master_clock == 0)
txx9_master_clock = 20000000; txx9_master_clock = 20000000;
tx4939_setup(); tx4939_setup();
rbtx4939_update_ioc_pen();
#ifdef HAVE_RBTX4939_IOSWAB #ifdef HAVE_RBTX4939_IOSWAB
ioswabw = rbtx4939_ioswabw; ioswabw = rbtx4939_ioswabw;
__mem_ioswabw = rbtx4939_mem_ioswabw; __mem_ioswabw = rbtx4939_mem_ioswabw;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment