Linux 4.0-rc3
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJU/NacAAoJEHm+PkMAQRiGdUcIAJU5dHclwd9HRc7LX5iOwYN6 mN0aCsYjMD8Pjx2VcPCgJvkIoESQO5pkwYpFFWCwILup1bVEidqXfr8EPOdThzdh kcaT0FwUvd19K+0jcKVNCX1RjKBtlUfUKONk6sS2x4RrYZpv0Ur8Gh+yXV8iMWtf fAusNEYlxQJvEz5+NSKw86EZTr4VVcykKLNvj+/t/JrXEuue7IG8EyoAO/nLmNd2 V/TUKKttqpE6aUVBiBDmcMQl2SUVAfp5e+KJAHmizdDpSE80nU59UC1uyV8VCYdM qwHXgttLhhKr8jBPOkvUxl4aSXW7S0QWO8TrMpNdEOeB3ZB8AKsiIuhe1JrK0ro= =Xkue -----END PGP SIGNATURE----- Merge tag 'v4.0-rc3' into drm-next Linux 4.0-rc3 backmerge to fix two i915 conflicts, and get some mainline bug fixes needed for my testing box Conflicts: drivers/gpu/drm/i915/i915_drv.h drivers/gpu/drm/i915/intel_display.c
This commit is contained in:
Коммит
a8c6ecb3be
|
@ -0,0 +1,27 @@
|
||||||
|
Code of Conflict
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The Linux kernel development effort is a very personal process compared
|
||||||
|
to "traditional" ways of developing software. Your code and ideas
|
||||||
|
behind it will be carefully reviewed, often resulting in critique and
|
||||||
|
criticism. The review will almost always require improvements to the
|
||||||
|
code before it can be included in the kernel. Know that this happens
|
||||||
|
because everyone involved wants to see the best possible solution for
|
||||||
|
the overall success of Linux. This development process has been proven
|
||||||
|
to create the most robust operating system kernel ever, and we do not
|
||||||
|
want to do anything to cause the quality of submission and eventual
|
||||||
|
result to ever decrease.
|
||||||
|
|
||||||
|
If however, anyone feels personally abused, threatened, or otherwise
|
||||||
|
uncomfortable due to this process, that is not acceptable. If so,
|
||||||
|
please contact the Linux Foundation's Technical Advisory Board at
|
||||||
|
<tab@lists.linux-foundation.org>, or the individual members, and they
|
||||||
|
will work to resolve the issue to the best of their ability. For more
|
||||||
|
information on who is on the Technical Advisory Board and what their
|
||||||
|
role is, please see:
|
||||||
|
http://www.linuxfoundation.org/programs/advisory-councils/tab
|
||||||
|
|
||||||
|
As a reviewer of code, please strive to keep things civil and focused on
|
||||||
|
the technical issues involved. We are all humans, and frustrations can
|
||||||
|
be high on both sides of the process. Try to keep in mind the immortal
|
||||||
|
words of Bill and Ted, "Be excellent to each other."
|
|
@ -404,8 +404,8 @@ supported and the interface files "release_agent" and
|
||||||
be understood as an underflow into the highest possible value, -2 or
|
be understood as an underflow into the highest possible value, -2 or
|
||||||
-10M etc. do not work, so it's not consistent.
|
-10M etc. do not work, so it's not consistent.
|
||||||
|
|
||||||
memory.low, memory.high, and memory.max will use the string
|
memory.low, memory.high, and memory.max will use the string "max" to
|
||||||
"infinity" to indicate and set the highest possible value.
|
indicate and set the highest possible value.
|
||||||
|
|
||||||
5. Planned Changes
|
5. Planned Changes
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ Required properties:
|
||||||
- "fsl,vf610-i2c" for I2C compatible with the one integrated on Vybrid vf610 SoC
|
- "fsl,vf610-i2c" for I2C compatible with the one integrated on Vybrid vf610 SoC
|
||||||
- reg : Should contain I2C/HS-I2C registers location and length
|
- reg : Should contain I2C/HS-I2C registers location and length
|
||||||
- interrupts : Should contain I2C/HS-I2C interrupt
|
- interrupts : Should contain I2C/HS-I2C interrupt
|
||||||
|
- clocks : Should contain the I2C/HS-I2C clock specifier
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.
|
- clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.
|
||||||
|
|
|
@ -27,6 +27,8 @@ property is used.
|
||||||
- amd,serdes-cdr-rate: CDR rate speed selection
|
- amd,serdes-cdr-rate: CDR rate speed selection
|
||||||
- amd,serdes-pq-skew: PQ (data sampling) skew
|
- amd,serdes-pq-skew: PQ (data sampling) skew
|
||||||
- amd,serdes-tx-amp: TX amplitude boost
|
- amd,serdes-tx-amp: TX amplitude boost
|
||||||
|
- amd,serdes-dfe-tap-config: DFE taps available to run
|
||||||
|
- amd,serdes-dfe-tap-enable: DFE taps to enable
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
xgbe_phy@e1240800 {
|
xgbe_phy@e1240800 {
|
||||||
|
@ -41,4 +43,6 @@ Example:
|
||||||
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
||||||
amd,serdes-pq-skew = <10>, <10>, <30>;
|
amd,serdes-pq-skew = <10>, <10>, <30>;
|
||||||
amd,serdes-tx-amp = <15>, <15>, <10>;
|
amd,serdes-tx-amp = <15>, <15>, <10>;
|
||||||
|
amd,serdes-dfe-tap-config = <3>, <3>, <1>;
|
||||||
|
amd,serdes-dfe-tap-enable = <0>, <0>, <127>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,18 @@ Optional properties:
|
||||||
- reg-io-width : the size (in bytes) of the IO accesses that should be
|
- reg-io-width : the size (in bytes) of the IO accesses that should be
|
||||||
performed on the device. If this property is not present then single byte
|
performed on the device. If this property is not present then single byte
|
||||||
accesses are used.
|
accesses are used.
|
||||||
|
- dcd-override : Override the DCD modem status signal. This signal will always
|
||||||
|
be reported as active instead of being obtained from the modem status
|
||||||
|
register. Define this if your serial port does not use this pin.
|
||||||
|
- dsr-override : Override the DTS modem status signal. This signal will always
|
||||||
|
be reported as active instead of being obtained from the modem status
|
||||||
|
register. Define this if your serial port does not use this pin.
|
||||||
|
- cts-override : Override the CTS modem status signal. This signal will always
|
||||||
|
be reported as active instead of being obtained from the modem status
|
||||||
|
register. Define this if your serial port does not use this pin.
|
||||||
|
- ri-override : Override the RI modem status signal. This signal will always be
|
||||||
|
reported as inactive instead of being obtained from the modem status register.
|
||||||
|
Define this if your serial port does not use this pin.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
|
@ -31,6 +43,10 @@ Example:
|
||||||
interrupts = <10>;
|
interrupts = <10>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
reg-io-width = <4>;
|
reg-io-width = <4>;
|
||||||
|
dcd-override;
|
||||||
|
dsr-override;
|
||||||
|
cts-override;
|
||||||
|
ri-override;
|
||||||
};
|
};
|
||||||
|
|
||||||
Example with one clock:
|
Example with one clock:
|
||||||
|
|
|
@ -5,8 +5,8 @@ system.
|
||||||
|
|
||||||
dlmfs is built with OCFS2 as it requires most of its infrastructure.
|
dlmfs is built with OCFS2 as it requires most of its infrastructure.
|
||||||
|
|
||||||
Project web page: http://oss.oracle.com/projects/ocfs2
|
Project web page: http://ocfs2.wiki.kernel.org
|
||||||
Tools web page: http://oss.oracle.com/projects/ocfs2-tools
|
Tools web page: https://github.com/markfasheh/ocfs2-tools
|
||||||
OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
|
OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
|
||||||
|
|
||||||
All code copyright 2005 Oracle except when otherwise noted.
|
All code copyright 2005 Oracle except when otherwise noted.
|
||||||
|
|
|
@ -8,8 +8,8 @@ also make it attractive for non-clustered use.
|
||||||
You'll want to install the ocfs2-tools package in order to at least
|
You'll want to install the ocfs2-tools package in order to at least
|
||||||
get "mount.ocfs2" and "ocfs2_hb_ctl".
|
get "mount.ocfs2" and "ocfs2_hb_ctl".
|
||||||
|
|
||||||
Project web page: http://oss.oracle.com/projects/ocfs2
|
Project web page: http://ocfs2.wiki.kernel.org
|
||||||
Tools web page: http://oss.oracle.com/projects/ocfs2-tools
|
Tools git tree: https://github.com/markfasheh/ocfs2-tools
|
||||||
OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
|
OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
|
||||||
|
|
||||||
All code copyright 2005 Oracle except when otherwise noted.
|
All code copyright 2005 Oracle except when otherwise noted.
|
||||||
|
|
|
@ -40,8 +40,10 @@ but also to IPIs and to some other special-purpose interrupts.
|
||||||
|
|
||||||
The IRQF_NO_SUSPEND flag is used to indicate that to the IRQ subsystem when
|
The IRQF_NO_SUSPEND flag is used to indicate that to the IRQ subsystem when
|
||||||
requesting a special-purpose interrupt. It causes suspend_device_irqs() to
|
requesting a special-purpose interrupt. It causes suspend_device_irqs() to
|
||||||
leave the corresponding IRQ enabled so as to allow the interrupt to work all
|
leave the corresponding IRQ enabled so as to allow the interrupt to work as
|
||||||
the time as expected.
|
expected during the suspend-resume cycle, but does not guarantee that the
|
||||||
|
interrupt will wake the system from a suspended state -- for such cases it is
|
||||||
|
necessary to use enable_irq_wake().
|
||||||
|
|
||||||
Note that the IRQF_NO_SUSPEND flag affects the entire IRQ and not just one
|
Note that the IRQF_NO_SUSPEND flag affects the entire IRQ and not just one
|
||||||
user of it. Thus, if the IRQ is shared, all of the interrupt handlers installed
|
user of it. Thus, if the IRQ is shared, all of the interrupt handlers installed
|
||||||
|
@ -110,8 +112,9 @@ any special interrupt handling logic for it to work.
|
||||||
IRQF_NO_SUSPEND and enable_irq_wake()
|
IRQF_NO_SUSPEND and enable_irq_wake()
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
There are no valid reasons to use both enable_irq_wake() and the IRQF_NO_SUSPEND
|
There are very few valid reasons to use both enable_irq_wake() and the
|
||||||
flag on the same IRQ.
|
IRQF_NO_SUSPEND flag on the same IRQ, and it is never valid to use both for the
|
||||||
|
same device.
|
||||||
|
|
||||||
First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND
|
First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND
|
||||||
interrupts (interrupt handlers are invoked after suspend_device_irqs()) are
|
interrupts (interrupt handlers are invoked after suspend_device_irqs()) are
|
||||||
|
@ -120,4 +123,13 @@ handlers are not invoked after suspend_device_irqs()).
|
||||||
|
|
||||||
Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not
|
Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not
|
||||||
to individual interrupt handlers, so sharing an IRQ between a system wakeup
|
to individual interrupt handlers, so sharing an IRQ between a system wakeup
|
||||||
interrupt source and an IRQF_NO_SUSPEND interrupt source does not make sense.
|
interrupt source and an IRQF_NO_SUSPEND interrupt source does not generally
|
||||||
|
make sense.
|
||||||
|
|
||||||
|
In rare cases an IRQ can be shared between a wakeup device driver and an
|
||||||
|
IRQF_NO_SUSPEND user. In order for this to be safe, the wakeup device driver
|
||||||
|
must be able to discern spurious IRQs from genuine wakeup events (signalling
|
||||||
|
the latter to the core with pm_system_wakeup()), must use enable_irq_wake() to
|
||||||
|
ensure that the IRQ will function as a wakeup source, and must request the IRQ
|
||||||
|
with IRQF_COND_SUSPEND to tell the core that it meets these requirements. If
|
||||||
|
these requirements are not met, it is not valid to use IRQF_COND_SUSPEND.
|
||||||
|
|
13
MAINTAINERS
13
MAINTAINERS
|
@ -2065,7 +2065,7 @@ F: include/net/bluetooth/
|
||||||
BONDING DRIVER
|
BONDING DRIVER
|
||||||
M: Jay Vosburgh <j.vosburgh@gmail.com>
|
M: Jay Vosburgh <j.vosburgh@gmail.com>
|
||||||
M: Veaceslav Falico <vfalico@gmail.com>
|
M: Veaceslav Falico <vfalico@gmail.com>
|
||||||
M: Andy Gospodarek <andy@greyhouse.net>
|
M: Andy Gospodarek <gospo@cumulusnetworks.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://sourceforge.net/projects/bonding/
|
W: http://sourceforge.net/projects/bonding/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -7213,8 +7213,7 @@ ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
||||||
M: Mark Fasheh <mfasheh@suse.com>
|
M: Mark Fasheh <mfasheh@suse.com>
|
||||||
M: Joel Becker <jlbec@evilplan.org>
|
M: Joel Becker <jlbec@evilplan.org>
|
||||||
L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
|
L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
|
||||||
W: http://oss.oracle.com/projects/ocfs2/
|
W: http://ocfs2.wiki.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
|
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/filesystems/ocfs2.txt
|
F: Documentation/filesystems/ocfs2.txt
|
||||||
F: Documentation/filesystems/dlmfs.txt
|
F: Documentation/filesystems/dlmfs.txt
|
||||||
|
@ -8481,6 +8480,14 @@ S: Supported
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
F: drivers/net/ethernet/samsung/sxgbe/
|
F: drivers/net/ethernet/samsung/sxgbe/
|
||||||
|
|
||||||
|
SAMSUNG THERMAL DRIVER
|
||||||
|
M: Lukasz Majewski <l.majewski@samsung.com>
|
||||||
|
L: linux-pm@vger.kernel.org
|
||||||
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
T: https://github.com/lmajewski/linux-samsung-thermal.git
|
||||||
|
F: drivers/thermal/samsung/
|
||||||
|
|
||||||
SAMSUNG USB2 PHY DRIVER
|
SAMSUNG USB2 PHY DRIVER
|
||||||
M: Kamil Debski <k.debski@samsung.com>
|
M: Kamil Debski <k.debski@samsung.com>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 0
|
PATCHLEVEL = 0
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc3
|
||||||
NAME = Hurr durr I'ma sheep
|
NAME = Hurr durr I'ma sheep
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -47,9 +47,6 @@ struct thread_struct {
|
||||||
/* Forward declaration, a strange C thing */
|
/* Forward declaration, a strange C thing */
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
|
|
||||||
/* Return saved PC of a blocked thread */
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
#define task_pt_regs(p) \
|
#define task_pt_regs(p) \
|
||||||
((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
|
((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
|
||||||
|
|
||||||
|
@ -72,18 +69,21 @@ unsigned long thread_saved_pc(struct task_struct *t);
|
||||||
#define release_segments(mm) do { } while (0)
|
#define release_segments(mm) do { } while (0)
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
||||||
|
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Where abouts of Task's sp, fp, blink when it was last seen in kernel mode.
|
* Where abouts of Task's sp, fp, blink when it was last seen in kernel mode.
|
||||||
* Look in process.c for details of kernel stack layout
|
* Look in process.c for details of kernel stack layout
|
||||||
*/
|
*/
|
||||||
#define KSTK_ESP(tsk) (tsk->thread.ksp)
|
#define TSK_K_ESP(tsk) (tsk->thread.ksp)
|
||||||
|
|
||||||
#define KSTK_REG(tsk, off) (*((unsigned int *)(KSTK_ESP(tsk) + \
|
#define TSK_K_REG(tsk, off) (*((unsigned int *)(TSK_K_ESP(tsk) + \
|
||||||
sizeof(struct callee_regs) + off)))
|
sizeof(struct callee_regs) + off)))
|
||||||
|
|
||||||
#define KSTK_BLINK(tsk) KSTK_REG(tsk, 4)
|
#define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4)
|
||||||
#define KSTK_FP(tsk) KSTK_REG(tsk, 0)
|
#define TSK_K_FP(tsk) TSK_K_REG(tsk, 0)
|
||||||
|
|
||||||
|
#define thread_saved_pc(tsk) TSK_K_BLINK(tsk)
|
||||||
|
|
||||||
extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||||
unsigned long usp);
|
unsigned long usp);
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
* Copyright (C) 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_STACKTRACE_H
|
||||||
|
#define __ASM_STACKTRACE_H
|
||||||
|
|
||||||
|
#include <linux/sched.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* arc_unwind_core - Unwind the kernel mode stack for an execution context
|
||||||
|
* @tsk: NULL for current task, specific task otherwise
|
||||||
|
* @regs: pt_regs used to seed the unwinder {SP, FP, BLINK, PC}
|
||||||
|
* If NULL, use pt_regs of @tsk (if !NULL) otherwise
|
||||||
|
* use the current values of {SP, FP, BLINK, PC}
|
||||||
|
* @consumer_fn: Callback invoked for each frame unwound
|
||||||
|
* Returns 0 to continue unwinding, -1 to stop
|
||||||
|
* @arg: Arg to callback
|
||||||
|
*
|
||||||
|
* Returns the address of first function in stack
|
||||||
|
*
|
||||||
|
* Semantics:
|
||||||
|
* - synchronous unwinding (e.g. dump_stack): @tsk NULL, @regs NULL
|
||||||
|
* - Asynchronous unwinding of sleeping task: @tsk !NULL, @regs NULL
|
||||||
|
* - Asynchronous unwinding of intr/excp etc: @tsk !NULL, @regs !NULL
|
||||||
|
*/
|
||||||
|
notrace noinline unsigned int arc_unwind_core(
|
||||||
|
struct task_struct *tsk, struct pt_regs *regs,
|
||||||
|
int (*consumer_fn) (unsigned int, void *),
|
||||||
|
void *arg);
|
||||||
|
|
||||||
|
#endif /* __ASM_STACKTRACE_H */
|
|
@ -192,29 +192,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* API: expected by schedular Code: If thread is sleeping where is that.
|
|
||||||
* What is this good for? it will be always the scheduler or ret_from_fork.
|
|
||||||
* So we hard code that anyways.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t)
|
|
||||||
{
|
|
||||||
struct pt_regs *regs = task_pt_regs(t);
|
|
||||||
unsigned long blink = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the thread being queried for in not itself calling this, then it
|
|
||||||
* implies it is not executing, which in turn implies it is sleeping,
|
|
||||||
* which in turn implies it got switched OUT by the schedular.
|
|
||||||
* In that case, it's kernel mode blink can reliably retrieved as per
|
|
||||||
* the picture above (right above pt_regs).
|
|
||||||
*/
|
|
||||||
if (t != current && t->state != TASK_RUNNING)
|
|
||||||
blink = *((unsigned int *)regs - 1);
|
|
||||||
|
|
||||||
return blink;
|
|
||||||
}
|
|
||||||
|
|
||||||
int elf_check_arch(const struct elf32_hdr *x)
|
int elf_check_arch(const struct elf32_hdr *x)
|
||||||
{
|
{
|
||||||
unsigned int eflags;
|
unsigned int eflags;
|
||||||
|
|
|
@ -43,6 +43,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||||
struct pt_regs *regs,
|
struct pt_regs *regs,
|
||||||
struct unwind_frame_info *frame_info)
|
struct unwind_frame_info *frame_info)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* synchronous unwinding (e.g. dump_stack)
|
||||||
|
* - uses current values of SP and friends
|
||||||
|
*/
|
||||||
if (tsk == NULL && regs == NULL) {
|
if (tsk == NULL && regs == NULL) {
|
||||||
unsigned long fp, sp, blink, ret;
|
unsigned long fp, sp, blink, ret;
|
||||||
frame_info->task = current;
|
frame_info->task = current;
|
||||||
|
@ -61,12 +65,17 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||||
frame_info->regs.r63 = ret;
|
frame_info->regs.r63 = ret;
|
||||||
frame_info->call_frame = 0;
|
frame_info->call_frame = 0;
|
||||||
} else if (regs == NULL) {
|
} else if (regs == NULL) {
|
||||||
|
/*
|
||||||
|
* Asynchronous unwinding of sleeping task
|
||||||
|
* - Gets SP etc from task's pt_regs (saved bottom of kernel
|
||||||
|
* mode stack of task)
|
||||||
|
*/
|
||||||
|
|
||||||
frame_info->task = tsk;
|
frame_info->task = tsk;
|
||||||
|
|
||||||
frame_info->regs.r27 = KSTK_FP(tsk);
|
frame_info->regs.r27 = TSK_K_FP(tsk);
|
||||||
frame_info->regs.r28 = KSTK_ESP(tsk);
|
frame_info->regs.r28 = TSK_K_ESP(tsk);
|
||||||
frame_info->regs.r31 = KSTK_BLINK(tsk);
|
frame_info->regs.r31 = TSK_K_BLINK(tsk);
|
||||||
frame_info->regs.r63 = (unsigned int)__switch_to;
|
frame_info->regs.r63 = (unsigned int)__switch_to;
|
||||||
|
|
||||||
/* In the prologue of __switch_to, first FP is saved on stack
|
/* In the prologue of __switch_to, first FP is saved on stack
|
||||||
|
@ -83,6 +92,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||||
frame_info->call_frame = 0;
|
frame_info->call_frame = 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* Asynchronous unwinding of intr/exception
|
||||||
|
* - Just uses the pt_regs passed
|
||||||
|
*/
|
||||||
frame_info->task = tsk;
|
frame_info->task = tsk;
|
||||||
|
|
||||||
frame_info->regs.r27 = regs->fp;
|
frame_info->regs.r27 = regs->fp;
|
||||||
|
@ -95,7 +108,7 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static noinline unsigned int
|
notrace noinline unsigned int
|
||||||
arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
|
||||||
int (*consumer_fn) (unsigned int, void *), void *arg)
|
int (*consumer_fn) (unsigned int, void *), void *arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/perf_event.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/disasm.h>
|
#include <asm/disasm.h>
|
||||||
|
@ -253,6 +254,7 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, address);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fault:
|
fault:
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
|
#include <linux/perf_event.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
|
|
||||||
|
@ -139,13 +140,20 @@ good_area:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
|
||||||
|
|
||||||
if (likely(!(fault & VM_FAULT_ERROR))) {
|
if (likely(!(fault & VM_FAULT_ERROR))) {
|
||||||
if (flags & FAULT_FLAG_ALLOW_RETRY) {
|
if (flags & FAULT_FLAG_ALLOW_RETRY) {
|
||||||
/* To avoid updating stats twice for retry case */
|
/* To avoid updating stats twice for retry case */
|
||||||
if (fault & VM_FAULT_MAJOR)
|
if (fault & VM_FAULT_MAJOR) {
|
||||||
tsk->maj_flt++;
|
tsk->maj_flt++;
|
||||||
else
|
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
|
||||||
|
regs, address);
|
||||||
|
} else {
|
||||||
tsk->min_flt++;
|
tsk->min_flt++;
|
||||||
|
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
|
||||||
|
regs, address);
|
||||||
|
}
|
||||||
|
|
||||||
if (fault & VM_FAULT_RETRY) {
|
if (fault & VM_FAULT_RETRY) {
|
||||||
flags &= ~FAULT_FLAG_ALLOW_RETRY;
|
flags &= ~FAULT_FLAG_ALLOW_RETRY;
|
||||||
|
|
|
@ -195,6 +195,7 @@
|
||||||
|
|
||||||
&usb0 {
|
&usb0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
dr_mode = "peripheral";
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb1 {
|
&usb1 {
|
||||||
|
|
|
@ -133,20 +133,6 @@
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c1_pins_default: i2c1_pins_default {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x15c (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_cs0.i2c1_scl */
|
|
||||||
0x158 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_d1.i2c1_sda */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
i2c1_pins_sleep: i2c1_pins_sleep {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
0x15c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_cs0.i2c1_scl */
|
|
||||||
0x158 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_d1.i2c1_sda */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
mmc1_pins_default: pinmux_mmc1_pins_default {
|
mmc1_pins_default: pinmux_mmc1_pins_default {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */
|
0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */
|
||||||
|
@ -254,7 +240,7 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-names = "default", "sleep";
|
pinctrl-names = "default", "sleep";
|
||||||
pinctrl-0 = <&i2c0_pins_default>;
|
pinctrl-0 = <&i2c0_pins_default>;
|
||||||
pinctrl-1 = <&i2c0_pins_default>;
|
pinctrl-1 = <&i2c0_pins_sleep>;
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
at24@50 {
|
at24@50 {
|
||||||
|
@ -262,17 +248,10 @@
|
||||||
pagesize = <64>;
|
pagesize = <64>;
|
||||||
reg = <0x50>;
|
reg = <0x50>;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
&i2c1 {
|
|
||||||
status = "okay";
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
pinctrl-0 = <&i2c1_pins_default>;
|
|
||||||
pinctrl-1 = <&i2c1_pins_default>;
|
|
||||||
clock-frequency = <400000>;
|
|
||||||
|
|
||||||
tps: tps62362@60 {
|
tps: tps62362@60 {
|
||||||
compatible = "ti,tps62362";
|
compatible = "ti,tps62362";
|
||||||
|
reg = <0x60>;
|
||||||
regulator-name = "VDD_MPU";
|
regulator-name = "VDD_MPU";
|
||||||
regulator-min-microvolt = <950000>;
|
regulator-min-microvolt = <950000>;
|
||||||
regulator-max-microvolt = <1330000>;
|
regulator-max-microvolt = <1330000>;
|
||||||
|
|
|
@ -549,14 +549,6 @@
|
||||||
pinctrl-0 = <&usb1_pins>;
|
pinctrl-0 = <&usb1_pins>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&omap_dwc3_1 {
|
|
||||||
extcon = <&extcon_usb1>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&omap_dwc3_2 {
|
|
||||||
extcon = <&extcon_usb2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&usb2 {
|
&usb2 {
|
||||||
dr_mode = "peripheral";
|
dr_mode = "peripheral";
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,6 +35,18 @@
|
||||||
DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */
|
DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
usb0_pins: pinmux_usb0_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
DM816X_IOPAD(0x0d00, MUX_MODE0) /* USB0_DRVVBUS */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb1_pins: pinmux_usb0_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
DM816X_IOPAD(0x0d04, MUX_MODE0) /* USB1_DRVVBUS */
|
||||||
|
>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&i2c1 {
|
&i2c1 {
|
||||||
|
@ -127,3 +139,16 @@
|
||||||
&mmc1 {
|
&mmc1 {
|
||||||
vmmc-supply = <&vmmcsd_fixed>;
|
vmmc-supply = <&vmmcsd_fixed>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* At least dm8168-evm rev c won't support multipoint, later may */
|
||||||
|
&usb0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usb0_pins>;
|
||||||
|
mentor,multipoint = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usb1_pins>;
|
||||||
|
mentor,multipoint = <0>;
|
||||||
|
};
|
||||||
|
|
|
@ -97,10 +97,31 @@
|
||||||
|
|
||||||
/* Device Configuration Registers */
|
/* Device Configuration Registers */
|
||||||
scm_conf: syscon@600 {
|
scm_conf: syscon@600 {
|
||||||
compatible = "syscon";
|
compatible = "syscon", "simple-bus";
|
||||||
reg = <0x600 0x110>;
|
reg = <0x600 0x110>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
ranges = <0 0x600 0x110>;
|
||||||
|
|
||||||
|
usb_phy0: usb-phy@20 {
|
||||||
|
compatible = "ti,dm8168-usb-phy";
|
||||||
|
reg = <0x20 0x8>;
|
||||||
|
reg-names = "phy";
|
||||||
|
clocks = <&main_fapll 6>;
|
||||||
|
clock-names = "refclk";
|
||||||
|
#phy-cells = <0>;
|
||||||
|
syscon = <&scm_conf>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_phy1: usb-phy@28 {
|
||||||
|
compatible = "ti,dm8168-usb-phy";
|
||||||
|
reg = <0x28 0x8>;
|
||||||
|
reg-names = "phy";
|
||||||
|
clocks = <&main_fapll 6>;
|
||||||
|
clock-names = "refclk";
|
||||||
|
#phy-cells = <0>;
|
||||||
|
syscon = <&scm_conf>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
scrm_clocks: clocks {
|
scrm_clocks: clocks {
|
||||||
|
@ -357,7 +378,10 @@
|
||||||
reg-names = "mc", "control";
|
reg-names = "mc", "control";
|
||||||
interrupts = <18>;
|
interrupts = <18>;
|
||||||
interrupt-names = "mc";
|
interrupt-names = "mc";
|
||||||
dr_mode = "otg";
|
dr_mode = "host";
|
||||||
|
interface-type = <0>;
|
||||||
|
phys = <&usb_phy0>;
|
||||||
|
phy-names = "usb2-phy";
|
||||||
mentor,multipoint = <1>;
|
mentor,multipoint = <1>;
|
||||||
mentor,num-eps = <16>;
|
mentor,num-eps = <16>;
|
||||||
mentor,ram-bits = <12>;
|
mentor,ram-bits = <12>;
|
||||||
|
@ -366,13 +390,15 @@
|
||||||
|
|
||||||
usb1: usb@47401800 {
|
usb1: usb@47401800 {
|
||||||
compatible = "ti,musb-am33xx";
|
compatible = "ti,musb-am33xx";
|
||||||
status = "disabled";
|
|
||||||
reg = <0x47401c00 0x400
|
reg = <0x47401c00 0x400
|
||||||
0x47401800 0x200>;
|
0x47401800 0x200>;
|
||||||
reg-names = "mc", "control";
|
reg-names = "mc", "control";
|
||||||
interrupts = <19>;
|
interrupts = <19>;
|
||||||
interrupt-names = "mc";
|
interrupt-names = "mc";
|
||||||
dr_mode = "otg";
|
dr_mode = "host";
|
||||||
|
interface-type = <0>;
|
||||||
|
phys = <&usb_phy1>;
|
||||||
|
phy-names = "usb2-phy";
|
||||||
mentor,multipoint = <1>;
|
mentor,multipoint = <1>;
|
||||||
mentor,num-eps = <16>;
|
mentor,num-eps = <16>;
|
||||||
mentor,ram-bits = <12>;
|
mentor,ram-bits = <12>;
|
||||||
|
|
|
@ -543,14 +543,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&omap_dwc3_1 {
|
|
||||||
extcon = <&extcon_usb1>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&omap_dwc3_2 {
|
|
||||||
extcon = <&extcon_usb2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&usb1 {
|
&usb1 {
|
||||||
dr_mode = "peripheral";
|
dr_mode = "peripheral";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
|
|
@ -249,8 +249,8 @@
|
||||||
<GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <32>;
|
dma-channels = <32>;
|
||||||
#dma-requests = <127>;
|
dma-requests = <127>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio1: gpio@4ae10000 {
|
gpio1: gpio@4ae10000 {
|
||||||
|
@ -1090,8 +1090,8 @@
|
||||||
<0x4A096800 0x40>; /* pll_ctrl */
|
<0x4A096800 0x40>; /* pll_ctrl */
|
||||||
reg-names = "phy_rx", "phy_tx", "pll_ctrl";
|
reg-names = "phy_rx", "phy_tx", "pll_ctrl";
|
||||||
ctrl-module = <&omap_control_sata>;
|
ctrl-module = <&omap_control_sata>;
|
||||||
clocks = <&sys_clkin1>;
|
clocks = <&sys_clkin1>, <&sata_ref_clk>;
|
||||||
clock-names = "sysclk";
|
clock-names = "sysclk", "refclk";
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -380,14 +380,6 @@
|
||||||
phy-supply = <&ldo4_reg>;
|
phy-supply = <&ldo4_reg>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&omap_dwc3_1 {
|
|
||||||
extcon = <&extcon_usb1>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&omap_dwc3_2 {
|
|
||||||
extcon = <&extcon_usb2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&usb1 {
|
&usb1 {
|
||||||
dr_mode = "peripheral";
|
dr_mode = "peripheral";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
|
|
@ -87,8 +87,8 @@
|
||||||
<14>,
|
<14>,
|
||||||
<15>;
|
<15>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <32>;
|
dma-channels = <32>;
|
||||||
#dma-requests = <64>;
|
dma-requests = <64>;
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c1: i2c@48070000 {
|
i2c1: i2c@48070000 {
|
||||||
|
|
|
@ -16,6 +16,13 @@
|
||||||
model = "Nokia N900";
|
model = "Nokia N900";
|
||||||
compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3";
|
compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
i2c0;
|
||||||
|
i2c1 = &i2c1;
|
||||||
|
i2c2 = &i2c2;
|
||||||
|
i2c3 = &i2c3;
|
||||||
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
cpu@0 {
|
cpu@0 {
|
||||||
cpu0-supply = <&vcc>;
|
cpu0-supply = <&vcc>;
|
||||||
|
@ -704,7 +711,7 @@
|
||||||
compatible = "smsc,lan91c94";
|
compatible = "smsc,lan91c94";
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */
|
interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */
|
||||||
reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */
|
reg = <1 0 0xf>; /* 16 byte IO range */
|
||||||
bank-width = <2>;
|
bank-width = <2>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <ðernet_pins>;
|
pinctrl-0 = <ðernet_pins>;
|
||||||
|
|
|
@ -155,8 +155,8 @@
|
||||||
<14>,
|
<14>,
|
||||||
<15>;
|
<15>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <32>;
|
dma-channels = <32>;
|
||||||
#dma-requests = <96>;
|
dma-requests = <96>;
|
||||||
};
|
};
|
||||||
|
|
||||||
omap3_pmx_core: pinmux@48002030 {
|
omap3_pmx_core: pinmux@48002030 {
|
||||||
|
|
|
@ -223,8 +223,8 @@
|
||||||
<GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <32>;
|
dma-channels = <32>;
|
||||||
#dma-requests = <127>;
|
dma-requests = <127>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio1: gpio@4a310000 {
|
gpio1: gpio@4a310000 {
|
||||||
|
|
|
@ -238,8 +238,8 @@
|
||||||
<GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <32>;
|
dma-channels = <32>;
|
||||||
#dma-requests = <127>;
|
dma-requests = <127>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio1: gpio@4ae10000 {
|
gpio1: gpio@4ae10000 {
|
||||||
|
@ -929,8 +929,8 @@
|
||||||
<0x4A096800 0x40>; /* pll_ctrl */
|
<0x4A096800 0x40>; /* pll_ctrl */
|
||||||
reg-names = "phy_rx", "phy_tx", "pll_ctrl";
|
reg-names = "phy_rx", "phy_tx", "pll_ctrl";
|
||||||
ctrl-module = <&omap_control_sata>;
|
ctrl-module = <&omap_control_sata>;
|
||||||
clocks = <&sys_clkin>;
|
clocks = <&sys_clkin>, <&sata_ref_clk>;
|
||||||
clock-names = "sysclk";
|
clock-names = "sysclk", "refclk";
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,6 +62,17 @@ CONFIG_MACH_SPEAR1340=y
|
||||||
CONFIG_ARCH_STI=y
|
CONFIG_ARCH_STI=y
|
||||||
CONFIG_ARCH_EXYNOS=y
|
CONFIG_ARCH_EXYNOS=y
|
||||||
CONFIG_EXYNOS5420_MCPM=y
|
CONFIG_EXYNOS5420_MCPM=y
|
||||||
|
CONFIG_ARCH_SHMOBILE_MULTI=y
|
||||||
|
CONFIG_ARCH_EMEV2=y
|
||||||
|
CONFIG_ARCH_R7S72100=y
|
||||||
|
CONFIG_ARCH_R8A73A4=y
|
||||||
|
CONFIG_ARCH_R8A7740=y
|
||||||
|
CONFIG_ARCH_R8A7779=y
|
||||||
|
CONFIG_ARCH_R8A7790=y
|
||||||
|
CONFIG_ARCH_R8A7791=y
|
||||||
|
CONFIG_ARCH_R8A7794=y
|
||||||
|
CONFIG_ARCH_SH73A0=y
|
||||||
|
CONFIG_MACH_MARZEN=y
|
||||||
CONFIG_ARCH_SUNXI=y
|
CONFIG_ARCH_SUNXI=y
|
||||||
CONFIG_ARCH_SIRF=y
|
CONFIG_ARCH_SIRF=y
|
||||||
CONFIG_ARCH_TEGRA=y
|
CONFIG_ARCH_TEGRA=y
|
||||||
|
@ -84,6 +95,8 @@ CONFIG_PCI_KEYSTONE=y
|
||||||
CONFIG_PCI_MSI=y
|
CONFIG_PCI_MSI=y
|
||||||
CONFIG_PCI_MVEBU=y
|
CONFIG_PCI_MVEBU=y
|
||||||
CONFIG_PCI_TEGRA=y
|
CONFIG_PCI_TEGRA=y
|
||||||
|
CONFIG_PCI_RCAR_GEN2=y
|
||||||
|
CONFIG_PCI_RCAR_GEN2_PCIE=y
|
||||||
CONFIG_PCIEPORTBUS=y
|
CONFIG_PCIEPORTBUS=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=8
|
CONFIG_NR_CPUS=8
|
||||||
|
@ -130,6 +143,7 @@ CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_DMA_CMA=y
|
CONFIG_DMA_CMA=y
|
||||||
CONFIG_CMA_SIZE_MBYTES=64
|
CONFIG_CMA_SIZE_MBYTES=64
|
||||||
CONFIG_OMAP_OCP2SCP=y
|
CONFIG_OMAP_OCP2SCP=y
|
||||||
|
CONFIG_SIMPLE_PM_BUS=y
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_BLOCK=y
|
CONFIG_MTD_BLOCK=y
|
||||||
|
@ -157,6 +171,7 @@ CONFIG_AHCI_SUNXI=y
|
||||||
CONFIG_AHCI_TEGRA=y
|
CONFIG_AHCI_TEGRA=y
|
||||||
CONFIG_SATA_HIGHBANK=y
|
CONFIG_SATA_HIGHBANK=y
|
||||||
CONFIG_SATA_MV=y
|
CONFIG_SATA_MV=y
|
||||||
|
CONFIG_SATA_RCAR=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_HIX5HD2_GMAC=y
|
CONFIG_HIX5HD2_GMAC=y
|
||||||
CONFIG_SUN4I_EMAC=y
|
CONFIG_SUN4I_EMAC=y
|
||||||
|
@ -167,14 +182,17 @@ CONFIG_MV643XX_ETH=y
|
||||||
CONFIG_MVNETA=y
|
CONFIG_MVNETA=y
|
||||||
CONFIG_KS8851=y
|
CONFIG_KS8851=y
|
||||||
CONFIG_R8169=y
|
CONFIG_R8169=y
|
||||||
|
CONFIG_SH_ETH=y
|
||||||
CONFIG_SMSC911X=y
|
CONFIG_SMSC911X=y
|
||||||
CONFIG_STMMAC_ETH=y
|
CONFIG_STMMAC_ETH=y
|
||||||
CONFIG_TI_CPSW=y
|
CONFIG_TI_CPSW=y
|
||||||
CONFIG_XILINX_EMACLITE=y
|
CONFIG_XILINX_EMACLITE=y
|
||||||
CONFIG_AT803X_PHY=y
|
CONFIG_AT803X_PHY=y
|
||||||
CONFIG_MARVELL_PHY=y
|
CONFIG_MARVELL_PHY=y
|
||||||
|
CONFIG_SMSC_PHY=y
|
||||||
CONFIG_BROADCOM_PHY=y
|
CONFIG_BROADCOM_PHY=y
|
||||||
CONFIG_ICPLUS_PHY=y
|
CONFIG_ICPLUS_PHY=y
|
||||||
|
CONFIG_MICREL_PHY=y
|
||||||
CONFIG_USB_PEGASUS=y
|
CONFIG_USB_PEGASUS=y
|
||||||
CONFIG_USB_USBNET=y
|
CONFIG_USB_USBNET=y
|
||||||
CONFIG_USB_NET_SMSC75XX=y
|
CONFIG_USB_NET_SMSC75XX=y
|
||||||
|
@ -192,15 +210,18 @@ CONFIG_KEYBOARD_CROS_EC=y
|
||||||
CONFIG_MOUSE_PS2_ELANTECH=y
|
CONFIG_MOUSE_PS2_ELANTECH=y
|
||||||
CONFIG_INPUT_TOUCHSCREEN=y
|
CONFIG_INPUT_TOUCHSCREEN=y
|
||||||
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
|
CONFIG_TOUCHSCREEN_ATMEL_MXT=y
|
||||||
|
CONFIG_TOUCHSCREEN_ST1232=m
|
||||||
CONFIG_TOUCHSCREEN_STMPE=y
|
CONFIG_TOUCHSCREEN_STMPE=y
|
||||||
CONFIG_TOUCHSCREEN_SUN4I=y
|
CONFIG_TOUCHSCREEN_SUN4I=y
|
||||||
CONFIG_INPUT_MISC=y
|
CONFIG_INPUT_MISC=y
|
||||||
CONFIG_INPUT_MPU3050=y
|
CONFIG_INPUT_MPU3050=y
|
||||||
CONFIG_INPUT_AXP20X_PEK=y
|
CONFIG_INPUT_AXP20X_PEK=y
|
||||||
|
CONFIG_INPUT_ADXL34X=m
|
||||||
CONFIG_SERIO_AMBAKMI=y
|
CONFIG_SERIO_AMBAKMI=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_DW=y
|
CONFIG_SERIAL_8250_DW=y
|
||||||
|
CONFIG_SERIAL_8250_EM=y
|
||||||
CONFIG_SERIAL_8250_MT6577=y
|
CONFIG_SERIAL_8250_MT6577=y
|
||||||
CONFIG_SERIAL_AMBA_PL011=y
|
CONFIG_SERIAL_AMBA_PL011=y
|
||||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||||
|
@ -213,6 +234,9 @@ CONFIG_SERIAL_SIRFSOC_CONSOLE=y
|
||||||
CONFIG_SERIAL_TEGRA=y
|
CONFIG_SERIAL_TEGRA=y
|
||||||
CONFIG_SERIAL_IMX=y
|
CONFIG_SERIAL_IMX=y
|
||||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_SH_SCI=y
|
||||||
|
CONFIG_SERIAL_SH_SCI_NR_UARTS=20
|
||||||
|
CONFIG_SERIAL_SH_SCI_CONSOLE=y
|
||||||
CONFIG_SERIAL_MSM=y
|
CONFIG_SERIAL_MSM=y
|
||||||
CONFIG_SERIAL_MSM_CONSOLE=y
|
CONFIG_SERIAL_MSM_CONSOLE=y
|
||||||
CONFIG_SERIAL_VT8500=y
|
CONFIG_SERIAL_VT8500=y
|
||||||
|
@ -233,19 +257,26 @@ CONFIG_I2C_MUX_PCA954x=y
|
||||||
CONFIG_I2C_MUX_PINCTRL=y
|
CONFIG_I2C_MUX_PINCTRL=y
|
||||||
CONFIG_I2C_CADENCE=y
|
CONFIG_I2C_CADENCE=y
|
||||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||||
|
CONFIG_I2C_GPIO=m
|
||||||
CONFIG_I2C_EXYNOS5=y
|
CONFIG_I2C_EXYNOS5=y
|
||||||
CONFIG_I2C_MV64XXX=y
|
CONFIG_I2C_MV64XXX=y
|
||||||
|
CONFIG_I2C_RIIC=y
|
||||||
CONFIG_I2C_S3C2410=y
|
CONFIG_I2C_S3C2410=y
|
||||||
|
CONFIG_I2C_SH_MOBILE=y
|
||||||
CONFIG_I2C_SIRF=y
|
CONFIG_I2C_SIRF=y
|
||||||
CONFIG_I2C_TEGRA=y
|
|
||||||
CONFIG_I2C_ST=y
|
CONFIG_I2C_ST=y
|
||||||
CONFIG_SPI=y
|
CONFIG_I2C_TEGRA=y
|
||||||
CONFIG_I2C_XILINX=y
|
CONFIG_I2C_XILINX=y
|
||||||
CONFIG_SPI_DAVINCI=y
|
CONFIG_I2C_RCAR=y
|
||||||
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_CADENCE=y
|
CONFIG_SPI_CADENCE=y
|
||||||
|
CONFIG_SPI_DAVINCI=y
|
||||||
CONFIG_SPI_OMAP24XX=y
|
CONFIG_SPI_OMAP24XX=y
|
||||||
CONFIG_SPI_ORION=y
|
CONFIG_SPI_ORION=y
|
||||||
CONFIG_SPI_PL022=y
|
CONFIG_SPI_PL022=y
|
||||||
|
CONFIG_SPI_RSPI=y
|
||||||
|
CONFIG_SPI_SH_MSIOF=m
|
||||||
|
CONFIG_SPI_SH_HSPI=y
|
||||||
CONFIG_SPI_SIRF=y
|
CONFIG_SPI_SIRF=y
|
||||||
CONFIG_SPI_SUN4I=y
|
CONFIG_SPI_SUN4I=y
|
||||||
CONFIG_SPI_SUN6I=y
|
CONFIG_SPI_SUN6I=y
|
||||||
|
@ -259,12 +290,15 @@ CONFIG_PINCTRL_PALMAS=y
|
||||||
CONFIG_PINCTRL_APQ8084=y
|
CONFIG_PINCTRL_APQ8084=y
|
||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||||
CONFIG_GPIO_DWAPB=y
|
|
||||||
CONFIG_GPIO_DAVINCI=y
|
CONFIG_GPIO_DAVINCI=y
|
||||||
|
CONFIG_GPIO_DWAPB=y
|
||||||
|
CONFIG_GPIO_EM=y
|
||||||
|
CONFIG_GPIO_RCAR=y
|
||||||
CONFIG_GPIO_XILINX=y
|
CONFIG_GPIO_XILINX=y
|
||||||
CONFIG_GPIO_ZYNQ=y
|
CONFIG_GPIO_ZYNQ=y
|
||||||
CONFIG_GPIO_PCA953X=y
|
CONFIG_GPIO_PCA953X=y
|
||||||
CONFIG_GPIO_PCA953X_IRQ=y
|
CONFIG_GPIO_PCA953X_IRQ=y
|
||||||
|
CONFIG_GPIO_PCF857X=y
|
||||||
CONFIG_GPIO_TWL4030=y
|
CONFIG_GPIO_TWL4030=y
|
||||||
CONFIG_GPIO_PALMAS=y
|
CONFIG_GPIO_PALMAS=y
|
||||||
CONFIG_GPIO_SYSCON=y
|
CONFIG_GPIO_SYSCON=y
|
||||||
|
@ -276,10 +310,12 @@ CONFIG_POWER_RESET_AS3722=y
|
||||||
CONFIG_POWER_RESET_GPIO=y
|
CONFIG_POWER_RESET_GPIO=y
|
||||||
CONFIG_POWER_RESET_KEYSTONE=y
|
CONFIG_POWER_RESET_KEYSTONE=y
|
||||||
CONFIG_POWER_RESET_SUN6I=y
|
CONFIG_POWER_RESET_SUN6I=y
|
||||||
|
CONFIG_POWER_RESET_RMOBILE=y
|
||||||
CONFIG_SENSORS_LM90=y
|
CONFIG_SENSORS_LM90=y
|
||||||
CONFIG_SENSORS_LM95245=y
|
CONFIG_SENSORS_LM95245=y
|
||||||
CONFIG_THERMAL=y
|
CONFIG_THERMAL=y
|
||||||
CONFIG_CPU_THERMAL=y
|
CONFIG_CPU_THERMAL=y
|
||||||
|
CONFIG_RCAR_THERMAL=y
|
||||||
CONFIG_ARMADA_THERMAL=y
|
CONFIG_ARMADA_THERMAL=y
|
||||||
CONFIG_DAVINCI_WATCHDOG
|
CONFIG_DAVINCI_WATCHDOG
|
||||||
CONFIG_ST_THERMAL_SYSCFG=y
|
CONFIG_ST_THERMAL_SYSCFG=y
|
||||||
|
@ -290,6 +326,7 @@ CONFIG_ARM_SP805_WATCHDOG=y
|
||||||
CONFIG_ORION_WATCHDOG=y
|
CONFIG_ORION_WATCHDOG=y
|
||||||
CONFIG_SUNXI_WATCHDOG=y
|
CONFIG_SUNXI_WATCHDOG=y
|
||||||
CONFIG_MESON_WATCHDOG=y
|
CONFIG_MESON_WATCHDOG=y
|
||||||
|
CONFIG_MFD_AS3711=y
|
||||||
CONFIG_MFD_AS3722=y
|
CONFIG_MFD_AS3722=y
|
||||||
CONFIG_MFD_BCM590XX=y
|
CONFIG_MFD_BCM590XX=y
|
||||||
CONFIG_MFD_AXP20X=y
|
CONFIG_MFD_AXP20X=y
|
||||||
|
@ -304,13 +341,16 @@ CONFIG_MFD_TPS65090=y
|
||||||
CONFIG_MFD_TPS6586X=y
|
CONFIG_MFD_TPS6586X=y
|
||||||
CONFIG_MFD_TPS65910=y
|
CONFIG_MFD_TPS65910=y
|
||||||
CONFIG_REGULATOR_AB8500=y
|
CONFIG_REGULATOR_AB8500=y
|
||||||
|
CONFIG_REGULATOR_AS3711=y
|
||||||
CONFIG_REGULATOR_AS3722=y
|
CONFIG_REGULATOR_AS3722=y
|
||||||
CONFIG_REGULATOR_AXP20X=y
|
CONFIG_REGULATOR_AXP20X=y
|
||||||
CONFIG_REGULATOR_BCM590XX=y
|
CONFIG_REGULATOR_BCM590XX=y
|
||||||
|
CONFIG_REGULATOR_DA9210=y
|
||||||
CONFIG_REGULATOR_GPIO=y
|
CONFIG_REGULATOR_GPIO=y
|
||||||
CONFIG_MFD_SYSCON=y
|
CONFIG_MFD_SYSCON=y
|
||||||
CONFIG_POWER_RESET_SYSCON=y
|
CONFIG_POWER_RESET_SYSCON=y
|
||||||
CONFIG_REGULATOR_MAX8907=y
|
CONFIG_REGULATOR_MAX8907=y
|
||||||
|
CONFIG_REGULATOR_MAX8973=y
|
||||||
CONFIG_REGULATOR_MAX77686=y
|
CONFIG_REGULATOR_MAX77686=y
|
||||||
CONFIG_REGULATOR_PALMAS=y
|
CONFIG_REGULATOR_PALMAS=y
|
||||||
CONFIG_REGULATOR_S2MPS11=y
|
CONFIG_REGULATOR_S2MPS11=y
|
||||||
|
@ -324,18 +364,32 @@ CONFIG_REGULATOR_TWL4030=y
|
||||||
CONFIG_REGULATOR_VEXPRESS=y
|
CONFIG_REGULATOR_VEXPRESS=y
|
||||||
CONFIG_MEDIA_SUPPORT=y
|
CONFIG_MEDIA_SUPPORT=y
|
||||||
CONFIG_MEDIA_CAMERA_SUPPORT=y
|
CONFIG_MEDIA_CAMERA_SUPPORT=y
|
||||||
|
CONFIG_MEDIA_CONTROLLER=y
|
||||||
|
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||||
CONFIG_MEDIA_USB_SUPPORT=y
|
CONFIG_MEDIA_USB_SUPPORT=y
|
||||||
CONFIG_USB_VIDEO_CLASS=y
|
CONFIG_USB_VIDEO_CLASS=y
|
||||||
CONFIG_USB_GSPCA=y
|
CONFIG_USB_GSPCA=y
|
||||||
|
CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||||
|
CONFIG_SOC_CAMERA=m
|
||||||
|
CONFIG_SOC_CAMERA_PLATFORM=m
|
||||||
|
CONFIG_VIDEO_RCAR_VIN=m
|
||||||
|
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
||||||
|
CONFIG_VIDEO_RENESAS_VSP1=m
|
||||||
|
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
|
||||||
|
CONFIG_VIDEO_ADV7180=m
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
|
CONFIG_DRM_RCAR_DU=m
|
||||||
CONFIG_DRM_TEGRA=y
|
CONFIG_DRM_TEGRA=y
|
||||||
CONFIG_DRM_PANEL_SIMPLE=y
|
CONFIG_DRM_PANEL_SIMPLE=y
|
||||||
CONFIG_FB_ARMCLCD=y
|
CONFIG_FB_ARMCLCD=y
|
||||||
CONFIG_FB_WM8505=y
|
CONFIG_FB_WM8505=y
|
||||||
|
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||||
CONFIG_FB_SIMPLE=y
|
CONFIG_FB_SIMPLE=y
|
||||||
|
CONFIG_FB_SH_MOBILE_MERAM=y
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
CONFIG_BACKLIGHT_PWM=y
|
CONFIG_BACKLIGHT_PWM=y
|
||||||
|
CONFIG_BACKLIGHT_AS3711=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||||
CONFIG_SOUND=y
|
CONFIG_SOUND=y
|
||||||
|
@ -343,6 +397,8 @@ CONFIG_SND=y
|
||||||
CONFIG_SND_DYNAMIC_MINORS=y
|
CONFIG_SND_DYNAMIC_MINORS=y
|
||||||
CONFIG_SND_USB_AUDIO=y
|
CONFIG_SND_USB_AUDIO=y
|
||||||
CONFIG_SND_SOC=y
|
CONFIG_SND_SOC=y
|
||||||
|
CONFIG_SND_SOC_SH4_FSI=m
|
||||||
|
CONFIG_SND_SOC_RCAR=m
|
||||||
CONFIG_SND_SOC_TEGRA=y
|
CONFIG_SND_SOC_TEGRA=y
|
||||||
CONFIG_SND_SOC_TEGRA_RT5640=y
|
CONFIG_SND_SOC_TEGRA_RT5640=y
|
||||||
CONFIG_SND_SOC_TEGRA_WM8753=y
|
CONFIG_SND_SOC_TEGRA_WM8753=y
|
||||||
|
@ -350,6 +406,8 @@ CONFIG_SND_SOC_TEGRA_WM8903=y
|
||||||
CONFIG_SND_SOC_TEGRA_TRIMSLICE=y
|
CONFIG_SND_SOC_TEGRA_TRIMSLICE=y
|
||||||
CONFIG_SND_SOC_TEGRA_ALC5632=y
|
CONFIG_SND_SOC_TEGRA_ALC5632=y
|
||||||
CONFIG_SND_SOC_TEGRA_MAX98090=y
|
CONFIG_SND_SOC_TEGRA_MAX98090=y
|
||||||
|
CONFIG_SND_SOC_AK4642=m
|
||||||
|
CONFIG_SND_SOC_WM8978=m
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_XHCI_HCD=y
|
CONFIG_USB_XHCI_HCD=y
|
||||||
CONFIG_USB_XHCI_MVEBU=y
|
CONFIG_USB_XHCI_MVEBU=y
|
||||||
|
@ -362,6 +420,8 @@ CONFIG_USB_ISP1760_HCD=y
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
CONFIG_USB_OHCI_HCD_STI=y
|
CONFIG_USB_OHCI_HCD_STI=y
|
||||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
||||||
|
CONFIG_USB_R8A66597_HCD=m
|
||||||
|
CONFIG_USB_RENESAS_USBHS=m
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_DWC3=y
|
CONFIG_USB_DWC3=y
|
||||||
CONFIG_USB_CHIPIDEA=y
|
CONFIG_USB_CHIPIDEA=y
|
||||||
|
@ -374,6 +434,10 @@ CONFIG_SAMSUNG_USB3PHY=y
|
||||||
CONFIG_USB_GPIO_VBUS=y
|
CONFIG_USB_GPIO_VBUS=y
|
||||||
CONFIG_USB_ISP1301=y
|
CONFIG_USB_ISP1301=y
|
||||||
CONFIG_USB_MXS_PHY=y
|
CONFIG_USB_MXS_PHY=y
|
||||||
|
CONFIG_USB_RCAR_PHY=m
|
||||||
|
CONFIG_USB_RCAR_GEN2_PHY=m
|
||||||
|
CONFIG_USB_GADGET=y
|
||||||
|
CONFIG_USB_RENESAS_USBHS_UDC=m
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
CONFIG_MMC_BLOCK_MINORS=16
|
CONFIG_MMC_BLOCK_MINORS=16
|
||||||
CONFIG_MMC_ARMMMCI=y
|
CONFIG_MMC_ARMMMCI=y
|
||||||
|
@ -392,12 +456,14 @@ CONFIG_MMC_SDHCI_ST=y
|
||||||
CONFIG_MMC_OMAP=y
|
CONFIG_MMC_OMAP=y
|
||||||
CONFIG_MMC_OMAP_HS=y
|
CONFIG_MMC_OMAP_HS=y
|
||||||
CONFIG_MMC_MVSDIO=y
|
CONFIG_MMC_MVSDIO=y
|
||||||
CONFIG_MMC_SUNXI=y
|
CONFIG_MMC_SDHI=y
|
||||||
CONFIG_MMC_DW=y
|
CONFIG_MMC_DW=y
|
||||||
CONFIG_MMC_DW_IDMAC=y
|
CONFIG_MMC_DW_IDMAC=y
|
||||||
CONFIG_MMC_DW_PLTFM=y
|
CONFIG_MMC_DW_PLTFM=y
|
||||||
CONFIG_MMC_DW_EXYNOS=y
|
CONFIG_MMC_DW_EXYNOS=y
|
||||||
CONFIG_MMC_DW_ROCKCHIP=y
|
CONFIG_MMC_DW_ROCKCHIP=y
|
||||||
|
CONFIG_MMC_SH_MMCIF=y
|
||||||
|
CONFIG_MMC_SUNXI=y
|
||||||
CONFIG_NEW_LEDS=y
|
CONFIG_NEW_LEDS=y
|
||||||
CONFIG_LEDS_CLASS=y
|
CONFIG_LEDS_CLASS=y
|
||||||
CONFIG_LEDS_GPIO=y
|
CONFIG_LEDS_GPIO=y
|
||||||
|
@ -421,10 +487,12 @@ CONFIG_RTC_DRV_AS3722=y
|
||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
CONFIG_RTC_DRV_MAX8907=y
|
CONFIG_RTC_DRV_MAX8907=y
|
||||||
CONFIG_RTC_DRV_MAX77686=y
|
CONFIG_RTC_DRV_MAX77686=y
|
||||||
|
CONFIG_RTC_DRV_RS5C372=m
|
||||||
CONFIG_RTC_DRV_PALMAS=y
|
CONFIG_RTC_DRV_PALMAS=y
|
||||||
CONFIG_RTC_DRV_TWL4030=y
|
CONFIG_RTC_DRV_TWL4030=y
|
||||||
CONFIG_RTC_DRV_TPS6586X=y
|
CONFIG_RTC_DRV_TPS6586X=y
|
||||||
CONFIG_RTC_DRV_TPS65910=y
|
CONFIG_RTC_DRV_TPS65910=y
|
||||||
|
CONFIG_RTC_DRV_S35390A=m
|
||||||
CONFIG_RTC_DRV_EM3027=y
|
CONFIG_RTC_DRV_EM3027=y
|
||||||
CONFIG_RTC_DRV_PL031=y
|
CONFIG_RTC_DRV_PL031=y
|
||||||
CONFIG_RTC_DRV_VT8500=y
|
CONFIG_RTC_DRV_VT8500=y
|
||||||
|
@ -436,6 +504,9 @@ CONFIG_DMADEVICES=y
|
||||||
CONFIG_DW_DMAC=y
|
CONFIG_DW_DMAC=y
|
||||||
CONFIG_MV_XOR=y
|
CONFIG_MV_XOR=y
|
||||||
CONFIG_TEGRA20_APB_DMA=y
|
CONFIG_TEGRA20_APB_DMA=y
|
||||||
|
CONFIG_SH_DMAE=y
|
||||||
|
CONFIG_RCAR_AUDMAC_PP=m
|
||||||
|
CONFIG_RCAR_DMAC=y
|
||||||
CONFIG_STE_DMA40=y
|
CONFIG_STE_DMA40=y
|
||||||
CONFIG_SIRF_DMA=y
|
CONFIG_SIRF_DMA=y
|
||||||
CONFIG_TI_EDMA=y
|
CONFIG_TI_EDMA=y
|
||||||
|
@ -468,6 +539,7 @@ CONFIG_IIO=y
|
||||||
CONFIG_XILINX_XADC=y
|
CONFIG_XILINX_XADC=y
|
||||||
CONFIG_AK8975=y
|
CONFIG_AK8975=y
|
||||||
CONFIG_PWM=y
|
CONFIG_PWM=y
|
||||||
|
CONFIG_PWM_RENESAS_TPU=y
|
||||||
CONFIG_PWM_TEGRA=y
|
CONFIG_PWM_TEGRA=y
|
||||||
CONFIG_PWM_VT8500=y
|
CONFIG_PWM_VT8500=y
|
||||||
CONFIG_PHY_HIX5HD2_SATA=y
|
CONFIG_PHY_HIX5HD2_SATA=y
|
||||||
|
|
|
@ -114,6 +114,7 @@ CONFIG_MTD_PHYSMAP_OF=y
|
||||||
CONFIG_MTD_NAND=y
|
CONFIG_MTD_NAND=y
|
||||||
CONFIG_MTD_NAND_ECC_BCH=y
|
CONFIG_MTD_NAND_ECC_BCH=y
|
||||||
CONFIG_MTD_NAND_OMAP2=y
|
CONFIG_MTD_NAND_OMAP2=y
|
||||||
|
CONFIG_MTD_NAND_OMAP_BCH=y
|
||||||
CONFIG_MTD_ONENAND=y
|
CONFIG_MTD_ONENAND=y
|
||||||
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
|
CONFIG_MTD_ONENAND_VERIFY_WRITE=y
|
||||||
CONFIG_MTD_ONENAND_OMAP2=y
|
CONFIG_MTD_ONENAND_OMAP2=y
|
||||||
|
@ -248,6 +249,7 @@ CONFIG_TWL6040_CORE=y
|
||||||
CONFIG_REGULATOR_PALMAS=y
|
CONFIG_REGULATOR_PALMAS=y
|
||||||
CONFIG_REGULATOR_PBIAS=y
|
CONFIG_REGULATOR_PBIAS=y
|
||||||
CONFIG_REGULATOR_TI_ABB=y
|
CONFIG_REGULATOR_TI_ABB=y
|
||||||
|
CONFIG_REGULATOR_TPS62360=m
|
||||||
CONFIG_REGULATOR_TPS65023=y
|
CONFIG_REGULATOR_TPS65023=y
|
||||||
CONFIG_REGULATOR_TPS6507X=y
|
CONFIG_REGULATOR_TPS6507X=y
|
||||||
CONFIG_REGULATOR_TPS65217=y
|
CONFIG_REGULATOR_TPS65217=y
|
||||||
|
@ -374,7 +376,7 @@ CONFIG_PWM_TIEHRPWM=m
|
||||||
CONFIG_PWM_TWL=m
|
CONFIG_PWM_TWL=m
|
||||||
CONFIG_PWM_TWL_LED=m
|
CONFIG_PWM_TWL_LED=m
|
||||||
CONFIG_OMAP_USB2=m
|
CONFIG_OMAP_USB2=m
|
||||||
CONFIG_TI_PIPE3=m
|
CONFIG_TI_PIPE3=y
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
# CONFIG_EXT3_FS_XATTR is not set
|
# CONFIG_EXT3_FS_XATTR is not set
|
||||||
|
|
|
@ -207,7 +207,7 @@ static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn,
|
||||||
|
|
||||||
bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached;
|
bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached;
|
||||||
|
|
||||||
VM_BUG_ON(size & PAGE_MASK);
|
VM_BUG_ON(size & ~PAGE_MASK);
|
||||||
|
|
||||||
if (!need_flush && !icache_is_pipt())
|
if (!need_flush && !icache_is_pipt())
|
||||||
goto vipt_cache;
|
goto vipt_cache;
|
||||||
|
|
|
@ -540,7 +540,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
||||||
|
|
||||||
vcpu->mode = OUTSIDE_GUEST_MODE;
|
vcpu->mode = OUTSIDE_GUEST_MODE;
|
||||||
kvm_guest_exit();
|
kvm_guest_exit();
|
||||||
trace_kvm_exit(*vcpu_pc(vcpu));
|
trace_kvm_exit(kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
|
||||||
/*
|
/*
|
||||||
* We may have taken a host interrupt in HYP mode (ie
|
* We may have taken a host interrupt in HYP mode (ie
|
||||||
* while executing the guest). This interrupt is still
|
* while executing the guest). This interrupt is still
|
||||||
|
|
|
@ -25,18 +25,22 @@ TRACE_EVENT(kvm_entry,
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_exit,
|
TRACE_EVENT(kvm_exit,
|
||||||
TP_PROTO(unsigned long vcpu_pc),
|
TP_PROTO(unsigned int exit_reason, unsigned long vcpu_pc),
|
||||||
TP_ARGS(vcpu_pc),
|
TP_ARGS(exit_reason, vcpu_pc),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
|
__field( unsigned int, exit_reason )
|
||||||
__field( unsigned long, vcpu_pc )
|
__field( unsigned long, vcpu_pc )
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
__entry->exit_reason = exit_reason;
|
||||||
__entry->vcpu_pc = vcpu_pc;
|
__entry->vcpu_pc = vcpu_pc;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("PC: 0x%08lx", __entry->vcpu_pc)
|
TP_printk("HSR_EC: 0x%04x, PC: 0x%08lx",
|
||||||
|
__entry->exit_reason,
|
||||||
|
__entry->vcpu_pc)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_guest_fault,
|
TRACE_EVENT(kvm_guest_fault,
|
||||||
|
|
|
@ -2,5 +2,7 @@ config MACH_ASM9260
|
||||||
bool "Alphascale ASM9260"
|
bool "Alphascale ASM9260"
|
||||||
depends on ARCH_MULTI_V5
|
depends on ARCH_MULTI_V5
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
|
select ASM9260_TIMER
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
help
|
help
|
||||||
Support for Alphascale ASM9260 based platform.
|
Support for Alphascale ASM9260 based platform.
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -46,15 +47,20 @@ static struct resource smc91x_resources[] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = MSM_GPIO_TO_INT(49),
|
.start = MSM_GPIO_TO_INT(49),
|
||||||
.end = MSM_GPIO_TO_INT(49),
|
.end = MSM_GPIO_TO_INT(49),
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||||
.resource = smc91x_resources,
|
.resource = smc91x_resources,
|
||||||
|
.dev.platform_data = &smc91x_platdata,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *devices[] __initdata = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/usb/msm_hsusb.h>
|
#include <linux/usb/msm_hsusb.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/clkdev.h>
|
#include <linux/clkdev.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -49,15 +50,20 @@ static struct resource smc91x_resources[] = {
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||||
.resource = smc91x_resources,
|
.resource = smc91x_resources,
|
||||||
|
.dev.platform_data = &smc91x_platdata,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init msm_init_smc91x(void)
|
static int __init msm_init_smc91x(void)
|
||||||
|
|
|
@ -81,11 +81,16 @@ static struct resource smc91x_resources[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||||
.resource = smc91x_resources,
|
.resource = smc91x_resources,
|
||||||
|
.dev.platform_data = &smc91x_platdata,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void idp_backlight_power(int on)
|
static void idp_backlight_power(int on)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
@ -189,15 +190,20 @@ static struct resource smc91x_resources[] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = LPD270_ETHERNET_IRQ,
|
.start = LPD270_ETHERNET_IRQ,
|
||||||
.end = LPD270_ETHERNET_IRQ,
|
.end = LPD270_ETHERNET_IRQ,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT;
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||||
.resource = smc91x_resources,
|
.resource = smc91x_resources,
|
||||||
|
.dev.platform_data = &smc91x_platdata,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource lpd270_flash_resources[] = {
|
static struct resource lpd270_flash_resources[] = {
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/platform_data/video-clcd-versatile.h>
|
#include <linux/platform_data/video-clcd-versatile.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/amba/mmci.h>
|
#include <linux/amba/mmci.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
@ -94,6 +95,10 @@ static struct smsc911x_platform_config smsc911x_config = {
|
||||||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device realview_eth_device = {
|
static struct platform_device realview_eth_device = {
|
||||||
.name = "smsc911x",
|
.name = "smsc911x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
|
@ -107,6 +112,8 @@ int realview_eth_register(const char *name, struct resource *res)
|
||||||
realview_eth_device.resource = res;
|
realview_eth_device.resource = res;
|
||||||
if (strcmp(realview_eth_device.name, "smsc911x") == 0)
|
if (strcmp(realview_eth_device.name, "smsc911x") == 0)
|
||||||
realview_eth_device.dev.platform_data = &smsc911x_config;
|
realview_eth_device.dev.platform_data = &smsc911x_config;
|
||||||
|
else
|
||||||
|
realview_eth_device.dev.platform_data = &smc91x_platdata;
|
||||||
|
|
||||||
return platform_device_register(&realview_eth_device);
|
return platform_device_register(&realview_eth_device);
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,7 +234,7 @@ static struct resource realview_eb_eth_resources[] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = IRQ_EB_ETH,
|
.start = IRQ_EB_ETH,
|
||||||
.end = IRQ_EB_ETH,
|
.end = IRQ_EB_ETH,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
@ -258,12 +259,17 @@ static int neponset_probe(struct platform_device *dev)
|
||||||
0x02000000, "smc91x-attrib"),
|
0x02000000, "smc91x-attrib"),
|
||||||
{ .flags = IORESOURCE_IRQ },
|
{ .flags = IORESOURCE_IRQ },
|
||||||
};
|
};
|
||||||
|
struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_8BIT | SMC91X_IO_SHIFT_2 | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
struct platform_device_info smc91x_devinfo = {
|
struct platform_device_info smc91x_devinfo = {
|
||||||
.parent = &dev->dev,
|
.parent = &dev->dev,
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.res = smc91x_resources,
|
.res = smc91x_resources,
|
||||||
.num_res = ARRAY_SIZE(smc91x_resources),
|
.num_res = ARRAY_SIZE(smc91x_resources),
|
||||||
|
.data = &smc91c_platdata,
|
||||||
|
.size_data = sizeof(smc91c_platdata),
|
||||||
};
|
};
|
||||||
int ret, irq;
|
int ret, irq;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
@ -43,12 +44,18 @@ static struct resource smc91x_resources[] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
|
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
.name = "smc91x",
|
.name = "smc91x",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||||
.resource = smc91x_resources,
|
.resource = smc91x_resources,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &smc91c_platdata,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *devices[] __initdata = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
reg = <0x0 0x0>;
|
reg = <0x0 0x0>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@1 {
|
cpu@1 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
reg = <0x0 0x1>;
|
reg = <0x0 0x1>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@2 {
|
cpu@2 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -48,6 +50,7 @@
|
||||||
reg = <0x0 0x2>;
|
reg = <0x0 0x2>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@3 {
|
cpu@3 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -55,6 +58,11 @@
|
||||||
reg = <0x0 0x3>;
|
reg = <0x0 0x3>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
L2_0: l2-cache0 {
|
||||||
|
compatible = "cache";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
reg = <0x0 0x0>;
|
reg = <0x0 0x0>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A57_L2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
A57_1: cpu@1 {
|
A57_1: cpu@1 {
|
||||||
|
@ -46,6 +47,7 @@
|
||||||
reg = <0x0 0x1>;
|
reg = <0x0 0x1>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A57_L2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
A53_0: cpu@100 {
|
A53_0: cpu@100 {
|
||||||
|
@ -53,6 +55,7 @@
|
||||||
reg = <0x0 0x100>;
|
reg = <0x0 0x100>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A53_L2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
A53_1: cpu@101 {
|
A53_1: cpu@101 {
|
||||||
|
@ -60,6 +63,7 @@
|
||||||
reg = <0x0 0x101>;
|
reg = <0x0 0x101>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A53_L2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
A53_2: cpu@102 {
|
A53_2: cpu@102 {
|
||||||
|
@ -67,6 +71,7 @@
|
||||||
reg = <0x0 0x102>;
|
reg = <0x0 0x102>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A53_L2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
A53_3: cpu@103 {
|
A53_3: cpu@103 {
|
||||||
|
@ -74,6 +79,15 @@
|
||||||
reg = <0x0 0x103>;
|
reg = <0x0 0x103>;
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
|
next-level-cache = <&A53_L2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
A57_L2: l2-cache0 {
|
||||||
|
compatible = "cache";
|
||||||
|
};
|
||||||
|
|
||||||
|
A53_L2: l2-cache1 {
|
||||||
|
compatible = "cache";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
reg = <0x0 0x0>;
|
reg = <0x0 0x0>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@1 {
|
cpu@1 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
reg = <0x0 0x1>;
|
reg = <0x0 0x1>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@2 {
|
cpu@2 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -51,6 +53,7 @@
|
||||||
reg = <0x0 0x2>;
|
reg = <0x0 0x2>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
};
|
};
|
||||||
cpu@3 {
|
cpu@3 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
|
@ -58,6 +61,11 @@
|
||||||
reg = <0x0 0x3>;
|
reg = <0x0 0x3>;
|
||||||
enable-method = "spin-table";
|
enable-method = "spin-table";
|
||||||
cpu-release-addr = <0x0 0x8000fff8>;
|
cpu-release-addr = <0x0 0x8000fff8>;
|
||||||
|
next-level-cache = <&L2_0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
L2_0: l2-cache0 {
|
||||||
|
compatible = "cache";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ aes-ce-blk-y := aes-glue-ce.o aes-ce.o
|
||||||
obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o
|
obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o
|
||||||
aes-neon-blk-y := aes-glue-neon.o aes-neon.o
|
aes-neon-blk-y := aes-glue-neon.o aes-neon.o
|
||||||
|
|
||||||
AFLAGS_aes-ce.o := -DINTERLEAVE=2 -DINTERLEAVE_INLINE
|
AFLAGS_aes-ce.o := -DINTERLEAVE=4
|
||||||
AFLAGS_aes-neon.o := -DINTERLEAVE=4
|
AFLAGS_aes-neon.o := -DINTERLEAVE=4
|
||||||
|
|
||||||
CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
|
CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
#error "Only include this from assembly code"
|
#error "Only include this from assembly code"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ASM_ASSEMBLER_H
|
||||||
|
#define __ASM_ASSEMBLER_H
|
||||||
|
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
|
|
||||||
|
@ -155,3 +158,5 @@ lr .req x30 // link register
|
||||||
#endif
|
#endif
|
||||||
orr \rd, \lbits, \hbits, lsl #32
|
orr \rd, \lbits, \hbits, lsl #32
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
#endif /* __ASM_ASSEMBLER_H */
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef __ASM_CPUIDLE_H
|
#ifndef __ASM_CPUIDLE_H
|
||||||
#define __ASM_CPUIDLE_H
|
#define __ASM_CPUIDLE_H
|
||||||
|
|
||||||
|
#include <asm/proc-fns.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_IDLE
|
#ifdef CONFIG_CPU_IDLE
|
||||||
extern int cpu_init_idle(unsigned int cpu);
|
extern int cpu_init_idle(unsigned int cpu);
|
||||||
extern int cpu_suspend(unsigned long arg);
|
extern int cpu_suspend(unsigned long arg);
|
||||||
|
|
|
@ -264,8 +264,10 @@ __AARCH64_INSN_FUNCS(ands, 0x7F200000, 0x6A000000)
|
||||||
__AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000)
|
__AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000)
|
||||||
__AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000)
|
__AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000)
|
||||||
__AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000)
|
__AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000)
|
||||||
__AARCH64_INSN_FUNCS(cbz, 0xFE000000, 0x34000000)
|
__AARCH64_INSN_FUNCS(cbz, 0x7F000000, 0x34000000)
|
||||||
__AARCH64_INSN_FUNCS(cbnz, 0xFE000000, 0x35000000)
|
__AARCH64_INSN_FUNCS(cbnz, 0x7F000000, 0x35000000)
|
||||||
|
__AARCH64_INSN_FUNCS(tbz, 0x7F000000, 0x36000000)
|
||||||
|
__AARCH64_INSN_FUNCS(tbnz, 0x7F000000, 0x37000000)
|
||||||
__AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000)
|
__AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000)
|
||||||
__AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001)
|
__AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001)
|
||||||
__AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002)
|
__AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002)
|
||||||
|
|
|
@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
|
||||||
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
||||||
{
|
{
|
||||||
const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
|
const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
|
||||||
PTE_PROT_NONE | PTE_VALID | PTE_WRITE;
|
PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK;
|
||||||
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
|
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,8 @@
|
||||||
#define STACK_TOP STACK_TOP_MAX
|
#define STACK_TOP STACK_TOP_MAX
|
||||||
#endif /* CONFIG_COMPAT */
|
#endif /* CONFIG_COMPAT */
|
||||||
|
|
||||||
#define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK
|
extern phys_addr_t arm64_dma_phys_limit;
|
||||||
|
#define ARCH_LOW_ADDRESS_LIMIT (arm64_dma_phys_limit - 1)
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
struct debug_info {
|
struct debug_info {
|
||||||
|
|
|
@ -24,11 +24,6 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <asm/cputype.h>
|
#include <asm/cputype.h>
|
||||||
|
|
||||||
extern void __cpu_flush_user_tlb_range(unsigned long, unsigned long, struct vm_area_struct *);
|
|
||||||
extern void __cpu_flush_kern_tlb_range(unsigned long, unsigned long);
|
|
||||||
|
|
||||||
extern struct cpu_tlb_fns cpu_tlb;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TLB Management
|
* TLB Management
|
||||||
* ==============
|
* ==============
|
||||||
|
|
|
@ -15,8 +15,9 @@ CFLAGS_REMOVE_return_address.o = -pg
|
||||||
arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \
|
arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \
|
||||||
entry-fpsimd.o process.o ptrace.o setup.o signal.o \
|
entry-fpsimd.o process.o ptrace.o setup.o signal.o \
|
||||||
sys.o stacktrace.o time.o traps.o io.o vdso.o \
|
sys.o stacktrace.o time.o traps.o io.o vdso.o \
|
||||||
hyp-stub.o psci.o cpu_ops.o insn.o return_address.o \
|
hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o \
|
||||||
cpuinfo.o cpu_errata.o alternative.o cacheinfo.o
|
return_address.o cpuinfo.o cpu_errata.o \
|
||||||
|
alternative.o cacheinfo.o
|
||||||
|
|
||||||
arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
|
arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
|
||||||
sys_compat.o entry32.o \
|
sys_compat.o entry32.o \
|
||||||
|
|
|
@ -156,7 +156,7 @@ static int ftrace_modify_graph_caller(bool enable)
|
||||||
|
|
||||||
branch = aarch64_insn_gen_branch_imm(pc,
|
branch = aarch64_insn_gen_branch_imm(pc,
|
||||||
(unsigned long)ftrace_graph_caller,
|
(unsigned long)ftrace_graph_caller,
|
||||||
AARCH64_INSN_BRANCH_LINK);
|
AARCH64_INSN_BRANCH_NOLINK);
|
||||||
nop = aarch64_insn_gen_nop();
|
nop = aarch64_insn_gen_nop();
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
|
|
|
@ -87,8 +87,10 @@ static void __kprobes *patch_map(void *addr, int fixmap)
|
||||||
|
|
||||||
if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX))
|
if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX))
|
||||||
page = vmalloc_to_page(addr);
|
page = vmalloc_to_page(addr);
|
||||||
else
|
else if (!module && IS_ENABLED(CONFIG_DEBUG_RODATA))
|
||||||
page = virt_to_page(addr);
|
page = virt_to_page(addr);
|
||||||
|
else
|
||||||
|
return addr;
|
||||||
|
|
||||||
BUG_ON(!page);
|
BUG_ON(!page);
|
||||||
set_fixmap(fixmap, page_to_phys(page));
|
set_fixmap(fixmap, page_to_phys(page));
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 ARM Limited
|
||||||
|
*
|
||||||
|
* Author: Will Deacon <will.deacon@arm.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
/* int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */
|
||||||
|
ENTRY(__invoke_psci_fn_hvc)
|
||||||
|
hvc #0
|
||||||
|
ret
|
||||||
|
ENDPROC(__invoke_psci_fn_hvc)
|
||||||
|
|
||||||
|
/* int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */
|
||||||
|
ENTRY(__invoke_psci_fn_smc)
|
||||||
|
smc #0
|
||||||
|
ret
|
||||||
|
ENDPROC(__invoke_psci_fn_smc)
|
|
@ -57,6 +57,9 @@ static struct psci_operations psci_ops;
|
||||||
static int (*invoke_psci_fn)(u64, u64, u64, u64);
|
static int (*invoke_psci_fn)(u64, u64, u64, u64);
|
||||||
typedef int (*psci_initcall_t)(const struct device_node *);
|
typedef int (*psci_initcall_t)(const struct device_node *);
|
||||||
|
|
||||||
|
asmlinkage int __invoke_psci_fn_hvc(u64, u64, u64, u64);
|
||||||
|
asmlinkage int __invoke_psci_fn_smc(u64, u64, u64, u64);
|
||||||
|
|
||||||
enum psci_function {
|
enum psci_function {
|
||||||
PSCI_FN_CPU_SUSPEND,
|
PSCI_FN_CPU_SUSPEND,
|
||||||
PSCI_FN_CPU_ON,
|
PSCI_FN_CPU_ON,
|
||||||
|
@ -109,40 +112,6 @@ static void psci_power_state_unpack(u32 power_state,
|
||||||
PSCI_0_2_POWER_STATE_AFFL_SHIFT;
|
PSCI_0_2_POWER_STATE_AFFL_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The following two functions are invoked via the invoke_psci_fn pointer
|
|
||||||
* and will not be inlined, allowing us to piggyback on the AAPCS.
|
|
||||||
*/
|
|
||||||
static noinline int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1,
|
|
||||||
u64 arg2)
|
|
||||||
{
|
|
||||||
asm volatile(
|
|
||||||
__asmeq("%0", "x0")
|
|
||||||
__asmeq("%1", "x1")
|
|
||||||
__asmeq("%2", "x2")
|
|
||||||
__asmeq("%3", "x3")
|
|
||||||
"hvc #0\n"
|
|
||||||
: "+r" (function_id)
|
|
||||||
: "r" (arg0), "r" (arg1), "r" (arg2));
|
|
||||||
|
|
||||||
return function_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static noinline int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1,
|
|
||||||
u64 arg2)
|
|
||||||
{
|
|
||||||
asm volatile(
|
|
||||||
__asmeq("%0", "x0")
|
|
||||||
__asmeq("%1", "x1")
|
|
||||||
__asmeq("%2", "x2")
|
|
||||||
__asmeq("%3", "x3")
|
|
||||||
"smc #0\n"
|
|
||||||
: "+r" (function_id)
|
|
||||||
: "r" (arg0), "r" (arg1), "r" (arg2));
|
|
||||||
|
|
||||||
return function_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int psci_get_version(void)
|
static int psci_get_version(void)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
|
@ -154,8 +154,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
|
||||||
case __SI_TIMER:
|
case __SI_TIMER:
|
||||||
err |= __put_user(from->si_tid, &to->si_tid);
|
err |= __put_user(from->si_tid, &to->si_tid);
|
||||||
err |= __put_user(from->si_overrun, &to->si_overrun);
|
err |= __put_user(from->si_overrun, &to->si_overrun);
|
||||||
err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr,
|
err |= __put_user(from->si_int, &to->si_int);
|
||||||
&to->si_ptr);
|
|
||||||
break;
|
break;
|
||||||
case __SI_POLL:
|
case __SI_POLL:
|
||||||
err |= __put_user(from->si_band, &to->si_band);
|
err |= __put_user(from->si_band, &to->si_band);
|
||||||
|
@ -184,7 +183,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
|
||||||
case __SI_MESGQ: /* But this is */
|
case __SI_MESGQ: /* But this is */
|
||||||
err |= __put_user(from->si_pid, &to->si_pid);
|
err |= __put_user(from->si_pid, &to->si_pid);
|
||||||
err |= __put_user(from->si_uid, &to->si_uid);
|
err |= __put_user(from->si_uid, &to->si_uid);
|
||||||
err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr);
|
err |= __put_user(from->si_int, &to->si_int);
|
||||||
break;
|
break;
|
||||||
case __SI_SYS:
|
case __SI_SYS:
|
||||||
err |= __put_user((compat_uptr_t)(unsigned long)
|
err |= __put_user((compat_uptr_t)(unsigned long)
|
||||||
|
|
|
@ -174,8 +174,6 @@ ENDPROC(__kernel_clock_gettime)
|
||||||
/* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */
|
/* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */
|
||||||
ENTRY(__kernel_clock_getres)
|
ENTRY(__kernel_clock_getres)
|
||||||
.cfi_startproc
|
.cfi_startproc
|
||||||
cbz w1, 3f
|
|
||||||
|
|
||||||
cmp w0, #CLOCK_REALTIME
|
cmp w0, #CLOCK_REALTIME
|
||||||
ccmp w0, #CLOCK_MONOTONIC, #0x4, ne
|
ccmp w0, #CLOCK_MONOTONIC, #0x4, ne
|
||||||
b.ne 1f
|
b.ne 1f
|
||||||
|
@ -188,6 +186,7 @@ ENTRY(__kernel_clock_getres)
|
||||||
b.ne 4f
|
b.ne 4f
|
||||||
ldr x2, 6f
|
ldr x2, 6f
|
||||||
2:
|
2:
|
||||||
|
cbz w1, 3f
|
||||||
stp xzr, x2, [x1]
|
stp xzr, x2, [x1]
|
||||||
|
|
||||||
3: /* res == NULL. */
|
3: /* res == NULL. */
|
||||||
|
|
|
@ -348,8 +348,6 @@ static struct dma_map_ops swiotlb_dma_ops = {
|
||||||
.mapping_error = swiotlb_dma_mapping_error,
|
.mapping_error = swiotlb_dma_mapping_error,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int swiotlb_late_init_with_default_size(size_t default_size);
|
|
||||||
|
|
||||||
static int __init atomic_pool_init(void)
|
static int __init atomic_pool_init(void)
|
||||||
{
|
{
|
||||||
pgprot_t prot = __pgprot(PROT_NORMAL_NC);
|
pgprot_t prot = __pgprot(PROT_NORMAL_NC);
|
||||||
|
@ -411,21 +409,13 @@ out:
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init swiotlb_late_init(void)
|
static int __init arm64_dma_init(void)
|
||||||
{
|
{
|
||||||
size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT);
|
int ret;
|
||||||
|
|
||||||
dma_ops = &swiotlb_dma_ops;
|
dma_ops = &swiotlb_dma_ops;
|
||||||
|
|
||||||
return swiotlb_late_init_with_default_size(swiotlb_size);
|
ret = atomic_pool_init();
|
||||||
}
|
|
||||||
|
|
||||||
static int __init arm64_dma_init(void)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
ret |= swiotlb_late_init();
|
|
||||||
ret |= atomic_pool_init();
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/dma-contiguous.h>
|
#include <linux/dma-contiguous.h>
|
||||||
#include <linux/efi.h>
|
#include <linux/efi.h>
|
||||||
|
#include <linux/swiotlb.h>
|
||||||
|
|
||||||
#include <asm/fixmap.h>
|
#include <asm/fixmap.h>
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
#include "mm.h"
|
#include "mm.h"
|
||||||
|
|
||||||
phys_addr_t memstart_addr __read_mostly = 0;
|
phys_addr_t memstart_addr __read_mostly = 0;
|
||||||
|
phys_addr_t arm64_dma_phys_limit __read_mostly;
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
static int __init early_initrd(char *p)
|
static int __init early_initrd(char *p)
|
||||||
|
@ -85,7 +87,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
|
||||||
|
|
||||||
/* 4GB maximum for 32-bit only capable devices */
|
/* 4GB maximum for 32-bit only capable devices */
|
||||||
if (IS_ENABLED(CONFIG_ZONE_DMA)) {
|
if (IS_ENABLED(CONFIG_ZONE_DMA)) {
|
||||||
max_dma = PFN_DOWN(max_zone_dma_phys());
|
max_dma = PFN_DOWN(arm64_dma_phys_limit);
|
||||||
zone_size[ZONE_DMA] = max_dma - min;
|
zone_size[ZONE_DMA] = max_dma - min;
|
||||||
}
|
}
|
||||||
zone_size[ZONE_NORMAL] = max - max_dma;
|
zone_size[ZONE_NORMAL] = max - max_dma;
|
||||||
|
@ -156,8 +158,6 @@ early_param("mem", early_mem);
|
||||||
|
|
||||||
void __init arm64_memblock_init(void)
|
void __init arm64_memblock_init(void)
|
||||||
{
|
{
|
||||||
phys_addr_t dma_phys_limit = 0;
|
|
||||||
|
|
||||||
memblock_enforce_memory_limit(memory_limit);
|
memblock_enforce_memory_limit(memory_limit);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -174,8 +174,10 @@ void __init arm64_memblock_init(void)
|
||||||
|
|
||||||
/* 4GB maximum for 32-bit only capable devices */
|
/* 4GB maximum for 32-bit only capable devices */
|
||||||
if (IS_ENABLED(CONFIG_ZONE_DMA))
|
if (IS_ENABLED(CONFIG_ZONE_DMA))
|
||||||
dma_phys_limit = max_zone_dma_phys();
|
arm64_dma_phys_limit = max_zone_dma_phys();
|
||||||
dma_contiguous_reserve(dma_phys_limit);
|
else
|
||||||
|
arm64_dma_phys_limit = PHYS_MASK + 1;
|
||||||
|
dma_contiguous_reserve(arm64_dma_phys_limit);
|
||||||
|
|
||||||
memblock_allow_resize();
|
memblock_allow_resize();
|
||||||
memblock_dump_all();
|
memblock_dump_all();
|
||||||
|
@ -276,6 +278,8 @@ static void __init free_unused_memmap(void)
|
||||||
*/
|
*/
|
||||||
void __init mem_init(void)
|
void __init mem_init(void)
|
||||||
{
|
{
|
||||||
|
swiotlb_init(1);
|
||||||
|
|
||||||
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
||||||
|
|
||||||
#ifndef CONFIG_SPARSEMEM_VMEMMAP
|
#ifndef CONFIG_SPARSEMEM_VMEMMAP
|
||||||
|
|
|
@ -51,7 +51,10 @@ static int change_memory_common(unsigned long addr, int numpages,
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_module_address(start) || !is_module_address(end - 1))
|
if (start < MODULES_VADDR || start >= MODULES_END)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (end < MODULES_VADDR || end >= MODULES_END)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
data.set_mask = set_mask;
|
data.set_mask = set_mask;
|
||||||
|
|
|
@ -123,12 +123,14 @@ extern unsigned long empty_zero_page;
|
||||||
#define PGDIR_MASK (~(PGDIR_SIZE - 1))
|
#define PGDIR_MASK (~(PGDIR_SIZE - 1))
|
||||||
#define PTRS_PER_PGD 64
|
#define PTRS_PER_PGD 64
|
||||||
|
|
||||||
|
#define __PAGETABLE_PUD_FOLDED
|
||||||
#define PUD_SHIFT 26
|
#define PUD_SHIFT 26
|
||||||
#define PTRS_PER_PUD 1
|
#define PTRS_PER_PUD 1
|
||||||
#define PUD_SIZE (1UL << PUD_SHIFT)
|
#define PUD_SIZE (1UL << PUD_SHIFT)
|
||||||
#define PUD_MASK (~(PUD_SIZE - 1))
|
#define PUD_MASK (~(PUD_SIZE - 1))
|
||||||
#define PUE_SIZE 256
|
#define PUE_SIZE 256
|
||||||
|
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PMD_SHIFT 26
|
#define PMD_SHIFT 26
|
||||||
#define PMD_SIZE (1UL << PMD_SHIFT)
|
#define PMD_SIZE (1UL << PMD_SHIFT)
|
||||||
#define PMD_MASK (~(PMD_SIZE - 1))
|
#define PMD_MASK (~(PMD_SIZE - 1))
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
* the M32R is two-level, so we don't really have any
|
* the M32R is two-level, so we don't really have any
|
||||||
* PMD directory physically.
|
* PMD directory physically.
|
||||||
*/
|
*/
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PMD_SHIFT 22
|
#define PMD_SHIFT 22
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
|
|
||||||
|
|
|
@ -54,10 +54,12 @@
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_SUN3
|
#ifdef CONFIG_SUN3
|
||||||
#define PTRS_PER_PTE 16
|
#define PTRS_PER_PTE 16
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
#define PTRS_PER_PGD 2048
|
#define PTRS_PER_PGD 2048
|
||||||
#elif defined(CONFIG_COLDFIRE)
|
#elif defined(CONFIG_COLDFIRE)
|
||||||
#define PTRS_PER_PTE 512
|
#define PTRS_PER_PTE 512
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
#define PTRS_PER_PGD 1024
|
#define PTRS_PER_PGD 1024
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -149,8 +149,8 @@ extern void exit_thread(void);
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.kernel_context->CurrPC)
|
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ctx.CurrPC)
|
||||||
#define KSTK_ESP(tsk) ((tsk)->thread.kernel_context->AX[0].U0)
|
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->ctx.AX[0].U0)
|
||||||
|
|
||||||
#define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0)
|
#define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0)
|
||||||
|
|
||||||
|
|
|
@ -216,6 +216,7 @@ int kvm_mips_host_tlb_write(struct kvm_vcpu *vcpu, unsigned long entryhi,
|
||||||
if (idx > current_cpu_data.tlbsize) {
|
if (idx > current_cpu_data.tlbsize) {
|
||||||
kvm_err("%s: Invalid Index: %d\n", __func__, idx);
|
kvm_err("%s: Invalid Index: %d\n", __func__, idx);
|
||||||
kvm_mips_dump_host_tlbs();
|
kvm_mips_dump_host_tlbs();
|
||||||
|
local_irq_restore(flags);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,18 +24,18 @@ TRACE_EVENT(kvm_exit,
|
||||||
TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
|
TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
|
||||||
TP_ARGS(vcpu, reason),
|
TP_ARGS(vcpu, reason),
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct kvm_vcpu *, vcpu)
|
__field(unsigned long, pc)
|
||||||
__field(unsigned int, reason)
|
__field(unsigned int, reason)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->vcpu = vcpu;
|
__entry->pc = vcpu->arch.pc;
|
||||||
__entry->reason = reason;
|
__entry->reason = reason;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("[%s]PC: 0x%08lx",
|
TP_printk("[%s]PC: 0x%08lx",
|
||||||
kvm_mips_exit_types_str[__entry->reason],
|
kvm_mips_exit_types_str[__entry->reason],
|
||||||
__entry->vcpu->arch.pc)
|
__entry->pc)
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif /* _TRACE_KVM_H */
|
#endif /* _TRACE_KVM_H */
|
||||||
|
|
|
@ -56,7 +56,9 @@ extern void paging_init(void);
|
||||||
#define PGDIR_SHIFT 22
|
#define PGDIR_SHIFT 22
|
||||||
#define PTRS_PER_PGD 1024
|
#define PTRS_PER_PGD 1024
|
||||||
#define PTRS_PER_PUD 1 /* we don't really have any PUD physically */
|
#define PTRS_PER_PUD 1 /* we don't really have any PUD physically */
|
||||||
|
#define __PAGETABLE_PUD_FOLDED
|
||||||
#define PTRS_PER_PMD 1 /* we don't really have any PMD physically */
|
#define PTRS_PER_PMD 1 /* we don't really have any PMD physically */
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PTRS_PER_PTE 1024
|
#define PTRS_PER_PTE 1024
|
||||||
|
|
||||||
#define PGD_SIZE PAGE_SIZE
|
#define PGD_SIZE PAGE_SIZE
|
||||||
|
|
|
@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
|
||||||
#if PT_NLEVELS == 3
|
#if PT_NLEVELS == 3
|
||||||
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
|
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
|
||||||
#else
|
#else
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define BITS_PER_PMD 0
|
#define BITS_PER_PMD 0
|
||||||
#endif
|
#endif
|
||||||
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
||||||
|
|
|
@ -113,6 +113,7 @@ extern void iommu_register_group(struct iommu_table *tbl,
|
||||||
int pci_domain_number, unsigned long pe_num);
|
int pci_domain_number, unsigned long pe_num);
|
||||||
extern int iommu_add_device(struct device *dev);
|
extern int iommu_add_device(struct device *dev);
|
||||||
extern void iommu_del_device(struct device *dev);
|
extern void iommu_del_device(struct device *dev);
|
||||||
|
extern int __init tce_iommu_bus_notifier_init(void);
|
||||||
#else
|
#else
|
||||||
static inline void iommu_register_group(struct iommu_table *tbl,
|
static inline void iommu_register_group(struct iommu_table *tbl,
|
||||||
int pci_domain_number,
|
int pci_domain_number,
|
||||||
|
@ -128,6 +129,11 @@ static inline int iommu_add_device(struct device *dev)
|
||||||
static inline void iommu_del_device(struct device *dev)
|
static inline void iommu_del_device(struct device *dev)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int __init tce_iommu_bus_notifier_init(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* !CONFIG_IOMMU_API */
|
#endif /* !CONFIG_IOMMU_API */
|
||||||
|
|
||||||
static inline void set_iommu_table_base_and_group(struct device *dev,
|
static inline void set_iommu_table_base_and_group(struct device *dev,
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef _ASM_POWERPC_IRQ_WORK_H
|
||||||
|
#define _ASM_POWERPC_IRQ_WORK_H
|
||||||
|
|
||||||
|
static inline bool arch_irq_work_has_interrupt(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _ASM_POWERPC_IRQ_WORK_H */
|
|
@ -1175,4 +1175,30 @@ void iommu_del_device(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(iommu_del_device);
|
EXPORT_SYMBOL_GPL(iommu_del_device);
|
||||||
|
|
||||||
|
static int tce_iommu_bus_notifier(struct notifier_block *nb,
|
||||||
|
unsigned long action, void *data)
|
||||||
|
{
|
||||||
|
struct device *dev = data;
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case BUS_NOTIFY_ADD_DEVICE:
|
||||||
|
return iommu_add_device(dev);
|
||||||
|
case BUS_NOTIFY_DEL_DEVICE:
|
||||||
|
if (dev->iommu_group)
|
||||||
|
iommu_del_device(dev);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct notifier_block tce_iommu_bus_nb = {
|
||||||
|
.notifier_call = tce_iommu_bus_notifier,
|
||||||
|
};
|
||||||
|
|
||||||
|
int __init tce_iommu_bus_notifier_init(void)
|
||||||
|
{
|
||||||
|
bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_IOMMU_API */
|
#endif /* CONFIG_IOMMU_API */
|
||||||
|
|
|
@ -541,8 +541,8 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||||
if (smp_ops->give_timebase)
|
if (smp_ops->give_timebase)
|
||||||
smp_ops->give_timebase();
|
smp_ops->give_timebase();
|
||||||
|
|
||||||
/* Wait until cpu puts itself in the online map */
|
/* Wait until cpu puts itself in the online & active maps */
|
||||||
while (!cpu_online(cpu))
|
while (!cpu_online(cpu) || !cpu_active(cpu))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -836,30 +836,4 @@ void __init pnv_pci_init(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tce_iommu_bus_notifier(struct notifier_block *nb,
|
|
||||||
unsigned long action, void *data)
|
|
||||||
{
|
|
||||||
struct device *dev = data;
|
|
||||||
|
|
||||||
switch (action) {
|
|
||||||
case BUS_NOTIFY_ADD_DEVICE:
|
|
||||||
return iommu_add_device(dev);
|
|
||||||
case BUS_NOTIFY_DEL_DEVICE:
|
|
||||||
if (dev->iommu_group)
|
|
||||||
iommu_del_device(dev);
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct notifier_block tce_iommu_bus_nb = {
|
|
||||||
.notifier_call = tce_iommu_bus_notifier,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init tce_iommu_bus_notifier_init(void)
|
|
||||||
{
|
|
||||||
bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
machine_subsys_initcall_sync(powernv, tce_iommu_bus_notifier_init);
|
machine_subsys_initcall_sync(powernv, tce_iommu_bus_notifier_init);
|
||||||
|
|
|
@ -1340,3 +1340,5 @@ static int __init disable_multitce(char *str)
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("multitce=", disable_multitce);
|
__setup("multitce=", disable_multitce);
|
||||||
|
|
||||||
|
machine_subsys_initcall_sync(pseries, tce_iommu_bus_notifier_init);
|
||||||
|
|
|
@ -91,7 +91,9 @@ extern unsigned long zero_page_mask;
|
||||||
*/
|
*/
|
||||||
#define PTRS_PER_PTE 256
|
#define PTRS_PER_PTE 256
|
||||||
#ifndef CONFIG_64BIT
|
#ifndef CONFIG_64BIT
|
||||||
|
#define __PAGETABLE_PUD_FOLDED
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
|
#define __PAGETABLE_PMD_FOLDED
|
||||||
#define PTRS_PER_PUD 1
|
#define PTRS_PER_PUD 1
|
||||||
#else /* CONFIG_64BIT */
|
#else /* CONFIG_64BIT */
|
||||||
#define PTRS_PER_PMD 2048
|
#define PTRS_PER_PMD 2048
|
||||||
|
|
|
@ -499,6 +499,7 @@ config X86_INTEL_QUARK
|
||||||
depends on X86_IO_APIC
|
depends on X86_IO_APIC
|
||||||
select IOSF_MBI
|
select IOSF_MBI
|
||||||
select INTEL_IMR
|
select INTEL_IMR
|
||||||
|
select COMMON_CLK
|
||||||
---help---
|
---help---
|
||||||
Select to include support for Quark X1000 SoC.
|
Select to include support for Quark X1000 SoC.
|
||||||
Say Y here if you have a Quark based system such as the Arduino
|
Say Y here if you have a Quark based system such as the Arduino
|
||||||
|
|
|
@ -82,18 +82,15 @@ static inline int xsave_state_booting(struct xsave_struct *fx, u64 mask)
|
||||||
if (boot_cpu_has(X86_FEATURE_XSAVES))
|
if (boot_cpu_has(X86_FEATURE_XSAVES))
|
||||||
asm volatile("1:"XSAVES"\n\t"
|
asm volatile("1:"XSAVES"\n\t"
|
||||||
"2:\n\t"
|
"2:\n\t"
|
||||||
: : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
xstate_fault
|
||||||
|
: "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
||||||
: "memory");
|
: "memory");
|
||||||
else
|
else
|
||||||
asm volatile("1:"XSAVE"\n\t"
|
asm volatile("1:"XSAVE"\n\t"
|
||||||
"2:\n\t"
|
"2:\n\t"
|
||||||
: : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
xstate_fault
|
||||||
|
: "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
||||||
: "memory");
|
: "memory");
|
||||||
|
|
||||||
asm volatile(xstate_fault
|
|
||||||
: "0" (0)
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,18 +109,15 @@ static inline int xrstor_state_booting(struct xsave_struct *fx, u64 mask)
|
||||||
if (boot_cpu_has(X86_FEATURE_XSAVES))
|
if (boot_cpu_has(X86_FEATURE_XSAVES))
|
||||||
asm volatile("1:"XRSTORS"\n\t"
|
asm volatile("1:"XRSTORS"\n\t"
|
||||||
"2:\n\t"
|
"2:\n\t"
|
||||||
: : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
xstate_fault
|
||||||
|
: "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
||||||
: "memory");
|
: "memory");
|
||||||
else
|
else
|
||||||
asm volatile("1:"XRSTOR"\n\t"
|
asm volatile("1:"XRSTOR"\n\t"
|
||||||
"2:\n\t"
|
"2:\n\t"
|
||||||
: : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
xstate_fault
|
||||||
|
: "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
||||||
: "memory");
|
: "memory");
|
||||||
|
|
||||||
asm volatile(xstate_fault
|
|
||||||
: "0" (0)
|
|
||||||
: "memory");
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,9 +143,9 @@ static inline int xsave_state(struct xsave_struct *fx, u64 mask)
|
||||||
*/
|
*/
|
||||||
alternative_input_2(
|
alternative_input_2(
|
||||||
"1:"XSAVE,
|
"1:"XSAVE,
|
||||||
"1:"XSAVEOPT,
|
XSAVEOPT,
|
||||||
X86_FEATURE_XSAVEOPT,
|
X86_FEATURE_XSAVEOPT,
|
||||||
"1:"XSAVES,
|
XSAVES,
|
||||||
X86_FEATURE_XSAVES,
|
X86_FEATURE_XSAVES,
|
||||||
[fx] "D" (fx), "a" (lmask), "d" (hmask) :
|
[fx] "D" (fx), "a" (lmask), "d" (hmask) :
|
||||||
"memory");
|
"memory");
|
||||||
|
@ -178,7 +172,7 @@ static inline int xrstor_state(struct xsave_struct *fx, u64 mask)
|
||||||
*/
|
*/
|
||||||
alternative_input(
|
alternative_input(
|
||||||
"1: " XRSTOR,
|
"1: " XRSTOR,
|
||||||
"1: " XRSTORS,
|
XRSTORS,
|
||||||
X86_FEATURE_XSAVES,
|
X86_FEATURE_XSAVES,
|
||||||
"D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
"D" (fx), "m" (*fx), "a" (lmask), "d" (hmask)
|
||||||
: "memory");
|
: "memory");
|
||||||
|
|
|
@ -1396,6 +1396,12 @@ void cpu_init(void)
|
||||||
|
|
||||||
wait_for_master_cpu(cpu);
|
wait_for_master_cpu(cpu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the CR4 shadow before doing anything that could
|
||||||
|
* try to read it.
|
||||||
|
*/
|
||||||
|
cr4_init_shadow();
|
||||||
|
|
||||||
show_ucode_info_early();
|
show_ucode_info_early();
|
||||||
|
|
||||||
printk(KERN_INFO "Initializing CPU#%d\n", cpu);
|
printk(KERN_INFO "Initializing CPU#%d\n", cpu);
|
||||||
|
|
|
@ -565,8 +565,8 @@ static const struct _tlb_table intel_tlb_table[] = {
|
||||||
{ 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" },
|
{ 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" },
|
||||||
{ 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" },
|
{ 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" },
|
||||||
{ 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" },
|
{ 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" },
|
||||||
{ 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set ssociative" },
|
{ 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set associative" },
|
||||||
{ 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set ssociative" },
|
{ 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set associative" },
|
||||||
{ 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" },
|
{ 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" },
|
||||||
{ 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" },
|
{ 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" },
|
||||||
{ 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" },
|
{ 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" },
|
||||||
|
|
|
@ -982,6 +982,9 @@ ENTRY(xen_hypervisor_callback)
|
||||||
ENTRY(xen_do_upcall)
|
ENTRY(xen_do_upcall)
|
||||||
1: mov %esp, %eax
|
1: mov %esp, %eax
|
||||||
call xen_evtchn_do_upcall
|
call xen_evtchn_do_upcall
|
||||||
|
#ifndef CONFIG_PREEMPT
|
||||||
|
call xen_maybe_preempt_hcall
|
||||||
|
#endif
|
||||||
jmp ret_from_intr
|
jmp ret_from_intr
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
ENDPROC(xen_hypervisor_callback)
|
ENDPROC(xen_hypervisor_callback)
|
||||||
|
|
|
@ -269,11 +269,14 @@ ENTRY(ret_from_fork)
|
||||||
testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
|
testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
|
||||||
jz 1f
|
jz 1f
|
||||||
|
|
||||||
testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET
|
/*
|
||||||
jnz int_ret_from_sys_call
|
* By the time we get here, we have no idea whether our pt_regs,
|
||||||
|
* ti flags, and ti status came from the 64-bit SYSCALL fast path,
|
||||||
RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET
|
* the slow path, or one of the ia32entry paths.
|
||||||
jmp ret_from_sys_call # go to the SYSRET fastpath
|
* Use int_ret_from_sys_call to return, since it can safely handle
|
||||||
|
* all of the above.
|
||||||
|
*/
|
||||||
|
jmp int_ret_from_sys_call
|
||||||
|
|
||||||
1:
|
1:
|
||||||
subq $REST_SKIP, %rsp # leave space for volatiles
|
subq $REST_SKIP, %rsp # leave space for volatiles
|
||||||
|
@ -1208,6 +1211,9 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
|
||||||
popq %rsp
|
popq %rsp
|
||||||
CFI_DEF_CFA_REGISTER rsp
|
CFI_DEF_CFA_REGISTER rsp
|
||||||
decl PER_CPU_VAR(irq_count)
|
decl PER_CPU_VAR(irq_count)
|
||||||
|
#ifndef CONFIG_PREEMPT
|
||||||
|
call xen_maybe_preempt_hcall
|
||||||
|
#endif
|
||||||
jmp error_exit
|
jmp error_exit
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
END(xen_do_hypervisor_callback)
|
END(xen_do_hypervisor_callback)
|
||||||
|
|
|
@ -223,27 +223,48 @@ static unsigned long
|
||||||
__recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
|
__recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
|
||||||
{
|
{
|
||||||
struct kprobe *kp;
|
struct kprobe *kp;
|
||||||
|
unsigned long faddr;
|
||||||
|
|
||||||
kp = get_kprobe((void *)addr);
|
kp = get_kprobe((void *)addr);
|
||||||
/* There is no probe, return original address */
|
faddr = ftrace_location(addr);
|
||||||
if (!kp)
|
/*
|
||||||
|
* Addresses inside the ftrace location are refused by
|
||||||
|
* arch_check_ftrace_location(). Something went terribly wrong
|
||||||
|
* if such an address is checked here.
|
||||||
|
*/
|
||||||
|
if (WARN_ON(faddr && faddr != addr))
|
||||||
|
return 0UL;
|
||||||
|
/*
|
||||||
|
* Use the current code if it is not modified by Kprobe
|
||||||
|
* and it cannot be modified by ftrace.
|
||||||
|
*/
|
||||||
|
if (!kp && !faddr)
|
||||||
return addr;
|
return addr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Basically, kp->ainsn.insn has an original instruction.
|
* Basically, kp->ainsn.insn has an original instruction.
|
||||||
* However, RIP-relative instruction can not do single-stepping
|
* However, RIP-relative instruction can not do single-stepping
|
||||||
* at different place, __copy_instruction() tweaks the displacement of
|
* at different place, __copy_instruction() tweaks the displacement of
|
||||||
* that instruction. In that case, we can't recover the instruction
|
* that instruction. In that case, we can't recover the instruction
|
||||||
* from the kp->ainsn.insn.
|
* from the kp->ainsn.insn.
|
||||||
*
|
*
|
||||||
* On the other hand, kp->opcode has a copy of the first byte of
|
* On the other hand, in case on normal Kprobe, kp->opcode has a copy
|
||||||
* the probed instruction, which is overwritten by int3. And
|
* of the first byte of the probed instruction, which is overwritten
|
||||||
* the instruction at kp->addr is not modified by kprobes except
|
* by int3. And the instruction at kp->addr is not modified by kprobes
|
||||||
* for the first byte, we can recover the original instruction
|
* except for the first byte, we can recover the original instruction
|
||||||
* from it and kp->opcode.
|
* from it and kp->opcode.
|
||||||
|
*
|
||||||
|
* In case of Kprobes using ftrace, we do not have a copy of
|
||||||
|
* the original instruction. In fact, the ftrace location might
|
||||||
|
* be modified at anytime and even could be in an inconsistent state.
|
||||||
|
* Fortunately, we know that the original code is the ideal 5-byte
|
||||||
|
* long NOP.
|
||||||
*/
|
*/
|
||||||
memcpy(buf, kp->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
memcpy(buf, (void *)addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
||||||
buf[0] = kp->opcode;
|
if (faddr)
|
||||||
|
memcpy(buf, ideal_nops[NOP_ATOMIC5], 5);
|
||||||
|
else
|
||||||
|
buf[0] = kp->opcode;
|
||||||
return (unsigned long)buf;
|
return (unsigned long)buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,6 +272,7 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
|
||||||
* Recover the probed instruction at addr for further analysis.
|
* Recover the probed instruction at addr for further analysis.
|
||||||
* Caller must lock kprobes by kprobe_mutex, or disable preemption
|
* Caller must lock kprobes by kprobe_mutex, or disable preemption
|
||||||
* for preventing to release referencing kprobes.
|
* for preventing to release referencing kprobes.
|
||||||
|
* Returns zero if the instruction can not get recovered.
|
||||||
*/
|
*/
|
||||||
unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr)
|
unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr)
|
||||||
{
|
{
|
||||||
|
@ -285,6 +307,8 @@ static int can_probe(unsigned long paddr)
|
||||||
* normally used, we just go through if there is no kprobe.
|
* normally used, we just go through if there is no kprobe.
|
||||||
*/
|
*/
|
||||||
__addr = recover_probed_instruction(buf, addr);
|
__addr = recover_probed_instruction(buf, addr);
|
||||||
|
if (!__addr)
|
||||||
|
return 0;
|
||||||
kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE);
|
kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE);
|
||||||
insn_get_length(&insn);
|
insn_get_length(&insn);
|
||||||
|
|
||||||
|
@ -333,6 +357,8 @@ int __copy_instruction(u8 *dest, u8 *src)
|
||||||
unsigned long recovered_insn =
|
unsigned long recovered_insn =
|
||||||
recover_probed_instruction(buf, (unsigned long)src);
|
recover_probed_instruction(buf, (unsigned long)src);
|
||||||
|
|
||||||
|
if (!recovered_insn)
|
||||||
|
return 0;
|
||||||
kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
|
kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
|
||||||
insn_get_length(&insn);
|
insn_get_length(&insn);
|
||||||
/* Another subsystem puts a breakpoint, failed to recover */
|
/* Another subsystem puts a breakpoint, failed to recover */
|
||||||
|
|
|
@ -259,6 +259,8 @@ static int can_optimize(unsigned long paddr)
|
||||||
*/
|
*/
|
||||||
return 0;
|
return 0;
|
||||||
recovered_insn = recover_probed_instruction(buf, addr);
|
recovered_insn = recover_probed_instruction(buf, addr);
|
||||||
|
if (!recovered_insn)
|
||||||
|
return 0;
|
||||||
kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
|
kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
|
||||||
insn_get_length(&insn);
|
insn_get_length(&insn);
|
||||||
/* Another subsystem puts a breakpoint */
|
/* Another subsystem puts a breakpoint */
|
||||||
|
|
|
@ -4950,7 +4950,8 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctxt->dst.orig_val = ctxt->dst.val;
|
/* Copy full 64-bit value for CMPXCHG8B. */
|
||||||
|
ctxt->dst.orig_val64 = ctxt->dst.val64;
|
||||||
|
|
||||||
special_insn:
|
special_insn:
|
||||||
|
|
||||||
|
|
|
@ -1572,7 +1572,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu)
|
||||||
apic_set_reg(apic, APIC_TMR + 0x10 * i, 0);
|
apic_set_reg(apic, APIC_TMR + 0x10 * i, 0);
|
||||||
}
|
}
|
||||||
apic->irr_pending = kvm_apic_vid_enabled(vcpu->kvm);
|
apic->irr_pending = kvm_apic_vid_enabled(vcpu->kvm);
|
||||||
apic->isr_count = kvm_apic_vid_enabled(vcpu->kvm);
|
apic->isr_count = kvm_x86_ops->hwapic_isr_update ? 1 : 0;
|
||||||
apic->highest_isr_cache = -1;
|
apic->highest_isr_cache = -1;
|
||||||
update_divide_count(apic);
|
update_divide_count(apic);
|
||||||
atomic_set(&apic->lapic_timer.pending, 0);
|
atomic_set(&apic->lapic_timer.pending, 0);
|
||||||
|
@ -1782,7 +1782,7 @@ void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu,
|
||||||
update_divide_count(apic);
|
update_divide_count(apic);
|
||||||
start_apic_timer(apic);
|
start_apic_timer(apic);
|
||||||
apic->irr_pending = true;
|
apic->irr_pending = true;
|
||||||
apic->isr_count = kvm_apic_vid_enabled(vcpu->kvm) ?
|
apic->isr_count = kvm_x86_ops->hwapic_isr_update ?
|
||||||
1 : count_vectors(apic->regs + APIC_ISR);
|
1 : count_vectors(apic->regs + APIC_ISR);
|
||||||
apic->highest_isr_cache = -1;
|
apic->highest_isr_cache = -1;
|
||||||
if (kvm_x86_ops->hwapic_irr_update)
|
if (kvm_x86_ops->hwapic_irr_update)
|
||||||
|
|
|
@ -3649,11 +3649,6 @@ static void svm_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void svm_hwapic_isr_update(struct kvm *kvm, int isr)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void svm_sync_pir_to_irr(struct kvm_vcpu *vcpu)
|
static void svm_sync_pir_to_irr(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -4403,7 +4398,6 @@ static struct kvm_x86_ops svm_x86_ops = {
|
||||||
.set_virtual_x2apic_mode = svm_set_virtual_x2apic_mode,
|
.set_virtual_x2apic_mode = svm_set_virtual_x2apic_mode,
|
||||||
.vm_has_apicv = svm_vm_has_apicv,
|
.vm_has_apicv = svm_vm_has_apicv,
|
||||||
.load_eoi_exitmap = svm_load_eoi_exitmap,
|
.load_eoi_exitmap = svm_load_eoi_exitmap,
|
||||||
.hwapic_isr_update = svm_hwapic_isr_update,
|
|
||||||
.sync_pir_to_irr = svm_sync_pir_to_irr,
|
.sync_pir_to_irr = svm_sync_pir_to_irr,
|
||||||
|
|
||||||
.set_tss_addr = svm_set_tss_addr,
|
.set_tss_addr = svm_set_tss_addr,
|
||||||
|
|
|
@ -4367,6 +4367,18 @@ static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
if (vcpu->mode == IN_GUEST_MODE) {
|
||||||
|
apic->send_IPI_mask(get_cpu_mask(vcpu->cpu),
|
||||||
|
POSTED_INTR_VECTOR);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu,
|
static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu,
|
||||||
int vector)
|
int vector)
|
||||||
{
|
{
|
||||||
|
@ -4375,9 +4387,7 @@ static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu,
|
||||||
if (is_guest_mode(vcpu) &&
|
if (is_guest_mode(vcpu) &&
|
||||||
vector == vmx->nested.posted_intr_nv) {
|
vector == vmx->nested.posted_intr_nv) {
|
||||||
/* the PIR and ON have been set by L1. */
|
/* the PIR and ON have been set by L1. */
|
||||||
if (vcpu->mode == IN_GUEST_MODE)
|
kvm_vcpu_trigger_posted_interrupt(vcpu);
|
||||||
apic->send_IPI_mask(get_cpu_mask(vcpu->cpu),
|
|
||||||
POSTED_INTR_VECTOR);
|
|
||||||
/*
|
/*
|
||||||
* If a posted intr is not recognized by hardware,
|
* If a posted intr is not recognized by hardware,
|
||||||
* we will accomplish it in the next vmentry.
|
* we will accomplish it in the next vmentry.
|
||||||
|
@ -4409,12 +4419,7 @@ static void vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu, int vector)
|
||||||
|
|
||||||
r = pi_test_and_set_on(&vmx->pi_desc);
|
r = pi_test_and_set_on(&vmx->pi_desc);
|
||||||
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
||||||
#ifdef CONFIG_SMP
|
if (r || !kvm_vcpu_trigger_posted_interrupt(vcpu))
|
||||||
if (!r && (vcpu->mode == IN_GUEST_MODE))
|
|
||||||
apic->send_IPI_mask(get_cpu_mask(vcpu->cpu),
|
|
||||||
POSTED_INTR_VECTOR);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
kvm_vcpu_kick(vcpu);
|
kvm_vcpu_kick(vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
config LGUEST_GUEST
|
config LGUEST_GUEST
|
||||||
bool "Lguest guest support"
|
bool "Lguest guest support"
|
||||||
depends on X86_32 && PARAVIRT
|
depends on X86_32 && PARAVIRT && PCI
|
||||||
select TTY
|
select TTY
|
||||||
select VIRTUALIZATION
|
select VIRTUALIZATION
|
||||||
select VIRTIO
|
select VIRTIO
|
||||||
|
@ -8,7 +8,7 @@ config LGUEST_GUEST
|
||||||
help
|
help
|
||||||
Lguest is a tiny in-kernel hypervisor. Selecting this will
|
Lguest is a tiny in-kernel hypervisor. Selecting this will
|
||||||
allow your kernel to boot under lguest. This option will increase
|
allow your kernel to boot under lguest. This option will increase
|
||||||
your kernel size by about 6k. If in doubt, say N.
|
your kernel size by about 10k. If in doubt, say N.
|
||||||
|
|
||||||
If you say Y here, make sure you say Y (or M) to the virtio block
|
If you say Y here, make sure you say Y (or M) to the virtio block
|
||||||
and net drivers which lguest needs.
|
and net drivers which lguest needs.
|
||||||
|
|
|
@ -331,7 +331,7 @@ static void probe_pci_root_info(struct pci_root_info *info,
|
||||||
struct list_head *list)
|
struct list_head *list)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct resource_entry *entry;
|
struct resource_entry *entry, *tmp;
|
||||||
|
|
||||||
sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
|
sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
|
||||||
info->bridge = device;
|
info->bridge = device;
|
||||||
|
@ -345,8 +345,13 @@ static void probe_pci_root_info(struct pci_root_info *info,
|
||||||
dev_dbg(&device->dev,
|
dev_dbg(&device->dev,
|
||||||
"no IO and memory resources present in _CRS\n");
|
"no IO and memory resources present in _CRS\n");
|
||||||
else
|
else
|
||||||
resource_list_for_each_entry(entry, list)
|
resource_list_for_each_entry_safe(entry, tmp, list) {
|
||||||
entry->res->name = info->name;
|
if ((entry->res->flags & IORESOURCE_WINDOW) == 0 ||
|
||||||
|
(entry->res->flags & IORESOURCE_DISABLED))
|
||||||
|
resource_list_destroy_entry(entry);
|
||||||
|
else
|
||||||
|
entry->res->name = info->name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
|
||||||
|
|
|
@ -130,7 +130,7 @@ static void intel_mid_arch_setup(void)
|
||||||
intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip]();
|
intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip]();
|
||||||
else {
|
else {
|
||||||
intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL]();
|
intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL]();
|
||||||
pr_info("ARCH: Uknown SoC, assuming PENWELL!\n");
|
pr_info("ARCH: Unknown SoC, assuming PENWELL!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -1070,6 +1070,23 @@ static inline void xen_write_cr8(unsigned long val)
|
||||||
BUG_ON(val);
|
BUG_ON(val);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static u64 xen_read_msr_safe(unsigned int msr, int *err)
|
||||||
|
{
|
||||||
|
u64 val;
|
||||||
|
|
||||||
|
val = native_read_msr_safe(msr, err);
|
||||||
|
switch (msr) {
|
||||||
|
case MSR_IA32_APICBASE:
|
||||||
|
#ifdef CONFIG_X86_X2APIC
|
||||||
|
if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31))))
|
||||||
|
#endif
|
||||||
|
val &= ~X2APIC_ENABLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
|
static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1240,7 +1257,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
|
||||||
|
|
||||||
.wbinvd = native_wbinvd,
|
.wbinvd = native_wbinvd,
|
||||||
|
|
||||||
.read_msr = native_read_msr_safe,
|
.read_msr = xen_read_msr_safe,
|
||||||
.write_msr = xen_write_msr_safe,
|
.write_msr = xen_write_msr_safe,
|
||||||
|
|
||||||
.read_tsc = native_read_tsc,
|
.read_tsc = native_read_tsc,
|
||||||
|
@ -1741,6 +1758,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
i386_start_kernel();
|
i386_start_kernel();
|
||||||
#else
|
#else
|
||||||
|
cr4_init_shadow(); /* 32b kernel does this in i386_start_kernel() */
|
||||||
x86_64_start_reservations((char *)__pa_symbol(&boot_params));
|
x86_64_start_reservations((char *)__pa_symbol(&boot_params));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,8 +42,10 @@ static bool acpi_dev_resource_len_valid(u64 start, u64 end, u64 len, bool io)
|
||||||
* CHECKME: len might be required to check versus a minimum
|
* CHECKME: len might be required to check versus a minimum
|
||||||
* length as well. 1 for io is fine, but for memory it does
|
* length as well. 1 for io is fine, but for memory it does
|
||||||
* not make any sense at all.
|
* not make any sense at all.
|
||||||
|
* Note: some BIOSes report incorrect length for ACPI address space
|
||||||
|
* descriptor, so remove check of 'reslen == len' to avoid regression.
|
||||||
*/
|
*/
|
||||||
if (len && reslen && reslen == len && start <= end)
|
if (len && reslen && start <= end)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
pr_debug("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n",
|
pr_debug("ACPI: invalid or unassigned resource %s [%016llx - %016llx] length [%016llx]\n",
|
||||||
|
|
|
@ -2110,7 +2110,8 @@ static int __init intel_opregion_present(void)
|
||||||
|
|
||||||
int acpi_video_register(void)
|
int acpi_video_register(void)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int ret;
|
||||||
|
|
||||||
if (register_count) {
|
if (register_count) {
|
||||||
/*
|
/*
|
||||||
* if the function of acpi_video_register is already called,
|
* if the function of acpi_video_register is already called,
|
||||||
|
@ -2122,9 +2123,9 @@ int acpi_video_register(void)
|
||||||
mutex_init(&video_list_lock);
|
mutex_init(&video_list_lock);
|
||||||
INIT_LIST_HEAD(&video_bus_head);
|
INIT_LIST_HEAD(&video_bus_head);
|
||||||
|
|
||||||
result = acpi_bus_register_driver(&acpi_video_bus);
|
ret = acpi_bus_register_driver(&acpi_video_bus);
|
||||||
if (result < 0)
|
if (ret)
|
||||||
return -ENODEV;
|
return ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When the acpi_video_bus is loaded successfully, increase
|
* When the acpi_video_bus is loaded successfully, increase
|
||||||
|
@ -2176,6 +2177,17 @@ EXPORT_SYMBOL(acpi_video_unregister_backlight);
|
||||||
|
|
||||||
static int __init acpi_video_init(void)
|
static int __init acpi_video_init(void)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Let the module load even if ACPI is disabled (e.g. due to
|
||||||
|
* a broken BIOS) so that i915.ko can still be loaded on such
|
||||||
|
* old systems without an AcpiOpRegion.
|
||||||
|
*
|
||||||
|
* acpi_video_register() will report -ENODEV later as well due
|
||||||
|
* to acpi_disabled when i915.ko tries to register itself afterwards.
|
||||||
|
*/
|
||||||
|
if (acpi_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
dmi_check_system(video_dmi_table);
|
dmi_check_system(video_dmi_table);
|
||||||
|
|
||||||
if (intel_opregion_present())
|
if (intel_opregion_present())
|
||||||
|
|
|
@ -551,7 +551,6 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
|
||||||
{
|
{
|
||||||
void *page_addr;
|
void *page_addr;
|
||||||
unsigned long user_page_addr;
|
unsigned long user_page_addr;
|
||||||
struct vm_struct tmp_area;
|
|
||||||
struct page **page;
|
struct page **page;
|
||||||
struct mm_struct *mm;
|
struct mm_struct *mm;
|
||||||
|
|
||||||
|
@ -600,10 +599,11 @@ static int binder_update_page_range(struct binder_proc *proc, int allocate,
|
||||||
proc->pid, page_addr);
|
proc->pid, page_addr);
|
||||||
goto err_alloc_page_failed;
|
goto err_alloc_page_failed;
|
||||||
}
|
}
|
||||||
tmp_area.addr = page_addr;
|
ret = map_kernel_range_noflush((unsigned long)page_addr,
|
||||||
tmp_area.size = PAGE_SIZE + PAGE_SIZE /* guard page? */;
|
PAGE_SIZE, PAGE_KERNEL, page);
|
||||||
ret = map_vm_area(&tmp_area, PAGE_KERNEL, page);
|
flush_cache_vmap((unsigned long)page_addr,
|
||||||
if (ret) {
|
(unsigned long)page_addr + PAGE_SIZE);
|
||||||
|
if (ret != 1) {
|
||||||
pr_err("%d: binder_alloc_buf failed to map page at %p in kernel\n",
|
pr_err("%d: binder_alloc_buf failed to map page at %p in kernel\n",
|
||||||
proc->pid, page_addr);
|
proc->pid, page_addr);
|
||||||
goto err_map_kernel_failed;
|
goto err_map_kernel_failed;
|
||||||
|
|
|
@ -2242,7 +2242,7 @@ static void rtpm_status_str(struct seq_file *s, struct device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pm_genpd_summary_one(struct seq_file *s,
|
static int pm_genpd_summary_one(struct seq_file *s,
|
||||||
struct generic_pm_domain *gpd)
|
struct generic_pm_domain *genpd)
|
||||||
{
|
{
|
||||||
static const char * const status_lookup[] = {
|
static const char * const status_lookup[] = {
|
||||||
[GPD_STATE_ACTIVE] = "on",
|
[GPD_STATE_ACTIVE] = "on",
|
||||||
|
@ -2256,26 +2256,26 @@ static int pm_genpd_summary_one(struct seq_file *s,
|
||||||
struct gpd_link *link;
|
struct gpd_link *link;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = mutex_lock_interruptible(&gpd->lock);
|
ret = mutex_lock_interruptible(&genpd->lock);
|
||||||
if (ret)
|
if (ret)
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
|
|
||||||
if (WARN_ON(gpd->status >= ARRAY_SIZE(status_lookup)))
|
if (WARN_ON(genpd->status >= ARRAY_SIZE(status_lookup)))
|
||||||
goto exit;
|
goto exit;
|
||||||
seq_printf(s, "%-30s %-15s ", gpd->name, status_lookup[gpd->status]);
|
seq_printf(s, "%-30s %-15s ", genpd->name, status_lookup[genpd->status]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Modifications on the list require holding locks on both
|
* Modifications on the list require holding locks on both
|
||||||
* master and slave, so we are safe.
|
* master and slave, so we are safe.
|
||||||
* Also gpd->name is immutable.
|
* Also genpd->name is immutable.
|
||||||
*/
|
*/
|
||||||
list_for_each_entry(link, &gpd->master_links, master_node) {
|
list_for_each_entry(link, &genpd->master_links, master_node) {
|
||||||
seq_printf(s, "%s", link->slave->name);
|
seq_printf(s, "%s", link->slave->name);
|
||||||
if (!list_is_last(&link->master_node, &gpd->master_links))
|
if (!list_is_last(&link->master_node, &genpd->master_links))
|
||||||
seq_puts(s, ", ");
|
seq_puts(s, ", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each_entry(pm_data, &gpd->dev_list, list_node) {
|
list_for_each_entry(pm_data, &genpd->dev_list, list_node) {
|
||||||
kobj_path = kobject_get_path(&pm_data->dev->kobj, GFP_KERNEL);
|
kobj_path = kobject_get_path(&pm_data->dev->kobj, GFP_KERNEL);
|
||||||
if (kobj_path == NULL)
|
if (kobj_path == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
@ -2287,14 +2287,14 @@ static int pm_genpd_summary_one(struct seq_file *s,
|
||||||
|
|
||||||
seq_puts(s, "\n");
|
seq_puts(s, "\n");
|
||||||
exit:
|
exit:
|
||||||
mutex_unlock(&gpd->lock);
|
mutex_unlock(&genpd->lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pm_genpd_summary_show(struct seq_file *s, void *data)
|
static int pm_genpd_summary_show(struct seq_file *s, void *data)
|
||||||
{
|
{
|
||||||
struct generic_pm_domain *gpd;
|
struct generic_pm_domain *genpd;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
seq_puts(s, " domain status slaves\n");
|
seq_puts(s, " domain status slaves\n");
|
||||||
|
@ -2305,8 +2305,8 @@ static int pm_genpd_summary_show(struct seq_file *s, void *data)
|
||||||
if (ret)
|
if (ret)
|
||||||
return -ERESTARTSYS;
|
return -ERESTARTSYS;
|
||||||
|
|
||||||
list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
|
list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
|
||||||
ret = pm_genpd_summary_one(s, gpd);
|
ret = pm_genpd_summary_one(s, genpd);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -730,6 +730,7 @@ void pm_system_wakeup(void)
|
||||||
pm_abort_suspend = true;
|
pm_abort_suspend = true;
|
||||||
freeze_wake();
|
freeze_wake();
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(pm_system_wakeup);
|
||||||
|
|
||||||
void pm_wakeup_clear(void)
|
void pm_wakeup_clear(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -482,6 +482,7 @@ static int nvme_error_status(u16 status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_INTEGRITY
|
||||||
static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi)
|
static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi)
|
||||||
{
|
{
|
||||||
if (be32_to_cpu(pi->ref_tag) == v)
|
if (be32_to_cpu(pi->ref_tag) == v)
|
||||||
|
@ -538,6 +539,58 @@ static void nvme_dif_remap(struct request *req,
|
||||||
kunmap_atomic(pmap);
|
kunmap_atomic(pmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nvme_noop_verify(struct blk_integrity_iter *iter)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int nvme_noop_generate(struct blk_integrity_iter *iter)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct blk_integrity nvme_meta_noop = {
|
||||||
|
.name = "NVME_META_NOOP",
|
||||||
|
.generate_fn = nvme_noop_generate,
|
||||||
|
.verify_fn = nvme_noop_verify,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void nvme_init_integrity(struct nvme_ns *ns)
|
||||||
|
{
|
||||||
|
struct blk_integrity integrity;
|
||||||
|
|
||||||
|
switch (ns->pi_type) {
|
||||||
|
case NVME_NS_DPS_PI_TYPE3:
|
||||||
|
integrity = t10_pi_type3_crc;
|
||||||
|
break;
|
||||||
|
case NVME_NS_DPS_PI_TYPE1:
|
||||||
|
case NVME_NS_DPS_PI_TYPE2:
|
||||||
|
integrity = t10_pi_type1_crc;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
integrity = nvme_meta_noop;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
integrity.tuple_size = ns->ms;
|
||||||
|
blk_integrity_register(ns->disk, &integrity);
|
||||||
|
blk_queue_max_integrity_segments(ns->queue, 1);
|
||||||
|
}
|
||||||
|
#else /* CONFIG_BLK_DEV_INTEGRITY */
|
||||||
|
static void nvme_dif_remap(struct request *req,
|
||||||
|
void (*dif_swap)(u32 p, u32 v, struct t10_pi_tuple *pi))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void nvme_dif_prep(u32 p, u32 v, struct t10_pi_tuple *pi)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void nvme_dif_complete(u32 p, u32 v, struct t10_pi_tuple *pi)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static void nvme_init_integrity(struct nvme_ns *ns)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void req_completion(struct nvme_queue *nvmeq, void *ctx,
|
static void req_completion(struct nvme_queue *nvmeq, void *ctx,
|
||||||
struct nvme_completion *cqe)
|
struct nvme_completion *cqe)
|
||||||
{
|
{
|
||||||
|
@ -1959,43 +2012,6 @@ static void nvme_config_discard(struct nvme_ns *ns)
|
||||||
queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue);
|
queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nvme_noop_verify(struct blk_integrity_iter *iter)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nvme_noop_generate(struct blk_integrity_iter *iter)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct blk_integrity nvme_meta_noop = {
|
|
||||||
.name = "NVME_META_NOOP",
|
|
||||||
.generate_fn = nvme_noop_generate,
|
|
||||||
.verify_fn = nvme_noop_verify,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void nvme_init_integrity(struct nvme_ns *ns)
|
|
||||||
{
|
|
||||||
struct blk_integrity integrity;
|
|
||||||
|
|
||||||
switch (ns->pi_type) {
|
|
||||||
case NVME_NS_DPS_PI_TYPE3:
|
|
||||||
integrity = t10_pi_type3_crc;
|
|
||||||
break;
|
|
||||||
case NVME_NS_DPS_PI_TYPE1:
|
|
||||||
case NVME_NS_DPS_PI_TYPE2:
|
|
||||||
integrity = t10_pi_type1_crc;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
integrity = nvme_meta_noop;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
integrity.tuple_size = ns->ms;
|
|
||||||
blk_integrity_register(ns->disk, &integrity);
|
|
||||||
blk_queue_max_integrity_segments(ns->queue, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nvme_revalidate_disk(struct gendisk *disk)
|
static int nvme_revalidate_disk(struct gendisk *disk)
|
||||||
{
|
{
|
||||||
struct nvme_ns *ns = disk->private_data;
|
struct nvme_ns *ns = disk->private_data;
|
||||||
|
@ -2036,7 +2052,8 @@ static int nvme_revalidate_disk(struct gendisk *disk)
|
||||||
pi_type = ns->ms == sizeof(struct t10_pi_tuple) ?
|
pi_type = ns->ms == sizeof(struct t10_pi_tuple) ?
|
||||||
id->dps & NVME_NS_DPS_PI_MASK : 0;
|
id->dps & NVME_NS_DPS_PI_MASK : 0;
|
||||||
|
|
||||||
if (disk->integrity && (ns->pi_type != pi_type || ns->ms != old_ms ||
|
if (blk_get_integrity(disk) && (ns->pi_type != pi_type ||
|
||||||
|
ns->ms != old_ms ||
|
||||||
bs != queue_logical_block_size(disk->queue) ||
|
bs != queue_logical_block_size(disk->queue) ||
|
||||||
(ns->ms && id->flbas & NVME_NS_FLBAS_META_EXT)))
|
(ns->ms && id->flbas & NVME_NS_FLBAS_META_EXT)))
|
||||||
blk_integrity_unregister(disk);
|
blk_integrity_unregister(disk);
|
||||||
|
@ -2044,11 +2061,11 @@ static int nvme_revalidate_disk(struct gendisk *disk)
|
||||||
ns->pi_type = pi_type;
|
ns->pi_type = pi_type;
|
||||||
blk_queue_logical_block_size(ns->queue, bs);
|
blk_queue_logical_block_size(ns->queue, bs);
|
||||||
|
|
||||||
if (ns->ms && !disk->integrity && (disk->flags & GENHD_FL_UP) &&
|
if (ns->ms && !blk_get_integrity(disk) && (disk->flags & GENHD_FL_UP) &&
|
||||||
!(id->flbas & NVME_NS_FLBAS_META_EXT))
|
!(id->flbas & NVME_NS_FLBAS_META_EXT))
|
||||||
nvme_init_integrity(ns);
|
nvme_init_integrity(ns);
|
||||||
|
|
||||||
if (id->ncap == 0 || (ns->ms && !disk->integrity))
|
if (id->ncap == 0 || (ns->ms && !blk_get_integrity(disk)))
|
||||||
set_capacity(disk, 0);
|
set_capacity(disk, 0);
|
||||||
else
|
else
|
||||||
set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));
|
set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));
|
||||||
|
@ -2652,7 +2669,7 @@ static void nvme_dev_remove(struct nvme_dev *dev)
|
||||||
|
|
||||||
list_for_each_entry(ns, &dev->namespaces, list) {
|
list_for_each_entry(ns, &dev->namespaces, list) {
|
||||||
if (ns->disk->flags & GENHD_FL_UP) {
|
if (ns->disk->flags & GENHD_FL_UP) {
|
||||||
if (ns->disk->integrity)
|
if (blk_get_integrity(ns->disk))
|
||||||
blk_integrity_unregister(ns->disk);
|
blk_integrity_unregister(ns->disk);
|
||||||
del_gendisk(ns->disk);
|
del_gendisk(ns->disk);
|
||||||
}
|
}
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче