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 ...
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* 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[] = {
|
|||||||
|
|
||||||
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 := \
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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 = {
|
|||||||
.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 = {
|
|||||||
.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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
* 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)
|
|||||||
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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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),
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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.
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
#
|
#
|
||||||
# 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
#
|
#
|
||||||
# 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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>
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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.
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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 @@
|
|||||||
#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 @@
|
|||||||
#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
|
|||||||
|
|
||||||
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 @@
|
|||||||
#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 @@
|
|||||||
#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 @@
|
|||||||
#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)
|
|||||||
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
|
|||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
/* 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,
|
|||||||
/* 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;
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
|
|
||||||
/* 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
|
|||||||
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:
|
|||||||
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)
|
|||||||
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:
|
|||||||
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)
|
|||||||
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)
|
|||||||
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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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;
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
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,
|
|||||||
|| (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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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,
|
|||||||
*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[] = {
|
|||||||
[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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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)
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* 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 @@ out_of_memory:
|
|||||||
* 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 = {
|
|||||||
.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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
* 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();
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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>
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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,
|
|||||||
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,
|
|||||||
* 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,
|
|||||||
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:
|
||||||
|
|||||||
@@ -1,6 +1,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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* @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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
/* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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)
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* linux/arch/mips/txx9/generic/mem_tx4927.c
|
|
||||||
*
|
|
||||||
* common tx4927 memory interface
|
* common tx4927 memory interface
|
||||||
*
|
*
|
||||||
* Author: MontaVista Software, Inc.
|
* Author: MontaVista Software, Inc.
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user