Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts: drivers/net/wireless/iwlwifi/iwl-agn.c drivers/net/wireless/iwlwifi/iwl3945-base.c
This commit is contained in:
commit
5e30589521
4
.mailmap
4
.mailmap
@ -92,6 +92,7 @@ Rudolf Marek <R.Marek@sh.cvut.cz>
|
|||||||
Rui Saraiva <rmps@joel.ist.utl.pt>
|
Rui Saraiva <rmps@joel.ist.utl.pt>
|
||||||
Sachin P Sant <ssant@in.ibm.com>
|
Sachin P Sant <ssant@in.ibm.com>
|
||||||
Sam Ravnborg <sam@mars.ravnborg.org>
|
Sam Ravnborg <sam@mars.ravnborg.org>
|
||||||
|
Sascha Hauer <s.hauer@pengutronix.de>
|
||||||
S.Çağlar Onur <caglar@pardus.org.tr>
|
S.Çağlar Onur <caglar@pardus.org.tr>
|
||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
@ -100,6 +101,7 @@ Tejun Heo <htejun@gmail.com>
|
|||||||
Thomas Graf <tgraf@suug.ch>
|
Thomas Graf <tgraf@suug.ch>
|
||||||
Tony Luck <tony.luck@intel.com>
|
Tony Luck <tony.luck@intel.com>
|
||||||
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
|
||||||
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||||
|
Uwe Kleine-König <ukl@pengutronix.de>
|
||||||
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
|
@ -137,7 +137,7 @@ static void cn_test_timer_func(unsigned long __data)
|
|||||||
|
|
||||||
memcpy(m + 1, data, m->len);
|
memcpy(m + 1, data, m->len);
|
||||||
|
|
||||||
cn_netlink_send(m, 0, gfp_any());
|
cn_netlink_send(m, 0, GFP_ATOMIC);
|
||||||
kfree(m);
|
kfree(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,10 +160,8 @@ static int cn_test_init(void)
|
|||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
init_timer(&cn_test_timer);
|
setup_timer(&cn_test_timer, cn_test_timer_func, 0);
|
||||||
cn_test_timer.function = cn_test_timer_func;
|
|
||||||
cn_test_timer.expires = jiffies + HZ;
|
cn_test_timer.expires = jiffies + HZ;
|
||||||
cn_test_timer.data = 0;
|
|
||||||
add_timer(&cn_test_timer);
|
add_timer(&cn_test_timer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -195,19 +195,3 @@ scaling_setspeed. By "echoing" a new frequency into this
|
|||||||
you can change the speed of the CPU,
|
you can change the speed of the CPU,
|
||||||
but only within the limits of
|
but only within the limits of
|
||||||
scaling_min_freq and scaling_max_freq.
|
scaling_min_freq and scaling_max_freq.
|
||||||
|
|
||||||
|
|
||||||
3.2 Deprecated Interfaces
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Depending on your kernel configuration, you might find the following
|
|
||||||
cpufreq-related files:
|
|
||||||
/proc/cpufreq
|
|
||||||
/proc/sys/cpu/*/speed
|
|
||||||
/proc/sys/cpu/*/speed-min
|
|
||||||
/proc/sys/cpu/*/speed-max
|
|
||||||
|
|
||||||
These are files for deprecated interfaces to cpufreq, which offer far
|
|
||||||
less functionality. Because of this, these interfaces aren't described
|
|
||||||
here.
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ that support it. For example, a given bus might look like this:
|
|||||||
| |-- class
|
| |-- class
|
||||||
| |-- config
|
| |-- config
|
||||||
| |-- device
|
| |-- device
|
||||||
|
| |-- enable
|
||||||
| |-- irq
|
| |-- irq
|
||||||
| |-- local_cpus
|
| |-- local_cpus
|
||||||
| |-- resource
|
| |-- resource
|
||||||
@ -32,6 +33,7 @@ files, each with their own function.
|
|||||||
class PCI class (ascii, ro)
|
class PCI class (ascii, ro)
|
||||||
config PCI config space (binary, rw)
|
config PCI config space (binary, rw)
|
||||||
device PCI device (ascii, ro)
|
device PCI device (ascii, ro)
|
||||||
|
enable Whether the device is enabled (ascii, rw)
|
||||||
irq IRQ number (ascii, ro)
|
irq IRQ number (ascii, ro)
|
||||||
local_cpus nearby CPU mask (cpumask, ro)
|
local_cpus nearby CPU mask (cpumask, ro)
|
||||||
resource PCI resource host addresses (ascii, ro)
|
resource PCI resource host addresses (ascii, ro)
|
||||||
@ -57,10 +59,19 @@ used to do actual device programming from userspace. Note that some platforms
|
|||||||
don't support mmapping of certain resources, so be sure to check the return
|
don't support mmapping of certain resources, so be sure to check the return
|
||||||
value from any attempted mmap.
|
value from any attempted mmap.
|
||||||
|
|
||||||
|
The 'enable' file provides a counter that indicates how many times the device
|
||||||
|
has been enabled. If the 'enable' file currently returns '4', and a '1' is
|
||||||
|
echoed into it, it will then return '5'. Echoing a '0' into it will decrease
|
||||||
|
the count. Even when it returns to 0, though, some of the initialisation
|
||||||
|
may not be reversed.
|
||||||
|
|
||||||
The 'rom' file is special in that it provides read-only access to the device's
|
The 'rom' file is special in that it provides read-only access to the device's
|
||||||
ROM file, if available. It's disabled by default, however, so applications
|
ROM file, if available. It's disabled by default, however, so applications
|
||||||
should write the string "1" to the file to enable it before attempting a read
|
should write the string "1" to the file to enable it before attempting a read
|
||||||
call, and disable it following the access by writing "0" to the file.
|
call, and disable it following the access by writing "0" to the file. Note
|
||||||
|
that the device must be enabled for a rom read to return data succesfully.
|
||||||
|
In the event a driver is not bound to the device, it can be enabled using the
|
||||||
|
'enable' file, documented above.
|
||||||
|
|
||||||
Accessing legacy resources through sysfs
|
Accessing legacy resources through sysfs
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
@ -43,7 +43,8 @@ Only comments so marked will be considered by the kernel-doc scripts,
|
|||||||
and any comment so marked must be in kernel-doc format. Do not use
|
and any comment so marked must be in kernel-doc format. Do not use
|
||||||
"/**" to be begin a comment block unless the comment block contains
|
"/**" to be begin a comment block unless the comment block contains
|
||||||
kernel-doc formatted comments. The closing comment marker for
|
kernel-doc formatted comments. The closing comment marker for
|
||||||
kernel-doc comments can be either "*/" or "**/".
|
kernel-doc comments can be either "*/" or "**/", but "*/" is
|
||||||
|
preferred in the Linux kernel tree.
|
||||||
|
|
||||||
Kernel-doc comments should be placed just before the function
|
Kernel-doc comments should be placed just before the function
|
||||||
or data structure being described.
|
or data structure being described.
|
||||||
@ -63,7 +64,7 @@ Example kernel-doc function comment:
|
|||||||
* comment lines.
|
* comment lines.
|
||||||
*
|
*
|
||||||
* The longer description can have multiple paragraphs.
|
* The longer description can have multiple paragraphs.
|
||||||
**/
|
*/
|
||||||
|
|
||||||
The first line, with the short description, must be on a single line.
|
The first line, with the short description, must be on a single line.
|
||||||
|
|
||||||
@ -85,7 +86,7 @@ Example kernel-doc data structure comment.
|
|||||||
* perhaps with more lines and words.
|
* perhaps with more lines and words.
|
||||||
*
|
*
|
||||||
* Longer description of this structure.
|
* Longer description of this structure.
|
||||||
**/
|
*/
|
||||||
|
|
||||||
The kernel-doc function comments describe each parameter to the
|
The kernel-doc function comments describe each parameter to the
|
||||||
function, in order, with the @name lines.
|
function, in order, with the @name lines.
|
||||||
|
@ -937,6 +937,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
|
|
||||||
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
||||||
|
on
|
||||||
|
Enable intel iommu driver.
|
||||||
off
|
off
|
||||||
Disable intel iommu driver.
|
Disable intel iommu driver.
|
||||||
igfx_off [Default Off]
|
igfx_off [Default Off]
|
||||||
|
23
MAINTAINERS
23
MAINTAINERS
@ -1021,6 +1021,14 @@ M: mb@bu3sch.de
|
|||||||
W: http://bu3sch.de/btgpio.php
|
W: http://bu3sch.de/btgpio.php
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
BTRFS FILE SYSTEM
|
||||||
|
P: Chris Mason
|
||||||
|
M: chris.mason@oracle.com
|
||||||
|
L: linux-btrfs@vger.kernel.org
|
||||||
|
W: http://btrfs.wiki.kernel.org/
|
||||||
|
T: git kernel.org:/pub/scm/linux/kernel/git/mason/btrfs-unstable.git
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
BTTV VIDEO4LINUX DRIVER
|
BTTV VIDEO4LINUX DRIVER
|
||||||
P: Mauro Carvalho Chehab
|
P: Mauro Carvalho Chehab
|
||||||
M: mchehab@infradead.org
|
M: mchehab@infradead.org
|
||||||
@ -1194,6 +1202,8 @@ S: Supported
|
|||||||
CONTROL GROUPS (CGROUPS)
|
CONTROL GROUPS (CGROUPS)
|
||||||
P: Paul Menage
|
P: Paul Menage
|
||||||
M: menage@google.com
|
M: menage@google.com
|
||||||
|
P: Li Zefan
|
||||||
|
M: lizf@cn.fujitsu.com
|
||||||
L: containers@lists.linux-foundation.org
|
L: containers@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
@ -2212,7 +2222,7 @@ P: Sean Hefty
|
|||||||
M: sean.hefty@intel.com
|
M: sean.hefty@intel.com
|
||||||
P: Hal Rosenstock
|
P: Hal Rosenstock
|
||||||
M: hal.rosenstock@gmail.com
|
M: hal.rosenstock@gmail.com
|
||||||
L: general@lists.openfabrics.org
|
L: general@lists.openfabrics.org (moderated for non-subscribers)
|
||||||
W: http://www.openib.org/
|
W: http://www.openib.org/
|
||||||
T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
|
T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -3529,6 +3539,12 @@ S: Maintained
|
|||||||
PXA MMCI DRIVER
|
PXA MMCI DRIVER
|
||||||
S: Orphan
|
S: Orphan
|
||||||
|
|
||||||
|
PXA RTC DRIVER
|
||||||
|
P: Robert Jarzmik
|
||||||
|
M: robert.jarzmik@free.fr
|
||||||
|
L: rtc-linux@googlegroups.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
QLOGIC QLA2XXX FC-SCSI DRIVER
|
QLOGIC QLA2XXX FC-SCSI DRIVER
|
||||||
P: Andrew Vasquez
|
P: Andrew Vasquez
|
||||||
M: linux-driver@qlogic.com
|
M: linux-driver@qlogic.com
|
||||||
@ -4277,8 +4293,8 @@ P: Rajiv Andrade
|
|||||||
M: srajiv@linux.vnet.ibm.com
|
M: srajiv@linux.vnet.ibm.com
|
||||||
W: http://tpmdd.sourceforge.net
|
W: http://tpmdd.sourceforge.net
|
||||||
P: Marcel Selhorst
|
P: Marcel Selhorst
|
||||||
M: tpm@selhorst.net
|
M: m.selhorst@sirrix.com
|
||||||
W: http://www.prosec.rub.de/tpm/
|
W: http://www.sirrix.com
|
||||||
L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
@ -4841,6 +4857,7 @@ P: Ingo Molnar
|
|||||||
M: mingo@redhat.com
|
M: mingo@redhat.com
|
||||||
P: H. Peter Anvin
|
P: H. Peter Anvin
|
||||||
M: hpa@zytor.com
|
M: hpa@zytor.com
|
||||||
|
M: x86@kernel.org
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
T: git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
|
T: git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 29
|
SUBLEVEL = 29
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc5
|
||||||
NAME = Erotic Pickled Herring
|
NAME = Erotic Pickled Herring
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -8,12 +8,12 @@
|
|||||||
|
|
||||||
/* ??? Would be nice to use .gprel32 here, but we can't be sure that the
|
/* ??? Would be nice to use .gprel32 here, but we can't be sure that the
|
||||||
function loaded the GP, so this could fail in modules. */
|
function loaded the GP, so this could fail in modules. */
|
||||||
#define BUG() { \
|
#define BUG() do { \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
"call_pal %0 # bugchk\n\t" \
|
"call_pal %0 # bugchk\n\t" \
|
||||||
".long %1\n\t.8byte %2" \
|
".long %1\n\t.8byte %2" \
|
||||||
: : "i"(PAL_bugchk), "i"(__LINE__), "i"(__FILE__)); \
|
: : "i"(PAL_bugchk), "i"(__LINE__), "i"(__FILE__)); \
|
||||||
for ( ; ; ); }
|
for ( ; ; ); } while (0)
|
||||||
|
|
||||||
#define HAVE_ARCH_BUG
|
#define HAVE_ARCH_BUG
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
const extern unsigned char relocate_new_kernel[];
|
extern const unsigned char relocate_new_kernel[];
|
||||||
const extern unsigned int relocate_new_kernel_size;
|
extern const unsigned int relocate_new_kernel_size;
|
||||||
|
|
||||||
extern void setup_mm_for_reboot(char mode);
|
extern void setup_mm_for_reboot(char mode);
|
||||||
|
|
||||||
|
@ -121,6 +121,16 @@ int __init pxa_init_dma(int num_ch)
|
|||||||
if (dma_channels == NULL)
|
if (dma_channels == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* dma channel priorities on pxa2xx processors:
|
||||||
|
* ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH
|
||||||
|
* ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM
|
||||||
|
* ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW
|
||||||
|
*/
|
||||||
|
for (i = 0; i < num_ch; i++) {
|
||||||
|
DCSR(i) = 0;
|
||||||
|
dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
|
||||||
|
}
|
||||||
|
|
||||||
ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
|
ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n");
|
printk (KERN_CRIT "Wow! Can't register IRQ for DMA\n");
|
||||||
@ -128,14 +138,6 @@ int __init pxa_init_dma(int num_ch)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dma channel priorities on pxa2xx processors:
|
|
||||||
* ch 0 - 3, 16 - 19 <--> (0) DMA_PRIO_HIGH
|
|
||||||
* ch 4 - 7, 20 - 23 <--> (1) DMA_PRIO_MEDIUM
|
|
||||||
* ch 8 - 15, 24 - 31 <--> (2) DMA_PRIO_LOW
|
|
||||||
*/
|
|
||||||
for (i = 0; i < num_ch; i++)
|
|
||||||
dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
|
|
||||||
|
|
||||||
num_dma_channels = num_ch;
|
num_dma_channels = num_ch;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef __ASM_ARCH_REGS_AC97_H
|
#ifndef __ASM_ARCH_REGS_AC97_H
|
||||||
#define __ASM_ARCH_REGS_AC97_H
|
#define __ASM_ARCH_REGS_AC97_H
|
||||||
|
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AC97 Controller registers
|
* AC97 Controller registers
|
||||||
*/
|
*/
|
||||||
|
@ -41,6 +41,9 @@
|
|||||||
#elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
#elif defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
||||||
#define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */
|
#define SSCR0_SCR (0x000fff00) /* Serial Clock Rate (mask) */
|
||||||
#define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */
|
#define SSCR0_SerClkDiv(x) (((x) - 1) << 8) /* Divisor [1..4096] */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
|
||||||
#define SSCR0_EDSS (1 << 20) /* Extended data size select */
|
#define SSCR0_EDSS (1 << 20) /* Extended data size select */
|
||||||
#define SSCR0_NCS (1 << 21) /* Network clock select */
|
#define SSCR0_NCS (1 << 21) /* Network clock select */
|
||||||
#define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */
|
#define SSCR0_RIM (1 << 22) /* Receive FIFO overrrun interrupt mask */
|
||||||
|
@ -88,13 +88,13 @@ static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
|
|||||||
static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
|
static DEFINE_PXA3_CKEN(common_nand, NAND, 156000000, 0);
|
||||||
|
|
||||||
static struct clk_lookup common_clkregs[] = {
|
static struct clk_lookup common_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", "NANDCLK"),
|
INIT_CLKREG(&clk_common_nand, "pxa3xx-nand", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
|
static DEFINE_PXA3_CKEN(pxa310_mmc3, MMC3, 19500000, 0);
|
||||||
|
|
||||||
static struct clk_lookup pxa310_clkregs[] = {
|
static struct clk_lookup pxa310_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", "MMCCLK"),
|
INIT_CLKREG(&clk_pxa310_mmc3, "pxa2xx-mci.2", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init pxa300_init(void)
|
static int __init pxa300_init(void)
|
||||||
|
@ -83,7 +83,7 @@ static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
|
|||||||
static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
|
static DEFINE_PXA3_CKEN(pxa320_nand, NAND, 104000000, 0);
|
||||||
|
|
||||||
static struct clk_lookup pxa320_clkregs[] = {
|
static struct clk_lookup pxa320_clkregs[] = {
|
||||||
INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", "NANDCLK"),
|
INIT_CLKREG(&clk_pxa320_nand, "pxa3xx-nand", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init pxa320_init(void)
|
static int __init pxa320_init(void)
|
||||||
|
@ -36,10 +36,10 @@
|
|||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/hardirq.h>
|
||||||
|
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/hardirq.h>
|
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
|
@ -443,7 +443,7 @@ sn_acpi_slot_fixup(struct pci_dev *dev)
|
|||||||
size = pci_resource_len(dev, PCI_ROM_RESOURCE);
|
size = pci_resource_len(dev, PCI_ROM_RESOURCE);
|
||||||
addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE],
|
addr = ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE],
|
||||||
size);
|
size);
|
||||||
image_size = pci_get_rom_size(addr, size);
|
image_size = pci_get_rom_size(dev, addr, size);
|
||||||
dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr;
|
dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr;
|
||||||
dev->resource[PCI_ROM_RESOURCE].end =
|
dev->resource[PCI_ROM_RESOURCE].end =
|
||||||
(unsigned long) addr + image_size - 1;
|
(unsigned long) addr + image_size - 1;
|
||||||
|
@ -269,7 +269,7 @@ sn_io_slot_fixup(struct pci_dev *dev)
|
|||||||
|
|
||||||
rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE),
|
rom = ioremap(pci_resource_start(dev, PCI_ROM_RESOURCE),
|
||||||
size + 1);
|
size + 1);
|
||||||
image_size = pci_get_rom_size(rom, size + 1);
|
image_size = pci_get_rom_size(dev, rom, size + 1);
|
||||||
dev->resource[PCI_ROM_RESOURCE].end =
|
dev->resource[PCI_ROM_RESOURCE].end =
|
||||||
dev->resource[PCI_ROM_RESOURCE].start +
|
dev->resource[PCI_ROM_RESOURCE].start +
|
||||||
image_size - 1;
|
image_size - 1;
|
||||||
|
@ -51,6 +51,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock)
|
|||||||
|
|
||||||
return (((counters >> 14) - counters) & 0x1fff) > 1;
|
return (((counters >> 14) - counters) & 0x1fff) > 1;
|
||||||
}
|
}
|
||||||
|
#define __raw_spin_is_contended __raw_spin_is_contended
|
||||||
|
|
||||||
static inline void __raw_spin_lock(raw_spinlock_t *lock)
|
static inline void __raw_spin_lock(raw_spinlock_t *lock)
|
||||||
{
|
{
|
||||||
|
@ -191,7 +191,8 @@ enet0: ethernet@24000 {
|
|||||||
interrupts = <37 0x8 36 0x8 35 0x8>;
|
interrupts = <37 0x8 36 0x8 35 0x8>;
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
tbi-handle = < &tbi0 >;
|
tbi-handle = < &tbi0 >;
|
||||||
phy-handle = < &phy1 >;
|
/* Vitesse 7385 isn't on the MDIO bus */
|
||||||
|
fixed-link = <1 1 1000 0 0>;
|
||||||
fsl,magic-packet;
|
fsl,magic-packet;
|
||||||
|
|
||||||
mdio@24520 {
|
mdio@24520 {
|
||||||
@ -199,12 +200,6 @@ mdio@24520 {
|
|||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "fsl,gianfar-mdio";
|
compatible = "fsl,gianfar-mdio";
|
||||||
reg = <0x24520 0x20>;
|
reg = <0x24520 0x20>;
|
||||||
phy1: ethernet-phy@1 {
|
|
||||||
interrupt-parent = <&ipic>;
|
|
||||||
interrupts = <19 0x8>;
|
|
||||||
reg = <0x1>;
|
|
||||||
device_type = "ethernet-phy";
|
|
||||||
};
|
|
||||||
phy4: ethernet-phy@4 {
|
phy4: ethernet-phy@4 {
|
||||||
interrupt-parent = <&ipic>;
|
interrupt-parent = <&ipic>;
|
||||||
interrupts = <20 0x8>;
|
interrupts = <20 0x8>;
|
||||||
@ -219,6 +214,8 @@ tbi0: tbi-phy@11 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enet1: ethernet@25000 {
|
enet1: ethernet@25000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
device_type = "network";
|
device_type = "network";
|
||||||
model = "eTSEC";
|
model = "eTSEC";
|
||||||
|
@ -651,7 +651,7 @@ CONFIG_CICADA_PHY=y
|
|||||||
# CONFIG_NATIONAL_PHY is not set
|
# CONFIG_NATIONAL_PHY is not set
|
||||||
# CONFIG_STE10XP is not set
|
# CONFIG_STE10XP is not set
|
||||||
# CONFIG_LSI_ET1011C_PHY is not set
|
# CONFIG_LSI_ET1011C_PHY is not set
|
||||||
# CONFIG_FIXED_PHY is not set
|
CONFIG_FIXED_PHY=y
|
||||||
# CONFIG_MDIO_BITBANG is not set
|
# CONFIG_MDIO_BITBANG is not set
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
|
@ -195,8 +195,9 @@ __ftrace_make_nop(struct module *mod,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = (unsigned)((unsigned short)jmp[0]) << 16 |
|
/* The bottom half is signed extended */
|
||||||
(unsigned)((unsigned short)jmp[1]);
|
offset = ((unsigned)((unsigned short)jmp[0]) << 16) +
|
||||||
|
(int)((short)jmp[1]);
|
||||||
|
|
||||||
DEBUGP(" %x ", offset);
|
DEBUGP(" %x ", offset);
|
||||||
|
|
||||||
|
@ -561,8 +561,21 @@ int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
|||||||
(unsigned long long)(offset + size - 1));
|
(unsigned long long)(offset + size - 1));
|
||||||
|
|
||||||
if (mmap_state == pci_mmap_mem) {
|
if (mmap_state == pci_mmap_mem) {
|
||||||
if ((offset + size) > hose->isa_mem_size)
|
/* Hack alert !
|
||||||
return -ENXIO;
|
*
|
||||||
|
* Because X is lame and can fail starting if it gets an error trying
|
||||||
|
* to mmap legacy_mem (instead of just moving on without legacy memory
|
||||||
|
* access) we fake it here by giving it anonymous memory, effectively
|
||||||
|
* behaving just like /dev/zero
|
||||||
|
*/
|
||||||
|
if ((offset + size) > hose->isa_mem_size) {
|
||||||
|
printk(KERN_DEBUG
|
||||||
|
"Process %s (pid:%d) mapped non-existing PCI legacy memory for 0%04x:%02x\n",
|
||||||
|
current->comm, current->pid, pci_domain_nr(bus), bus->number);
|
||||||
|
if (vma->vm_flags & VM_SHARED)
|
||||||
|
return shmem_zero_setup(vma);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
offset += hose->isa_mem_phys;
|
offset += hose->isa_mem_phys;
|
||||||
} else {
|
} else {
|
||||||
unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
|
unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;
|
||||||
|
@ -172,6 +172,8 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x378: /* orx */
|
case 0x378: /* orx */
|
||||||
|
if (instr & 1)
|
||||||
|
break;
|
||||||
rs = (instr >> 21) & 0x1f;
|
rs = (instr >> 21) & 0x1f;
|
||||||
rb = (instr >> 11) & 0x1f;
|
rb = (instr >> 11) & 0x1f;
|
||||||
if (rs == rb) { /* mr */
|
if (rs == rb) { /* mr */
|
||||||
|
@ -73,7 +73,7 @@ extern unsigned int tlbcam_index;
|
|||||||
/*
|
/*
|
||||||
* Return PA for this VA if it is mapped by a CAM, or 0
|
* Return PA for this VA if it is mapped by a CAM, or 0
|
||||||
*/
|
*/
|
||||||
unsigned long v_mapped_by_tlbcam(unsigned long va)
|
phys_addr_t v_mapped_by_tlbcam(unsigned long va)
|
||||||
{
|
{
|
||||||
int b;
|
int b;
|
||||||
for (b = 0; b < tlbcam_index; ++b)
|
for (b = 0; b < tlbcam_index; ++b)
|
||||||
@ -85,7 +85,7 @@ unsigned long v_mapped_by_tlbcam(unsigned long va)
|
|||||||
/*
|
/*
|
||||||
* Return VA for a given PA or 0 if not mapped
|
* Return VA for a given PA or 0 if not mapped
|
||||||
*/
|
*/
|
||||||
unsigned long p_mapped_by_tlbcam(unsigned long pa)
|
unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
|
||||||
{
|
{
|
||||||
int b;
|
int b;
|
||||||
for (b = 0; b < tlbcam_index; ++b)
|
for (b = 0; b < tlbcam_index; ++b)
|
||||||
|
@ -320,7 +320,7 @@ _GLOBAL(create_hpte)
|
|||||||
and r8,r8,r0 /* writable if _RW & _DIRTY */
|
and r8,r8,r0 /* writable if _RW & _DIRTY */
|
||||||
rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */
|
rlwimi r5,r5,32-1,30,30 /* _PAGE_USER -> PP msb */
|
||||||
rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */
|
rlwimi r5,r5,32-2,31,31 /* _PAGE_USER -> PP lsb */
|
||||||
ori r8,r8,0xe14 /* clear out reserved bits and M */
|
ori r8,r8,0xe04 /* clear out reserved bits */
|
||||||
andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */
|
andc r8,r5,r8 /* PP = user? (rw&dirty? 2: 3): 0 */
|
||||||
BEGIN_FTR_SECTION
|
BEGIN_FTR_SECTION
|
||||||
rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */
|
rlwinm r8,r8,0,~_PAGE_COHERENT /* clear M (coherence not required) */
|
||||||
|
@ -61,8 +61,8 @@ void setbat(int index, unsigned long virt, phys_addr_t phys,
|
|||||||
|
|
||||||
#ifdef HAVE_TLBCAM
|
#ifdef HAVE_TLBCAM
|
||||||
extern unsigned int tlbcam_index;
|
extern unsigned int tlbcam_index;
|
||||||
extern unsigned long v_mapped_by_tlbcam(unsigned long va);
|
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
|
||||||
extern unsigned long p_mapped_by_tlbcam(unsigned long pa);
|
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
|
||||||
#else /* !HAVE_TLBCAM */
|
#else /* !HAVE_TLBCAM */
|
||||||
#define v_mapped_by_tlbcam(x) (0UL)
|
#define v_mapped_by_tlbcam(x) (0UL)
|
||||||
#define p_mapped_by_tlbcam(x) (0UL)
|
#define p_mapped_by_tlbcam(x) (0UL)
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <asm/cell-pmu.h>
|
#include <asm/cell-pmu.h>
|
||||||
|
#include <asm/time.h>
|
||||||
#include "pr_util.h"
|
#include "pr_util.h"
|
||||||
|
|
||||||
#define SCALE_SHIFT 14
|
#define SCALE_SHIFT 14
|
||||||
|
@ -186,7 +186,7 @@ int __init pq2ads_pci_init_irq(void)
|
|||||||
iounmap(priv->regs);
|
iounmap(priv->regs);
|
||||||
out_free_bootmem:
|
out_free_bootmem:
|
||||||
free_bootmem((unsigned long)priv,
|
free_bootmem((unsigned long)priv,
|
||||||
sizeof(sizeof(struct pq2ads_pci_pic)));
|
sizeof(struct pq2ads_pci_pic));
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
out_unmap_irq:
|
out_unmap_irq:
|
||||||
irq_dispose_mapping(irq);
|
irq_dispose_mapping(irq);
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <asm/firmware.h>
|
#include <asm/firmware.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/pSeries_reconfig.h>
|
#include <asm/pSeries_reconfig.h>
|
||||||
|
#include <asm/sparsemem.h>
|
||||||
|
|
||||||
static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size)
|
static int pseries_remove_lmb(unsigned long base, unsigned int lmb_size)
|
||||||
{
|
{
|
||||||
|
@ -165,7 +165,7 @@ static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type)
|
|||||||
edibit = (14 - (src - CPM2_IRQ_EXT1));
|
edibit = (14 - (src - CPM2_IRQ_EXT1));
|
||||||
else
|
else
|
||||||
if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0)
|
if (src >= CPM2_IRQ_PORTC15 && src <= CPM2_IRQ_PORTC0)
|
||||||
edibit = (31 - (src - CPM2_IRQ_PORTC15));
|
edibit = (31 - (CPM2_IRQ_PORTC0 - src));
|
||||||
else
|
else
|
||||||
return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL;
|
return (flow_type & IRQ_TYPE_LEVEL_LOW) ? 0 : -EINVAL;
|
||||||
|
|
||||||
|
@ -890,7 +890,7 @@ unsigned int ipic_get_irq(void)
|
|||||||
return irq_linear_revmap(primary_ipic->irqhost, irq);
|
return irq_linear_revmap(primary_ipic->irqhost, irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_SUSPEND
|
||||||
static struct {
|
static struct {
|
||||||
u32 sicfr;
|
u32 sicfr;
|
||||||
u32 siprr[2];
|
u32 siprr[2];
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.28-rc6
|
# Linux kernel version: 2.6.29-rc4
|
||||||
# Thu Nov 27 11:00:49 2008
|
# Wed Feb 11 10:07:16 2009
|
||||||
#
|
#
|
||||||
CONFIG_SCHED_MC=y
|
CONFIG_SCHED_MC=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
@ -14,12 +14,14 @@ CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
|||||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_TIME=y
|
CONFIG_GENERIC_TIME=y
|
||||||
|
CONFIG_GENERIC_TIME_VSYSCALL=y
|
||||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||||
CONFIG_GENERIC_BUG=y
|
CONFIG_GENERIC_BUG=y
|
||||||
CONFIG_NO_IOMEM=y
|
CONFIG_NO_IOMEM=y
|
||||||
CONFIG_NO_DMA=y
|
CONFIG_NO_DMA=y
|
||||||
CONFIG_GENERIC_LOCKBREAK=y
|
CONFIG_GENERIC_LOCKBREAK=y
|
||||||
CONFIG_PGSTE=y
|
CONFIG_PGSTE=y
|
||||||
|
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||||
CONFIG_S390=y
|
CONFIG_S390=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
@ -39,20 +41,29 @@ CONFIG_POSIX_MQUEUE=y
|
|||||||
# CONFIG_TASKSTATS is not set
|
# CONFIG_TASKSTATS is not set
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
# CONFIG_AUDITSYSCALL is not set
|
# CONFIG_AUDITSYSCALL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# RCU Subsystem
|
||||||
|
#
|
||||||
|
CONFIG_CLASSIC_RCU=y
|
||||||
|
# CONFIG_TREE_RCU is not set
|
||||||
|
# CONFIG_PREEMPT_RCU is not set
|
||||||
|
# CONFIG_TREE_RCU_TRACE is not set
|
||||||
|
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
|
CONFIG_GROUP_SCHED=y
|
||||||
|
CONFIG_FAIR_GROUP_SCHED=y
|
||||||
|
# CONFIG_RT_GROUP_SCHED is not set
|
||||||
|
CONFIG_USER_SCHED=y
|
||||||
|
# CONFIG_CGROUP_SCHED is not set
|
||||||
CONFIG_CGROUPS=y
|
CONFIG_CGROUPS=y
|
||||||
# CONFIG_CGROUP_DEBUG is not set
|
# CONFIG_CGROUP_DEBUG is not set
|
||||||
CONFIG_CGROUP_NS=y
|
CONFIG_CGROUP_NS=y
|
||||||
# CONFIG_CGROUP_FREEZER is not set
|
# CONFIG_CGROUP_FREEZER is not set
|
||||||
# CONFIG_CGROUP_DEVICE is not set
|
# CONFIG_CGROUP_DEVICE is not set
|
||||||
# CONFIG_CPUSETS is not set
|
# CONFIG_CPUSETS is not set
|
||||||
CONFIG_GROUP_SCHED=y
|
|
||||||
CONFIG_FAIR_GROUP_SCHED=y
|
|
||||||
# CONFIG_RT_GROUP_SCHED is not set
|
|
||||||
CONFIG_USER_SCHED=y
|
|
||||||
# CONFIG_CGROUP_SCHED is not set
|
|
||||||
# CONFIG_CGROUP_CPUACCT is not set
|
# CONFIG_CGROUP_CPUACCT is not set
|
||||||
# CONFIG_RESOURCE_COUNTERS is not set
|
# CONFIG_RESOURCE_COUNTERS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
@ -63,6 +74,7 @@ CONFIG_UTS_NS=y
|
|||||||
CONFIG_IPC_NS=y
|
CONFIG_IPC_NS=y
|
||||||
# CONFIG_USER_NS is not set
|
# CONFIG_USER_NS is not set
|
||||||
# CONFIG_PID_NS is not set
|
# CONFIG_PID_NS is not set
|
||||||
|
# CONFIG_NET_NS is not set
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
@ -91,17 +103,17 @@ CONFIG_SLAB=y
|
|||||||
# CONFIG_SLUB is not set
|
# CONFIG_SLUB is not set
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
# CONFIG_MARKERS is not set
|
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
CONFIG_KPROBES=y
|
CONFIG_KPROBES=y
|
||||||
|
CONFIG_HAVE_SYSCALL_WRAPPERS=y
|
||||||
CONFIG_KRETPROBES=y
|
CONFIG_KRETPROBES=y
|
||||||
CONFIG_HAVE_KPROBES=y
|
CONFIG_HAVE_KPROBES=y
|
||||||
CONFIG_HAVE_KRETPROBES=y
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||||
|
CONFIG_USE_GENERIC_SMP_HELPERS=y
|
||||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||||
CONFIG_SLABINFO=y
|
CONFIG_SLABINFO=y
|
||||||
CONFIG_RT_MUTEXES=y
|
CONFIG_RT_MUTEXES=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||||
@ -109,7 +121,7 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_KMOD=y
|
CONFIG_INIT_ALL_POSSIBLE=y
|
||||||
CONFIG_STOP_MACHINE=y
|
CONFIG_STOP_MACHINE=y
|
||||||
CONFIG_BLOCK=y
|
CONFIG_BLOCK=y
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
@ -130,7 +142,6 @@ CONFIG_DEFAULT_DEADLINE=y
|
|||||||
# CONFIG_DEFAULT_NOOP is not set
|
# CONFIG_DEFAULT_NOOP is not set
|
||||||
CONFIG_DEFAULT_IOSCHED="deadline"
|
CONFIG_DEFAULT_IOSCHED="deadline"
|
||||||
CONFIG_PREEMPT_NOTIFIERS=y
|
CONFIG_PREEMPT_NOTIFIERS=y
|
||||||
CONFIG_CLASSIC_RCU=y
|
|
||||||
# CONFIG_FREEZER is not set
|
# CONFIG_FREEZER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -161,6 +172,7 @@ CONFIG_S390_EXEC_PROTECT=y
|
|||||||
CONFIG_MARCH_Z900=y
|
CONFIG_MARCH_Z900=y
|
||||||
# CONFIG_MARCH_Z990 is not set
|
# CONFIG_MARCH_Z990 is not set
|
||||||
# CONFIG_MARCH_Z9_109 is not set
|
# CONFIG_MARCH_Z9_109 is not set
|
||||||
|
# CONFIG_MARCH_Z10 is not set
|
||||||
CONFIG_PACK_STACK=y
|
CONFIG_PACK_STACK=y
|
||||||
# CONFIG_SMALL_STACK is not set
|
# CONFIG_SMALL_STACK is not set
|
||||||
CONFIG_CHECK_STACK=y
|
CONFIG_CHECK_STACK=y
|
||||||
@ -174,7 +186,6 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y
|
|||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
CONFIG_PREEMPT=y
|
CONFIG_PREEMPT=y
|
||||||
# CONFIG_PREEMPT_RCU is not set
|
|
||||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||||
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
||||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||||
@ -195,7 +206,6 @@ CONFIG_MEMORY_HOTREMOVE=y
|
|||||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
CONFIG_MIGRATION=y
|
CONFIG_MIGRATION=y
|
||||||
CONFIG_RESOURCES_64BIT=y
|
|
||||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||||
CONFIG_ZONE_DMA_FLAG=1
|
CONFIG_ZONE_DMA_FLAG=1
|
||||||
CONFIG_BOUNCE=y
|
CONFIG_BOUNCE=y
|
||||||
@ -207,7 +217,6 @@ CONFIG_UNEVICTABLE_LRU=y
|
|||||||
#
|
#
|
||||||
CONFIG_MACHCHK_WARNING=y
|
CONFIG_MACHCHK_WARNING=y
|
||||||
CONFIG_QDIO=y
|
CONFIG_QDIO=y
|
||||||
# CONFIG_QDIO_DEBUG is not set
|
|
||||||
CONFIG_CHSC_SCH=m
|
CONFIG_CHSC_SCH=m
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -227,15 +236,13 @@ CONFIG_PFAULT=y
|
|||||||
# CONFIG_SHARED_KERNEL is not set
|
# CONFIG_SHARED_KERNEL is not set
|
||||||
# CONFIG_CMM is not set
|
# CONFIG_CMM is not set
|
||||||
# CONFIG_PAGE_STATES is not set
|
# CONFIG_PAGE_STATES is not set
|
||||||
CONFIG_VIRT_TIMER=y
|
|
||||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
|
||||||
# CONFIG_APPLDATA_BASE is not set
|
# CONFIG_APPLDATA_BASE is not set
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250 is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
# CONFIG_HZ_1000 is not set
|
# CONFIG_HZ_1000 is not set
|
||||||
CONFIG_HZ=100
|
CONFIG_HZ=100
|
||||||
# CONFIG_SCHED_HRTICK is not set
|
CONFIG_SCHED_HRTICK=y
|
||||||
CONFIG_S390_HYPFS_FS=y
|
CONFIG_S390_HYPFS_FS=y
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
# CONFIG_ZFCPDUMP is not set
|
# CONFIG_ZFCPDUMP is not set
|
||||||
@ -245,6 +252,7 @@ CONFIG_NET=y
|
|||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
# CONFIG_PACKET_MMAP is not set
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
@ -383,6 +391,7 @@ CONFIG_NET_SCH_TBF=m
|
|||||||
CONFIG_NET_SCH_GRED=m
|
CONFIG_NET_SCH_GRED=m
|
||||||
CONFIG_NET_SCH_DSMARK=m
|
CONFIG_NET_SCH_DSMARK=m
|
||||||
# CONFIG_NET_SCH_NETEM is not set
|
# CONFIG_NET_SCH_NETEM is not set
|
||||||
|
# CONFIG_NET_SCH_DRR is not set
|
||||||
# CONFIG_NET_SCH_INGRESS is not set
|
# CONFIG_NET_SCH_INGRESS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -400,6 +409,7 @@ CONFIG_CLS_U32_MARK=y
|
|||||||
CONFIG_NET_CLS_RSVP=m
|
CONFIG_NET_CLS_RSVP=m
|
||||||
CONFIG_NET_CLS_RSVP6=m
|
CONFIG_NET_CLS_RSVP6=m
|
||||||
CONFIG_NET_CLS_FLOW=m
|
CONFIG_NET_CLS_FLOW=m
|
||||||
|
# CONFIG_NET_CLS_CGROUP is not set
|
||||||
# CONFIG_NET_EMATCH is not set
|
# CONFIG_NET_EMATCH is not set
|
||||||
CONFIG_NET_CLS_ACT=y
|
CONFIG_NET_CLS_ACT=y
|
||||||
CONFIG_NET_ACT_POLICE=y
|
CONFIG_NET_ACT_POLICE=y
|
||||||
@ -411,6 +421,7 @@ CONFIG_NET_ACT_NAT=m
|
|||||||
# CONFIG_NET_ACT_SKBEDIT is not set
|
# CONFIG_NET_ACT_SKBEDIT is not set
|
||||||
# CONFIG_NET_CLS_IND is not set
|
# CONFIG_NET_CLS_IND is not set
|
||||||
CONFIG_NET_SCH_FIFO=y
|
CONFIG_NET_SCH_FIFO=y
|
||||||
|
# CONFIG_DCB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
@ -428,6 +439,7 @@ CONFIG_CAN_VCAN=m
|
|||||||
# CONFIG_CAN_DEBUG_DEVICES is not set
|
# CONFIG_CAN_DEBUG_DEVICES is not set
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
# CONFIG_PHONET is not set
|
# CONFIG_PHONET is not set
|
||||||
|
# CONFIG_WIMAX is not set
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
# CONFIG_NET_9P is not set
|
# CONFIG_NET_9P is not set
|
||||||
# CONFIG_PCMCIA is not set
|
# CONFIG_PCMCIA is not set
|
||||||
@ -475,10 +487,14 @@ CONFIG_DASD_DIAG=y
|
|||||||
CONFIG_DASD_EER=y
|
CONFIG_DASD_EER=y
|
||||||
CONFIG_VIRTIO_BLK=m
|
CONFIG_VIRTIO_BLK=m
|
||||||
CONFIG_MISC_DEVICES=y
|
CONFIG_MISC_DEVICES=y
|
||||||
# CONFIG_EEPROM_93CX6 is not set
|
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
# CONFIG_C2PORT is not set
|
# CONFIG_C2PORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# EEPROM support
|
||||||
|
#
|
||||||
|
# CONFIG_EEPROM_93CX6 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SCSI device support
|
# SCSI device support
|
||||||
#
|
#
|
||||||
@ -520,6 +536,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
|||||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||||
CONFIG_SCSI_LOWLEVEL=y
|
CONFIG_SCSI_LOWLEVEL=y
|
||||||
# CONFIG_ISCSI_TCP is not set
|
# CONFIG_ISCSI_TCP is not set
|
||||||
|
# CONFIG_LIBFC is not set
|
||||||
# CONFIG_SCSI_DEBUG is not set
|
# CONFIG_SCSI_DEBUG is not set
|
||||||
CONFIG_ZFCP=y
|
CONFIG_ZFCP=y
|
||||||
CONFIG_SCSI_DH=m
|
CONFIG_SCSI_DH=m
|
||||||
@ -566,6 +583,10 @@ CONFIG_NET_ETHERNET=y
|
|||||||
CONFIG_NETDEV_1000=y
|
CONFIG_NETDEV_1000=y
|
||||||
CONFIG_NETDEV_10000=y
|
CONFIG_NETDEV_10000=y
|
||||||
# CONFIG_TR is not set
|
# CONFIG_TR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
#
|
||||||
# CONFIG_WAN is not set
|
# CONFIG_WAN is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -593,9 +614,11 @@ CONFIG_VIRTIO_NET=m
|
|||||||
#
|
#
|
||||||
CONFIG_DEVKMEM=y
|
CONFIG_DEVKMEM=y
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
CONFIG_HVC_DRIVER=y
|
CONFIG_HVC_DRIVER=y
|
||||||
|
CONFIG_HVC_IUCV=y
|
||||||
CONFIG_VIRTIO_CONSOLE=y
|
CONFIG_VIRTIO_CONSOLE=y
|
||||||
CONFIG_HW_RANDOM=m
|
CONFIG_HW_RANDOM=m
|
||||||
CONFIG_HW_RANDOM_VIRTIO=m
|
CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
@ -645,7 +668,6 @@ CONFIG_S390_VMUR=m
|
|||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
CONFIG_ACCESSIBILITY=y
|
CONFIG_ACCESSIBILITY=y
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
CONFIG_STAGING_EXCLUDE_BUILD=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
@ -668,6 +690,7 @@ CONFIG_FILE_LOCKING=y
|
|||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
# CONFIG_GFS2_FS is not set
|
# CONFIG_GFS2_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_BTRFS_FS is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
CONFIG_INOTIFY_USER=y
|
CONFIG_INOTIFY_USER=y
|
||||||
@ -703,10 +726,7 @@ CONFIG_TMPFS_POSIX_ACL=y
|
|||||||
# CONFIG_HUGETLBFS is not set
|
# CONFIG_HUGETLBFS is not set
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_CONFIGFS_FS=m
|
CONFIG_CONFIGFS_FS=m
|
||||||
|
CONFIG_MISC_FILESYSTEMS=y
|
||||||
#
|
|
||||||
# Miscellaneous filesystems
|
|
||||||
#
|
|
||||||
# CONFIG_ADFS_FS is not set
|
# CONFIG_ADFS_FS is not set
|
||||||
# CONFIG_AFFS_FS is not set
|
# CONFIG_AFFS_FS is not set
|
||||||
# CONFIG_HFS_FS is not set
|
# CONFIG_HFS_FS is not set
|
||||||
@ -715,6 +735,7 @@ CONFIG_CONFIGFS_FS=m
|
|||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_OMFS_FS is not set
|
# CONFIG_OMFS_FS is not set
|
||||||
@ -808,6 +829,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
# CONFIG_DEBUG_LIST is not set
|
# CONFIG_DEBUG_LIST is not set
|
||||||
# CONFIG_DEBUG_SG is not set
|
# CONFIG_DEBUG_SG is not set
|
||||||
|
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||||
# CONFIG_FRAME_POINTER is not set
|
# CONFIG_FRAME_POINTER is not set
|
||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||||
@ -818,15 +840,19 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
|||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
# CONFIG_LATENCYTOP is not set
|
# CONFIG_LATENCYTOP is not set
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tracers
|
# Tracers
|
||||||
#
|
#
|
||||||
|
# CONFIG_FUNCTION_TRACER is not set
|
||||||
# CONFIG_IRQSOFF_TRACER is not set
|
# CONFIG_IRQSOFF_TRACER is not set
|
||||||
# CONFIG_PREEMPT_TRACER is not set
|
# CONFIG_PREEMPT_TRACER is not set
|
||||||
# CONFIG_SCHED_TRACER is not set
|
# CONFIG_SCHED_TRACER is not set
|
||||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||||
# CONFIG_BOOT_TRACER is not set
|
# CONFIG_BOOT_TRACER is not set
|
||||||
|
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||||
|
# CONFIG_STACK_TRACER is not set
|
||||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||||
CONFIG_SAMPLES=y
|
CONFIG_SAMPLES=y
|
||||||
# CONFIG_SAMPLE_KOBJECT is not set
|
# CONFIG_SAMPLE_KOBJECT is not set
|
||||||
@ -847,11 +873,17 @@ CONFIG_CRYPTO=y
|
|||||||
#
|
#
|
||||||
CONFIG_CRYPTO_FIPS=y
|
CONFIG_CRYPTO_FIPS=y
|
||||||
CONFIG_CRYPTO_ALGAPI=y
|
CONFIG_CRYPTO_ALGAPI=y
|
||||||
CONFIG_CRYPTO_AEAD=y
|
CONFIG_CRYPTO_ALGAPI2=y
|
||||||
|
CONFIG_CRYPTO_AEAD=m
|
||||||
|
CONFIG_CRYPTO_AEAD2=y
|
||||||
CONFIG_CRYPTO_BLKCIPHER=y
|
CONFIG_CRYPTO_BLKCIPHER=y
|
||||||
CONFIG_CRYPTO_HASH=y
|
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||||
CONFIG_CRYPTO_RNG=y
|
CONFIG_CRYPTO_HASH=m
|
||||||
|
CONFIG_CRYPTO_HASH2=y
|
||||||
|
CONFIG_CRYPTO_RNG=m
|
||||||
|
CONFIG_CRYPTO_RNG2=y
|
||||||
CONFIG_CRYPTO_MANAGER=y
|
CONFIG_CRYPTO_MANAGER=y
|
||||||
|
CONFIG_CRYPTO_MANAGER2=y
|
||||||
CONFIG_CRYPTO_GF128MUL=m
|
CONFIG_CRYPTO_GF128MUL=m
|
||||||
# CONFIG_CRYPTO_NULL is not set
|
# CONFIG_CRYPTO_NULL is not set
|
||||||
# CONFIG_CRYPTO_CRYPTD is not set
|
# CONFIG_CRYPTO_CRYPTD is not set
|
||||||
@ -885,7 +917,7 @@ CONFIG_CRYPTO_HMAC=m
|
|||||||
#
|
#
|
||||||
# Digest
|
# Digest
|
||||||
#
|
#
|
||||||
# CONFIG_CRYPTO_CRC32C is not set
|
CONFIG_CRYPTO_CRC32C=m
|
||||||
# CONFIG_CRYPTO_MD4 is not set
|
# CONFIG_CRYPTO_MD4 is not set
|
||||||
CONFIG_CRYPTO_MD5=m
|
CONFIG_CRYPTO_MD5=m
|
||||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||||
@ -942,6 +974,7 @@ CONFIG_S390_PRNG=m
|
|||||||
# Library routines
|
# Library routines
|
||||||
#
|
#
|
||||||
CONFIG_BITREVERSE=m
|
CONFIG_BITREVERSE=m
|
||||||
|
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||||
# CONFIG_CRC_CCITT is not set
|
# CONFIG_CRC_CCITT is not set
|
||||||
# CONFIG_CRC16 is not set
|
# CONFIG_CRC16 is not set
|
||||||
CONFIG_CRC_T10DIF=y
|
CONFIG_CRC_T10DIF=y
|
||||||
|
@ -384,8 +384,8 @@ struct _lowcore
|
|||||||
__u32 panic_magic; /* 0xe00 */
|
__u32 panic_magic; /* 0xe00 */
|
||||||
|
|
||||||
/* Per cpu primary space access list */
|
/* Per cpu primary space access list */
|
||||||
__u8 pad_0xe04[0xe3c-0xe04]; /* 0xe04 */
|
__u8 pad_0xe04[0xe38-0xe04]; /* 0xe04 */
|
||||||
__u32 vdso_per_cpu_data; /* 0xe3c */
|
__u64 vdso_per_cpu_data; /* 0xe38 */
|
||||||
__u32 paste[16]; /* 0xe40 */
|
__u32 paste[16]; /* 0xe40 */
|
||||||
|
|
||||||
__u8 pad13[0x11b8-0xe80]; /* 0xe80 */
|
__u8 pad13[0x11b8-0xe80]; /* 0xe80 */
|
||||||
|
@ -95,6 +95,7 @@ asmlinkage void do_softirq(void)
|
|||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PROC_FS
|
||||||
void init_irq_proc(void)
|
void init_irq_proc(void)
|
||||||
{
|
{
|
||||||
struct proc_dir_entry *root_irq_dir;
|
struct proc_dir_entry *root_irq_dir;
|
||||||
@ -102,3 +103,4 @@ void init_irq_proc(void)
|
|||||||
root_irq_dir = proc_mkdir("irq", NULL);
|
root_irq_dir = proc_mkdir("irq", NULL);
|
||||||
create_prof_cpu_mask(root_irq_dir);
|
create_prof_cpu_mask(root_irq_dir);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/spi_gpio.h>
|
#include <linux/spi/spi_gpio.h>
|
||||||
|
#include <media/ov772x.h>
|
||||||
#include <media/soc_camera_platform.h>
|
#include <media/soc_camera_platform.h>
|
||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
@ -216,7 +217,14 @@ static struct platform_device lcdc_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void camera_power(int val)
|
||||||
|
{
|
||||||
|
gpio_set_value(GPIO_PTZ5, val); /* RST_CAM/RSTB */
|
||||||
|
mdelay(10);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_I2C
|
#ifdef CONFIG_I2C
|
||||||
|
/* support for the old ncm03j camera */
|
||||||
static unsigned char camera_ncm03j_magic[] =
|
static unsigned char camera_ncm03j_magic[] =
|
||||||
{
|
{
|
||||||
0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8,
|
0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8,
|
||||||
@ -237,6 +245,23 @@ static unsigned char camera_ncm03j_magic[] =
|
|||||||
0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F,
|
0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int camera_probe(void)
|
||||||
|
{
|
||||||
|
struct i2c_adapter *a = i2c_get_adapter(0);
|
||||||
|
struct i2c_msg msg;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
camera_power(1);
|
||||||
|
msg.addr = 0x6e;
|
||||||
|
msg.buf = camera_ncm03j_magic;
|
||||||
|
msg.len = 2;
|
||||||
|
msg.flags = 0;
|
||||||
|
ret = i2c_transfer(a, &msg, 1);
|
||||||
|
camera_power(0);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int camera_set_capture(struct soc_camera_platform_info *info,
|
static int camera_set_capture(struct soc_camera_platform_info *info,
|
||||||
int enable)
|
int enable)
|
||||||
{
|
{
|
||||||
@ -245,9 +270,11 @@ static int camera_set_capture(struct soc_camera_platform_info *info,
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
camera_power(0);
|
||||||
if (!enable)
|
if (!enable)
|
||||||
return 0; /* no disable for now */
|
return 0; /* no disable for now */
|
||||||
|
|
||||||
|
camera_power(1);
|
||||||
for (i = 0; i < ARRAY_SIZE(camera_ncm03j_magic); i += 2) {
|
for (i = 0; i < ARRAY_SIZE(camera_ncm03j_magic); i += 2) {
|
||||||
u_int8_t buf[8];
|
u_int8_t buf[8];
|
||||||
|
|
||||||
@ -286,8 +313,35 @@ static struct platform_device camera_device = {
|
|||||||
.platform_data = &camera_info,
|
.platform_data = &camera_info,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int __init camera_setup(void)
|
||||||
|
{
|
||||||
|
if (camera_probe() > 0)
|
||||||
|
platform_device_register(&camera_device);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
late_initcall(camera_setup);
|
||||||
|
|
||||||
#endif /* CONFIG_I2C */
|
#endif /* CONFIG_I2C */
|
||||||
|
|
||||||
|
static int ov7725_power(struct device *dev, int mode)
|
||||||
|
{
|
||||||
|
camera_power(0);
|
||||||
|
if (mode)
|
||||||
|
camera_power(1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct ov772x_camera_info ov7725_info = {
|
||||||
|
.buswidth = SOCAM_DATAWIDTH_8,
|
||||||
|
.flags = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP,
|
||||||
|
.link = {
|
||||||
|
.power = ov7725_power,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
|
static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
|
||||||
.flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH |
|
.flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH |
|
||||||
SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8,
|
SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8,
|
||||||
@ -338,9 +392,6 @@ static struct platform_device *ap325rxa_devices[] __initdata = {
|
|||||||
&ap325rxa_nor_flash_device,
|
&ap325rxa_nor_flash_device,
|
||||||
&lcdc_device,
|
&lcdc_device,
|
||||||
&ceu_device,
|
&ceu_device,
|
||||||
#ifdef CONFIG_I2C
|
|
||||||
&camera_device,
|
|
||||||
#endif
|
|
||||||
&nand_flash_device,
|
&nand_flash_device,
|
||||||
&sdcard_cn3_device,
|
&sdcard_cn3_device,
|
||||||
};
|
};
|
||||||
@ -349,6 +400,10 @@ static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = {
|
|||||||
{
|
{
|
||||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("ov772x", 0x21),
|
||||||
|
.platform_data = &ov7725_info,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct spi_board_info ap325rxa_spi_devices[] = {
|
static struct spi_board_info ap325rxa_spi_devices[] = {
|
||||||
@ -426,7 +481,7 @@ static int __init ap325rxa_devices_setup(void)
|
|||||||
gpio_request(GPIO_PTZ6, NULL);
|
gpio_request(GPIO_PTZ6, NULL);
|
||||||
gpio_direction_output(GPIO_PTZ6, 0); /* STBY_CAM */
|
gpio_direction_output(GPIO_PTZ6, 0); /* STBY_CAM */
|
||||||
gpio_request(GPIO_PTZ5, NULL);
|
gpio_request(GPIO_PTZ5, NULL);
|
||||||
gpio_direction_output(GPIO_PTZ5, 1); /* RST_CAM */
|
gpio_direction_output(GPIO_PTZ5, 0); /* RST_CAM */
|
||||||
gpio_request(GPIO_PTZ4, NULL);
|
gpio_request(GPIO_PTZ4, NULL);
|
||||||
gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */
|
gpio_direction_output(GPIO_PTZ4, 0); /* SADDR */
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.28
|
# Linux kernel version: 2.6.29-rc2
|
||||||
# Fri Jan 9 16:54:19 2009
|
# Tue Jan 27 11:45:08 2009
|
||||||
#
|
#
|
||||||
CONFIG_SUPERH=y
|
CONFIG_SUPERH=y
|
||||||
CONFIG_SUPERH32=y
|
CONFIG_SUPERH32=y
|
||||||
@ -45,12 +45,12 @@ CONFIG_BSD_PROCESS_ACCT=y
|
|||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
# CONFIG_IKCONFIG is not set
|
# CONFIG_IKCONFIG is not set
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
# CONFIG_CGROUPS is not set
|
|
||||||
CONFIG_GROUP_SCHED=y
|
CONFIG_GROUP_SCHED=y
|
||||||
CONFIG_FAIR_GROUP_SCHED=y
|
CONFIG_FAIR_GROUP_SCHED=y
|
||||||
# CONFIG_RT_GROUP_SCHED is not set
|
# CONFIG_RT_GROUP_SCHED is not set
|
||||||
CONFIG_USER_SCHED=y
|
CONFIG_USER_SCHED=y
|
||||||
# CONFIG_CGROUP_SCHED is not set
|
# CONFIG_CGROUP_SCHED is not set
|
||||||
|
# CONFIG_CGROUPS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
# CONFIG_RELAY is not set
|
# CONFIG_RELAY is not set
|
||||||
@ -378,6 +378,7 @@ CONFIG_WIRELESS=y
|
|||||||
# CONFIG_WIRELESS_EXT is not set
|
# CONFIG_WIRELESS_EXT is not set
|
||||||
# CONFIG_LIB80211 is not set
|
# CONFIG_LIB80211 is not set
|
||||||
# CONFIG_MAC80211 is not set
|
# CONFIG_MAC80211 is not set
|
||||||
|
# CONFIG_WIMAX is not set
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
# CONFIG_NET_9P is not set
|
# CONFIG_NET_9P is not set
|
||||||
|
|
||||||
@ -400,6 +401,7 @@ CONFIG_MTD=y
|
|||||||
# CONFIG_MTD_DEBUG is not set
|
# CONFIG_MTD_DEBUG is not set
|
||||||
CONFIG_MTD_CONCAT=y
|
CONFIG_MTD_CONCAT=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
CONFIG_MTD_PARTITIONS=y
|
||||||
|
# CONFIG_MTD_TESTS is not set
|
||||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
# CONFIG_MTD_AR7_PARTS is not set
|
# CONFIG_MTD_AR7_PARTS is not set
|
||||||
@ -447,9 +449,7 @@ CONFIG_MTD_CFI_UTIL=y
|
|||||||
#
|
#
|
||||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||||
CONFIG_MTD_PHYSMAP=y
|
CONFIG_MTD_PHYSMAP=y
|
||||||
CONFIG_MTD_PHYSMAP_START=0xffffffff
|
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||||
CONFIG_MTD_PHYSMAP_LEN=0
|
|
||||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=0
|
|
||||||
# CONFIG_MTD_PLATRAM is not set
|
# CONFIG_MTD_PLATRAM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -479,6 +479,12 @@ CONFIG_MTD_NAND_IDS=y
|
|||||||
CONFIG_MTD_NAND_SH_FLCTL=y
|
CONFIG_MTD_NAND_SH_FLCTL=y
|
||||||
# CONFIG_MTD_ONENAND is not set
|
# CONFIG_MTD_ONENAND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# LPDDR flash memory drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_LPDDR is not set
|
||||||
|
# CONFIG_MTD_QINFO_PROBE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# UBI - Unsorted block images
|
# UBI - Unsorted block images
|
||||||
#
|
#
|
||||||
@ -607,6 +613,10 @@ CONFIG_SMSC911X=y
|
|||||||
# CONFIG_WLAN_PRE80211 is not set
|
# CONFIG_WLAN_PRE80211 is not set
|
||||||
# CONFIG_WLAN_80211 is not set
|
# CONFIG_WLAN_80211 is not set
|
||||||
# CONFIG_IWLWIFI_LEDS is not set
|
# CONFIG_IWLWIFI_LEDS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
#
|
||||||
# CONFIG_WAN is not set
|
# CONFIG_WAN is not set
|
||||||
# CONFIG_PPP is not set
|
# CONFIG_PPP is not set
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
@ -790,6 +800,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
|
# CONFIG_MFD_PCF50633 is not set
|
||||||
# CONFIG_REGULATOR is not set
|
# CONFIG_REGULATOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -837,7 +848,7 @@ CONFIG_SOC_CAMERA=y
|
|||||||
# CONFIG_SOC_CAMERA_MT9V022 is not set
|
# CONFIG_SOC_CAMERA_MT9V022 is not set
|
||||||
# CONFIG_SOC_CAMERA_TW9910 is not set
|
# CONFIG_SOC_CAMERA_TW9910 is not set
|
||||||
CONFIG_SOC_CAMERA_PLATFORM=y
|
CONFIG_SOC_CAMERA_PLATFORM=y
|
||||||
# CONFIG_SOC_CAMERA_OV772X is not set
|
CONFIG_SOC_CAMERA_OV772X=y
|
||||||
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
||||||
# CONFIG_RADIO_ADAPTERS is not set
|
# CONFIG_RADIO_ADAPTERS is not set
|
||||||
# CONFIG_DAB is not set
|
# CONFIG_DAB is not set
|
||||||
@ -1012,6 +1023,7 @@ CONFIG_FS_POSIX_ACL=y
|
|||||||
CONFIG_FILE_LOCKING=y
|
CONFIG_FILE_LOCKING=y
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_BTRFS_FS is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
CONFIG_INOTIFY_USER=y
|
CONFIG_INOTIFY_USER=y
|
||||||
@ -1060,6 +1072,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
|||||||
# CONFIG_JFFS2_FS is not set
|
# CONFIG_JFFS2_FS is not set
|
||||||
# CONFIG_UBIFS_FS is not set
|
# CONFIG_UBIFS_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_OMFS_FS is not set
|
# CONFIG_OMFS_FS is not set
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.28
|
# Linux kernel version: 2.6.29-rc1
|
||||||
# Fri Jan 9 17:09:35 2009
|
# Thu Jan 22 09:16:16 2009
|
||||||
#
|
#
|
||||||
CONFIG_SUPERH=y
|
CONFIG_SUPERH=y
|
||||||
CONFIG_SUPERH32=y
|
CONFIG_SUPERH32=y
|
||||||
@ -45,8 +45,12 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
# CONFIG_CGROUPS is not set
|
|
||||||
# CONFIG_GROUP_SCHED is not set
|
# CONFIG_GROUP_SCHED is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Control Group support
|
||||||
|
#
|
||||||
|
# CONFIG_CGROUPS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
# CONFIG_RELAY is not set
|
# CONFIG_RELAY is not set
|
||||||
@ -389,6 +393,7 @@ CONFIG_WIRELESS_EXT=y
|
|||||||
CONFIG_WIRELESS_EXT_SYSFS=y
|
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||||
# CONFIG_LIB80211 is not set
|
# CONFIG_LIB80211 is not set
|
||||||
# CONFIG_MAC80211 is not set
|
# CONFIG_MAC80211 is not set
|
||||||
|
# CONFIG_WIMAX is not set
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
# CONFIG_NET_9P is not set
|
# CONFIG_NET_9P is not set
|
||||||
|
|
||||||
@ -411,6 +416,7 @@ CONFIG_MTD=y
|
|||||||
# CONFIG_MTD_DEBUG is not set
|
# CONFIG_MTD_DEBUG is not set
|
||||||
CONFIG_MTD_CONCAT=y
|
CONFIG_MTD_CONCAT=y
|
||||||
CONFIG_MTD_PARTITIONS=y
|
CONFIG_MTD_PARTITIONS=y
|
||||||
|
# CONFIG_MTD_TESTS is not set
|
||||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
# CONFIG_MTD_AR7_PARTS is not set
|
# CONFIG_MTD_AR7_PARTS is not set
|
||||||
@ -458,9 +464,7 @@ CONFIG_MTD_CFI_UTIL=y
|
|||||||
#
|
#
|
||||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||||
CONFIG_MTD_PHYSMAP=y
|
CONFIG_MTD_PHYSMAP=y
|
||||||
CONFIG_MTD_PHYSMAP_START=0xffffffff
|
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||||
CONFIG_MTD_PHYSMAP_LEN=0
|
|
||||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=0
|
|
||||||
# CONFIG_MTD_PLATRAM is not set
|
# CONFIG_MTD_PLATRAM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -487,6 +491,12 @@ CONFIG_MTD_NAND_IDS=y
|
|||||||
CONFIG_MTD_NAND_PLATFORM=y
|
CONFIG_MTD_NAND_PLATFORM=y
|
||||||
# CONFIG_MTD_ONENAND is not set
|
# CONFIG_MTD_ONENAND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# LPDDR flash memory drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_LPDDR is not set
|
||||||
|
# CONFIG_MTD_QINFO_PROBE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# UBI - Unsorted block images
|
# UBI - Unsorted block images
|
||||||
#
|
#
|
||||||
@ -587,6 +597,10 @@ CONFIG_SMC91X=y
|
|||||||
# CONFIG_WLAN_PRE80211 is not set
|
# CONFIG_WLAN_PRE80211 is not set
|
||||||
# CONFIG_WLAN_80211 is not set
|
# CONFIG_WLAN_80211 is not set
|
||||||
# CONFIG_IWLWIFI_LEDS is not set
|
# CONFIG_IWLWIFI_LEDS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
#
|
||||||
# CONFIG_WAN is not set
|
# CONFIG_WAN is not set
|
||||||
# CONFIG_PPP is not set
|
# CONFIG_PPP is not set
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
@ -761,6 +775,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
|
# CONFIG_MFD_PCF50633 is not set
|
||||||
# CONFIG_REGULATOR is not set
|
# CONFIG_REGULATOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -806,9 +821,9 @@ CONFIG_SOC_CAMERA=y
|
|||||||
# CONFIG_SOC_CAMERA_MT9M111 is not set
|
# CONFIG_SOC_CAMERA_MT9M111 is not set
|
||||||
# CONFIG_SOC_CAMERA_MT9T031 is not set
|
# CONFIG_SOC_CAMERA_MT9T031 is not set
|
||||||
# CONFIG_SOC_CAMERA_MT9V022 is not set
|
# CONFIG_SOC_CAMERA_MT9V022 is not set
|
||||||
# CONFIG_SOC_CAMERA_TW9910 is not set
|
CONFIG_SOC_CAMERA_TW9910=y
|
||||||
CONFIG_SOC_CAMERA_PLATFORM=y
|
# CONFIG_SOC_CAMERA_PLATFORM is not set
|
||||||
# CONFIG_SOC_CAMERA_OV772X is not set
|
CONFIG_SOC_CAMERA_OV772X=y
|
||||||
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
CONFIG_VIDEO_SH_MOBILE_CEU=y
|
||||||
# CONFIG_RADIO_ADAPTERS is not set
|
# CONFIG_RADIO_ADAPTERS is not set
|
||||||
# CONFIG_DAB is not set
|
# CONFIG_DAB is not set
|
||||||
@ -866,11 +881,13 @@ CONFIG_USB_GADGET_SELECTED=y
|
|||||||
# CONFIG_USB_GADGET_PXA25X is not set
|
# CONFIG_USB_GADGET_PXA25X is not set
|
||||||
# CONFIG_USB_GADGET_PXA27X is not set
|
# CONFIG_USB_GADGET_PXA27X is not set
|
||||||
# CONFIG_USB_GADGET_S3C2410 is not set
|
# CONFIG_USB_GADGET_S3C2410 is not set
|
||||||
|
# CONFIG_USB_GADGET_IMX is not set
|
||||||
CONFIG_USB_GADGET_M66592=y
|
CONFIG_USB_GADGET_M66592=y
|
||||||
CONFIG_USB_M66592=y
|
CONFIG_USB_M66592=y
|
||||||
CONFIG_SUPERH_BUILT_IN_M66592=y
|
CONFIG_SUPERH_BUILT_IN_M66592=y
|
||||||
# CONFIG_USB_GADGET_AMD5536UDC is not set
|
# CONFIG_USB_GADGET_AMD5536UDC is not set
|
||||||
# CONFIG_USB_GADGET_FSL_QE is not set
|
# CONFIG_USB_GADGET_FSL_QE is not set
|
||||||
|
# CONFIG_USB_GADGET_CI13XXX is not set
|
||||||
# CONFIG_USB_GADGET_NET2280 is not set
|
# CONFIG_USB_GADGET_NET2280 is not set
|
||||||
# CONFIG_USB_GADGET_GOKU is not set
|
# CONFIG_USB_GADGET_GOKU is not set
|
||||||
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
||||||
@ -883,6 +900,11 @@ CONFIG_USB_G_SERIAL=y
|
|||||||
# CONFIG_USB_MIDI_GADGET is not set
|
# CONFIG_USB_MIDI_GADGET is not set
|
||||||
# CONFIG_USB_G_PRINTER is not set
|
# CONFIG_USB_G_PRINTER is not set
|
||||||
# CONFIG_USB_CDC_COMPOSITE is not set
|
# CONFIG_USB_CDC_COMPOSITE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# OTG and related infrastructure
|
||||||
|
#
|
||||||
|
# CONFIG_USB_GPIO_VBUS is not set
|
||||||
# CONFIG_MMC is not set
|
# CONFIG_MMC is not set
|
||||||
# CONFIG_MEMSTICK is not set
|
# CONFIG_MEMSTICK is not set
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
@ -961,6 +983,7 @@ CONFIG_UIO_PDRV_GENIRQ=y
|
|||||||
CONFIG_FILE_LOCKING=y
|
CONFIG_FILE_LOCKING=y
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_BTRFS_FS is not set
|
||||||
# CONFIG_DNOTIFY is not set
|
# CONFIG_DNOTIFY is not set
|
||||||
# CONFIG_INOTIFY is not set
|
# CONFIG_INOTIFY is not set
|
||||||
# CONFIG_QUOTA is not set
|
# CONFIG_QUOTA is not set
|
||||||
@ -1004,6 +1027,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
|||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
# CONFIG_JFFS2_FS is not set
|
# CONFIG_JFFS2_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_OMFS_FS is not set
|
# CONFIG_OMFS_FS is not set
|
||||||
|
@ -21,38 +21,36 @@
|
|||||||
static inline void
|
static inline void
|
||||||
__mutex_fastpath_lock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
__mutex_fastpath_lock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
||||||
{
|
{
|
||||||
int __ex_flag, __res;
|
int __done, __res;
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"movli.l @%2, %0 \n"
|
"movli.l @%2, %0 \n"
|
||||||
"add #-1, %0 \n"
|
"add #-1, %0 \n"
|
||||||
"movco.l %0, @%2 \n"
|
"movco.l %0, @%2 \n"
|
||||||
"movt %1 \n"
|
"movt %1 \n"
|
||||||
: "=&z" (__res), "=&r" (__ex_flag)
|
: "=&z" (__res), "=&r" (__done)
|
||||||
: "r" (&(count)->counter)
|
: "r" (&(count)->counter)
|
||||||
: "t");
|
: "t");
|
||||||
|
|
||||||
__res |= !__ex_flag;
|
if (unlikely(!__done || __res != 0))
|
||||||
if (unlikely(__res != 0))
|
|
||||||
fail_fn(count);
|
fail_fn(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
__mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *))
|
__mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *))
|
||||||
{
|
{
|
||||||
int __ex_flag, __res;
|
int __done, __res;
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"movli.l @%2, %0 \n"
|
"movli.l @%2, %0 \n"
|
||||||
"add #-1, %0 \n"
|
"add #-1, %0 \n"
|
||||||
"movco.l %0, @%2 \n"
|
"movco.l %0, @%2 \n"
|
||||||
"movt %1 \n"
|
"movt %1 \n"
|
||||||
: "=&z" (__res), "=&r" (__ex_flag)
|
: "=&z" (__res), "=&r" (__done)
|
||||||
: "r" (&(count)->counter)
|
: "r" (&(count)->counter)
|
||||||
: "t");
|
: "t");
|
||||||
|
|
||||||
__res |= !__ex_flag;
|
if (unlikely(!__done || __res != 0))
|
||||||
if (unlikely(__res != 0))
|
|
||||||
__res = fail_fn(count);
|
__res = fail_fn(count);
|
||||||
|
|
||||||
return __res;
|
return __res;
|
||||||
@ -61,19 +59,18 @@ __mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *))
|
|||||||
static inline void
|
static inline void
|
||||||
__mutex_fastpath_unlock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
__mutex_fastpath_unlock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
||||||
{
|
{
|
||||||
int __ex_flag, __res;
|
int __done, __res;
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"movli.l @%2, %0 \n\t"
|
"movli.l @%2, %0 \n\t"
|
||||||
"add #1, %0 \n\t"
|
"add #1, %0 \n\t"
|
||||||
"movco.l %0, @%2 \n\t"
|
"movco.l %0, @%2 \n\t"
|
||||||
"movt %1 \n\t"
|
"movt %1 \n\t"
|
||||||
: "=&z" (__res), "=&r" (__ex_flag)
|
: "=&z" (__res), "=&r" (__done)
|
||||||
: "r" (&(count)->counter)
|
: "r" (&(count)->counter)
|
||||||
: "t");
|
: "t");
|
||||||
|
|
||||||
__res |= !__ex_flag;
|
if (unlikely(!__done || __res <= 0))
|
||||||
if (unlikely(__res <= 0))
|
|
||||||
fail_fn(count);
|
fail_fn(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,23 +21,10 @@ static inline void syscall_rollback(struct task_struct *task,
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool syscall_has_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return (regs->sr & 0x1) ? true : false;
|
|
||||||
}
|
|
||||||
static inline void syscall_set_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
regs->sr |= 0x1;
|
|
||||||
}
|
|
||||||
static inline void syscall_clear_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
regs->sr &= ~0x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long syscall_get_error(struct task_struct *task,
|
static inline long syscall_get_error(struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return syscall_has_error(regs) ? regs->regs[0] : 0;
|
return IS_ERR_VALUE(regs->regs[0]) ? regs->regs[0] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long syscall_get_return_value(struct task_struct *task,
|
static inline long syscall_get_return_value(struct task_struct *task,
|
||||||
@ -50,13 +37,10 @@ static inline void syscall_set_return_value(struct task_struct *task,
|
|||||||
struct pt_regs *regs,
|
struct pt_regs *regs,
|
||||||
int error, long val)
|
int error, long val)
|
||||||
{
|
{
|
||||||
if (error) {
|
if (error)
|
||||||
syscall_set_error(regs);
|
|
||||||
regs->regs[0] = -error;
|
regs->regs[0] = -error;
|
||||||
} else {
|
else
|
||||||
syscall_clear_error(regs);
|
|
||||||
regs->regs[0] = val;
|
regs->regs[0] = val;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void syscall_get_arguments(struct task_struct *task,
|
static inline void syscall_get_arguments(struct task_struct *task,
|
||||||
|
@ -21,23 +21,10 @@ static inline void syscall_rollback(struct task_struct *task,
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool syscall_has_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return (regs->sr & 0x1) ? true : false;
|
|
||||||
}
|
|
||||||
static inline void syscall_set_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
regs->sr |= 0x1;
|
|
||||||
}
|
|
||||||
static inline void syscall_clear_error(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
regs->sr &= ~0x1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long syscall_get_error(struct task_struct *task,
|
static inline long syscall_get_error(struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return syscall_has_error(regs) ? regs->regs[9] : 0;
|
return IS_ERR_VALUE(regs->regs[9]) ? regs->regs[9] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long syscall_get_return_value(struct task_struct *task,
|
static inline long syscall_get_return_value(struct task_struct *task,
|
||||||
@ -50,13 +37,10 @@ static inline void syscall_set_return_value(struct task_struct *task,
|
|||||||
struct pt_regs *regs,
|
struct pt_regs *regs,
|
||||||
int error, long val)
|
int error, long val)
|
||||||
{
|
{
|
||||||
if (error) {
|
if (error)
|
||||||
syscall_set_error(regs);
|
|
||||||
regs->regs[9] = -error;
|
regs->regs[9] = -error;
|
||||||
} else {
|
else
|
||||||
syscall_clear_error(regs);
|
|
||||||
regs->regs[9] = val;
|
regs->regs[9] = val;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void syscall_get_arguments(struct task_struct *task,
|
static inline void syscall_get_arguments(struct task_struct *task,
|
||||||
|
@ -423,7 +423,7 @@ static int ieee_fpe_handler(struct pt_regs *regs)
|
|||||||
int m;
|
int m;
|
||||||
unsigned int hx;
|
unsigned int hx;
|
||||||
|
|
||||||
m = (finsn >> 9) & 0x7;
|
m = (finsn >> 8) & 0x7;
|
||||||
hx = tsk->thread.fpu.hard.fp_regs[m];
|
hx = tsk->thread.fpu.hard.fp_regs[m];
|
||||||
|
|
||||||
if ((tsk->thread.fpu.hard.fpscr & FPSCR_CAUSE_ERROR)
|
if ((tsk->thread.fpu.hard.fpscr & FPSCR_CAUSE_ERROR)
|
||||||
|
@ -262,11 +262,11 @@ void __init setup_bootmem_allocator(unsigned long free_pfn)
|
|||||||
BOOTMEM_DEFAULT);
|
BOOTMEM_DEFAULT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reserve physical page 0 - it's a special BIOS page on many boxes,
|
* Reserve physical pages below CONFIG_ZERO_PAGE_OFFSET.
|
||||||
* enabling clean reboots, SMP operation, laptop functions.
|
|
||||||
*/
|
*/
|
||||||
reserve_bootmem(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET,
|
if (CONFIG_ZERO_PAGE_OFFSET != 0)
|
||||||
BOOTMEM_DEFAULT);
|
reserve_bootmem(__MEMORY_START, CONFIG_ZERO_PAGE_OFFSET,
|
||||||
|
BOOTMEM_DEFAULT);
|
||||||
|
|
||||||
sparse_memory_present_with_active_regions(0);
|
sparse_memory_present_with_active_regions(0);
|
||||||
|
|
||||||
|
@ -510,7 +510,6 @@ handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs,
|
|||||||
case -ERESTARTNOHAND:
|
case -ERESTARTNOHAND:
|
||||||
no_system_call_restart:
|
no_system_call_restart:
|
||||||
regs->regs[0] = -EINTR;
|
regs->regs[0] = -EINTR;
|
||||||
regs->sr |= 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case -ERESTARTSYS:
|
case -ERESTARTSYS:
|
||||||
@ -589,8 +588,7 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)
|
|||||||
|
|
||||||
signr = get_signal_to_deliver(&info, &ka, regs, NULL);
|
signr = get_signal_to_deliver(&info, &ka, regs, NULL);
|
||||||
if (signr > 0) {
|
if (signr > 0) {
|
||||||
if (regs->sr & 1)
|
handle_syscall_restart(save_r0, regs, &ka.sa);
|
||||||
handle_syscall_restart(save_r0, regs, &ka.sa);
|
|
||||||
|
|
||||||
/* Whee! Actually deliver the signal. */
|
/* Whee! Actually deliver the signal. */
|
||||||
if (handle_signal(signr, &ka, &info, oldset,
|
if (handle_signal(signr, &ka, &info, oldset,
|
||||||
|
@ -60,7 +60,6 @@ handle_syscall_restart(struct pt_regs *regs, struct sigaction *sa)
|
|||||||
case -ERESTARTNOHAND:
|
case -ERESTARTNOHAND:
|
||||||
no_system_call_restart:
|
no_system_call_restart:
|
||||||
regs->regs[REG_RET] = -EINTR;
|
regs->regs[REG_RET] = -EINTR;
|
||||||
regs->sr |= 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case -ERESTARTSYS:
|
case -ERESTARTSYS:
|
||||||
@ -109,8 +108,7 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset)
|
|||||||
|
|
||||||
signr = get_signal_to_deliver(&info, &ka, regs, 0);
|
signr = get_signal_to_deliver(&info, &ka, regs, 0);
|
||||||
if (signr > 0) {
|
if (signr > 0) {
|
||||||
if (regs->sr & 1)
|
handle_syscall_restart(regs, &ka.sa);
|
||||||
handle_syscall_restart(regs, &ka.sa);
|
|
||||||
|
|
||||||
/* Whee! Actually deliver the signal. */
|
/* Whee! Actually deliver the signal. */
|
||||||
if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
|
if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
|
||||||
|
@ -36,8 +36,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* unsigned int csum_partial(const unsigned char *buf, int len,
|
* asmlinkage __wsum csum_partial(const void *buf, int len, __wsum sum);
|
||||||
* unsigned int sum);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.text
|
.text
|
||||||
@ -49,11 +48,31 @@ ENTRY(csum_partial)
|
|||||||
* Fortunately, it is easy to convert 2-byte alignment to 4-byte
|
* Fortunately, it is easy to convert 2-byte alignment to 4-byte
|
||||||
* alignment for the unrolled loop.
|
* alignment for the unrolled loop.
|
||||||
*/
|
*/
|
||||||
mov r5, r1
|
|
||||||
mov r4, r0
|
mov r4, r0
|
||||||
tst #2, r0 ! Check alignment.
|
tst #3, r0 ! Check alignment.
|
||||||
bt 2f ! Jump if alignment is ok.
|
bt/s 2f ! Jump if alignment is ok.
|
||||||
|
mov r4, r7 ! Keep a copy to check for alignment
|
||||||
!
|
!
|
||||||
|
tst #1, r0 ! Check alignment.
|
||||||
|
bt 21f ! Jump if alignment is boundary of 2bytes.
|
||||||
|
|
||||||
|
! buf is odd
|
||||||
|
tst r5, r5
|
||||||
|
add #-1, r5
|
||||||
|
bt 9f
|
||||||
|
mov.b @r4+, r0
|
||||||
|
extu.b r0, r0
|
||||||
|
addc r0, r6 ! t=0 from previous tst
|
||||||
|
mov r6, r0
|
||||||
|
shll8 r6
|
||||||
|
shlr16 r0
|
||||||
|
shlr8 r0
|
||||||
|
or r0, r6
|
||||||
|
mov r4, r0
|
||||||
|
tst #2, r0
|
||||||
|
bt 2f
|
||||||
|
21:
|
||||||
|
! buf is 2 byte aligned (len could be 0)
|
||||||
add #-2, r5 ! Alignment uses up two bytes.
|
add #-2, r5 ! Alignment uses up two bytes.
|
||||||
cmp/pz r5 !
|
cmp/pz r5 !
|
||||||
bt/s 1f ! Jump if we had at least two bytes.
|
bt/s 1f ! Jump if we had at least two bytes.
|
||||||
@ -61,16 +80,17 @@ ENTRY(csum_partial)
|
|||||||
bra 6f
|
bra 6f
|
||||||
add #2, r5 ! r5 was < 2. Deal with it.
|
add #2, r5 ! r5 was < 2. Deal with it.
|
||||||
1:
|
1:
|
||||||
mov r5, r1 ! Save new len for later use.
|
|
||||||
mov.w @r4+, r0
|
mov.w @r4+, r0
|
||||||
extu.w r0, r0
|
extu.w r0, r0
|
||||||
addc r0, r6
|
addc r0, r6
|
||||||
bf 2f
|
bf 2f
|
||||||
add #1, r6
|
add #1, r6
|
||||||
2:
|
2:
|
||||||
|
! buf is 4 byte aligned (len could be 0)
|
||||||
|
mov r5, r1
|
||||||
mov #-5, r0
|
mov #-5, r0
|
||||||
shld r0, r5
|
shld r0, r1
|
||||||
tst r5, r5
|
tst r1, r1
|
||||||
bt/s 4f ! if it's =0, go to 4f
|
bt/s 4f ! if it's =0, go to 4f
|
||||||
clrt
|
clrt
|
||||||
.align 2
|
.align 2
|
||||||
@ -92,30 +112,31 @@ ENTRY(csum_partial)
|
|||||||
addc r0, r6
|
addc r0, r6
|
||||||
addc r2, r6
|
addc r2, r6
|
||||||
movt r0
|
movt r0
|
||||||
dt r5
|
dt r1
|
||||||
bf/s 3b
|
bf/s 3b
|
||||||
cmp/eq #1, r0
|
cmp/eq #1, r0
|
||||||
! here, we know r5==0
|
! here, we know r1==0
|
||||||
addc r5, r6 ! add carry to r6
|
addc r1, r6 ! add carry to r6
|
||||||
4:
|
4:
|
||||||
mov r1, r0
|
mov r5, r0
|
||||||
and #0x1c, r0
|
and #0x1c, r0
|
||||||
tst r0, r0
|
tst r0, r0
|
||||||
bt/s 6f
|
bt 6f
|
||||||
mov r0, r5
|
! 4 bytes or more remaining
|
||||||
shlr2 r5
|
mov r0, r1
|
||||||
|
shlr2 r1
|
||||||
mov #0, r2
|
mov #0, r2
|
||||||
5:
|
5:
|
||||||
addc r2, r6
|
addc r2, r6
|
||||||
mov.l @r4+, r2
|
mov.l @r4+, r2
|
||||||
movt r0
|
movt r0
|
||||||
dt r5
|
dt r1
|
||||||
bf/s 5b
|
bf/s 5b
|
||||||
cmp/eq #1, r0
|
cmp/eq #1, r0
|
||||||
addc r2, r6
|
addc r2, r6
|
||||||
addc r5, r6 ! r5==0 here, so it means add carry-bit
|
addc r1, r6 ! r1==0 here, so it means add carry-bit
|
||||||
6:
|
6:
|
||||||
mov r1, r5
|
! 3 bytes or less remaining
|
||||||
mov #3, r0
|
mov #3, r0
|
||||||
and r0, r5
|
and r0, r5
|
||||||
tst r5, r5
|
tst r5, r5
|
||||||
@ -139,8 +160,18 @@ ENTRY(csum_partial)
|
|||||||
8:
|
8:
|
||||||
addc r0, r6
|
addc r0, r6
|
||||||
mov #0, r0
|
mov #0, r0
|
||||||
addc r0, r6
|
addc r0, r6
|
||||||
9:
|
9:
|
||||||
|
! Check if the buffer was misaligned, if so realign sum
|
||||||
|
mov r7, r0
|
||||||
|
tst #1, r0
|
||||||
|
bt 10f
|
||||||
|
mov r6, r0
|
||||||
|
shll8 r6
|
||||||
|
shlr16 r0
|
||||||
|
shlr8 r0
|
||||||
|
or r0, r6
|
||||||
|
10:
|
||||||
rts
|
rts
|
||||||
mov r6, r0
|
mov r6, r0
|
||||||
|
|
||||||
|
@ -891,10 +891,35 @@ prom_tba: .xword 0
|
|||||||
tlb_type: .word 0 /* Must NOT end up in BSS */
|
tlb_type: .word 0 /* Must NOT end up in BSS */
|
||||||
.section ".fixup",#alloc,#execinstr
|
.section ".fixup",#alloc,#execinstr
|
||||||
|
|
||||||
.globl __ret_efault, __retl_efault
|
.globl __ret_efault, __retl_efault, __ret_one, __retl_one
|
||||||
__ret_efault:
|
ENTRY(__ret_efault)
|
||||||
ret
|
ret
|
||||||
restore %g0, -EFAULT, %o0
|
restore %g0, -EFAULT, %o0
|
||||||
__retl_efault:
|
ENDPROC(__ret_efault)
|
||||||
|
|
||||||
|
ENTRY(__retl_efault)
|
||||||
retl
|
retl
|
||||||
mov -EFAULT, %o0
|
mov -EFAULT, %o0
|
||||||
|
ENDPROC(__retl_efault)
|
||||||
|
|
||||||
|
ENTRY(__retl_one)
|
||||||
|
retl
|
||||||
|
mov 1, %o0
|
||||||
|
ENDPROC(__retl_one)
|
||||||
|
|
||||||
|
ENTRY(__ret_one_asi)
|
||||||
|
wr %g0, ASI_AIUS, %asi
|
||||||
|
ret
|
||||||
|
restore %g0, 1, %o0
|
||||||
|
ENDPROC(__ret_one_asi)
|
||||||
|
|
||||||
|
ENTRY(__retl_one_asi)
|
||||||
|
wr %g0, ASI_AIUS, %asi
|
||||||
|
retl
|
||||||
|
mov 1, %o0
|
||||||
|
ENDPROC(__retl_one_asi)
|
||||||
|
|
||||||
|
ENTRY(__retl_o1)
|
||||||
|
retl
|
||||||
|
mov %o1, %o0
|
||||||
|
ENDPROC(__retl_o1)
|
||||||
|
@ -70,6 +70,7 @@ static void die_nmi(const char *str, struct pt_regs *regs, int do_panic)
|
|||||||
printk(" on CPU%d, ip %08lx, registers:\n",
|
printk(" on CPU%d, ip %08lx, registers:\n",
|
||||||
smp_processor_id(), regs->tpc);
|
smp_processor_id(), regs->tpc);
|
||||||
show_regs(regs);
|
show_regs(regs);
|
||||||
|
dump_stack();
|
||||||
|
|
||||||
bust_spinlocks(0);
|
bust_spinlocks(0);
|
||||||
|
|
||||||
|
@ -133,11 +133,16 @@ int __init pcr_arch_init(void)
|
|||||||
|
|
||||||
case cheetah:
|
case cheetah:
|
||||||
case cheetah_plus:
|
case cheetah_plus:
|
||||||
case spitfire:
|
|
||||||
pcr_ops = &direct_pcr_ops;
|
pcr_ops = &direct_pcr_ops;
|
||||||
pcr_enable = PCR_SUN4U_ENABLE;
|
pcr_enable = PCR_SUN4U_ENABLE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case spitfire:
|
||||||
|
/* UltraSPARC-I/II and derivatives lack a profile
|
||||||
|
* counter overflow interrupt so we can't make use of
|
||||||
|
* their hardware currently.
|
||||||
|
*/
|
||||||
|
/* fallthrough */
|
||||||
default:
|
default:
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto out_unregister;
|
goto out_unregister;
|
||||||
|
@ -6,13 +6,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -27,7 +23,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -31,7 +27,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,14 +5,9 @@
|
|||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -33,7 +28,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,14 +5,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -42,7 +37,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -6,13 +6,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -5,14 +5,9 @@
|
|||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
ret; \
|
|
||||||
restore %g0, 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __ret_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -30,7 +25,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,14 +5,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: wr %g0, ASI_AIUS, %asi;\
|
|
||||||
ret; \
|
|
||||||
restore %g0, 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __ret_one_asi;\
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -33,7 +28,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -27,7 +23,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U1memcpy.S"
|
#include "U1memcpy.S"
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -27,7 +23,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U1memcpy.S"
|
#include "U1memcpy.S"
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -27,7 +23,7 @@
|
|||||||
#define PREAMBLE \
|
#define PREAMBLE \
|
||||||
rd %asi, %g1; \
|
rd %asi, %g1; \
|
||||||
cmp %g1, ASI_AIUS; \
|
cmp %g1, ASI_AIUS; \
|
||||||
bne,pn %icc, memcpy_user_stub; \
|
bne,pn %icc, ___copy_in_user; \
|
||||||
nop; \
|
nop; \
|
||||||
|
|
||||||
#include "U3memcpy.S"
|
#include "U3memcpy.S"
|
||||||
|
@ -88,13 +88,9 @@ __bzero_done:
|
|||||||
|
|
||||||
#define EX_ST(x,y) \
|
#define EX_ST(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov %o1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_o1; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
|
@ -3,19 +3,16 @@
|
|||||||
* Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com)
|
* Copyright (C) 1999, 2000, 2004 David S. Miller (davem@redhat.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
#include <asm/asi.h>
|
#include <asm/asi.h>
|
||||||
|
|
||||||
#define XCC xcc
|
#define XCC xcc
|
||||||
|
|
||||||
#define EX(x,y) \
|
#define EX(x,y) \
|
||||||
98: x,y; \
|
98: x,y; \
|
||||||
.section .fixup; \
|
|
||||||
.align 4; \
|
|
||||||
99: retl; \
|
|
||||||
mov 1, %o0; \
|
|
||||||
.section __ex_table,"a";\
|
.section __ex_table,"a";\
|
||||||
.align 4; \
|
.align 4; \
|
||||||
.word 98b, 99b; \
|
.word 98b, __retl_one; \
|
||||||
.text; \
|
.text; \
|
||||||
.align 4;
|
.align 4;
|
||||||
|
|
||||||
@ -31,18 +28,7 @@
|
|||||||
* to copy register windows around during thread cloning.
|
* to copy register windows around during thread cloning.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.globl ___copy_in_user
|
ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */
|
||||||
.type ___copy_in_user,#function
|
|
||||||
___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
|
||||||
/* Writing to %asi is _expensive_ so we hardcode it.
|
|
||||||
* Reading %asi to check for KERNEL_DS is comparatively
|
|
||||||
* cheap.
|
|
||||||
*/
|
|
||||||
rd %asi, %g1
|
|
||||||
cmp %g1, ASI_AIUS
|
|
||||||
bne,pn %icc, memcpy_user_stub
|
|
||||||
nop
|
|
||||||
|
|
||||||
cmp %o2, 0
|
cmp %o2, 0
|
||||||
be,pn %XCC, 85f
|
be,pn %XCC, 85f
|
||||||
or %o0, %o1, %o3
|
or %o0, %o1, %o3
|
||||||
@ -53,22 +39,24 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
|||||||
/* 16 < len <= 64 */
|
/* 16 < len <= 64 */
|
||||||
andcc %o3, 0x7, %g0
|
andcc %o3, 0x7, %g0
|
||||||
bne,pn %XCC, 90f
|
bne,pn %XCC, 90f
|
||||||
sub %o0, %o1, %o3
|
nop
|
||||||
|
|
||||||
andn %o2, 0x7, %o4
|
andn %o2, 0x7, %o4
|
||||||
and %o2, 0x7, %o2
|
and %o2, 0x7, %o2
|
||||||
1: subcc %o4, 0x8, %o4
|
1: subcc %o4, 0x8, %o4
|
||||||
EX(ldxa [%o1] %asi, %o5)
|
EX(ldxa [%o1] %asi, %o5)
|
||||||
EX(stxa %o5, [%o1 + %o3] ASI_AIUS)
|
EX(stxa %o5, [%o0] %asi)
|
||||||
|
add %o1, 0x8, %o1
|
||||||
bgu,pt %XCC, 1b
|
bgu,pt %XCC, 1b
|
||||||
add %o1, 0x8, %o1
|
add %o0, 0x8, %o0
|
||||||
andcc %o2, 0x4, %g0
|
andcc %o2, 0x4, %g0
|
||||||
be,pt %XCC, 1f
|
be,pt %XCC, 1f
|
||||||
nop
|
nop
|
||||||
sub %o2, 0x4, %o2
|
sub %o2, 0x4, %o2
|
||||||
EX(lduwa [%o1] %asi, %o5)
|
EX(lduwa [%o1] %asi, %o5)
|
||||||
EX(stwa %o5, [%o1 + %o3] ASI_AIUS)
|
EX(stwa %o5, [%o0] %asi)
|
||||||
add %o1, 0x4, %o1
|
add %o1, 0x4, %o1
|
||||||
|
add %o0, 0x4, %o0
|
||||||
1: cmp %o2, 0
|
1: cmp %o2, 0
|
||||||
be,pt %XCC, 85f
|
be,pt %XCC, 85f
|
||||||
nop
|
nop
|
||||||
@ -78,14 +66,15 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
|||||||
80: /* 0 < len <= 16 */
|
80: /* 0 < len <= 16 */
|
||||||
andcc %o3, 0x3, %g0
|
andcc %o3, 0x3, %g0
|
||||||
bne,pn %XCC, 90f
|
bne,pn %XCC, 90f
|
||||||
sub %o0, %o1, %o3
|
nop
|
||||||
|
|
||||||
82:
|
82:
|
||||||
subcc %o2, 4, %o2
|
subcc %o2, 4, %o2
|
||||||
EX(lduwa [%o1] %asi, %g1)
|
EX(lduwa [%o1] %asi, %g1)
|
||||||
EX(stwa %g1, [%o1 + %o3] ASI_AIUS)
|
EX(stwa %g1, [%o0] %asi)
|
||||||
|
add %o1, 4, %o1
|
||||||
bgu,pt %XCC, 82b
|
bgu,pt %XCC, 82b
|
||||||
add %o1, 4, %o1
|
add %o0, 4, %o0
|
||||||
|
|
||||||
85: retl
|
85: retl
|
||||||
clr %o0
|
clr %o0
|
||||||
@ -94,26 +83,10 @@ ___copy_in_user: /* %o0=dst, %o1=src, %o2=len */
|
|||||||
90:
|
90:
|
||||||
subcc %o2, 1, %o2
|
subcc %o2, 1, %o2
|
||||||
EX(lduba [%o1] %asi, %g1)
|
EX(lduba [%o1] %asi, %g1)
|
||||||
EX(stba %g1, [%o1 + %o3] ASI_AIUS)
|
EX(stba %g1, [%o0] %asi)
|
||||||
|
add %o1, 1, %o1
|
||||||
bgu,pt %XCC, 90b
|
bgu,pt %XCC, 90b
|
||||||
add %o1, 1, %o1
|
add %o0, 1, %o0
|
||||||
retl
|
retl
|
||||||
clr %o0
|
clr %o0
|
||||||
|
ENDPROC(___copy_in_user)
|
||||||
.size ___copy_in_user, .-___copy_in_user
|
|
||||||
|
|
||||||
/* Act like copy_{to,in}_user(), ie. return zero instead
|
|
||||||
* of original destination pointer. This is invoked when
|
|
||||||
* copy_{to,in}_user() finds that %asi is kernel space.
|
|
||||||
*/
|
|
||||||
.globl memcpy_user_stub
|
|
||||||
.type memcpy_user_stub,#function
|
|
||||||
memcpy_user_stub:
|
|
||||||
save %sp, -192, %sp
|
|
||||||
mov %i0, %o0
|
|
||||||
mov %i1, %o1
|
|
||||||
call memcpy
|
|
||||||
mov %i2, %o2
|
|
||||||
ret
|
|
||||||
restore %g0, %g0, %o0
|
|
||||||
.size memcpy_user_stub, .-memcpy_user_stub
|
|
||||||
|
@ -1802,6 +1802,17 @@ config DMAR
|
|||||||
and include PCI device scope covered by these DMA
|
and include PCI device scope covered by these DMA
|
||||||
remapping devices.
|
remapping devices.
|
||||||
|
|
||||||
|
config DMAR_DEFAULT_ON
|
||||||
|
def_bool n
|
||||||
|
prompt "Enable DMA Remapping Devices by default"
|
||||||
|
depends on DMAR
|
||||||
|
help
|
||||||
|
Selecting this option will enable a DMAR device at boot time if
|
||||||
|
one is found. If this option is not selected, DMAR support can
|
||||||
|
be enabled by passing intel_iommu=on to the kernel. It is
|
||||||
|
recommended you say N here while the DMAR code remains
|
||||||
|
experimental.
|
||||||
|
|
||||||
config DMAR_GFX_WA
|
config DMAR_GFX_WA
|
||||||
def_bool y
|
def_bool y
|
||||||
prompt "Support for Graphics workaround"
|
prompt "Support for Graphics workaround"
|
||||||
|
@ -167,9 +167,9 @@ config MK7
|
|||||||
config MK8
|
config MK8
|
||||||
bool "Opteron/Athlon64/Hammer/K8"
|
bool "Opteron/Athlon64/Hammer/K8"
|
||||||
help
|
help
|
||||||
Select this for an AMD Opteron or Athlon64 Hammer-family processor. Enables
|
Select this for an AMD Opteron or Athlon64 Hammer-family processor.
|
||||||
use of some extended instructions, and passes appropriate optimization
|
Enables use of some extended instructions, and passes appropriate
|
||||||
flags to GCC.
|
optimization flags to GCC.
|
||||||
|
|
||||||
config MCRUSOE
|
config MCRUSOE
|
||||||
bool "Crusoe"
|
bool "Crusoe"
|
||||||
@ -256,9 +256,11 @@ config MPSC
|
|||||||
config MCORE2
|
config MCORE2
|
||||||
bool "Core 2/newer Xeon"
|
bool "Core 2/newer Xeon"
|
||||||
help
|
help
|
||||||
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx)
|
|
||||||
CPUs. You can distinguish newer from older Xeons by the CPU family
|
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
||||||
in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo)
|
53xx) CPUs. You can distinguish newer from older Xeons by the CPU
|
||||||
|
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
||||||
|
(not a typo)
|
||||||
|
|
||||||
config GENERIC_CPU
|
config GENERIC_CPU
|
||||||
bool "Generic-x86-64"
|
bool "Generic-x86-64"
|
||||||
@ -320,14 +322,14 @@ config X86_PPRO_FENCE
|
|||||||
bool "PentiumPro memory ordering errata workaround"
|
bool "PentiumPro memory ordering errata workaround"
|
||||||
depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
|
depends on M686 || M586MMX || M586TSC || M586 || M486 || M386 || MGEODEGX1
|
||||||
help
|
help
|
||||||
Old PentiumPro multiprocessor systems had errata that could cause memory
|
Old PentiumPro multiprocessor systems had errata that could cause
|
||||||
operations to violate the x86 ordering standard in rare cases. Enabling this
|
memory operations to violate the x86 ordering standard in rare cases.
|
||||||
option will attempt to work around some (but not all) occurances of
|
Enabling this option will attempt to work around some (but not all)
|
||||||
this problem, at the cost of much heavier spinlock and memory barrier
|
occurances of this problem, at the cost of much heavier spinlock and
|
||||||
operations.
|
memory barrier operations.
|
||||||
|
|
||||||
If unsure, say n here. Even distro kernels should think twice before enabling
|
If unsure, say n here. Even distro kernels should think twice before
|
||||||
this: there are few systems, and an unlikely bug.
|
enabling this: there are few systems, and an unlikely bug.
|
||||||
|
|
||||||
config X86_F00F_BUG
|
config X86_F00F_BUG
|
||||||
def_bool y
|
def_bool y
|
||||||
|
@ -418,9 +418,9 @@ ENTRY(ia32_syscall)
|
|||||||
orl $TS_COMPAT,TI_status(%r10)
|
orl $TS_COMPAT,TI_status(%r10)
|
||||||
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
|
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10)
|
||||||
jnz ia32_tracesys
|
jnz ia32_tracesys
|
||||||
ia32_do_syscall:
|
|
||||||
cmpl $(IA32_NR_syscalls-1),%eax
|
cmpl $(IA32_NR_syscalls-1),%eax
|
||||||
ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */
|
ja ia32_badsys
|
||||||
|
ia32_do_call:
|
||||||
IA32_ARG_FIXUP
|
IA32_ARG_FIXUP
|
||||||
call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
|
call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
|
||||||
ia32_sysret:
|
ia32_sysret:
|
||||||
@ -435,7 +435,9 @@ ia32_tracesys:
|
|||||||
call syscall_trace_enter
|
call syscall_trace_enter
|
||||||
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
LOAD_ARGS32 ARGOFFSET /* reload args from stack in case ptrace changed it */
|
||||||
RESTORE_REST
|
RESTORE_REST
|
||||||
jmp ia32_do_syscall
|
cmpl $(IA32_NR_syscalls-1),%eax
|
||||||
|
ja int_ret_from_sys_call /* ia32_tracesys has set RAX(%rsp) */
|
||||||
|
jmp ia32_do_call
|
||||||
END(ia32_syscall)
|
END(ia32_syscall)
|
||||||
|
|
||||||
ia32_badsys:
|
ia32_badsys:
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
*/
|
*/
|
||||||
static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
||||||
{
|
{
|
||||||
u16 gs;
|
|
||||||
|
|
||||||
/* changed the size calculations - should hopefully work better. lbt */
|
/* changed the size calculations - should hopefully work better. lbt */
|
||||||
dump->magic = CMAGIC;
|
dump->magic = CMAGIC;
|
||||||
dump->start_code = 0;
|
dump->start_code = 0;
|
||||||
@ -57,7 +55,7 @@ static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump)
|
|||||||
dump->regs.ds = (u16)regs->ds;
|
dump->regs.ds = (u16)regs->ds;
|
||||||
dump->regs.es = (u16)regs->es;
|
dump->regs.es = (u16)regs->es;
|
||||||
dump->regs.fs = (u16)regs->fs;
|
dump->regs.fs = (u16)regs->fs;
|
||||||
savesegment(gs, gs);
|
savesegment(gs, dump->regs.gs);
|
||||||
dump->regs.orig_ax = regs->orig_ax;
|
dump->regs.orig_ax = regs->orig_ax;
|
||||||
dump->regs.ip = regs->ip;
|
dump->regs.ip = regs->ip;
|
||||||
dump->regs.cs = (u16)regs->cs;
|
dump->regs.cs = (u16)regs->cs;
|
||||||
|
@ -93,6 +93,7 @@
|
|||||||
#define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */
|
#define X86_FEATURE_XTOPOLOGY (3*32+22) /* cpu topology enum extensions */
|
||||||
#define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */
|
#define X86_FEATURE_TSC_RELIABLE (3*32+23) /* TSC is known to be reliable */
|
||||||
#define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */
|
#define X86_FEATURE_NONSTOP_TSC (3*32+24) /* TSC does not stop in C states */
|
||||||
|
#define X86_FEATURE_CLFLUSH_MONITOR (3*32+25) /* "" clflush reqd with monitor */
|
||||||
|
|
||||||
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
|
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
|
||||||
#define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */
|
#define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */
|
||||||
|
@ -1,31 +1,18 @@
|
|||||||
#ifndef _ASM_X86_MATH_EMU_H
|
#ifndef _ASM_X86_MATH_EMU_H
|
||||||
#define _ASM_X86_MATH_EMU_H
|
#define _ASM_X86_MATH_EMU_H
|
||||||
|
|
||||||
|
#include <asm/ptrace.h>
|
||||||
|
#include <asm/vm86.h>
|
||||||
|
|
||||||
/* This structure matches the layout of the data saved to the stack
|
/* This structure matches the layout of the data saved to the stack
|
||||||
following a device-not-present interrupt, part of it saved
|
following a device-not-present interrupt, part of it saved
|
||||||
automatically by the 80386/80486.
|
automatically by the 80386/80486.
|
||||||
*/
|
*/
|
||||||
struct info {
|
struct math_emu_info {
|
||||||
long ___orig_eip;
|
long ___orig_eip;
|
||||||
long ___ebx;
|
union {
|
||||||
long ___ecx;
|
struct pt_regs *regs;
|
||||||
long ___edx;
|
struct kernel_vm86_regs *vm86;
|
||||||
long ___esi;
|
};
|
||||||
long ___edi;
|
|
||||||
long ___ebp;
|
|
||||||
long ___eax;
|
|
||||||
long ___ds;
|
|
||||||
long ___es;
|
|
||||||
long ___fs;
|
|
||||||
long ___orig_eax;
|
|
||||||
long ___eip;
|
|
||||||
long ___cs;
|
|
||||||
long ___eflags;
|
|
||||||
long ___esp;
|
|
||||||
long ___ss;
|
|
||||||
long ___vm86_es; /* This and the following only in vm86 mode */
|
|
||||||
long ___vm86_ds;
|
|
||||||
long ___vm86_fs;
|
|
||||||
long ___vm86_gs;
|
|
||||||
};
|
};
|
||||||
#endif /* _ASM_X86_MATH_EMU_H */
|
#endif /* _ASM_X86_MATH_EMU_H */
|
||||||
|
@ -60,6 +60,7 @@ extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
|
|||||||
u32 gsi);
|
u32 gsi);
|
||||||
extern void mp_config_acpi_legacy_irqs(void);
|
extern void mp_config_acpi_legacy_irqs(void);
|
||||||
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
|
extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
|
||||||
|
extern int acpi_probe_gsi(void);
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
||||||
u32 gsi, int triggering, int polarity);
|
u32 gsi, int triggering, int polarity);
|
||||||
@ -71,6 +72,11 @@ mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#else /* !CONFIG_ACPI: */
|
||||||
|
static inline int acpi_probe_gsi(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_ACPI */
|
#endif /* CONFIG_ACPI */
|
||||||
|
|
||||||
#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
|
#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
|
||||||
|
@ -1402,6 +1402,7 @@ static inline int __raw_spin_is_contended(struct raw_spinlock *lock)
|
|||||||
{
|
{
|
||||||
return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock);
|
return PVOP_CALL1(int, pv_lock_ops.spin_is_contended, lock);
|
||||||
}
|
}
|
||||||
|
#define __raw_spin_is_contended __raw_spin_is_contended
|
||||||
|
|
||||||
static __always_inline void __raw_spin_lock(struct raw_spinlock *lock)
|
static __always_inline void __raw_spin_lock(struct raw_spinlock *lock)
|
||||||
{
|
{
|
||||||
|
@ -302,16 +302,30 @@ static inline pte_t pte_mkspecial(pte_t pte)
|
|||||||
|
|
||||||
extern pteval_t __supported_pte_mask;
|
extern pteval_t __supported_pte_mask;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mask out unsupported bits in a present pgprot. Non-present pgprots
|
||||||
|
* can use those bits for other purposes, so leave them be.
|
||||||
|
*/
|
||||||
|
static inline pgprotval_t massage_pgprot(pgprot_t pgprot)
|
||||||
|
{
|
||||||
|
pgprotval_t protval = pgprot_val(pgprot);
|
||||||
|
|
||||||
|
if (protval & _PAGE_PRESENT)
|
||||||
|
protval &= __supported_pte_mask;
|
||||||
|
|
||||||
|
return protval;
|
||||||
|
}
|
||||||
|
|
||||||
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
return __pte((((phys_addr_t)page_nr << PAGE_SHIFT) |
|
return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
pgprot_val(pgprot)) & __supported_pte_mask);
|
massage_pgprot(pgprot));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
|
||||||
{
|
{
|
||||||
return __pmd((((phys_addr_t)page_nr << PAGE_SHIFT) |
|
return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
pgprot_val(pgprot)) & __supported_pte_mask);
|
massage_pgprot(pgprot));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
@ -323,7 +337,7 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|||||||
* the newprot (if present):
|
* the newprot (if present):
|
||||||
*/
|
*/
|
||||||
val &= _PAGE_CHG_MASK;
|
val &= _PAGE_CHG_MASK;
|
||||||
val |= pgprot_val(newprot) & (~_PAGE_CHG_MASK) & __supported_pte_mask;
|
val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK;
|
||||||
|
|
||||||
return __pte(val);
|
return __pte(val);
|
||||||
}
|
}
|
||||||
@ -339,7 +353,7 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
|||||||
|
|
||||||
#define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK)
|
#define pte_pgprot(x) __pgprot(pte_flags(x) & PTE_FLAGS_MASK)
|
||||||
|
|
||||||
#define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask)
|
#define canon_pgprot(p) __pgprot(massage_pgprot(p))
|
||||||
|
|
||||||
static inline int is_new_memtype_allowed(unsigned long flags,
|
static inline int is_new_memtype_allowed(unsigned long flags,
|
||||||
unsigned long new_flags)
|
unsigned long new_flags)
|
||||||
|
@ -353,7 +353,7 @@ struct i387_soft_struct {
|
|||||||
u8 no_update;
|
u8 no_update;
|
||||||
u8 rm;
|
u8 rm;
|
||||||
u8 alimit;
|
u8 alimit;
|
||||||
struct info *info;
|
struct math_emu_info *info;
|
||||||
u32 entry_eip;
|
u32 entry_eip;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -245,6 +245,7 @@ static inline int __raw_spin_is_contended(raw_spinlock_t *lock)
|
|||||||
{
|
{
|
||||||
return __ticket_spin_is_contended(lock);
|
return __ticket_spin_is_contended(lock);
|
||||||
}
|
}
|
||||||
|
#define __raw_spin_is_contended __raw_spin_is_contended
|
||||||
|
|
||||||
static __always_inline void __raw_spin_lock(raw_spinlock_t *lock)
|
static __always_inline void __raw_spin_lock(raw_spinlock_t *lock)
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,7 @@ dotraplinkage void do_int3(struct pt_regs *, long);
|
|||||||
dotraplinkage void do_overflow(struct pt_regs *, long);
|
dotraplinkage void do_overflow(struct pt_regs *, long);
|
||||||
dotraplinkage void do_bounds(struct pt_regs *, long);
|
dotraplinkage void do_bounds(struct pt_regs *, long);
|
||||||
dotraplinkage void do_invalid_op(struct pt_regs *, long);
|
dotraplinkage void do_invalid_op(struct pt_regs *, long);
|
||||||
dotraplinkage void do_device_not_available(struct pt_regs *, long);
|
dotraplinkage void do_device_not_available(struct pt_regs);
|
||||||
dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long);
|
dotraplinkage void do_coprocessor_segment_overrun(struct pt_regs *, long);
|
||||||
dotraplinkage void do_invalid_TSS(struct pt_regs *, long);
|
dotraplinkage void do_invalid_TSS(struct pt_regs *, long);
|
||||||
dotraplinkage void do_segment_not_present(struct pt_regs *, long);
|
dotraplinkage void do_segment_not_present(struct pt_regs *, long);
|
||||||
@ -77,7 +77,7 @@ extern int panic_on_unrecovered_nmi;
|
|||||||
extern int kstack_depth_to_print;
|
extern int kstack_depth_to_print;
|
||||||
|
|
||||||
void math_error(void __user *);
|
void math_error(void __user *);
|
||||||
asmlinkage void math_emulate(long);
|
void math_emulate(struct math_emu_info *);
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
unsigned long patch_espfix_desc(unsigned long, unsigned long);
|
unsigned long patch_espfix_desc(unsigned long, unsigned long);
|
||||||
#else
|
#else
|
||||||
|
@ -137,7 +137,7 @@ static inline pte_t mfn_pte(unsigned long page_nr, pgprot_t pgprot)
|
|||||||
pte_t pte;
|
pte_t pte;
|
||||||
|
|
||||||
pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) |
|
pte.pte = ((phys_addr_t)page_nr << PAGE_SHIFT) |
|
||||||
(pgprot_val(pgprot) & __supported_pte_mask);
|
massage_pgprot(pgprot);
|
||||||
|
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
@ -973,6 +973,29 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base)
|
|||||||
nr_ioapics++;
|
nr_ioapics++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __init acpi_probe_gsi(void)
|
||||||
|
{
|
||||||
|
int idx;
|
||||||
|
int gsi;
|
||||||
|
int max_gsi = 0;
|
||||||
|
|
||||||
|
if (acpi_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!acpi_ioapic)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
max_gsi = 0;
|
||||||
|
for (idx = 0; idx < nr_ioapics; idx++) {
|
||||||
|
gsi = mp_ioapic_routing[idx].gsi_end;
|
||||||
|
|
||||||
|
if (gsi > max_gsi)
|
||||||
|
max_gsi = gsi;
|
||||||
|
}
|
||||||
|
|
||||||
|
return max_gsi + 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void assign_to_mp_irq(struct mp_config_intsrc *m,
|
static void assign_to_mp_irq(struct mp_config_intsrc *m,
|
||||||
struct mp_config_intsrc *mp_irq)
|
struct mp_config_intsrc *mp_irq)
|
||||||
{
|
{
|
||||||
|
@ -156,11 +156,11 @@ static int __init acpi_sleep_setup(char *str)
|
|||||||
#ifdef CONFIG_HIBERNATION
|
#ifdef CONFIG_HIBERNATION
|
||||||
if (strncmp(str, "s4_nohwsig", 10) == 0)
|
if (strncmp(str, "s4_nohwsig", 10) == 0)
|
||||||
acpi_no_s4_hw_signature();
|
acpi_no_s4_hw_signature();
|
||||||
|
if (strncmp(str, "s4_nonvs", 8) == 0)
|
||||||
|
acpi_s4_no_nvs();
|
||||||
#endif
|
#endif
|
||||||
if (strncmp(str, "old_ordering", 12) == 0)
|
if (strncmp(str, "old_ordering", 12) == 0)
|
||||||
acpi_old_suspend_ordering();
|
acpi_old_suspend_ordering();
|
||||||
if (strncmp(str, "s4_nonvs", 8) == 0)
|
|
||||||
acpi_s4_no_nvs();
|
|
||||||
str = strchr(str, ',');
|
str = strchr(str, ',');
|
||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
str += strspn(str, ", \t");
|
str += strspn(str, ", \t");
|
||||||
|
@ -1436,7 +1436,7 @@ static int __init detect_init_APIC(void)
|
|||||||
switch (boot_cpu_data.x86_vendor) {
|
switch (boot_cpu_data.x86_vendor) {
|
||||||
case X86_VENDOR_AMD:
|
case X86_VENDOR_AMD:
|
||||||
if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
|
if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
|
||||||
(boot_cpu_data.x86 == 15))
|
(boot_cpu_data.x86 >= 15))
|
||||||
break;
|
break;
|
||||||
goto no_apic;
|
goto no_apic;
|
||||||
case X86_VENDOR_INTEL:
|
case X86_VENDOR_INTEL:
|
||||||
|
@ -245,17 +245,6 @@ config X86_E_POWERSAVER
|
|||||||
|
|
||||||
comment "shared options"
|
comment "shared options"
|
||||||
|
|
||||||
config X86_ACPI_CPUFREQ_PROC_INTF
|
|
||||||
bool "/proc/acpi/processor/../performance interface (deprecated)"
|
|
||||||
depends on PROC_FS
|
|
||||||
depends on X86_ACPI_CPUFREQ || X86_POWERNOW_K7_ACPI || X86_POWERNOW_K8_ACPI
|
|
||||||
help
|
|
||||||
This enables the deprecated /proc/acpi/processor/../performance
|
|
||||||
interface. While it is helpful for debugging, the generic,
|
|
||||||
cross-architecture cpufreq interfaces should be used.
|
|
||||||
|
|
||||||
If in doubt, say N.
|
|
||||||
|
|
||||||
config X86_SPEEDSTEP_LIB
|
config X86_SPEEDSTEP_LIB
|
||||||
tristate
|
tristate
|
||||||
default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD)
|
default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD)
|
||||||
|
@ -939,10 +939,25 @@ static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
|
|||||||
free_cpumask_var(data->acpi_data.shared_cpu_map);
|
free_cpumask_var(data->acpi_data.shared_cpu_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_transition_latency(struct powernow_k8_data *data)
|
||||||
|
{
|
||||||
|
int max_latency = 0;
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < data->acpi_data.state_count; i++) {
|
||||||
|
int cur_latency = data->acpi_data.states[i].transition_latency
|
||||||
|
+ data->acpi_data.states[i].bus_master_latency;
|
||||||
|
if (cur_latency > max_latency)
|
||||||
|
max_latency = cur_latency;
|
||||||
|
}
|
||||||
|
/* value in usecs, needs to be in nanoseconds */
|
||||||
|
return 1000 * max_latency;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; }
|
static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data) { return -ENODEV; }
|
||||||
static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; }
|
static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data) { return; }
|
||||||
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; }
|
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index) { return; }
|
||||||
|
static int get_transition_latency(struct powernow_k8_data *data) { return 0; }
|
||||||
#endif /* CONFIG_X86_POWERNOW_K8_ACPI */
|
#endif /* CONFIG_X86_POWERNOW_K8_ACPI */
|
||||||
|
|
||||||
/* Take a frequency, and issue the fid/vid transition command */
|
/* Take a frequency, and issue the fid/vid transition command */
|
||||||
@ -1173,7 +1188,13 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
}
|
/* Take a crude guess here.
|
||||||
|
* That guess was in microseconds, so multiply with 1000 */
|
||||||
|
pol->cpuinfo.transition_latency = (
|
||||||
|
((data->rvo + 8) * data->vstable * VST_UNITS_20US) +
|
||||||
|
((1 << data->irt) * 30)) * 1000;
|
||||||
|
} else /* ACPI _PSS objects available */
|
||||||
|
pol->cpuinfo.transition_latency = get_transition_latency(data);
|
||||||
|
|
||||||
/* only run on specific CPU from here on */
|
/* only run on specific CPU from here on */
|
||||||
oldmask = current->cpus_allowed;
|
oldmask = current->cpus_allowed;
|
||||||
@ -1204,11 +1225,6 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
|
|||||||
cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu));
|
cpumask_copy(pol->cpus, &per_cpu(cpu_core_map, pol->cpu));
|
||||||
data->available_cores = pol->cpus;
|
data->available_cores = pol->cpus;
|
||||||
|
|
||||||
/* Take a crude guess here.
|
|
||||||
* That guess was in microseconds, so multiply with 1000 */
|
|
||||||
pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US)
|
|
||||||
+ (3 * (1 << data->irt) * 10)) * 1000;
|
|
||||||
|
|
||||||
if (cpu_family == CPU_HW_PSTATE)
|
if (cpu_family == CPU_HW_PSTATE)
|
||||||
pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate);
|
pol->cur = find_khz_freq_from_pstate(data->powernow_table, data->currpstate);
|
||||||
else
|
else
|
||||||
|
@ -291,6 +291,9 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
|||||||
ds_init_intel(c);
|
ds_init_intel(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->x86 == 6 && c->x86_model == 29 && cpu_has_clflush)
|
||||||
|
set_cpu_cap(c, X86_FEATURE_CLFLUSH_MONITOR);
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
if (c->x86 == 15)
|
if (c->x86 == 15)
|
||||||
c->x86_cache_alignment = c->x86_clflush_size * 2;
|
c->x86_cache_alignment = c->x86_clflush_size * 2;
|
||||||
|
@ -36,8 +36,11 @@ static struct _cache_table cache_table[] __cpuinitdata =
|
|||||||
{
|
{
|
||||||
{ 0x06, LVL_1_INST, 8 }, /* 4-way set assoc, 32 byte line size */
|
{ 0x06, LVL_1_INST, 8 }, /* 4-way set assoc, 32 byte line size */
|
||||||
{ 0x08, LVL_1_INST, 16 }, /* 4-way set assoc, 32 byte line size */
|
{ 0x08, LVL_1_INST, 16 }, /* 4-way set assoc, 32 byte line size */
|
||||||
|
{ 0x09, LVL_1_INST, 32 }, /* 4-way set assoc, 64 byte line size */
|
||||||
{ 0x0a, LVL_1_DATA, 8 }, /* 2 way set assoc, 32 byte line size */
|
{ 0x0a, LVL_1_DATA, 8 }, /* 2 way set assoc, 32 byte line size */
|
||||||
{ 0x0c, LVL_1_DATA, 16 }, /* 4-way set assoc, 32 byte line size */
|
{ 0x0c, LVL_1_DATA, 16 }, /* 4-way set assoc, 32 byte line size */
|
||||||
|
{ 0x0d, LVL_1_DATA, 16 }, /* 4-way set assoc, 64 byte line size */
|
||||||
|
{ 0x21, LVL_2, 256 }, /* 8-way set assoc, 64 byte line size */
|
||||||
{ 0x22, LVL_3, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */
|
{ 0x22, LVL_3, 512 }, /* 4-way set assoc, sectored cache, 64 byte line size */
|
||||||
{ 0x23, LVL_3, 1024 }, /* 8-way set assoc, sectored cache, 64 byte line size */
|
{ 0x23, LVL_3, 1024 }, /* 8-way set assoc, sectored cache, 64 byte line size */
|
||||||
{ 0x25, LVL_3, 2048 }, /* 8-way set assoc, sectored cache, 64 byte line size */
|
{ 0x25, LVL_3, 2048 }, /* 8-way set assoc, sectored cache, 64 byte line size */
|
||||||
@ -85,6 +88,18 @@ static struct _cache_table cache_table[] __cpuinitdata =
|
|||||||
{ 0x85, LVL_2, 2048 }, /* 8-way set assoc, 32 byte line size */
|
{ 0x85, LVL_2, 2048 }, /* 8-way set assoc, 32 byte line size */
|
||||||
{ 0x86, LVL_2, 512 }, /* 4-way set assoc, 64 byte line size */
|
{ 0x86, LVL_2, 512 }, /* 4-way set assoc, 64 byte line size */
|
||||||
{ 0x87, LVL_2, 1024 }, /* 8-way set assoc, 64 byte line size */
|
{ 0x87, LVL_2, 1024 }, /* 8-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd0, LVL_3, 512 }, /* 4-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd1, LVL_3, 1024 }, /* 4-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd2, LVL_3, 2048 }, /* 4-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd6, LVL_3, 1024 }, /* 8-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd7, LVL_3, 2038 }, /* 8-way set assoc, 64 byte line size */
|
||||||
|
{ 0xd8, LVL_3, 4096 }, /* 12-way set assoc, 64 byte line size */
|
||||||
|
{ 0xdc, LVL_3, 2048 }, /* 12-way set assoc, 64 byte line size */
|
||||||
|
{ 0xdd, LVL_3, 4096 }, /* 12-way set assoc, 64 byte line size */
|
||||||
|
{ 0xde, LVL_3, 8192 }, /* 12-way set assoc, 64 byte line size */
|
||||||
|
{ 0xe2, LVL_3, 2048 }, /* 16-way set assoc, 64 byte line size */
|
||||||
|
{ 0xe3, LVL_3, 4096 }, /* 16-way set assoc, 64 byte line size */
|
||||||
|
{ 0xe4, LVL_3, 8192 }, /* 16-way set assoc, 64 byte line size */
|
||||||
{ 0x00, 0, 0}
|
{ 0x00, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -346,6 +346,7 @@ ENTRY(save_args)
|
|||||||
popq_cfi %rax /* move return address... */
|
popq_cfi %rax /* move return address... */
|
||||||
mov %gs:pda_irqstackptr,%rsp
|
mov %gs:pda_irqstackptr,%rsp
|
||||||
EMPTY_FRAME 0
|
EMPTY_FRAME 0
|
||||||
|
pushq_cfi %rbp /* backlink for unwinder */
|
||||||
pushq_cfi %rax /* ... to the new stack */
|
pushq_cfi %rax /* ... to the new stack */
|
||||||
/*
|
/*
|
||||||
* We entered an interrupt context - irqs are off:
|
* We entered an interrupt context - irqs are off:
|
||||||
|
@ -488,20 +488,21 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
|
|||||||
* ignore such a protection.
|
* ignore such a protection.
|
||||||
*/
|
*/
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"1: " _ASM_MOV " (%[parent_old]), %[old]\n"
|
"1: " _ASM_MOV " (%[parent]), %[old]\n"
|
||||||
"2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n"
|
"2: " _ASM_MOV " %[return_hooker], (%[parent])\n"
|
||||||
" movl $0, %[faulted]\n"
|
" movl $0, %[faulted]\n"
|
||||||
|
"3:\n"
|
||||||
|
|
||||||
".section .fixup, \"ax\"\n"
|
".section .fixup, \"ax\"\n"
|
||||||
"3: movl $1, %[faulted]\n"
|
"4: movl $1, %[faulted]\n"
|
||||||
|
" jmp 3b\n"
|
||||||
".previous\n"
|
".previous\n"
|
||||||
|
|
||||||
_ASM_EXTABLE(1b, 3b)
|
_ASM_EXTABLE(1b, 4b)
|
||||||
_ASM_EXTABLE(2b, 3b)
|
_ASM_EXTABLE(2b, 4b)
|
||||||
|
|
||||||
: [parent_replaced] "=r" (parent), [old] "=r" (old),
|
: [old] "=r" (old), [faulted] "=r" (faulted)
|
||||||
[faulted] "=r" (faulted)
|
: [parent] "r" (parent), [return_hooker] "r" (return_hooker)
|
||||||
: [parent_old] "0" (parent), [return_hooker] "r" (return_hooker)
|
|
||||||
: "memory"
|
: "memory"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -897,13 +897,21 @@ static unsigned long hpet_rtc_flags;
|
|||||||
static int hpet_prev_update_sec;
|
static int hpet_prev_update_sec;
|
||||||
static struct rtc_time hpet_alarm_time;
|
static struct rtc_time hpet_alarm_time;
|
||||||
static unsigned long hpet_pie_count;
|
static unsigned long hpet_pie_count;
|
||||||
static unsigned long hpet_t1_cmp;
|
static u32 hpet_t1_cmp;
|
||||||
static unsigned long hpet_default_delta;
|
static unsigned long hpet_default_delta;
|
||||||
static unsigned long hpet_pie_delta;
|
static unsigned long hpet_pie_delta;
|
||||||
static unsigned long hpet_pie_limit;
|
static unsigned long hpet_pie_limit;
|
||||||
|
|
||||||
static rtc_irq_handler irq_handler;
|
static rtc_irq_handler irq_handler;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that the hpet counter c1 is ahead of the c2
|
||||||
|
*/
|
||||||
|
static inline int hpet_cnt_ahead(u32 c1, u32 c2)
|
||||||
|
{
|
||||||
|
return (s32)(c2 - c1) < 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Registers a IRQ handler.
|
* Registers a IRQ handler.
|
||||||
*/
|
*/
|
||||||
@ -1075,7 +1083,7 @@ static void hpet_rtc_timer_reinit(void)
|
|||||||
hpet_t1_cmp += delta;
|
hpet_t1_cmp += delta;
|
||||||
hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
|
hpet_writel(hpet_t1_cmp, HPET_T1_CMP);
|
||||||
lost_ints++;
|
lost_ints++;
|
||||||
} while ((long)(hpet_readl(HPET_COUNTER) - hpet_t1_cmp) > 0);
|
} while (!hpet_cnt_ahead(hpet_t1_cmp, hpet_readl(HPET_COUNTER)));
|
||||||
|
|
||||||
if (lost_ints) {
|
if (lost_ints) {
|
||||||
if (hpet_rtc_flags & RTC_PIE)
|
if (hpet_rtc_flags & RTC_PIE)
|
||||||
|
@ -28,10 +28,10 @@ static int i8237A_resume(struct sys_device *dev)
|
|||||||
|
|
||||||
flags = claim_dma_lock();
|
flags = claim_dma_lock();
|
||||||
|
|
||||||
dma_outb(DMA1_RESET_REG, 0);
|
dma_outb(0, DMA1_RESET_REG);
|
||||||
dma_outb(DMA2_RESET_REG, 0);
|
dma_outb(0, DMA2_RESET_REG);
|
||||||
|
|
||||||
for (i = 0;i < 8;i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
set_dma_addr(i, 0x000000);
|
set_dma_addr(i, 0x000000);
|
||||||
/* DMA count is a bit weird so this is not 0 */
|
/* DMA count is a bit weird so this is not 0 */
|
||||||
set_dma_count(i, 1);
|
set_dma_count(i, 1);
|
||||||
@ -51,14 +51,14 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct sysdev_class i8237_sysdev_class = {
|
static struct sysdev_class i8237_sysdev_class = {
|
||||||
.name = "i8237",
|
.name = "i8237",
|
||||||
.suspend = i8237A_suspend,
|
.suspend = i8237A_suspend,
|
||||||
.resume = i8237A_resume,
|
.resume = i8237A_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sys_device device_i8237A = {
|
static struct sys_device device_i8237A = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.cls = &i8237_sysdev_class,
|
.cls = &i8237_sysdev_class,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init i8237A_init_sysfs(void)
|
static int __init i8237A_init_sysfs(void)
|
||||||
@ -68,5 +68,4 @@ static int __init i8237A_init_sysfs(void)
|
|||||||
error = sysdev_register(&device_i8237A);
|
error = sysdev_register(&device_i8237A);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_initcall(i8237A_init_sysfs);
|
device_initcall(i8237A_init_sysfs);
|
||||||
|
@ -2528,14 +2528,15 @@ static void irq_complete_move(struct irq_desc **descp)
|
|||||||
|
|
||||||
vector = ~get_irq_regs()->orig_ax;
|
vector = ~get_irq_regs()->orig_ax;
|
||||||
me = smp_processor_id();
|
me = smp_processor_id();
|
||||||
|
|
||||||
|
if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) {
|
||||||
#ifdef CONFIG_NUMA_MIGRATE_IRQ_DESC
|
#ifdef CONFIG_NUMA_MIGRATE_IRQ_DESC
|
||||||
*descp = desc = move_irq_desc(desc, me);
|
*descp = desc = move_irq_desc(desc, me);
|
||||||
/* get the new one */
|
/* get the new one */
|
||||||
cfg = desc->chip_data;
|
cfg = desc->chip_data;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
|
|
||||||
send_cleanup_vector(cfg);
|
send_cleanup_vector(cfg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void irq_complete_move(struct irq_desc **descp) {}
|
static inline void irq_complete_move(struct irq_desc **descp) {}
|
||||||
@ -3840,14 +3841,24 @@ int __init io_apic_get_redir_entries (int ioapic)
|
|||||||
|
|
||||||
void __init probe_nr_irqs_gsi(void)
|
void __init probe_nr_irqs_gsi(void)
|
||||||
{
|
{
|
||||||
int idx;
|
|
||||||
int nr = 0;
|
int nr = 0;
|
||||||
|
|
||||||
for (idx = 0; idx < nr_ioapics; idx++)
|
nr = acpi_probe_gsi();
|
||||||
nr += io_apic_get_redir_entries(idx) + 1;
|
if (nr > nr_irqs_gsi) {
|
||||||
|
|
||||||
if (nr > nr_irqs_gsi)
|
|
||||||
nr_irqs_gsi = nr;
|
nr_irqs_gsi = nr;
|
||||||
|
} else {
|
||||||
|
/* for acpi=off or acpi is not compiled in */
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
nr = 0;
|
||||||
|
for (idx = 0; idx < nr_ioapics; idx++)
|
||||||
|
nr += io_apic_get_redir_entries(idx) + 1;
|
||||||
|
|
||||||
|
if (nr > nr_irqs_gsi)
|
||||||
|
nr_irqs_gsi = nr;
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
|
@ -78,15 +78,6 @@ void __init init_ISA_irqs(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* IRQ2 is cascade interrupt to second interrupt controller
|
|
||||||
*/
|
|
||||||
static struct irqaction irq2 = {
|
|
||||||
.handler = no_action,
|
|
||||||
.mask = CPU_MASK_NONE,
|
|
||||||
.name = "cascade",
|
|
||||||
};
|
|
||||||
|
|
||||||
DEFINE_PER_CPU(vector_irq_t, vector_irq) = {
|
DEFINE_PER_CPU(vector_irq_t, vector_irq) = {
|
||||||
[0 ... IRQ0_VECTOR - 1] = -1,
|
[0 ... IRQ0_VECTOR - 1] = -1,
|
||||||
[IRQ0_VECTOR] = 0,
|
[IRQ0_VECTOR] = 0,
|
||||||
@ -178,9 +169,6 @@ void __init native_init_IRQ(void)
|
|||||||
alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
|
alloc_intr_gate(THERMAL_APIC_VECTOR, thermal_interrupt);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!acpi_ioapic)
|
|
||||||
setup_irq(2, &irq2);
|
|
||||||
|
|
||||||
/* setup after call gates are initialised (usually add in
|
/* setup after call gates are initialised (usually add in
|
||||||
* the architecture specific gates)
|
* the architecture specific gates)
|
||||||
*/
|
*/
|
||||||
|
@ -180,6 +180,9 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
|
|||||||
|
|
||||||
trace_power_start(&it, POWER_CSTATE, (ax>>4)+1);
|
trace_power_start(&it, POWER_CSTATE, (ax>>4)+1);
|
||||||
if (!need_resched()) {
|
if (!need_resched()) {
|
||||||
|
if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
|
||||||
|
clflush((void *)¤t_thread_info()->flags);
|
||||||
|
|
||||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||||
smp_mb();
|
smp_mb();
|
||||||
if (!need_resched())
|
if (!need_resched())
|
||||||
@ -194,6 +197,9 @@ static void mwait_idle(void)
|
|||||||
struct power_trace it;
|
struct power_trace it;
|
||||||
if (!need_resched()) {
|
if (!need_resched()) {
|
||||||
trace_power_start(&it, POWER_CSTATE, 1);
|
trace_power_start(&it, POWER_CSTATE, 1);
|
||||||
|
if (cpu_has(¤t_cpu_data, X86_FEATURE_CLFLUSH_MONITOR))
|
||||||
|
clflush((void *)¤t_thread_info()->flags);
|
||||||
|
|
||||||
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
__monitor((void *)¤t_thread_info()->flags, 0, 0);
|
||||||
smp_mb();
|
smp_mb();
|
||||||
if (!need_resched())
|
if (!need_resched())
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
@ -151,14 +152,18 @@ void __show_regs(struct pt_regs *regs, int all)
|
|||||||
unsigned long d0, d1, d2, d3, d6, d7;
|
unsigned long d0, d1, d2, d3, d6, d7;
|
||||||
unsigned int fsindex, gsindex;
|
unsigned int fsindex, gsindex;
|
||||||
unsigned int ds, cs, es;
|
unsigned int ds, cs, es;
|
||||||
|
const char *board;
|
||||||
|
|
||||||
printk("\n");
|
printk("\n");
|
||||||
print_modules();
|
print_modules();
|
||||||
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s\n",
|
board = dmi_get_system_info(DMI_PRODUCT_NAME);
|
||||||
|
if (!board)
|
||||||
|
board = "";
|
||||||
|
printk(KERN_INFO "Pid: %d, comm: %.20s %s %s %.*s %s\n",
|
||||||
current->pid, current->comm, print_tainted(),
|
current->pid, current->comm, print_tainted(),
|
||||||
init_utsname()->release,
|
init_utsname()->release,
|
||||||
(int)strcspn(init_utsname()->version, " "),
|
(int)strcspn(init_utsname()->version, " "),
|
||||||
init_utsname()->version);
|
init_utsname()->version, board);
|
||||||
printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip);
|
printk(KERN_INFO "RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip);
|
||||||
printk_address(regs->ip, 1);
|
printk_address(regs->ip, 1);
|
||||||
printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss,
|
printk(KERN_INFO "RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss,
|
||||||
|
@ -607,7 +607,7 @@ struct x86_quirks *x86_quirks __initdata = &default_x86_quirks;
|
|||||||
static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
|
static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
|
||||||
{
|
{
|
||||||
printk(KERN_NOTICE
|
printk(KERN_NOTICE
|
||||||
"%s detected: BIOS may corrupt low RAM, working it around.\n",
|
"%s detected: BIOS may corrupt low RAM, working around it.\n",
|
||||||
d->ident);
|
d->ident);
|
||||||
|
|
||||||
e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED);
|
e820_update_range(0, 0x10000, E820_RAM, E820_RESERVED);
|
||||||
|
@ -896,7 +896,7 @@ asmlinkage void math_state_restore(void)
|
|||||||
EXPORT_SYMBOL_GPL(math_state_restore);
|
EXPORT_SYMBOL_GPL(math_state_restore);
|
||||||
|
|
||||||
#ifndef CONFIG_MATH_EMULATION
|
#ifndef CONFIG_MATH_EMULATION
|
||||||
asmlinkage void math_emulate(long arg)
|
void math_emulate(struct math_emu_info *info)
|
||||||
{
|
{
|
||||||
printk(KERN_EMERG
|
printk(KERN_EMERG
|
||||||
"math-emulation not enabled and no coprocessor found.\n");
|
"math-emulation not enabled and no coprocessor found.\n");
|
||||||
@ -906,16 +906,19 @@ asmlinkage void math_emulate(long arg)
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_MATH_EMULATION */
|
#endif /* CONFIG_MATH_EMULATION */
|
||||||
|
|
||||||
dotraplinkage void __kprobes
|
dotraplinkage void __kprobes do_device_not_available(struct pt_regs regs)
|
||||||
do_device_not_available(struct pt_regs *regs, long error)
|
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
if (read_cr0() & X86_CR0_EM) {
|
if (read_cr0() & X86_CR0_EM) {
|
||||||
conditional_sti(regs);
|
struct math_emu_info info = { };
|
||||||
math_emulate(0);
|
|
||||||
|
conditional_sti(®s);
|
||||||
|
|
||||||
|
info.regs = ®s;
|
||||||
|
math_emulate(&info);
|
||||||
} else {
|
} else {
|
||||||
math_state_restore(); /* interrupts still off */
|
math_state_restore(); /* interrupts still off */
|
||||||
conditional_sti(regs);
|
conditional_sti(®s);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
math_state_restore();
|
math_state_restore();
|
||||||
|
@ -320,6 +320,16 @@ static void vmi_release_pmd(unsigned long pfn)
|
|||||||
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use the pgd_free hook for releasing the pgd page:
|
||||||
|
*/
|
||||||
|
static void vmi_pgd_free(struct mm_struct *mm, pgd_t *pgd)
|
||||||
|
{
|
||||||
|
unsigned long pfn = __pa(pgd) >> PAGE_SHIFT;
|
||||||
|
|
||||||
|
vmi_ops.release_page(pfn, VMI_PAGE_L2);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helper macros for MMU update flags. We can defer updates until a flush
|
* Helper macros for MMU update flags. We can defer updates until a flush
|
||||||
* or page invalidation only if the update is to the current address space
|
* or page invalidation only if the update is to the current address space
|
||||||
@ -762,6 +772,7 @@ static inline int __init activate_vmi(void)
|
|||||||
if (vmi_ops.release_page) {
|
if (vmi_ops.release_page) {
|
||||||
pv_mmu_ops.release_pte = vmi_release_pte;
|
pv_mmu_ops.release_pte = vmi_release_pte;
|
||||||
pv_mmu_ops.release_pmd = vmi_release_pmd;
|
pv_mmu_ops.release_pmd = vmi_release_pmd;
|
||||||
|
pv_mmu_ops.pgd_free = vmi_pgd_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set linear is needed in all cases */
|
/* Set linear is needed in all cases */
|
||||||
|
@ -38,6 +38,15 @@ void __init pre_intr_init_hook(void)
|
|||||||
init_ISA_irqs();
|
init_ISA_irqs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IRQ2 is cascade interrupt to second interrupt controller
|
||||||
|
*/
|
||||||
|
static struct irqaction irq2 = {
|
||||||
|
.handler = no_action,
|
||||||
|
.mask = CPU_MASK_NONE,
|
||||||
|
.name = "cascade",
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* intr_init_hook - post gate setup interrupt initialisation
|
* intr_init_hook - post gate setup interrupt initialisation
|
||||||
*
|
*
|
||||||
@ -53,6 +62,9 @@ void __init intr_init_hook(void)
|
|||||||
if (x86_quirks->arch_intr_init())
|
if (x86_quirks->arch_intr_init())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!acpi_ioapic)
|
||||||
|
setup_irq(2, &irq2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,13 +33,23 @@ void __init intr_init_hook(void)
|
|||||||
setup_irq(2, &irq2);
|
setup_irq(2, &irq2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init pre_setup_arch_hook(void)
|
static void voyager_disable_tsc(void)
|
||||||
{
|
{
|
||||||
/* Voyagers run their CPUs from independent clocks, so disable
|
/* Voyagers run their CPUs from independent clocks, so disable
|
||||||
* the TSC code because we can't sync them */
|
* the TSC code because we can't sync them */
|
||||||
setup_clear_cpu_cap(X86_FEATURE_TSC);
|
setup_clear_cpu_cap(X86_FEATURE_TSC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init pre_setup_arch_hook(void)
|
||||||
|
{
|
||||||
|
voyager_disable_tsc();
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init pre_time_init_hook(void)
|
||||||
|
{
|
||||||
|
voyager_disable_tsc();
|
||||||
|
}
|
||||||
|
|
||||||
void __init trap_init_hook(void)
|
void __init trap_init_hook(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ static void enable_local_vic_irq(unsigned int irq);
|
|||||||
static void disable_local_vic_irq(unsigned int irq);
|
static void disable_local_vic_irq(unsigned int irq);
|
||||||
static void before_handle_vic_irq(unsigned int irq);
|
static void before_handle_vic_irq(unsigned int irq);
|
||||||
static void after_handle_vic_irq(unsigned int irq);
|
static void after_handle_vic_irq(unsigned int irq);
|
||||||
static void set_vic_irq_affinity(unsigned int irq, cpumask_t mask);
|
static void set_vic_irq_affinity(unsigned int irq, const struct cpumask *mask);
|
||||||
static void ack_vic_irq(unsigned int irq);
|
static void ack_vic_irq(unsigned int irq);
|
||||||
static void vic_enable_cpi(void);
|
static void vic_enable_cpi(void);
|
||||||
static void do_boot_cpu(__u8 cpuid);
|
static void do_boot_cpu(__u8 cpuid);
|
||||||
@ -211,8 +211,6 @@ static __u32 cpu_booted_map;
|
|||||||
static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
|
static cpumask_t smp_commenced_mask = CPU_MASK_NONE;
|
||||||
|
|
||||||
/* This is for the new dynamic CPU boot code */
|
/* This is for the new dynamic CPU boot code */
|
||||||
cpumask_t cpu_callin_map = CPU_MASK_NONE;
|
|
||||||
cpumask_t cpu_callout_map = CPU_MASK_NONE;
|
|
||||||
|
|
||||||
/* The per processor IRQ masks (these are usually kept in sync) */
|
/* The per processor IRQ masks (these are usually kept in sync) */
|
||||||
static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
|
static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned;
|
||||||
@ -378,7 +376,7 @@ void __init find_smp_config(void)
|
|||||||
cpus_addr(phys_cpu_present_map)[0] |=
|
cpus_addr(phys_cpu_present_map)[0] |=
|
||||||
voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK +
|
voyager_extended_cmos_read(VOYAGER_PROCESSOR_PRESENT_MASK +
|
||||||
3) << 24;
|
3) << 24;
|
||||||
cpu_possible_map = phys_cpu_present_map;
|
init_cpu_possible(&phys_cpu_present_map);
|
||||||
printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n",
|
printk("VOYAGER SMP: phys_cpu_present_map = 0x%lx\n",
|
||||||
cpus_addr(phys_cpu_present_map)[0]);
|
cpus_addr(phys_cpu_present_map)[0]);
|
||||||
/* Here we set up the VIC to enable SMP */
|
/* Here we set up the VIC to enable SMP */
|
||||||
@ -1599,16 +1597,16 @@ static void after_handle_vic_irq(unsigned int irq)
|
|||||||
* change the mask and then do an interrupt enable CPI to re-enable on
|
* change the mask and then do an interrupt enable CPI to re-enable on
|
||||||
* the selected processors */
|
* the selected processors */
|
||||||
|
|
||||||
void set_vic_irq_affinity(unsigned int irq, cpumask_t mask)
|
void set_vic_irq_affinity(unsigned int irq, const struct cpumask *mask)
|
||||||
{
|
{
|
||||||
/* Only extended processors handle interrupts */
|
/* Only extended processors handle interrupts */
|
||||||
unsigned long real_mask;
|
unsigned long real_mask;
|
||||||
unsigned long irq_mask = 1 << irq;
|
unsigned long irq_mask = 1 << irq;
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
real_mask = cpus_addr(mask)[0] & voyager_extended_vic_processors;
|
real_mask = cpus_addr(*mask)[0] & voyager_extended_vic_processors;
|
||||||
|
|
||||||
if (cpus_addr(mask)[0] == 0)
|
if (cpus_addr(*mask)[0] == 0)
|
||||||
/* can't have no CPUs to accept the interrupt -- extremely
|
/* can't have no CPUs to accept the interrupt -- extremely
|
||||||
* bad things will happen */
|
* bad things will happen */
|
||||||
return;
|
return;
|
||||||
@ -1750,10 +1748,11 @@ static void __cpuinit voyager_smp_prepare_boot_cpu(void)
|
|||||||
init_gdt(smp_processor_id());
|
init_gdt(smp_processor_id());
|
||||||
switch_to_new_gdt();
|
switch_to_new_gdt();
|
||||||
|
|
||||||
cpu_set(smp_processor_id(), cpu_online_map);
|
cpu_online_map = cpumask_of_cpu(smp_processor_id());
|
||||||
cpu_set(smp_processor_id(), cpu_callout_map);
|
cpu_callout_map = cpumask_of_cpu(smp_processor_id());
|
||||||
cpu_set(smp_processor_id(), cpu_possible_map);
|
cpu_callin_map = CPU_MASK_NONE;
|
||||||
cpu_set(smp_processor_id(), cpu_present_map);
|
cpu_present_map = cpumask_of_cpu(smp_processor_id());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __cpuinit voyager_cpu_up(unsigned int cpu)
|
static int __cpuinit voyager_cpu_up(unsigned int cpu)
|
||||||
@ -1783,9 +1782,9 @@ void __init smp_setup_processor_id(void)
|
|||||||
x86_write_percpu(cpu_number, hard_smp_processor_id());
|
x86_write_percpu(cpu_number, hard_smp_processor_id());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void voyager_send_call_func(cpumask_t callmask)
|
static void voyager_send_call_func(const struct cpumask *callmask)
|
||||||
{
|
{
|
||||||
__u32 mask = cpus_addr(callmask)[0] & ~(1 << smp_processor_id());
|
__u32 mask = cpus_addr(*callmask)[0] & ~(1 << smp_processor_id());
|
||||||
send_CPI(mask, VIC_CALL_FUNCTION_CPI);
|
send_CPI(mask, VIC_CALL_FUNCTION_CPI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ u_char emulating = 0;
|
|||||||
static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip,
|
static int valid_prefix(u_char *Byte, u_char __user ** fpu_eip,
|
||||||
overrides * override);
|
overrides * override);
|
||||||
|
|
||||||
asmlinkage void math_emulate(long arg)
|
void math_emulate(struct math_emu_info *info)
|
||||||
{
|
{
|
||||||
u_char FPU_modrm, byte1;
|
u_char FPU_modrm, byte1;
|
||||||
unsigned short code;
|
unsigned short code;
|
||||||
@ -161,7 +161,7 @@ asmlinkage void math_emulate(long arg)
|
|||||||
RE_ENTRANT_CHECK_ON;
|
RE_ENTRANT_CHECK_ON;
|
||||||
#endif /* RE_ENTRANT_CHECKING */
|
#endif /* RE_ENTRANT_CHECKING */
|
||||||
|
|
||||||
SETUP_DATA_AREA(arg);
|
FPU_info = info;
|
||||||
|
|
||||||
FPU_ORIG_EIP = FPU_EIP;
|
FPU_ORIG_EIP = FPU_EIP;
|
||||||
|
|
||||||
@ -659,7 +659,7 @@ static int valid_prefix(u_char *Byte, u_char __user **fpu_eip,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void math_abort(struct info *info, unsigned int signal)
|
void math_abort(struct math_emu_info *info, unsigned int signal)
|
||||||
{
|
{
|
||||||
FPU_EIP = FPU_ORIG_EIP;
|
FPU_EIP = FPU_ORIG_EIP;
|
||||||
current->thread.trap_no = 16;
|
current->thread.trap_no = 16;
|
||||||
|
@ -51,8 +51,8 @@ extern void ffreep(void);
|
|||||||
extern void fst_i_(void);
|
extern void fst_i_(void);
|
||||||
extern void fstp_i(void);
|
extern void fstp_i(void);
|
||||||
/* fpu_entry.c */
|
/* fpu_entry.c */
|
||||||
asmlinkage extern void math_emulate(long arg);
|
extern void math_emulate(struct math_emu_info *info);
|
||||||
extern void math_abort(struct info *info, unsigned int signal);
|
extern void math_abort(struct math_emu_info *info, unsigned int signal);
|
||||||
/* fpu_etc.c */
|
/* fpu_etc.c */
|
||||||
extern void FPU_etc(void);
|
extern void FPU_etc(void);
|
||||||
/* fpu_tags.c */
|
/* fpu_tags.c */
|
||||||
|
@ -16,10 +16,6 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
||||||
/* This sets the pointer FPU_info to point to the argument part
|
|
||||||
of the stack frame of math_emulate() */
|
|
||||||
#define SETUP_DATA_AREA(arg) FPU_info = (struct info *) &arg
|
|
||||||
|
|
||||||
/* s is always from a cpu register, and the cpu does bounds checking
|
/* s is always from a cpu register, and the cpu does bounds checking
|
||||||
* during register load --> no further bounds checks needed */
|
* during register load --> no further bounds checks needed */
|
||||||
#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
|
#define LDT_DESCRIPTOR(s) (((struct desc_struct *)current->mm->context.ldt)[(s) >> 3])
|
||||||
@ -38,12 +34,12 @@
|
|||||||
#define I387 (current->thread.xstate)
|
#define I387 (current->thread.xstate)
|
||||||
#define FPU_info (I387->soft.info)
|
#define FPU_info (I387->soft.info)
|
||||||
|
|
||||||
#define FPU_CS (*(unsigned short *) &(FPU_info->___cs))
|
#define FPU_CS (*(unsigned short *) &(FPU_info->regs->cs))
|
||||||
#define FPU_SS (*(unsigned short *) &(FPU_info->___ss))
|
#define FPU_SS (*(unsigned short *) &(FPU_info->regs->ss))
|
||||||
#define FPU_DS (*(unsigned short *) &(FPU_info->___ds))
|
#define FPU_DS (*(unsigned short *) &(FPU_info->regs->ds))
|
||||||
#define FPU_EAX (FPU_info->___eax)
|
#define FPU_EAX (FPU_info->regs->ax)
|
||||||
#define FPU_EFLAGS (FPU_info->___eflags)
|
#define FPU_EFLAGS (FPU_info->regs->flags)
|
||||||
#define FPU_EIP (FPU_info->___eip)
|
#define FPU_EIP (FPU_info->regs->ip)
|
||||||
#define FPU_ORIG_EIP (FPU_info->___orig_eip)
|
#define FPU_ORIG_EIP (FPU_info->___orig_eip)
|
||||||
|
|
||||||
#define FPU_lookahead (I387->soft.lookahead)
|
#define FPU_lookahead (I387->soft.lookahead)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user