mirror of
https://github.com/Qortal/Brooklyn.git
synced 2025-02-01 07:42:18 +00:00
Massive update....
* Is there a moose on the loose? * Yes! There is a moose on the loose ! * His name is Seany
This commit is contained in:
parent
c7576e53f8
commit
f01da3e636
@ -228,6 +228,23 @@ before posting to the mailing list. The patchwork build bot instance
|
|||||||
gets overloaded very easily and netdev@vger really doesn't need more
|
gets overloaded very easily and netdev@vger really doesn't need more
|
||||||
traffic if we can help it.
|
traffic if we can help it.
|
||||||
|
|
||||||
|
netdevsim is great, can I extend it for my out-of-tree tests?
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
No, `netdevsim` is a test vehicle solely for upstream tests.
|
||||||
|
(Please add your tests under tools/testing/selftests/.)
|
||||||
|
|
||||||
|
We also give no guarantees that `netdevsim` won't change in the future
|
||||||
|
in a way which would break what would normally be considered uAPI.
|
||||||
|
|
||||||
|
Is netdevsim considered a "user" of an API?
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Linux kernel has a long standing rule that no API should be added unless
|
||||||
|
it has a real, in-tree user. Mock-ups and tests based on `netdevsim` are
|
||||||
|
strongly encouraged when adding new APIs, but `netdevsim` in itself
|
||||||
|
is **not** considered a use case/user.
|
||||||
|
|
||||||
Any other tips to help ensure my net/net-next patch gets OK'd?
|
Any other tips to help ensure my net/net-next patch gets OK'd?
|
||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
Attention to detail. Re-read your own work as if you were the
|
Attention to detail. Re-read your own work as if you were the
|
||||||
|
@ -73,7 +73,9 @@ IF_OPER_LOWERLAYERDOWN (3):
|
|||||||
state (f.e. VLAN).
|
state (f.e. VLAN).
|
||||||
|
|
||||||
IF_OPER_TESTING (4):
|
IF_OPER_TESTING (4):
|
||||||
Unused in current kernel.
|
Interface is in testing mode, for example executing driver self-tests
|
||||||
|
or media (cable) test. It can't be used for normal traffic until tests
|
||||||
|
complete.
|
||||||
|
|
||||||
IF_OPER_DORMANT (5):
|
IF_OPER_DORMANT (5):
|
||||||
Interface is L1 up, but waiting for an external event, f.e. for a
|
Interface is L1 up, but waiting for an external event, f.e. for a
|
||||||
@ -111,7 +113,7 @@ it as lower layer.
|
|||||||
|
|
||||||
Note that for certain kind of soft-devices, which are not managing any
|
Note that for certain kind of soft-devices, which are not managing any
|
||||||
real hardware, it is possible to set this bit from userspace. One
|
real hardware, it is possible to set this bit from userspace. One
|
||||||
should use TVL IFLA_CARRIER to do so.
|
should use TLV IFLA_CARRIER to do so.
|
||||||
|
|
||||||
netif_carrier_ok() can be used to query that bit.
|
netif_carrier_ok() can be used to query that bit.
|
||||||
|
|
||||||
|
@ -607,6 +607,14 @@ See also the examples in :ref:`control`.
|
|||||||
``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
|
``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
|
||||||
streaming is in progress since most drivers do not support changing
|
streaming is in progress since most drivers do not support changing
|
||||||
the format in that case.
|
the format in that case.
|
||||||
|
* - ``V4L2_CTRL_FLAG_DYNAMIC_ARRAY``
|
||||||
|
- 0x0800
|
||||||
|
- This control is a dynamically sized 1-dimensional array. It
|
||||||
|
behaves the same as a regular array, except that the number
|
||||||
|
of elements as reported by the ``elems`` field is between 1 and
|
||||||
|
``dims[0]``. So setting the control with a differently sized
|
||||||
|
array will change the ``elems`` field when the control is
|
||||||
|
queried afterwards.
|
||||||
|
|
||||||
Return Value
|
Return Value
|
||||||
============
|
============
|
||||||
|
@ -855,7 +855,7 @@ in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
|
|||||||
use PPIs designated for specific cpus. The irq field is interpreted
|
use PPIs designated for specific cpus. The irq field is interpreted
|
||||||
like this::
|
like this::
|
||||||
|
|
||||||
bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 |
|
bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 |
|
||||||
field: | vcpu2_index | irq_type | vcpu_index | irq_id |
|
field: | vcpu2_index | irq_type | vcpu_index | irq_id |
|
||||||
|
|
||||||
The irq_type field has the following values:
|
The irq_type field has the following values:
|
||||||
@ -2149,10 +2149,10 @@ prior to calling the KVM_RUN ioctl.
|
|||||||
Errors:
|
Errors:
|
||||||
|
|
||||||
====== ============================================================
|
====== ============================================================
|
||||||
ENOENT no such register
|
ENOENT no such register
|
||||||
EINVAL invalid register ID, or no such register or used with VMs in
|
EINVAL invalid register ID, or no such register or used with VMs in
|
||||||
protected virtualization mode on s390
|
protected virtualization mode on s390
|
||||||
EPERM (arm64) register access not allowed before vcpu finalization
|
EPERM (arm64) register access not allowed before vcpu finalization
|
||||||
====== ============================================================
|
====== ============================================================
|
||||||
|
|
||||||
(These error codes are indicative only: do not rely on a specific error
|
(These error codes are indicative only: do not rely on a specific error
|
||||||
@ -2590,10 +2590,10 @@ following id bit patterns::
|
|||||||
Errors include:
|
Errors include:
|
||||||
|
|
||||||
======== ============================================================
|
======== ============================================================
|
||||||
ENOENT no such register
|
ENOENT no such register
|
||||||
EINVAL invalid register ID, or no such register or used with VMs in
|
EINVAL invalid register ID, or no such register or used with VMs in
|
||||||
protected virtualization mode on s390
|
protected virtualization mode on s390
|
||||||
EPERM (arm64) register access not allowed before vcpu finalization
|
EPERM (arm64) register access not allowed before vcpu finalization
|
||||||
======== ============================================================
|
======== ============================================================
|
||||||
|
|
||||||
(These error codes are indicative only: do not rely on a specific error
|
(These error codes are indicative only: do not rely on a specific error
|
||||||
@ -3112,13 +3112,13 @@ current state. "addr" is ignored.
|
|||||||
Errors:
|
Errors:
|
||||||
|
|
||||||
====== =================================================================
|
====== =================================================================
|
||||||
EINVAL the target is unknown, or the combination of features is invalid.
|
EINVAL the target is unknown, or the combination of features is invalid.
|
||||||
ENOENT a features bit specified is unknown.
|
ENOENT a features bit specified is unknown.
|
||||||
====== =================================================================
|
====== =================================================================
|
||||||
|
|
||||||
This tells KVM what type of CPU to present to the guest, and what
|
This tells KVM what type of CPU to present to the guest, and what
|
||||||
optional features it should have. This will cause a reset of the cpu
|
optional features it should have. This will cause a reset of the cpu
|
||||||
registers to their initial values. If this is not called, KVM_RUN will
|
registers to their initial values. If this is not called, KVM_RUN will
|
||||||
return ENOEXEC for that vcpu.
|
return ENOEXEC for that vcpu.
|
||||||
|
|
||||||
The initial values are defined as:
|
The initial values are defined as:
|
||||||
@ -3239,8 +3239,8 @@ VCPU matching underlying host.
|
|||||||
Errors:
|
Errors:
|
||||||
|
|
||||||
===== ==============================================================
|
===== ==============================================================
|
||||||
E2BIG the reg index list is too big to fit in the array specified by
|
E2BIG the reg index list is too big to fit in the array specified by
|
||||||
the user (the number required will be written into n).
|
the user (the number required will be written into n).
|
||||||
===== ==============================================================
|
===== ==============================================================
|
||||||
|
|
||||||
::
|
::
|
||||||
@ -3288,7 +3288,7 @@ specific device.
|
|||||||
ARM/arm64 divides the id field into two parts, a device id and an
|
ARM/arm64 divides the id field into two parts, a device id and an
|
||||||
address type id specific to the individual device::
|
address type id specific to the individual device::
|
||||||
|
|
||||||
bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
|
bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
|
||||||
field: | 0x00000000 | device id | addr type id |
|
field: | 0x00000000 | device id | addr type id |
|
||||||
|
|
||||||
ARM/arm64 currently only require this when using the in-kernel GIC
|
ARM/arm64 currently only require this when using the in-kernel GIC
|
||||||
@ -7049,7 +7049,7 @@ In combination with KVM_CAP_X86_USER_SPACE_MSR, this allows user space to
|
|||||||
trap and emulate MSRs that are outside of the scope of KVM as well as
|
trap and emulate MSRs that are outside of the scope of KVM as well as
|
||||||
limit the attack surface on KVM's MSR emulation code.
|
limit the attack surface on KVM's MSR emulation code.
|
||||||
|
|
||||||
8.28 KVM_CAP_ENFORCE_PV_CPUID
|
8.28 KVM_CAP_ENFORCE_PV_FEATURE_CPUID
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
Architectures: x86
|
Architectures: x86
|
||||||
|
@ -14,7 +14,6 @@ config ALPHA
|
|||||||
select PCI_SYSCALL if PCI
|
select PCI_SYSCALL if PCI
|
||||||
select HAVE_AOUT
|
select HAVE_AOUT
|
||||||
select HAVE_ASM_MODVERSIONS
|
select HAVE_ASM_MODVERSIONS
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_PCSPKR_PLATFORM
|
select HAVE_PCSPKR_PLATFORM
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select NEED_DMA_MAP_STATE
|
select NEED_DMA_MAP_STATE
|
||||||
@ -532,7 +531,7 @@ config SMP
|
|||||||
will run faster if you say N here.
|
will run faster if you say N here.
|
||||||
|
|
||||||
See also the SMP-HOWTO available at
|
See also the SMP-HOWTO available at
|
||||||
<http://www.tldp.org/docs.html#howto>.
|
<https://www.tldp.org/docs.html#howto>.
|
||||||
|
|
||||||
If you don't know what to do here, say N.
|
If you don't know what to do here, say N.
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include "ksize.h"
|
#include "ksize.h"
|
||||||
|
|
||||||
extern unsigned long switch_to_osf_pal(unsigned long nr,
|
extern unsigned long switch_to_osf_pal(unsigned long nr,
|
||||||
struct pcb_struct * pcb_va, struct pcb_struct * pcb_pa,
|
struct pcb_struct *pcb_va, struct pcb_struct *pcb_pa,
|
||||||
unsigned long *vptb);
|
unsigned long *vptb);
|
||||||
|
|
||||||
extern void move_stack(unsigned long new_stack);
|
extern void move_stack(unsigned long new_stack);
|
||||||
|
@ -200,7 +200,7 @@ extern char _end;
|
|||||||
START_ADDR KSEG address of the entry point of kernel code.
|
START_ADDR KSEG address of the entry point of kernel code.
|
||||||
|
|
||||||
ZERO_PGE KSEG address of page full of zeroes, but
|
ZERO_PGE KSEG address of page full of zeroes, but
|
||||||
upon entry to kerne cvan be expected
|
upon entry to kernel, it can be expected
|
||||||
to hold the parameter list and possible
|
to hold the parameter list and possible
|
||||||
INTRD information.
|
INTRD information.
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ extern long srm_printk(const char *, ...)
|
|||||||
__attribute__ ((format (printf, 1, 2)));
|
__attribute__ ((format (printf, 1, 2)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gzip delarations
|
* gzip declarations
|
||||||
*/
|
*/
|
||||||
#define OF(args) args
|
#define OF(args) args
|
||||||
#define STATIC static
|
#define STATIC static
|
||||||
|
@ -70,3 +70,4 @@ CONFIG_DEBUG_INFO=y
|
|||||||
CONFIG_ALPHA_LEGACY_START_ADDRESS=y
|
CONFIG_ALPHA_LEGACY_START_ADDRESS=y
|
||||||
CONFIG_MATHEMU=y
|
CONFIG_MATHEMU=y
|
||||||
CONFIG_CRYPTO_HMAC=y
|
CONFIG_CRYPTO_HMAC=y
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
@ -4,15 +4,4 @@
|
|||||||
|
|
||||||
#include <uapi/asm/compiler.h>
|
#include <uapi/asm/compiler.h>
|
||||||
|
|
||||||
/* Some idiots over in <linux/compiler.h> thought inline should imply
|
|
||||||
always_inline. This breaks stuff. We'll include this file whenever
|
|
||||||
we run into such problems. */
|
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
|
||||||
#undef inline
|
|
||||||
#undef __inline__
|
|
||||||
#undef __inline
|
|
||||||
#undef __always_inline
|
|
||||||
#define __always_inline inline __attribute__((always_inline))
|
|
||||||
|
|
||||||
#endif /* __ALPHA_COMPILER_H */
|
#endif /* __ALPHA_COMPILER_H */
|
||||||
|
@ -9,4 +9,10 @@ static inline int syscall_get_arch(struct task_struct *task)
|
|||||||
return AUDIT_ARCH_ALPHA;
|
return AUDIT_ARCH_ALPHA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline long syscall_get_return_value(struct task_struct *task,
|
||||||
|
struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
return regs->r0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_ALPHA_SYSCALL_H */
|
#endif /* _ASM_ALPHA_SYSCALL_H */
|
||||||
|
@ -834,7 +834,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
state = ¤t_thread_info()->ieee_state;
|
state = ¤t_thread_info()->ieee_state;
|
||||||
|
|
||||||
/* Update softare trap enable bits. */
|
/* Update software trap enable bits. */
|
||||||
*state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK);
|
*state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK);
|
||||||
|
|
||||||
/* Update the real fpcr. */
|
/* Update the real fpcr. */
|
||||||
@ -854,7 +854,7 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
|
|||||||
state = ¤t_thread_info()->ieee_state;
|
state = ¤t_thread_info()->ieee_state;
|
||||||
exc &= IEEE_STATUS_MASK;
|
exc &= IEEE_STATUS_MASK;
|
||||||
|
|
||||||
/* Update softare trap enable bits. */
|
/* Update software trap enable bits. */
|
||||||
swcr = (*state & IEEE_SW_MASK) | exc;
|
swcr = (*state & IEEE_SW_MASK) | exc;
|
||||||
*state |= exc;
|
*state |= exc;
|
||||||
|
|
||||||
|
@ -574,7 +574,7 @@ static void alpha_pmu_start(struct perf_event *event, int flags)
|
|||||||
* Check that CPU performance counters are supported.
|
* Check that CPU performance counters are supported.
|
||||||
* - currently support EV67 and later CPUs.
|
* - currently support EV67 and later CPUs.
|
||||||
* - actually some later revisions of the EV6 have the same PMC model as the
|
* - actually some later revisions of the EV6 have the same PMC model as the
|
||||||
* EV67 but we don't do suffiently deep CPU detection to detect them.
|
* EV67 but we don't do sufficiently deep CPU detection to detect them.
|
||||||
* Bad luck to the very few people who might have one, I guess.
|
* Bad luck to the very few people who might have one, I guess.
|
||||||
*/
|
*/
|
||||||
static int supported_cpu(void)
|
static int supported_cpu(void)
|
||||||
|
@ -319,18 +319,19 @@ setup_memory(void *kernel_end)
|
|||||||
i, cluster->usage, cluster->start_pfn,
|
i, cluster->usage, cluster->start_pfn,
|
||||||
cluster->start_pfn + cluster->numpages);
|
cluster->start_pfn + cluster->numpages);
|
||||||
|
|
||||||
/* Bit 0 is console/PALcode reserved. Bit 1 is
|
|
||||||
non-volatile memory -- we might want to mark
|
|
||||||
this for later. */
|
|
||||||
if (cluster->usage & 3)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
end = cluster->start_pfn + cluster->numpages;
|
end = cluster->start_pfn + cluster->numpages;
|
||||||
if (end > max_low_pfn)
|
if (end > max_low_pfn)
|
||||||
max_low_pfn = end;
|
max_low_pfn = end;
|
||||||
|
|
||||||
memblock_add(PFN_PHYS(cluster->start_pfn),
|
memblock_add(PFN_PHYS(cluster->start_pfn),
|
||||||
cluster->numpages << PAGE_SHIFT);
|
cluster->numpages << PAGE_SHIFT);
|
||||||
|
|
||||||
|
/* Bit 0 is console/PALcode reserved. Bit 1 is
|
||||||
|
non-volatile memory -- we might want to mark
|
||||||
|
this for later. */
|
||||||
|
if (cluster->usage & 3)
|
||||||
|
memblock_reserve(PFN_PHYS(cluster->start_pfn),
|
||||||
|
cluster->numpages << PAGE_SHIFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -582,7 +582,7 @@ void
|
|||||||
smp_send_stop(void)
|
smp_send_stop(void)
|
||||||
{
|
{
|
||||||
cpumask_t to_whom;
|
cpumask_t to_whom;
|
||||||
cpumask_copy(&to_whom, cpu_possible_mask);
|
cpumask_copy(&to_whom, cpu_online_mask);
|
||||||
cpumask_clear_cpu(smp_processor_id(), &to_whom);
|
cpumask_clear_cpu(smp_processor_id(), &to_whom);
|
||||||
#ifdef DEBUG_IPI_MSG
|
#ifdef DEBUG_IPI_MSG
|
||||||
if (hard_smp_processor_id() != boot_cpu_id)
|
if (hard_smp_processor_id() != boot_cpu_id)
|
||||||
|
@ -212,7 +212,7 @@ nautilus_init_pci(void)
|
|||||||
|
|
||||||
/* Use default IO. */
|
/* Use default IO. */
|
||||||
pci_add_resource(&bridge->windows, &ioport_resource);
|
pci_add_resource(&bridge->windows, &ioport_resource);
|
||||||
/* Irongate PCI memory aperture, calculate requred size before
|
/* Irongate PCI memory aperture, calculate required size before
|
||||||
setting it up. */
|
setting it up. */
|
||||||
pci_add_resource(&bridge->windows, &irongate_mem);
|
pci_add_resource(&bridge->windows, &irongate_mem);
|
||||||
|
|
||||||
|
@ -730,7 +730,7 @@ do_entUnaUser(void __user * va, unsigned long opcode,
|
|||||||
long error;
|
long error;
|
||||||
|
|
||||||
/* Check the UAC bits to decide what the user wants us to do
|
/* Check the UAC bits to decide what the user wants us to do
|
||||||
with the unaliged access. */
|
with the unaligned access. */
|
||||||
|
|
||||||
if (!(current_thread_info()->status & TS_UAC_NOPRINT)) {
|
if (!(current_thread_info()->status & TS_UAC_NOPRINT)) {
|
||||||
if (__ratelimit(&ratelimit)) {
|
if (__ratelimit(&ratelimit)) {
|
||||||
|
@ -65,7 +65,7 @@ static long (*save_emul) (unsigned long pc);
|
|||||||
long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long);
|
long do_alpha_fp_emul_imprecise(struct pt_regs *, unsigned long);
|
||||||
long do_alpha_fp_emul(unsigned long);
|
long do_alpha_fp_emul(unsigned long);
|
||||||
|
|
||||||
int init_module(void)
|
static int alpha_fp_emul_init_module(void)
|
||||||
{
|
{
|
||||||
save_emul_imprecise = alpha_fp_emul_imprecise;
|
save_emul_imprecise = alpha_fp_emul_imprecise;
|
||||||
save_emul = alpha_fp_emul;
|
save_emul = alpha_fp_emul;
|
||||||
@ -73,12 +73,14 @@ int init_module(void)
|
|||||||
alpha_fp_emul = do_alpha_fp_emul;
|
alpha_fp_emul = do_alpha_fp_emul;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
module_init(alpha_fp_emul_init_module);
|
||||||
|
|
||||||
void cleanup_module(void)
|
static void alpha_fp_emul_cleanup_module(void)
|
||||||
{
|
{
|
||||||
alpha_fp_emul_imprecise = save_emul_imprecise;
|
alpha_fp_emul_imprecise = save_emul_imprecise;
|
||||||
alpha_fp_emul = save_emul;
|
alpha_fp_emul = save_emul;
|
||||||
}
|
}
|
||||||
|
module_exit(alpha_fp_emul_cleanup_module);
|
||||||
|
|
||||||
#undef alpha_fp_emul_imprecise
|
#undef alpha_fp_emul_imprecise
|
||||||
#define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise
|
#define alpha_fp_emul_imprecise do_alpha_fp_emul_imprecise
|
||||||
@ -401,3 +403,5 @@ alpha_fp_emul_imprecise (struct pt_regs *regs, unsigned long write_mask)
|
|||||||
egress:
|
egress:
|
||||||
return si_code;
|
return si_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__udiv_qrnnd);
|
||||||
|
@ -95,7 +95,6 @@ config ARM
|
|||||||
select HAVE_FUNCTION_TRACER if !XIP_KERNEL
|
select HAVE_FUNCTION_TRACER if !XIP_KERNEL
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
|
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
|
||||||
select HAVE_IDE if PCI || ISA || PCMCIA
|
|
||||||
select HAVE_IRQ_TIME_ACCOUNTING
|
select HAVE_IRQ_TIME_ACCOUNTING
|
||||||
select HAVE_KERNEL_GZIP
|
select HAVE_KERNEL_GZIP
|
||||||
select HAVE_KERNEL_LZ4
|
select HAVE_KERNEL_LZ4
|
||||||
@ -218,9 +217,6 @@ config GENERIC_CALIBRATE_DELAY
|
|||||||
config ARCH_MAY_HAVE_PC_FDC
|
config ARCH_MAY_HAVE_PC_FDC
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config ZONE_DMA
|
|
||||||
bool
|
|
||||||
|
|
||||||
config ARCH_SUPPORTS_UPROBES
|
config ARCH_SUPPORTS_UPROBES
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
@ -353,7 +349,6 @@ config ARCH_EP93XX
|
|||||||
select ARM_VIC
|
select ARM_VIC
|
||||||
select GENERIC_IRQ_MULTI_HANDLER
|
select GENERIC_IRQ_MULTI_HANDLER
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR
|
||||||
select CLKDEV_LOOKUP
|
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
select CPU_ARM920T
|
select CPU_ARM920T
|
||||||
select GPIOLIB
|
select GPIOLIB
|
||||||
@ -365,7 +360,6 @@ config ARCH_FOOTBRIDGE
|
|||||||
bool "FootBridge"
|
bool "FootBridge"
|
||||||
select CPU_SA110
|
select CPU_SA110
|
||||||
select FOOTBRIDGE
|
select FOOTBRIDGE
|
||||||
select HAVE_IDE
|
|
||||||
select NEED_MACH_IO_H if !MMU
|
select NEED_MACH_IO_H if !MMU
|
||||||
select NEED_MACH_MEMORY_H
|
select NEED_MACH_MEMORY_H
|
||||||
help
|
help
|
||||||
@ -398,7 +392,8 @@ config ARCH_IXP4XX
|
|||||||
select HAVE_PCI
|
select HAVE_PCI
|
||||||
select IXP4XX_IRQ
|
select IXP4XX_IRQ
|
||||||
select IXP4XX_TIMER
|
select IXP4XX_TIMER
|
||||||
select NEED_MACH_IO_H
|
# With the new PCI driver this is not needed
|
||||||
|
select NEED_MACH_IO_H if IXP4XX_PCI_LEGACY
|
||||||
select USB_EHCI_BIG_ENDIAN_DESC
|
select USB_EHCI_BIG_ENDIAN_DESC
|
||||||
select USB_EHCI_BIG_ENDIAN_MMIO
|
select USB_EHCI_BIG_ENDIAN_MMIO
|
||||||
help
|
help
|
||||||
@ -433,7 +428,6 @@ config ARCH_PXA
|
|||||||
select GENERIC_IRQ_MULTI_HANDLER
|
select GENERIC_IRQ_MULTI_HANDLER
|
||||||
select GPIO_PXA
|
select GPIO_PXA
|
||||||
select GPIOLIB
|
select GPIOLIB
|
||||||
select HAVE_IDE
|
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
select PLAT_PXA
|
select PLAT_PXA
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
@ -449,7 +443,6 @@ config ARCH_RPC
|
|||||||
select ARM_HAS_SG_CHAIN
|
select ARM_HAS_SG_CHAIN
|
||||||
select CPU_SA110
|
select CPU_SA110
|
||||||
select FIQ
|
select FIQ
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_PATA_PLATFORM
|
select HAVE_PATA_PLATFORM
|
||||||
select ISA_DMA_API
|
select ISA_DMA_API
|
||||||
select LEGACY_TIMER_TICK
|
select LEGACY_TIMER_TICK
|
||||||
@ -472,7 +465,6 @@ config ARCH_SA1100
|
|||||||
select CPU_SA1100
|
select CPU_SA1100
|
||||||
select GENERIC_IRQ_MULTI_HANDLER
|
select GENERIC_IRQ_MULTI_HANDLER
|
||||||
select GPIOLIB
|
select GPIOLIB
|
||||||
select HAVE_IDE
|
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
select ISA
|
select ISA
|
||||||
select NEED_MACH_MEMORY_H
|
select NEED_MACH_MEMORY_H
|
||||||
@ -504,12 +496,10 @@ config ARCH_OMAP1
|
|||||||
bool "TI OMAP1"
|
bool "TI OMAP1"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
select ARCH_OMAP
|
select ARCH_OMAP
|
||||||
select CLKDEV_LOOKUP
|
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
select GENERIC_IRQ_CHIP
|
select GENERIC_IRQ_CHIP
|
||||||
select GENERIC_IRQ_MULTI_HANDLER
|
select GENERIC_IRQ_MULTI_HANDLER
|
||||||
select GPIOLIB
|
select GPIOLIB
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_LEGACY_CLK
|
select HAVE_LEGACY_CLK
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
select NEED_MACH_IO_H if PCCARD
|
select NEED_MACH_IO_H if PCCARD
|
||||||
|
@ -1595,7 +1595,7 @@ dcan1: can@0 {
|
|||||||
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
||||||
reg = <0x0 0x2000>;
|
reg = <0x0 0x2000>;
|
||||||
clocks = <&dcan1_fck>;
|
clocks = <&dcan1_fck>;
|
||||||
clock-name = "fck";
|
clock-names = "fck";
|
||||||
syscon-raminit = <&scm_conf 0x644 1>;
|
syscon-raminit = <&scm_conf 0x644 1>;
|
||||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -54,7 +54,13 @@ &fec {
|
|||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
|
pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
phy-reset-duration = <2>;
|
|
||||||
|
/*
|
||||||
|
* The PHY seems to require a long-enough reset duration to avoid
|
||||||
|
* some rare issues where the PHY gets stuck in an inconsistent and
|
||||||
|
* non-functional state at boot-up. 10ms proved to be fine .
|
||||||
|
*/
|
||||||
|
phy-reset-duration = <10>;
|
||||||
phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
|
phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ &usdhc2 {
|
|||||||
assigned-clock-rates = <0>, <198000000>;
|
assigned-clock-rates = <0>, <198000000>;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
|
max-frequency = <25000000>;
|
||||||
mmc-pwrseq = <&wifi_pwrseq>;
|
mmc-pwrseq = <&wifi_pwrseq>;
|
||||||
no-1-8-v;
|
no-1-8-v;
|
||||||
non-removable;
|
non-removable;
|
||||||
|
@ -30,14 +30,6 @@ vsys_cobra: fixedregulator-vsys_cobra {
|
|||||||
regulator-max-microvolt = <5000000>;
|
regulator-max-microvolt = <5000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vdds_1v8_main: fixedregulator-vdds_1v8_main {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "vdds_1v8_main";
|
|
||||||
vin-supply = <&smps7_reg>;
|
|
||||||
regulator-min-microvolt = <1800000>;
|
|
||||||
regulator-max-microvolt = <1800000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vmmcsd_fixed: fixedregulator-mmcsd {
|
vmmcsd_fixed: fixedregulator-mmcsd {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vmmcsd_fixed";
|
regulator-name = "vmmcsd_fixed";
|
||||||
@ -487,6 +479,7 @@ smps6_reg: smps6 {
|
|||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vdds_1v8_main:
|
||||||
smps7_reg: smps7 {
|
smps7_reg: smps7 {
|
||||||
/* VDDS_1v8_OMAP over VDDS_1v8_MAIN */
|
/* VDDS_1v8_OMAP over VDDS_1v8_MAIN */
|
||||||
regulator-name = "smps7";
|
regulator-name = "smps7";
|
||||||
|
@ -1424,6 +1424,8 @@ Params: abx80x Select one of the ABx80x family:
|
|||||||
|
|
||||||
sd3078 Select the ZXW Shenzhen whwave SD3078 device
|
sd3078 Select the ZXW Shenzhen whwave SD3078 device
|
||||||
|
|
||||||
|
s35390a Select the ABLIC S35390A device
|
||||||
|
|
||||||
i2c0 Choose the I2C0 bus on GPIOs 0&1
|
i2c0 Choose the I2C0 bus on GPIOs 0&1
|
||||||
|
|
||||||
i2c_csi_dsi Choose the I2C0 bus on GPIOs 44&45
|
i2c_csi_dsi Choose the I2C0 bus on GPIOs 44&45
|
||||||
@ -1487,6 +1489,8 @@ Params: abx80x Select one of the ABx80x family:
|
|||||||
|
|
||||||
sd3078 Select the ZXW Shenzhen whwave SD3078 device
|
sd3078 Select the ZXW Shenzhen whwave SD3078 device
|
||||||
|
|
||||||
|
s35390a Select the ABLIC S35390A device
|
||||||
|
|
||||||
addr Sets the address for the RTC. Note that the
|
addr Sets the address for the RTC. Note that the
|
||||||
device must be configured to use the specified
|
device must be configured to use the specified
|
||||||
address.
|
address.
|
||||||
@ -1678,6 +1682,8 @@ Info: Sony IMX219 camera module.
|
|||||||
Load: dtoverlay=imx219,<param>=<val>
|
Load: dtoverlay=imx219,<param>=<val>
|
||||||
Params: rotation Mounting rotation of the camera sensor (0 or
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
180, default 180)
|
180, default 180)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: imx290
|
Name: imx290
|
||||||
@ -1694,6 +1700,10 @@ Params: 4lane Enable 4 CSI2 lanes. This requires a Compute
|
|||||||
(the default), whilst those from Innomaker use
|
(the default), whilst those from Innomaker use
|
||||||
74.25MHz.
|
74.25MHz.
|
||||||
mono Denote that the module is a mono sensor.
|
mono Denote that the module is a mono sensor.
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
rotation Mounting rotation of the camera sensor (0 or
|
||||||
|
180, default 0)
|
||||||
|
|
||||||
|
|
||||||
Name: imx378
|
Name: imx378
|
||||||
@ -1703,6 +1713,8 @@ Info: Sony IMX378 camera module.
|
|||||||
Load: dtoverlay=imx378,<param>=<val>
|
Load: dtoverlay=imx378,<param>=<val>
|
||||||
Params: rotation Mounting rotation of the camera sensor (0 or
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
180, default 180)
|
180, default 180)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: imx477
|
Name: imx477
|
||||||
@ -1712,6 +1724,8 @@ Info: Sony IMX477 camera module.
|
|||||||
Load: dtoverlay=imx477,<param>=<val>
|
Load: dtoverlay=imx477,<param>=<val>
|
||||||
Params: rotation Mounting rotation of the camera sensor (0 or
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
180, default 180)
|
180, default 180)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: iqaudio-codec
|
Name: iqaudio-codec
|
||||||
@ -2137,22 +2151,30 @@ Info: Omnivision OV5647 camera module.
|
|||||||
Load: dtoverlay=ov5647,<param>=<val>
|
Load: dtoverlay=ov5647,<param>=<val>
|
||||||
Params: rotation Mounting rotation of the camera sensor (0 or
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
180, default 0)
|
180, default 0)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: ov7251
|
Name: ov7251
|
||||||
Info: Omnivision OV7251 camera module.
|
Info: Omnivision OV7251 camera module.
|
||||||
Uses Unicam 1, which is the standard camera connector on most Pi
|
Uses Unicam 1, which is the standard camera connector on most Pi
|
||||||
variants.
|
variants.
|
||||||
Load: dtoverlay=ov7251
|
Load: dtoverlay=ov7251,<param>=<val>
|
||||||
Params: <None>
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
|
180, default 0)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: ov9281
|
Name: ov9281
|
||||||
Info: Omnivision OV9281 camera module.
|
Info: Omnivision OV9281 camera module.
|
||||||
Uses Unicam 1, which is the standard camera connector on most Pi
|
Uses Unicam 1, which is the standard camera connector on most Pi
|
||||||
variants.
|
variants.
|
||||||
Load: dtoverlay=ov9281
|
Load: dtoverlay=ov9281,<param>=<val>
|
||||||
Params: <None>
|
Params: rotation Mounting rotation of the camera sensor (0 or
|
||||||
|
180, default 0)
|
||||||
|
orientation Sensor orientation (0 = front, 1 = rear,
|
||||||
|
2 = external, default external)
|
||||||
|
|
||||||
|
|
||||||
Name: papirus
|
Name: papirus
|
||||||
|
@ -243,6 +243,19 @@ ds1340: ds1340@68 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fragment@18 {
|
||||||
|
target = <&i2cbus>;
|
||||||
|
__dormant__ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
s35390a: s35390a@30 {
|
||||||
|
compatible = "ablic,s35390a";
|
||||||
|
reg = <0x30>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
__overrides__ {
|
__overrides__ {
|
||||||
abx80x = <0>,"+0";
|
abx80x = <0>,"+0";
|
||||||
ds1307 = <0>,"+1";
|
ds1307 = <0>,"+1";
|
||||||
@ -262,6 +275,7 @@ __overrides__ {
|
|||||||
sd3078 = <0>,"+14";
|
sd3078 = <0>,"+14";
|
||||||
pcf85063 = <0>,"+15";
|
pcf85063 = <0>,"+15";
|
||||||
pcf85063a = <0>,"+16";
|
pcf85063a = <0>,"+16";
|
||||||
|
s35390a = <0>,"+18";
|
||||||
|
|
||||||
addr = <&abx80x>, "reg:0",
|
addr = <&abx80x>, "reg:0",
|
||||||
<&ds1307>, "reg:0",
|
<&ds1307>, "reg:0",
|
||||||
@ -272,7 +286,8 @@ __overrides__ {
|
|||||||
<&pcf8523>, "reg:0",
|
<&pcf8523>, "reg:0",
|
||||||
<&pcf8563>, "reg:0",
|
<&pcf8563>, "reg:0",
|
||||||
<&m41t62>, "reg:0",
|
<&m41t62>, "reg:0",
|
||||||
<&rv1805>, "reg:0";
|
<&rv1805>, "reg:0",
|
||||||
|
<&s35390a>, "reg:0";
|
||||||
trickle-diode-type = <&abx80x>,"abracon,tc-diode",
|
trickle-diode-type = <&abx80x>,"abracon,tc-diode",
|
||||||
<&rv1805>,"abracon,tc-diode";
|
<&rv1805>,"abracon,tc-diode";
|
||||||
trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",
|
trickle-resistor-ohms = <&ds1339>,"trickle-resistor-ohms:0",
|
||||||
|
@ -28,6 +28,7 @@ imx219: imx219@10 {
|
|||||||
VDDL-supply = <&imx219_vddl>; /* 1.2v */
|
VDDL-supply = <&imx219_vddl>; /* 1.2v */
|
||||||
|
|
||||||
rotation = <180>;
|
rotation = <180>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
imx219_0: endpoint {
|
imx219_0: endpoint {
|
||||||
@ -109,5 +110,6 @@ __overlay__ {
|
|||||||
|
|
||||||
__overrides__ {
|
__overrides__ {
|
||||||
rotation = <&imx219>,"rotation:0";
|
rotation = <&imx219>,"rotation:0";
|
||||||
|
orientation = <&imx219>,"orientation:0";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,9 @@ imx290: imx290@1a {
|
|||||||
clock-names = "xclk";
|
clock-names = "xclk";
|
||||||
clock-frequency = <37125000>;
|
clock-frequency = <37125000>;
|
||||||
|
|
||||||
|
rotation = <0>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
vdda-supply = <&cam1_reg>; /* 2.8v */
|
vdda-supply = <&cam1_reg>; /* 2.8v */
|
||||||
vdddo-supply = <&imx290_vdddo>; /* 1.8v */
|
vdddo-supply = <&imx290_vdddo>; /* 1.8v */
|
||||||
vddd-supply = <&imx290_vddd>; /* 1.5v */
|
vddd-supply = <&imx290_vddd>; /* 1.5v */
|
||||||
@ -135,5 +138,7 @@ __overrides__ {
|
|||||||
4lane = <0>, "-6+7-8+9";
|
4lane = <0>, "-6+7-8+9";
|
||||||
clock-frequency = <&imx290_clk>,"clock-frequency:0",
|
clock-frequency = <&imx290_clk>,"clock-frequency:0",
|
||||||
<&imx290>,"clock-frequency:0";
|
<&imx290>,"clock-frequency:0";
|
||||||
|
rotation = <&imx290>,"rotation:0";
|
||||||
|
orientation = <&imx290>,"orientation:0";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -23,6 +23,7 @@ imx477: imx477@1a {
|
|||||||
VDDL-supply = <&imx477_vddl>; /* 1.8v */
|
VDDL-supply = <&imx477_vddl>; /* 1.8v */
|
||||||
|
|
||||||
rotation = <180>;
|
rotation = <180>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
imx477_0: endpoint {
|
imx477_0: endpoint {
|
||||||
@ -104,5 +105,6 @@ __overlay__ {
|
|||||||
|
|
||||||
__overrides__ {
|
__overrides__ {
|
||||||
rotation = <&imx477>,"rotation:0";
|
rotation = <&imx477>,"rotation:0";
|
||||||
|
orientation = <&imx477>,"orientation:0";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -22,6 +22,7 @@ ov5647: ov5647@36 {
|
|||||||
clocks = <&ov5647_clk>;
|
clocks = <&ov5647_clk>;
|
||||||
|
|
||||||
rotation = <0>;
|
rotation = <0>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
ov5647_0: endpoint {
|
ov5647_0: endpoint {
|
||||||
@ -88,5 +89,6 @@ ov5647_clk: camera-clk {
|
|||||||
|
|
||||||
__overrides__ {
|
__overrides__ {
|
||||||
rotation = <&ov5647>,"rotation:0";
|
rotation = <&ov5647>,"rotation:0";
|
||||||
|
orientation = <&ov5647>,"orientation:0";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -28,6 +28,9 @@ ov7251: ov7251@60 {
|
|||||||
vdda-supply = <&cam1_reg>;
|
vdda-supply = <&cam1_reg>;
|
||||||
vddd-supply = <&ov7251_dvdd>;
|
vddd-supply = <&ov7251_dvdd>;
|
||||||
|
|
||||||
|
rotation = <0>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
ov7251_0: endpoint {
|
ov7251_0: endpoint {
|
||||||
remote-endpoint = <&csi1_ep>;
|
remote-endpoint = <&csi1_ep>;
|
||||||
@ -102,4 +105,9 @@ __overlay__ {
|
|||||||
regulator-max-microvolt = <2800000>;
|
regulator-max-microvolt = <2800000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
rotation = <&ov7251>,"rotation:0";
|
||||||
|
orientation = <&ov7251>,"orientation:0";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -27,6 +27,9 @@ ov9281: ov9281@60 {
|
|||||||
dovdd-supply = <&ov9281_dovdd>;
|
dovdd-supply = <&ov9281_dovdd>;
|
||||||
dvdd-supply = <&ov9281_dvdd>;
|
dvdd-supply = <&ov9281_dvdd>;
|
||||||
|
|
||||||
|
rotation = <0>;
|
||||||
|
orientation = <2>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
ov9281_0: endpoint {
|
ov9281_0: endpoint {
|
||||||
remote-endpoint = <&csi1_ep>;
|
remote-endpoint = <&csi1_ep>;
|
||||||
@ -103,4 +106,8 @@ __overlay__ {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__overrides__ {
|
||||||
|
rotation = <&ov9281>,"rotation:0";
|
||||||
|
orientation = <&ov9281>,"orientation:0";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "cma-overlay.dts"
|
#include "cma-overlay.dts"
|
||||||
|
|
||||||
&frag0 {
|
&frag0 {
|
||||||
size = <(512*1024*1024)>;
|
size = <((320-4)*1024*1024)>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "cma-overlay.dts"
|
#include "cma-overlay.dts"
|
||||||
|
|
||||||
&frag0 {
|
&frag0 {
|
||||||
size = <(512*1024*1024)>;
|
size = <((320-4)*1024*1024)>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
@ -755,14 +755,14 @@ clcd@10120000 {
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
vica: intc@10140000 {
|
vica: interrupt-controller@10140000 {
|
||||||
compatible = "arm,versatile-vic";
|
compatible = "arm,versatile-vic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
reg = <0x10140000 0x20>;
|
reg = <0x10140000 0x20>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vicb: intc@10140020 {
|
vicb: interrupt-controller@10140020 {
|
||||||
compatible = "arm,versatile-vic";
|
compatible = "arm,versatile-vic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
|
@ -37,7 +37,7 @@ gpio-keys-polled {
|
|||||||
poll-interval = <20>;
|
poll-interval = <20>;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The EXTi IRQ line 3 is shared with touchscreen and ethernet,
|
* The EXTi IRQ line 3 is shared with ethernet,
|
||||||
* so mark this as polled GPIO key.
|
* so mark this as polled GPIO key.
|
||||||
*/
|
*/
|
||||||
button-0 {
|
button-0 {
|
||||||
@ -46,6 +46,16 @@ button-0 {
|
|||||||
gpios = <&gpiof 3 GPIO_ACTIVE_LOW>;
|
gpios = <&gpiof 3 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The EXTi IRQ line 6 is shared with touchscreen,
|
||||||
|
* so mark this as polled GPIO key.
|
||||||
|
*/
|
||||||
|
button-1 {
|
||||||
|
label = "TA2-GPIO-B";
|
||||||
|
linux,code = <KEY_B>;
|
||||||
|
gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The EXTi IRQ line 0 is shared with PMIC,
|
* The EXTi IRQ line 0 is shared with PMIC,
|
||||||
* so mark this as polled GPIO key.
|
* so mark this as polled GPIO key.
|
||||||
@ -60,13 +70,6 @@ button-2 {
|
|||||||
gpio-keys {
|
gpio-keys {
|
||||||
compatible = "gpio-keys";
|
compatible = "gpio-keys";
|
||||||
|
|
||||||
button-1 {
|
|
||||||
label = "TA2-GPIO-B";
|
|
||||||
linux,code = <KEY_B>;
|
|
||||||
gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
|
|
||||||
wakeup-source;
|
|
||||||
};
|
|
||||||
|
|
||||||
button-3 {
|
button-3 {
|
||||||
label = "TA4-GPIO-D";
|
label = "TA4-GPIO-D";
|
||||||
linux,code = <KEY_D>;
|
linux,code = <KEY_D>;
|
||||||
@ -82,6 +85,7 @@ led-0 {
|
|||||||
label = "green:led5";
|
label = "green:led5";
|
||||||
gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>;
|
gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>;
|
||||||
default-state = "off";
|
default-state = "off";
|
||||||
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
led-1 {
|
led-1 {
|
||||||
@ -185,8 +189,8 @@ sgtl5000_rx_endpoint: endpoint@1 {
|
|||||||
touchscreen@38 {
|
touchscreen@38 {
|
||||||
compatible = "edt,edt-ft5406";
|
compatible = "edt,edt-ft5406";
|
||||||
reg = <0x38>;
|
reg = <0x38>;
|
||||||
interrupt-parent = <&gpiog>;
|
interrupt-parent = <&gpioc>;
|
||||||
interrupts = <2 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */
|
interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ / {
|
|||||||
aliases {
|
aliases {
|
||||||
ethernet0 = ðernet0;
|
ethernet0 = ðernet0;
|
||||||
ethernet1 = &ksz8851;
|
ethernet1 = &ksz8851;
|
||||||
|
rtc0 = &hwrtc;
|
||||||
|
rtc1 = &rtc;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@c0000000 {
|
memory@c0000000 {
|
||||||
@ -138,6 +140,7 @@ phy0: ethernet-phy@1 {
|
|||||||
reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>;
|
reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>;
|
||||||
reset-assert-us = <500>;
|
reset-assert-us = <500>;
|
||||||
reset-deassert-us = <500>;
|
reset-deassert-us = <500>;
|
||||||
|
smsc,disable-energy-detect;
|
||||||
interrupt-parent = <&gpioi>;
|
interrupt-parent = <&gpioi>;
|
||||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||||
};
|
};
|
||||||
@ -248,7 +251,7 @@ &i2c4 {
|
|||||||
/delete-property/dmas;
|
/delete-property/dmas;
|
||||||
/delete-property/dma-names;
|
/delete-property/dma-names;
|
||||||
|
|
||||||
rtc@32 {
|
hwrtc: rtc@32 {
|
||||||
compatible = "microcrystal,rv8803";
|
compatible = "microcrystal,rv8803";
|
||||||
reg = <0x32>;
|
reg = <0x32>;
|
||||||
};
|
};
|
||||||
|
@ -674,6 +674,7 @@ CONFIG_SERIAL_SC16IS7XX_SPI=y
|
|||||||
CONFIG_SERIAL_DEV_BUS=y
|
CONFIG_SERIAL_DEV_BUS=y
|
||||||
CONFIG_TTY_PRINTK=y
|
CONFIG_TTY_PRINTK=y
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
|
CONFIG_RAW_DRIVER=y
|
||||||
CONFIG_TCG_TPM=m
|
CONFIG_TCG_TPM=m
|
||||||
CONFIG_TCG_TIS_SPI=m
|
CONFIG_TCG_TIS_SPI=m
|
||||||
CONFIG_RANDOM_TRUST_BOOTLOADER=y
|
CONFIG_RANDOM_TRUST_BOOTLOADER=y
|
||||||
@ -1316,6 +1317,7 @@ CONFIG_R8712U=m
|
|||||||
CONFIG_R8188EU=m
|
CONFIG_R8188EU=m
|
||||||
CONFIG_VT6656=m
|
CONFIG_VT6656=m
|
||||||
CONFIG_STAGING_MEDIA=y
|
CONFIG_STAGING_MEDIA=y
|
||||||
|
CONFIG_VIDEO_RPIVID=m
|
||||||
CONFIG_FB_TFT=m
|
CONFIG_FB_TFT=m
|
||||||
CONFIG_FB_TFT_AGM1264K_FL=m
|
CONFIG_FB_TFT_AGM1264K_FL=m
|
||||||
CONFIG_FB_TFT_BD663474=m
|
CONFIG_FB_TFT_BD663474=m
|
||||||
|
@ -9,7 +9,6 @@ menuconfig ARCH_DAVINCI
|
|||||||
select PM_GENERIC_DOMAINS_OF if PM && OF
|
select PM_GENERIC_DOMAINS_OF if PM && OF
|
||||||
select REGMAP_MMIO
|
select REGMAP_MMIO
|
||||||
select RESET_CONTROLLER
|
select RESET_CONTROLLER
|
||||||
select HAVE_IDE
|
|
||||||
select PINCTRL_SINGLE
|
select PINCTRL_SINGLE
|
||||||
|
|
||||||
if ARCH_DAVINCI
|
if ARCH_DAVINCI
|
||||||
|
@ -103,6 +103,7 @@ struct mmdc_pmu {
|
|||||||
struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
|
struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
|
||||||
struct hlist_node node;
|
struct hlist_node node;
|
||||||
struct fsl_mmdc_devtype_data *devtype_data;
|
struct fsl_mmdc_devtype_data *devtype_data;
|
||||||
|
struct clk *mmdc_ipg_clk;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -462,11 +463,14 @@ static int imx_mmdc_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
||||||
perf_pmu_unregister(&pmu_mmdc->pmu);
|
perf_pmu_unregister(&pmu_mmdc->pmu);
|
||||||
|
iounmap(pmu_mmdc->mmdc_base);
|
||||||
|
clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk);
|
||||||
kfree(pmu_mmdc);
|
kfree(pmu_mmdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base)
|
static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base,
|
||||||
|
struct clk *mmdc_ipg_clk)
|
||||||
{
|
{
|
||||||
struct mmdc_pmu *pmu_mmdc;
|
struct mmdc_pmu *pmu_mmdc;
|
||||||
char *name;
|
char *name;
|
||||||
@ -494,6 +498,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
|
|||||||
}
|
}
|
||||||
|
|
||||||
mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
|
mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
|
||||||
|
pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;
|
||||||
if (mmdc_num == 0)
|
if (mmdc_num == 0)
|
||||||
name = "mmdc";
|
name = "mmdc";
|
||||||
else
|
else
|
||||||
@ -529,7 +534,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
#define imx_mmdc_remove NULL
|
#define imx_mmdc_remove NULL
|
||||||
#define imx_mmdc_perf_init(pdev, mmdc_base) 0
|
#define imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int imx_mmdc_probe(struct platform_device *pdev)
|
static int imx_mmdc_probe(struct platform_device *pdev)
|
||||||
@ -567,7 +572,13 @@ static int imx_mmdc_probe(struct platform_device *pdev)
|
|||||||
val &= ~(1 << BP_MMDC_MAPSR_PSD);
|
val &= ~(1 << BP_MMDC_MAPSR_PSD);
|
||||||
writel_relaxed(val, reg);
|
writel_relaxed(val, reg);
|
||||||
|
|
||||||
return imx_mmdc_perf_init(pdev, mmdc_base);
|
err = imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk);
|
||||||
|
if (err) {
|
||||||
|
iounmap(mmdc_base);
|
||||||
|
clk_disable_unprepare(mmdc_ipg_clk);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int imx_mmdc_get_ddr_type(void)
|
int imx_mmdc_get_ddr_type(void)
|
||||||
|
@ -91,6 +91,7 @@ config MACH_IXDP465
|
|||||||
|
|
||||||
config MACH_GORAMO_MLR
|
config MACH_GORAMO_MLR
|
||||||
bool "GORAMO Multi Link Router"
|
bool "GORAMO Multi Link Router"
|
||||||
|
depends on IXP4XX_PCI_LEGACY
|
||||||
help
|
help
|
||||||
Say 'Y' here if you want your kernel to support GORAMO
|
Say 'Y' here if you want your kernel to support GORAMO
|
||||||
MultiLink router.
|
MultiLink router.
|
||||||
|
@ -3776,6 +3776,7 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)
|
|||||||
struct omap_hwmod_ocp_if *oi;
|
struct omap_hwmod_ocp_if *oi;
|
||||||
struct clockdomain *clkdm;
|
struct clockdomain *clkdm;
|
||||||
struct clk_hw_omap *clk;
|
struct clk_hw_omap *clk;
|
||||||
|
struct clk_hw *hw;
|
||||||
|
|
||||||
if (!oh)
|
if (!oh)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -3792,7 +3793,14 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)
|
|||||||
c = oi->_clk;
|
c = oi->_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
clk = to_clk_hw_omap(__clk_get_hw(c));
|
hw = __clk_get_hw(c);
|
||||||
|
if (!hw)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
clk = to_clk_hw_omap(hw);
|
||||||
|
if (!clk)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
clkdm = clk->clkdm;
|
clkdm = clk->clkdm;
|
||||||
if (!clkdm)
|
if (!clkdm)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -49,6 +49,7 @@ static int __init parse_tag_acorn(const struct tag *tag)
|
|||||||
fallthrough; /* ??? */
|
fallthrough; /* ??? */
|
||||||
case 256:
|
case 256:
|
||||||
vram_size += PAGE_SIZE * 256;
|
vram_size += PAGE_SIZE * 256;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1602,6 +1602,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
|
|||||||
rn = arm_bpf_get_reg32(src_lo, tmp2[1], ctx);
|
rn = arm_bpf_get_reg32(src_lo, tmp2[1], ctx);
|
||||||
emit_ldx_r(dst, rn, off, ctx, BPF_SIZE(code));
|
emit_ldx_r(dst, rn, off, ctx, BPF_SIZE(code));
|
||||||
break;
|
break;
|
||||||
|
/* speculation barrier */
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
/* ST: *(size *)(dst + off) = imm */
|
/* ST: *(size *)(dst + off) = imm */
|
||||||
case BPF_ST | BPF_MEM | BPF_W:
|
case BPF_ST | BPF_MEM | BPF_W:
|
||||||
case BPF_ST | BPF_MEM | BPF_H:
|
case BPF_ST | BPF_MEM | BPF_H:
|
||||||
|
@ -1800,11 +1800,11 @@ config RANDOMIZE_BASE
|
|||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
config RANDOMIZE_MODULE_REGION_FULL
|
config RANDOMIZE_MODULE_REGION_FULL
|
||||||
bool "Randomize the module region over a 4 GB range"
|
bool "Randomize the module region over a 2 GB range"
|
||||||
depends on RANDOMIZE_BASE
|
depends on RANDOMIZE_BASE
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Randomizes the location of the module region inside a 4 GB window
|
Randomizes the location of the module region inside a 2 GB window
|
||||||
covering the core kernel. This way, it is less likely for modules
|
covering the core kernel. This way, it is less likely for modules
|
||||||
to leak information about the location of core kernel data structures
|
to leak information about the location of core kernel data structures
|
||||||
but it does imply that function calls between modules and the core
|
but it does imply that function calls between modules and the core
|
||||||
@ -1812,7 +1812,10 @@ config RANDOMIZE_MODULE_REGION_FULL
|
|||||||
|
|
||||||
When this option is not set, the module region will be randomized over
|
When this option is not set, the module region will be randomized over
|
||||||
a limited range that contains the [_stext, _etext] interval of the
|
a limited range that contains the [_stext, _etext] interval of the
|
||||||
core kernel, so branch relocations are always in range.
|
core kernel, so branch relocations are almost always in range unless
|
||||||
|
ARM64_MODULE_PLTS is enabled and the region is exhausted. In this
|
||||||
|
particular case of region exhaustion, modules might be able to fall
|
||||||
|
back to a larger 2GB area.
|
||||||
|
|
||||||
config CC_HAVE_STACKPROTECTOR_SYSREG
|
config CC_HAVE_STACKPROTECTOR_SYSREG
|
||||||
def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0)
|
def_bool $(cc-option,-mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=0)
|
||||||
|
@ -21,19 +21,11 @@ LDFLAGS_vmlinux += -shared -Bsymbolic -z notext \
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
|
ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
|
||||||
ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
|
ifeq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
|
||||||
$(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum)
|
|
||||||
else
|
|
||||||
LDFLAGS_vmlinux += --fix-cortex-a53-843419
|
LDFLAGS_vmlinux += --fix-cortex-a53-843419
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y)
|
|
||||||
ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y)
|
|
||||||
$(warning LSE atomics not supported by binutils)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
cc_has_k_constraint := $(call try-run,echo \
|
cc_has_k_constraint := $(call try-run,echo \
|
||||||
'int main(void) { \
|
'int main(void) { \
|
||||||
asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \
|
asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \
|
||||||
@ -176,6 +168,17 @@ vdso_install:
|
|||||||
|
|
||||||
archprepare:
|
archprepare:
|
||||||
$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
|
$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
|
||||||
|
ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
|
||||||
|
ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
|
||||||
|
@echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
|
||||||
|
ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y)
|
||||||
|
@echo "warning: LSE atomics not supported by binutils" >&2
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
# We use MRPROPER_FILES and CLEAN_FILES now
|
||||||
archclean:
|
archclean:
|
||||||
|
@ -54,6 +54,7 @@ &mscc_felix {
|
|||||||
|
|
||||||
&mscc_felix_port0 {
|
&mscc_felix_port0 {
|
||||||
label = "swp0";
|
label = "swp0";
|
||||||
|
managed = "in-band-status";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
phy-mode = "sgmii";
|
phy-mode = "sgmii";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
@ -61,6 +62,7 @@ &mscc_felix_port0 {
|
|||||||
|
|
||||||
&mscc_felix_port1 {
|
&mscc_felix_port1 {
|
||||||
label = "swp1";
|
label = "swp1";
|
||||||
|
managed = "in-band-status";
|
||||||
phy-handle = <&phy1>;
|
phy-handle = <&phy1>;
|
||||||
phy-mode = "sgmii";
|
phy-mode = "sgmii";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
@ -66,7 +66,7 @@ CPU_PW20: cpu-pw20 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
sysclk: clock-sysclk {
|
sysclk: sysclk {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <100000000>;
|
clock-frequency = <100000000>;
|
||||||
|
@ -579,7 +579,7 @@ uart2: serial@30890000 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
flexcan1: can@308c0000 {
|
flexcan1: can@308c0000 {
|
||||||
compatible = "fsl,imx8mp-flexcan", "fsl,imx6q-flexcan";
|
compatible = "fsl,imx8mp-flexcan";
|
||||||
reg = <0x308c0000 0x10000>;
|
reg = <0x308c0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
||||||
@ -594,7 +594,7 @@ flexcan1: can@308c0000 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
flexcan2: can@308d0000 {
|
flexcan2: can@308d0000 {
|
||||||
compatible = "fsl,imx8mp-flexcan", "fsl,imx6q-flexcan";
|
compatible = "fsl,imx8mp-flexcan";
|
||||||
reg = <0x308d0000 0x10000>;
|
reg = <0x308d0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
||||||
@ -821,9 +821,9 @@ fec: ethernet@30be0000 {
|
|||||||
eqos: ethernet@30bf0000 {
|
eqos: ethernet@30bf0000 {
|
||||||
compatible = "nxp,imx8mp-dwmac-eqos", "snps,dwmac-5.10a";
|
compatible = "nxp,imx8mp-dwmac-eqos", "snps,dwmac-5.10a";
|
||||||
reg = <0x30bf0000 0x10000>;
|
reg = <0x30bf0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "eth_wake_irq", "macirq";
|
interrupt-names = "macirq", "eth_wake_irq";
|
||||||
clocks = <&clk IMX8MP_CLK_ENET_QOS_ROOT>,
|
clocks = <&clk IMX8MP_CLK_ENET_QOS_ROOT>,
|
||||||
<&clk IMX8MP_CLK_QOS_ENET_ROOT>,
|
<&clk IMX8MP_CLK_QOS_ENET_ROOT>,
|
||||||
<&clk IMX8MP_CLK_ENET_QOS_TIMER>,
|
<&clk IMX8MP_CLK_ENET_QOS_TIMER>,
|
||||||
|
@ -19,6 +19,8 @@ / {
|
|||||||
aliases {
|
aliases {
|
||||||
spi0 = &spi0;
|
spi0 = &spi0;
|
||||||
ethernet1 = ð1;
|
ethernet1 = ð1;
|
||||||
|
mmc0 = &sdhci0;
|
||||||
|
mmc1 = &sdhci1;
|
||||||
};
|
};
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
@ -119,6 +121,7 @@ &i2c0 {
|
|||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&i2c1_pins>;
|
pinctrl-0 = <&i2c1_pins>;
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
|
/delete-property/ mrvl,i2c-fast-mode;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
rtc@6f {
|
rtc@6f {
|
||||||
|
@ -1840,7 +1840,11 @@ pcie@14100000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE1R &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE1R &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE1W &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE1W &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE1>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE1 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@14120000 {
|
pcie@14120000 {
|
||||||
@ -1890,7 +1894,11 @@ pcie@14120000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE2AR &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE2AR &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE2AW &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE2AW &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE2>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE2 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@14140000 {
|
pcie@14140000 {
|
||||||
@ -1940,7 +1948,11 @@ pcie@14140000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE3R &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE3R &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE3W &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE3W &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE3>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE3 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@14160000 {
|
pcie@14160000 {
|
||||||
@ -1990,7 +2002,11 @@ pcie@14160000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE4>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE4 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@14180000 {
|
pcie@14180000 {
|
||||||
@ -2040,7 +2056,11 @@ pcie@14180000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE0>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE0 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@141a0000 {
|
pcie@141a0000 {
|
||||||
@ -2094,7 +2114,11 @@ pcie@141a0000 {
|
|||||||
|
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
|
||||||
<&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
|
||||||
interconnect-names = "read", "write";
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE5>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE5 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie_ep@14160000 {
|
pcie_ep@14160000 {
|
||||||
@ -2127,6 +2151,14 @@ pcie_ep@14160000 {
|
|||||||
nvidia,aspm-cmrt-us = <60>;
|
nvidia,aspm-cmrt-us = <60>;
|
||||||
nvidia,aspm-pwr-on-t-us = <20>;
|
nvidia,aspm-pwr-on-t-us = <20>;
|
||||||
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
||||||
|
|
||||||
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE4R &emc>,
|
||||||
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE4W &emc>;
|
||||||
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE4>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE4 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie_ep@14180000 {
|
pcie_ep@14180000 {
|
||||||
@ -2159,6 +2191,14 @@ pcie_ep@14180000 {
|
|||||||
nvidia,aspm-cmrt-us = <60>;
|
nvidia,aspm-cmrt-us = <60>;
|
||||||
nvidia,aspm-pwr-on-t-us = <20>;
|
nvidia,aspm-pwr-on-t-us = <20>;
|
||||||
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
||||||
|
|
||||||
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE0R &emc>,
|
||||||
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE0W &emc>;
|
||||||
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE0>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE0 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie_ep@141a0000 {
|
pcie_ep@141a0000 {
|
||||||
@ -2194,6 +2234,14 @@ pcie_ep@141a0000 {
|
|||||||
nvidia,aspm-cmrt-us = <60>;
|
nvidia,aspm-cmrt-us = <60>;
|
||||||
nvidia,aspm-pwr-on-t-us = <20>;
|
nvidia,aspm-pwr-on-t-us = <20>;
|
||||||
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
nvidia,aspm-l0s-entrance-latency-us = <3>;
|
||||||
|
|
||||||
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_PCIE5R &emc>,
|
||||||
|
<&mc TEGRA194_MEMORY_CLIENT_PCIE5W &emc>;
|
||||||
|
interconnect-names = "dma-mem", "write";
|
||||||
|
iommus = <&smmu TEGRA194_SID_PCIE5>;
|
||||||
|
iommu-map = <0x0 &smmu TEGRA194_SID_PCIE5 0x1000>;
|
||||||
|
iommu-map-mask = <0x0>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
sram@40000000 {
|
sram@40000000 {
|
||||||
|
@ -1321,6 +1321,7 @@ CONFIG_R8712U=m
|
|||||||
CONFIG_R8188EU=m
|
CONFIG_R8188EU=m
|
||||||
CONFIG_VT6656=m
|
CONFIG_VT6656=m
|
||||||
CONFIG_STAGING_MEDIA=y
|
CONFIG_STAGING_MEDIA=y
|
||||||
|
CONFIG_VIDEO_RPIVID=m
|
||||||
CONFIG_ASHMEM=y
|
CONFIG_ASHMEM=y
|
||||||
CONFIG_FB_TFT=m
|
CONFIG_FB_TFT=m
|
||||||
CONFIG_FB_TFT_AGM1264K_FL=m
|
CONFIG_FB_TFT_AGM1264K_FL=m
|
||||||
|
@ -320,7 +320,17 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
|||||||
|
|
||||||
static inline unsigned long regs_return_value(struct pt_regs *regs)
|
static inline unsigned long regs_return_value(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return regs->regs[0];
|
unsigned long val = regs->regs[0];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Audit currently uses regs_return_value() instead of
|
||||||
|
* syscall_get_return_value(). Apply the same sign-extension here until
|
||||||
|
* audit is updated to use syscall_get_return_value().
|
||||||
|
*/
|
||||||
|
if (compat_user_mode(regs))
|
||||||
|
val = sign_extend64(val, 31);
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)
|
static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)
|
||||||
|
@ -29,24 +29,25 @@ static inline void syscall_rollback(struct task_struct *task,
|
|||||||
regs->regs[0] = regs->orig_x0;
|
regs->regs[0] = regs->orig_x0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline long syscall_get_return_value(struct task_struct *task,
|
||||||
|
struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
unsigned long val = regs->regs[0];
|
||||||
|
|
||||||
|
if (is_compat_thread(task_thread_info(task)))
|
||||||
|
val = sign_extend64(val, 31);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
static inline long syscall_get_error(struct task_struct *task,
|
static inline long syscall_get_error(struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long error = regs->regs[0];
|
unsigned long error = syscall_get_return_value(task, regs);
|
||||||
|
|
||||||
if (is_compat_thread(task_thread_info(task)))
|
|
||||||
error = sign_extend64(error, 31);
|
|
||||||
|
|
||||||
return IS_ERR_VALUE(error) ? error : 0;
|
return IS_ERR_VALUE(error) ? error : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long syscall_get_return_value(struct task_struct *task,
|
|
||||||
struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return regs->regs[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void syscall_set_return_value(struct task_struct *task,
|
static inline void syscall_set_return_value(struct task_struct *task,
|
||||||
struct pt_regs *regs,
|
struct pt_regs *regs,
|
||||||
int error, long val)
|
int error, long val)
|
||||||
|
@ -162,7 +162,9 @@ u64 __init kaslr_early_init(void)
|
|||||||
* a PAGE_SIZE multiple in the range [_etext - MODULES_VSIZE,
|
* a PAGE_SIZE multiple in the range [_etext - MODULES_VSIZE,
|
||||||
* _stext) . This guarantees that the resulting region still
|
* _stext) . This guarantees that the resulting region still
|
||||||
* covers [_stext, _etext], and that all relative branches can
|
* covers [_stext, _etext], and that all relative branches can
|
||||||
* be resolved without veneers.
|
* be resolved without veneers unless this region is exhausted
|
||||||
|
* and we fall back to a larger 2GB window in module_alloc()
|
||||||
|
* when ARM64_MODULE_PLTS is enabled.
|
||||||
*/
|
*/
|
||||||
module_range = MODULES_VSIZE - (u64)(_etext - _stext);
|
module_range = MODULES_VSIZE - (u64)(_etext - _stext);
|
||||||
module_alloc_base = (u64)_etext + offset - MODULES_VSIZE;
|
module_alloc_base = (u64)_etext + offset - MODULES_VSIZE;
|
||||||
|
@ -1862,7 +1862,7 @@ void syscall_trace_exit(struct pt_regs *regs)
|
|||||||
audit_syscall_exit(regs);
|
audit_syscall_exit(regs);
|
||||||
|
|
||||||
if (flags & _TIF_SYSCALL_TRACEPOINT)
|
if (flags & _TIF_SYSCALL_TRACEPOINT)
|
||||||
trace_sys_exit(regs, regs_return_value(regs));
|
trace_sys_exit(regs, syscall_get_return_value(current, regs));
|
||||||
|
|
||||||
if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
|
if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
|
||||||
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
|
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/fpsimd.h>
|
#include <asm/fpsimd.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
#include <asm/syscall.h>
|
||||||
#include <asm/signal32.h>
|
#include <asm/signal32.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
#include <asm/vdso.h>
|
#include <asm/vdso.h>
|
||||||
@ -890,7 +891,7 @@ static void do_signal(struct pt_regs *regs)
|
|||||||
retval == -ERESTART_RESTARTBLOCK ||
|
retval == -ERESTART_RESTARTBLOCK ||
|
||||||
(retval == -ERESTARTSYS &&
|
(retval == -ERESTARTSYS &&
|
||||||
!(ksig.ka.sa.sa_flags & SA_RESTART)))) {
|
!(ksig.ka.sa.sa_flags & SA_RESTART)))) {
|
||||||
regs->regs[0] = -EINTR;
|
syscall_set_return_value(current, regs, -EINTR, 0);
|
||||||
regs->pc = continue_addr;
|
regs->pc = continue_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)
|
|||||||
|
|
||||||
#ifdef CONFIG_STACKTRACE
|
#ifdef CONFIG_STACKTRACE
|
||||||
|
|
||||||
noinline void arch_stack_walk(stack_trace_consume_fn consume_entry,
|
noinline notrace void arch_stack_walk(stack_trace_consume_fn consume_entry,
|
||||||
void *cookie, struct task_struct *task,
|
void *cookie, struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
@ -54,10 +54,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
|
|||||||
ret = do_ni_syscall(regs, scno);
|
ret = do_ni_syscall(regs, scno);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_compat_task())
|
syscall_set_return_value(current, regs, 0, ret);
|
||||||
ret = lower_32_bits(ret);
|
|
||||||
|
|
||||||
regs->regs[0] = ret;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
|
* Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
|
||||||
@ -115,7 +112,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
|
|||||||
* syscall. do_notify_resume() will send a signal to userspace
|
* syscall. do_notify_resume() will send a signal to userspace
|
||||||
* before the syscall is restarted.
|
* before the syscall is restarted.
|
||||||
*/
|
*/
|
||||||
regs->regs[0] = -ERESTARTNOINTR;
|
syscall_set_return_value(current, regs, -ERESTARTNOINTR, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +133,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
|
|||||||
* anyway.
|
* anyway.
|
||||||
*/
|
*/
|
||||||
if (scno == NO_SYSCALL)
|
if (scno == NO_SYSCALL)
|
||||||
regs->regs[0] = -ENOSYS;
|
syscall_set_return_value(current, regs, -ENOSYS, 0);
|
||||||
scno = syscall_trace_enter(regs);
|
scno = syscall_trace_enter(regs);
|
||||||
if (scno == NO_SYSCALL)
|
if (scno == NO_SYSCALL)
|
||||||
goto trace_exit;
|
goto trace_exit;
|
||||||
|
@ -823,6 +823,19 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,
|
|||||||
return ret;
|
return ret;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* speculation barrier */
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
/*
|
||||||
|
* Nothing required here.
|
||||||
|
*
|
||||||
|
* In case of arm64, we rely on the firmware mitigation of
|
||||||
|
* Speculative Store Bypass as controlled via the ssbd kernel
|
||||||
|
* parameter. Whenever the mitigation is enabled, it works
|
||||||
|
* for all of the kernel code with no need to provide any
|
||||||
|
* additional instructions.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
|
||||||
/* ST: *(size *)(dst + off) = imm */
|
/* ST: *(size *)(dst + off) = imm */
|
||||||
case BPF_ST | BPF_MEM | BPF_W:
|
case BPF_ST | BPF_MEM | BPF_W:
|
||||||
case BPF_ST | BPF_MEM | BPF_H:
|
case BPF_ST | BPF_MEM | BPF_H:
|
||||||
|
@ -44,7 +44,6 @@ config H8300_H8MAX
|
|||||||
bool "H8MAX"
|
bool "H8MAX"
|
||||||
select H83069
|
select H83069
|
||||||
select RAMKERNEL
|
select RAMKERNEL
|
||||||
select HAVE_IDE
|
|
||||||
help
|
help
|
||||||
H8MAX Evaluation Board Support
|
H8MAX Evaluation Board Support
|
||||||
More Information. (Japanese Only)
|
More Information. (Japanese Only)
|
||||||
|
@ -25,7 +25,6 @@ config IA64
|
|||||||
select HAVE_ASM_MODVERSIONS
|
select HAVE_ASM_MODVERSIONS
|
||||||
select HAVE_UNSTABLE_SCHED_CLOCK
|
select HAVE_UNSTABLE_SCHED_CLOCK
|
||||||
select HAVE_EXIT_THREAD
|
select HAVE_EXIT_THREAD
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_KPROBES
|
select HAVE_KPROBES
|
||||||
select HAVE_KRETPROBES
|
select HAVE_KRETPROBES
|
||||||
select HAVE_FTRACE_MCOUNT_RECORD
|
select HAVE_FTRACE_MCOUNT_RECORD
|
||||||
|
@ -23,7 +23,6 @@ config M68K
|
|||||||
select HAVE_DEBUG_BUGVERBOSE
|
select HAVE_DEBUG_BUGVERBOSE
|
||||||
select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_HAS_NO_UNALIGNED
|
select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_HAS_NO_UNALIGNED
|
||||||
select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
|
select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_MOD_ARCH_SPECIFIC
|
select HAVE_MOD_ARCH_SPECIFIC
|
||||||
select HAVE_UID16
|
select HAVE_UID16
|
||||||
select MMU_GATHER_NO_RANGE if MMU
|
select MMU_GATHER_NO_RANGE if MMU
|
||||||
|
@ -26,7 +26,7 @@ DEFINE_CLK(pll, "pll.0", MCF_CLK);
|
|||||||
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
DEFINE_CLK(sys, "sys.0", MCF_BUSCLK);
|
||||||
|
|
||||||
static struct clk_lookup m525x_clk_lookup[] = {
|
static struct clk_lookup m525x_clk_lookup[] = {
|
||||||
CLKDEV_INIT(NULL, "pll.0", &pll),
|
CLKDEV_INIT(NULL, "pll.0", &clk_pll),
|
||||||
CLKDEV_INIT(NULL, "sys.0", &clk_sys),
|
CLKDEV_INIT(NULL, "sys.0", &clk_sys),
|
||||||
CLKDEV_INIT("mcftmr.0", NULL, &clk_sys),
|
CLKDEV_INIT("mcftmr.0", NULL, &clk_sys),
|
||||||
CLKDEV_INIT("mcftmr.1", NULL, &clk_sys),
|
CLKDEV_INIT("mcftmr.1", NULL, &clk_sys),
|
||||||
|
@ -71,7 +71,6 @@ config MIPS
|
|||||||
select HAVE_FUNCTION_TRACER
|
select HAVE_FUNCTION_TRACER
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
select HAVE_GENERIC_VDSO
|
select HAVE_GENERIC_VDSO
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_IOREMAP_PROT
|
select HAVE_IOREMAP_PROT
|
||||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
||||||
select HAVE_IRQ_TIME_ACCOUNTING
|
select HAVE_IRQ_TIME_ACCOUNTING
|
||||||
|
@ -58,15 +58,20 @@ do { \
|
|||||||
|
|
||||||
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
|
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||||
{
|
{
|
||||||
pmd_t *pmd = NULL;
|
pmd_t *pmd;
|
||||||
struct page *pg;
|
struct page *pg;
|
||||||
|
|
||||||
pg = alloc_pages(GFP_KERNEL | __GFP_ACCOUNT, PMD_ORDER);
|
pg = alloc_pages(GFP_KERNEL_ACCOUNT, PMD_ORDER);
|
||||||
if (pg) {
|
if (!pg)
|
||||||
pgtable_pmd_page_ctor(pg);
|
return NULL;
|
||||||
pmd = (pmd_t *)page_address(pg);
|
|
||||||
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
|
if (!pgtable_pmd_page_ctor(pg)) {
|
||||||
|
__free_pages(pg, PMD_ORDER);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pmd = (pmd_t *)page_address(pg);
|
||||||
|
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
|
||||||
return pmd;
|
return pmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,8 @@ static struct plat_serial8250_port uart8250_data[] = {
|
|||||||
.mapbase = 0x1f000900, /* The CBUS UART */
|
.mapbase = 0x1f000900, /* The CBUS UART */
|
||||||
.irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
|
.irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
|
||||||
.uartclk = 3686400, /* Twice the usual clk! */
|
.uartclk = 3686400, /* Twice the usual clk! */
|
||||||
.iotype = UPIO_MEM32,
|
.iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
|
||||||
|
UPIO_MEM32BE : UPIO_MEM32,
|
||||||
.flags = CBUS_UART_FLAGS,
|
.flags = CBUS_UART_FLAGS,
|
||||||
.regshift = 3,
|
.regshift = 3,
|
||||||
},
|
},
|
||||||
|
@ -1355,6 +1355,9 @@ static int build_one_insn(const struct bpf_insn *insn, struct jit_ctx *ctx,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BPF_ST | BPF_NOSPEC: /* speculation barrier */
|
||||||
|
break;
|
||||||
|
|
||||||
case BPF_ST | BPF_B | BPF_MEM:
|
case BPF_ST | BPF_B | BPF_MEM:
|
||||||
case BPF_ST | BPF_H | BPF_MEM:
|
case BPF_ST | BPF_H | BPF_MEM:
|
||||||
case BPF_ST | BPF_W | BPF_MEM:
|
case BPF_ST | BPF_W | BPF_MEM:
|
||||||
|
@ -3,7 +3,6 @@ config PARISC
|
|||||||
def_bool y
|
def_bool y
|
||||||
select ARCH_32BIT_OFF_T if !64BIT
|
select ARCH_32BIT_OFF_T if !64BIT
|
||||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_FUNCTION_TRACER
|
select HAVE_FUNCTION_TRACER
|
||||||
select HAVE_FUNCTION_GRAPH_TRACER
|
select HAVE_FUNCTION_GRAPH_TRACER
|
||||||
select HAVE_SYSCALL_TRACEPOINTS
|
select HAVE_SYSCALL_TRACEPOINTS
|
||||||
|
@ -220,7 +220,6 @@ config PPC
|
|||||||
select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP
|
select HAVE_HARDLOCKUP_DETECTOR_ARCH if PPC_BOOK3S_64 && SMP
|
||||||
select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !HAVE_HARDLOCKUP_DETECTOR_ARCH
|
select HAVE_HARDLOCKUP_DETECTOR_PERF if PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !HAVE_HARDLOCKUP_DETECTOR_ARCH
|
||||||
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
|
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_IOREMAP_PROT
|
select HAVE_IOREMAP_PROT
|
||||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
select HAVE_IRQ_EXIT_ON_IRQ_STACK
|
||||||
select HAVE_IRQ_TIME_ACCOUNTING
|
select HAVE_IRQ_TIME_ACCOUNTING
|
||||||
|
@ -27,6 +27,13 @@ KASAN_SANITIZE := n
|
|||||||
|
|
||||||
ccflags-y := -shared -fno-common -fno-builtin -nostdlib \
|
ccflags-y := -shared -fno-common -fno-builtin -nostdlib \
|
||||||
-Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both
|
-Wl,-soname=linux-vdso64.so.1 -Wl,--hash-style=both
|
||||||
|
|
||||||
|
# Go prior to 1.16.x assumes r30 is not clobbered by any VDSO code. That used to be true
|
||||||
|
# by accident when the VDSO was hand-written asm code, but may not be now that the VDSO is
|
||||||
|
# compiler generated. To avoid breaking Go tell GCC not to use r30. Impact on code
|
||||||
|
# generation is minimal, it will just use r29 instead.
|
||||||
|
ccflags-y += $(call cc-option, -ffixed-r30)
|
||||||
|
|
||||||
asflags-y := -D__VDSO64__ -s
|
asflags-y := -D__VDSO64__ -s
|
||||||
|
|
||||||
targets += vdso64.lds
|
targets += vdso64.lds
|
||||||
|
@ -737,6 +737,12 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BPF_ST NOSPEC (speculation barrier)
|
||||||
|
*/
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BPF_ST(X)
|
* BPF_ST(X)
|
||||||
*/
|
*/
|
||||||
|
@ -627,6 +627,12 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BPF_ST NOSPEC (speculation barrier)
|
||||||
|
*/
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BPF_ST(X)
|
* BPF_ST(X)
|
||||||
*/
|
*/
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
#include "../../../../drivers/pci/pci.h"
|
#include "../../../../drivers/pci/pci.h"
|
||||||
|
|
||||||
DEFINE_STATIC_KEY_FALSE(shared_processor);
|
DEFINE_STATIC_KEY_FALSE(shared_processor);
|
||||||
EXPORT_SYMBOL_GPL(shared_processor);
|
EXPORT_SYMBOL(shared_processor);
|
||||||
|
|
||||||
int CMO_PrPSP = -1;
|
int CMO_PrPSP = -1;
|
||||||
int CMO_SecPSP = -1;
|
int CMO_SecPSP = -1;
|
||||||
|
@ -492,10 +492,16 @@ config CC_HAVE_STACKPROTECTOR_TLS
|
|||||||
|
|
||||||
config STACKPROTECTOR_PER_TASK
|
config STACKPROTECTOR_PER_TASK
|
||||||
def_bool y
|
def_bool y
|
||||||
|
depends on !GCC_PLUGIN_RANDSTRUCT
|
||||||
depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
|
depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
|
||||||
|
|
||||||
|
config PHYS_RAM_BASE_FIXED
|
||||||
|
bool "Explicitly specified physical RAM address"
|
||||||
|
default n
|
||||||
|
|
||||||
config PHYS_RAM_BASE
|
config PHYS_RAM_BASE
|
||||||
hex "Platform Physical RAM address"
|
hex "Platform Physical RAM address"
|
||||||
|
depends on PHYS_RAM_BASE_FIXED
|
||||||
default "0x80000000"
|
default "0x80000000"
|
||||||
help
|
help
|
||||||
This is the physical address of RAM in the system. It has to be
|
This is the physical address of RAM in the system. It has to be
|
||||||
@ -508,6 +514,7 @@ config XIP_KERNEL
|
|||||||
# This prevents XIP from being enabled by all{yes,mod}config, which
|
# This prevents XIP from being enabled by all{yes,mod}config, which
|
||||||
# fail to build since XIP doesn't support large kernels.
|
# fail to build since XIP doesn't support large kernels.
|
||||||
depends on !COMPILE_TEST
|
depends on !COMPILE_TEST
|
||||||
|
select PHYS_RAM_BASE_FIXED
|
||||||
help
|
help
|
||||||
Execute-In-Place allows the kernel to run from non-volatile storage
|
Execute-In-Place allows the kernel to run from non-volatile storage
|
||||||
directly addressable by the CPU, such as NOR flash. This saves RAM
|
directly addressable by the CPU, such as NOR flash. This saves RAM
|
||||||
|
@ -103,6 +103,7 @@ struct kernel_mapping {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern struct kernel_mapping kernel_map;
|
extern struct kernel_mapping kernel_map;
|
||||||
|
extern phys_addr_t phys_ram_base;
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
#define is_kernel_mapping(x) \
|
#define is_kernel_mapping(x) \
|
||||||
@ -113,9 +114,9 @@ extern struct kernel_mapping kernel_map;
|
|||||||
#define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
|
#define linear_mapping_pa_to_va(x) ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
|
||||||
#define kernel_mapping_pa_to_va(y) ({ \
|
#define kernel_mapping_pa_to_va(y) ({ \
|
||||||
unsigned long _y = y; \
|
unsigned long _y = y; \
|
||||||
(_y >= CONFIG_PHYS_RAM_BASE) ? \
|
(IS_ENABLED(CONFIG_XIP_KERNEL) && _y < phys_ram_base) ? \
|
||||||
(void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET) : \
|
(void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset) : \
|
||||||
(void *)((unsigned long)(_y) + kernel_map.va_kernel_xip_pa_offset); \
|
(void *)((unsigned long)(_y) + kernel_map.va_kernel_pa_offset + XIP_OFFSET); \
|
||||||
})
|
})
|
||||||
#define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)
|
#define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x)
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
|||||||
fp = frame_pointer(regs);
|
fp = frame_pointer(regs);
|
||||||
sp = user_stack_pointer(regs);
|
sp = user_stack_pointer(regs);
|
||||||
pc = instruction_pointer(regs);
|
pc = instruction_pointer(regs);
|
||||||
} else if (task == current) {
|
} else if (task == NULL || task == current) {
|
||||||
fp = (unsigned long)__builtin_frame_address(1);
|
fp = (unsigned long)__builtin_frame_address(1);
|
||||||
sp = (unsigned long)__builtin_frame_address(0);
|
sp = (unsigned long)__builtin_frame_address(0);
|
||||||
pc = (unsigned long)__builtin_return_address(0);
|
pc = (unsigned long)__builtin_return_address(0);
|
||||||
|
@ -36,6 +36,9 @@ EXPORT_SYMBOL(kernel_map);
|
|||||||
#define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
|
#define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
phys_addr_t phys_ram_base __ro_after_init;
|
||||||
|
EXPORT_SYMBOL(phys_ram_base);
|
||||||
|
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
extern char _xiprom[], _exiprom[];
|
extern char _xiprom[], _exiprom[];
|
||||||
#endif
|
#endif
|
||||||
@ -160,7 +163,7 @@ static void __init setup_bootmem(void)
|
|||||||
phys_addr_t vmlinux_end = __pa_symbol(&_end);
|
phys_addr_t vmlinux_end = __pa_symbol(&_end);
|
||||||
phys_addr_t vmlinux_start = __pa_symbol(&_start);
|
phys_addr_t vmlinux_start = __pa_symbol(&_start);
|
||||||
phys_addr_t __maybe_unused max_mapped_addr;
|
phys_addr_t __maybe_unused max_mapped_addr;
|
||||||
phys_addr_t dram_end;
|
phys_addr_t phys_ram_end;
|
||||||
|
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
vmlinux_start = __pa_symbol(&_sdata);
|
vmlinux_start = __pa_symbol(&_sdata);
|
||||||
@ -181,9 +184,12 @@ static void __init setup_bootmem(void)
|
|||||||
#endif
|
#endif
|
||||||
memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
|
memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
|
||||||
|
|
||||||
dram_end = memblock_end_of_DRAM();
|
|
||||||
|
|
||||||
|
phys_ram_end = memblock_end_of_DRAM();
|
||||||
#ifndef CONFIG_64BIT
|
#ifndef CONFIG_64BIT
|
||||||
|
#ifndef CONFIG_XIP_KERNEL
|
||||||
|
phys_ram_base = memblock_start_of_DRAM();
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* memblock allocator is not aware of the fact that last 4K bytes of
|
* memblock allocator is not aware of the fact that last 4K bytes of
|
||||||
* the addressable memory can not be mapped because of IS_ERR_VALUE
|
* the addressable memory can not be mapped because of IS_ERR_VALUE
|
||||||
@ -194,12 +200,12 @@ static void __init setup_bootmem(void)
|
|||||||
* be done in create_kernel_page_table.
|
* be done in create_kernel_page_table.
|
||||||
*/
|
*/
|
||||||
max_mapped_addr = __pa(~(ulong)0);
|
max_mapped_addr = __pa(~(ulong)0);
|
||||||
if (max_mapped_addr == (dram_end - 1))
|
if (max_mapped_addr == (phys_ram_end - 1))
|
||||||
memblock_set_current_limit(max_mapped_addr - 4096);
|
memblock_set_current_limit(max_mapped_addr - 4096);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
min_low_pfn = PFN_UP(memblock_start_of_DRAM());
|
min_low_pfn = PFN_UP(phys_ram_base);
|
||||||
max_low_pfn = max_pfn = PFN_DOWN(dram_end);
|
max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
|
||||||
|
|
||||||
dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
|
dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
|
||||||
set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
|
set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
|
||||||
@ -558,6 +564,7 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
|
|||||||
kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
|
kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR;
|
||||||
kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
|
kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom);
|
||||||
|
|
||||||
|
phys_ram_base = CONFIG_PHYS_RAM_BASE;
|
||||||
kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
|
kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE;
|
||||||
kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata);
|
kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_sdata);
|
||||||
|
|
||||||
|
@ -1251,6 +1251,10 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
|
|||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* speculation barrier */
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
|
|
||||||
case BPF_ST | BPF_MEM | BPF_B:
|
case BPF_ST | BPF_MEM | BPF_B:
|
||||||
case BPF_ST | BPF_MEM | BPF_H:
|
case BPF_ST | BPF_MEM | BPF_H:
|
||||||
case BPF_ST | BPF_MEM | BPF_W:
|
case BPF_ST | BPF_MEM | BPF_W:
|
||||||
|
@ -939,6 +939,10 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, struct rv_jit_context *ctx,
|
|||||||
emit_ld(rd, 0, RV_REG_T1, ctx);
|
emit_ld(rd, 0, RV_REG_T1, ctx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* speculation barrier */
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
|
|
||||||
/* ST: *(size *)(dst + off) = imm */
|
/* ST: *(size *)(dst + off) = imm */
|
||||||
case BPF_ST | BPF_MEM | BPF_B:
|
case BPF_ST | BPF_MEM | BPF_B:
|
||||||
emit_imm(RV_REG_T1, imm, ctx);
|
emit_imm(RV_REG_T1, imm, ctx);
|
||||||
|
@ -11,6 +11,7 @@ UBSAN_SANITIZE := n
|
|||||||
KASAN_SANITIZE := n
|
KASAN_SANITIZE := n
|
||||||
|
|
||||||
obj-y := $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
|
obj-y := $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o
|
||||||
|
obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o
|
||||||
obj-all := $(obj-y) piggy.o syms.o
|
obj-all := $(obj-y) piggy.o syms.o
|
||||||
targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
|
targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2
|
||||||
targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4
|
targets += vmlinux.bin.xz vmlinux.bin.lzma vmlinux.bin.lzo vmlinux.bin.lz4
|
||||||
|
2
arch/s390/boot/compressed/clz_ctz.c
Normal file
2
arch/s390/boot/compressed/clz_ctz.c
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
#include "../../../../lib/clz_ctz.c"
|
@ -445,15 +445,15 @@ struct kvm_vcpu_stat {
|
|||||||
u64 instruction_sigp_init_cpu_reset;
|
u64 instruction_sigp_init_cpu_reset;
|
||||||
u64 instruction_sigp_cpu_reset;
|
u64 instruction_sigp_cpu_reset;
|
||||||
u64 instruction_sigp_unknown;
|
u64 instruction_sigp_unknown;
|
||||||
u64 diagnose_10;
|
u64 instruction_diagnose_10;
|
||||||
u64 diagnose_44;
|
u64 instruction_diagnose_44;
|
||||||
u64 diagnose_9c;
|
u64 instruction_diagnose_9c;
|
||||||
u64 diagnose_9c_ignored;
|
u64 diag_9c_ignored;
|
||||||
u64 diagnose_9c_forward;
|
u64 diag_9c_forward;
|
||||||
u64 diagnose_258;
|
u64 instruction_diagnose_258;
|
||||||
u64 diagnose_308;
|
u64 instruction_diagnose_308;
|
||||||
u64 diagnose_500;
|
u64 instruction_diagnose_500;
|
||||||
u64 diagnose_other;
|
u64 instruction_diagnose_other;
|
||||||
u64 pfault_sync;
|
u64 pfault_sync;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ SECTIONS
|
|||||||
|
|
||||||
.rela.dyn ALIGN(8) : { *(.rela.dyn) }
|
.rela.dyn ALIGN(8) : { *(.rela.dyn) }
|
||||||
.got ALIGN(8) : { *(.got .toc) }
|
.got ALIGN(8) : { *(.got .toc) }
|
||||||
|
.got.plt ALIGN(8) : { *(.got.plt) }
|
||||||
|
|
||||||
_end = .;
|
_end = .;
|
||||||
PROVIDE(end = .);
|
PROVIDE(end = .);
|
||||||
|
@ -51,6 +51,7 @@ SECTIONS
|
|||||||
|
|
||||||
.rela.dyn ALIGN(8) : { *(.rela.dyn) }
|
.rela.dyn ALIGN(8) : { *(.rela.dyn) }
|
||||||
.got ALIGN(8) : { *(.got .toc) }
|
.got ALIGN(8) : { *(.got .toc) }
|
||||||
|
.got.plt ALIGN(8) : { *(.got.plt) }
|
||||||
|
|
||||||
_end = .;
|
_end = .;
|
||||||
PROVIDE(end = .);
|
PROVIDE(end = .);
|
||||||
|
@ -24,7 +24,7 @@ static int diag_release_pages(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
||||||
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + PAGE_SIZE;
|
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + PAGE_SIZE;
|
||||||
vcpu->stat.diagnose_10++;
|
vcpu->stat.instruction_diagnose_10++;
|
||||||
|
|
||||||
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
|
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
|
||||||
|| start < 2 * PAGE_SIZE)
|
|| start < 2 * PAGE_SIZE)
|
||||||
@ -74,7 +74,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
VCPU_EVENT(vcpu, 3, "diag page reference parameter block at 0x%llx",
|
VCPU_EVENT(vcpu, 3, "diag page reference parameter block at 0x%llx",
|
||||||
vcpu->run->s.regs.gprs[rx]);
|
vcpu->run->s.regs.gprs[rx]);
|
||||||
vcpu->stat.diagnose_258++;
|
vcpu->stat.instruction_diagnose_258++;
|
||||||
if (vcpu->run->s.regs.gprs[rx] & 7)
|
if (vcpu->run->s.regs.gprs[rx] & 7)
|
||||||
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
|
||||||
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
|
||||||
@ -145,7 +145,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
|
|||||||
static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
|
static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
VCPU_EVENT(vcpu, 5, "%s", "diag time slice end");
|
VCPU_EVENT(vcpu, 5, "%s", "diag time slice end");
|
||||||
vcpu->stat.diagnose_44++;
|
vcpu->stat.instruction_diagnose_44++;
|
||||||
kvm_vcpu_on_spin(vcpu, true);
|
kvm_vcpu_on_spin(vcpu, true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
|||||||
int tid;
|
int tid;
|
||||||
|
|
||||||
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
||||||
vcpu->stat.diagnose_9c++;
|
vcpu->stat.instruction_diagnose_9c++;
|
||||||
|
|
||||||
/* yield to self */
|
/* yield to self */
|
||||||
if (tid == vcpu->vcpu_id)
|
if (tid == vcpu->vcpu_id)
|
||||||
@ -192,7 +192,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
|||||||
VCPU_EVENT(vcpu, 5,
|
VCPU_EVENT(vcpu, 5,
|
||||||
"diag time slice end directed to %d: yield forwarded",
|
"diag time slice end directed to %d: yield forwarded",
|
||||||
tid);
|
tid);
|
||||||
vcpu->stat.diagnose_9c_forward++;
|
vcpu->stat.diag_9c_forward++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
|||||||
return 0;
|
return 0;
|
||||||
no_yield:
|
no_yield:
|
||||||
VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid);
|
VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid);
|
||||||
vcpu->stat.diagnose_9c_ignored++;
|
vcpu->stat.diag_9c_ignored++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ static int __diag_ipl_functions(struct kvm_vcpu *vcpu)
|
|||||||
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
|
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
|
||||||
|
|
||||||
VCPU_EVENT(vcpu, 3, "diag ipl functions, subcode %lx", subcode);
|
VCPU_EVENT(vcpu, 3, "diag ipl functions, subcode %lx", subcode);
|
||||||
vcpu->stat.diagnose_308++;
|
vcpu->stat.instruction_diagnose_308++;
|
||||||
switch (subcode) {
|
switch (subcode) {
|
||||||
case 3:
|
case 3:
|
||||||
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
|
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
|
||||||
@ -245,7 +245,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
vcpu->stat.diagnose_500++;
|
vcpu->stat.instruction_diagnose_500++;
|
||||||
/* No virtio-ccw notification? Get out quickly. */
|
/* No virtio-ccw notification? Get out quickly. */
|
||||||
if (!vcpu->kvm->arch.css_support ||
|
if (!vcpu->kvm->arch.css_support ||
|
||||||
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
|
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
|
||||||
@ -299,7 +299,7 @@ int kvm_s390_handle_diag(struct kvm_vcpu *vcpu)
|
|||||||
case 0x500:
|
case 0x500:
|
||||||
return __diag_virtio_hypercall(vcpu);
|
return __diag_virtio_hypercall(vcpu);
|
||||||
default:
|
default:
|
||||||
vcpu->stat.diagnose_other++;
|
vcpu->stat.instruction_diagnose_other++;
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,15 +163,15 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
|||||||
STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
|
STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
|
||||||
STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
|
STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
|
||||||
STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
|
STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_10),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_10),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_44),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_44),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_9c),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_9c),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_9c_ignored),
|
STATS_DESC_COUNTER(VCPU, diag_9c_ignored),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_9c_forward),
|
STATS_DESC_COUNTER(VCPU, diag_9c_forward),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_258),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_258),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_308),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_308),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_500),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_500),
|
||||||
STATS_DESC_COUNTER(VCPU, diagnose_other),
|
STATS_DESC_COUNTER(VCPU, instruction_diagnose_other),
|
||||||
STATS_DESC_COUNTER(VCPU, pfault_sync)
|
STATS_DESC_COUNTER(VCPU, pfault_sync)
|
||||||
};
|
};
|
||||||
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
|
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
|
||||||
|
@ -112,7 +112,7 @@ static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
|
|||||||
{
|
{
|
||||||
u32 r1 = reg2hex[b1];
|
u32 r1 = reg2hex[b1];
|
||||||
|
|
||||||
if (!jit->seen_reg[r1] && r1 >= 6 && r1 <= 15)
|
if (r1 >= 6 && r1 <= 15 && !jit->seen_reg[r1])
|
||||||
jit->seen_reg[r1] = 1;
|
jit->seen_reg[r1] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1153,6 +1153,11 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
/*
|
||||||
|
* BPF_NOSPEC (speculation barrier)
|
||||||
|
*/
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
/*
|
/*
|
||||||
* BPF_ST(X)
|
* BPF_ST(X)
|
||||||
*/
|
*/
|
||||||
|
@ -39,7 +39,6 @@ config SUPERH
|
|||||||
select HAVE_FUTEX_CMPXCHG if FUTEX
|
select HAVE_FUTEX_CMPXCHG if FUTEX
|
||||||
select HAVE_FTRACE_MCOUNT_RECORD
|
select HAVE_FTRACE_MCOUNT_RECORD
|
||||||
select HAVE_HW_BREAKPOINT
|
select HAVE_HW_BREAKPOINT
|
||||||
select HAVE_IDE if HAS_IOPORT_MAP
|
|
||||||
select HAVE_IOREMAP_PROT if MMU && !X2TLB
|
select HAVE_IOREMAP_PROT if MMU && !X2TLB
|
||||||
select HAVE_KERNEL_BZIP2
|
select HAVE_KERNEL_BZIP2
|
||||||
select HAVE_KERNEL_GZIP
|
select HAVE_KERNEL_GZIP
|
||||||
|
@ -19,7 +19,6 @@ config SPARC
|
|||||||
select OF
|
select OF
|
||||||
select OF_PROMTREE
|
select OF_PROMTREE
|
||||||
select HAVE_ASM_MODVERSIONS
|
select HAVE_ASM_MODVERSIONS
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_ARCH_KGDB if !SMP || SPARC64
|
select HAVE_ARCH_KGDB if !SMP || SPARC64
|
||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select HAVE_ARCH_SECCOMP if SPARC64
|
select HAVE_ARCH_SECCOMP if SPARC64
|
||||||
|
@ -1287,6 +1287,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
|
|||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* speculation barrier */
|
||||||
|
case BPF_ST | BPF_NOSPEC:
|
||||||
|
break;
|
||||||
/* ST: *(size *)(dst + off) = imm */
|
/* ST: *(size *)(dst + off) = imm */
|
||||||
case BPF_ST | BPF_MEM | BPF_W:
|
case BPF_ST | BPF_MEM | BPF_W:
|
||||||
case BPF_ST | BPF_MEM | BPF_H:
|
case BPF_ST | BPF_MEM | BPF_H:
|
||||||
|
@ -202,7 +202,6 @@ config X86
|
|||||||
select HAVE_FUNCTION_TRACER
|
select HAVE_FUNCTION_TRACER
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
select HAVE_HW_BREAKPOINT
|
select HAVE_HW_BREAKPOINT
|
||||||
select HAVE_IDE
|
|
||||||
select HAVE_IOREMAP_PROT
|
select HAVE_IOREMAP_PROT
|
||||||
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
|
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
|
||||||
select HAVE_IRQ_TIME_ACCOUNTING
|
select HAVE_IRQ_TIME_ACCOUNTING
|
||||||
|
@ -2489,13 +2489,15 @@ void perf_clear_dirty_counters(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for_each_set_bit(i, cpuc->dirty, X86_PMC_IDX_MAX) {
|
for_each_set_bit(i, cpuc->dirty, X86_PMC_IDX_MAX) {
|
||||||
/* Metrics and fake events don't have corresponding HW counters. */
|
if (i >= INTEL_PMC_IDX_FIXED) {
|
||||||
if (is_metric_idx(i) || (i == INTEL_PMC_IDX_FIXED_VLBR))
|
/* Metrics and fake events don't have corresponding HW counters. */
|
||||||
continue;
|
if ((i - INTEL_PMC_IDX_FIXED) >= hybrid(cpuc->pmu, num_counters_fixed))
|
||||||
else if (i >= INTEL_PMC_IDX_FIXED)
|
continue;
|
||||||
|
|
||||||
wrmsrl(MSR_ARCH_PERFMON_FIXED_CTR0 + (i - INTEL_PMC_IDX_FIXED), 0);
|
wrmsrl(MSR_ARCH_PERFMON_FIXED_CTR0 + (i - INTEL_PMC_IDX_FIXED), 0);
|
||||||
else
|
} else {
|
||||||
wrmsrl(x86_pmu_event_addr(i), 0);
|
wrmsrl(x86_pmu_event_addr(i), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_zero(cpuc->dirty, X86_PMC_IDX_MAX);
|
bitmap_zero(cpuc->dirty, X86_PMC_IDX_MAX);
|
||||||
|
@ -2904,24 +2904,28 @@ static int handle_pmi_common(struct pt_regs *regs, u64 status)
|
|||||||
*/
|
*/
|
||||||
static int intel_pmu_handle_irq(struct pt_regs *regs)
|
static int intel_pmu_handle_irq(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct cpu_hw_events *cpuc;
|
struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
|
||||||
|
bool late_ack = hybrid_bit(cpuc->pmu, late_ack);
|
||||||
|
bool mid_ack = hybrid_bit(cpuc->pmu, mid_ack);
|
||||||
int loops;
|
int loops;
|
||||||
u64 status;
|
u64 status;
|
||||||
int handled;
|
int handled;
|
||||||
int pmu_enabled;
|
int pmu_enabled;
|
||||||
|
|
||||||
cpuc = this_cpu_ptr(&cpu_hw_events);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save the PMU state.
|
* Save the PMU state.
|
||||||
* It needs to be restored when leaving the handler.
|
* It needs to be restored when leaving the handler.
|
||||||
*/
|
*/
|
||||||
pmu_enabled = cpuc->enabled;
|
pmu_enabled = cpuc->enabled;
|
||||||
/*
|
/*
|
||||||
* No known reason to not always do late ACK,
|
* In general, the early ACK is only applied for old platforms.
|
||||||
* but just in case do it opt-in.
|
* For the big core starts from Haswell, the late ACK should be
|
||||||
|
* applied.
|
||||||
|
* For the small core after Tremont, we have to do the ACK right
|
||||||
|
* before re-enabling counters, which is in the middle of the
|
||||||
|
* NMI handler.
|
||||||
*/
|
*/
|
||||||
if (!x86_pmu.late_ack)
|
if (!late_ack && !mid_ack)
|
||||||
apic_write(APIC_LVTPC, APIC_DM_NMI);
|
apic_write(APIC_LVTPC, APIC_DM_NMI);
|
||||||
intel_bts_disable_local();
|
intel_bts_disable_local();
|
||||||
cpuc->enabled = 0;
|
cpuc->enabled = 0;
|
||||||
@ -2958,6 +2962,8 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
|
|||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
if (mid_ack)
|
||||||
|
apic_write(APIC_LVTPC, APIC_DM_NMI);
|
||||||
/* Only restore PMU state when it's active. See x86_pmu_disable(). */
|
/* Only restore PMU state when it's active. See x86_pmu_disable(). */
|
||||||
cpuc->enabled = pmu_enabled;
|
cpuc->enabled = pmu_enabled;
|
||||||
if (pmu_enabled)
|
if (pmu_enabled)
|
||||||
@ -2969,7 +2975,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
|
|||||||
* have been reset. This avoids spurious NMIs on
|
* have been reset. This avoids spurious NMIs on
|
||||||
* Haswell CPUs.
|
* Haswell CPUs.
|
||||||
*/
|
*/
|
||||||
if (x86_pmu.late_ack)
|
if (late_ack)
|
||||||
apic_write(APIC_LVTPC, APIC_DM_NMI);
|
apic_write(APIC_LVTPC, APIC_DM_NMI);
|
||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
@ -6129,7 +6135,6 @@ __init int intel_pmu_init(void)
|
|||||||
static_branch_enable(&perf_is_hybrid);
|
static_branch_enable(&perf_is_hybrid);
|
||||||
x86_pmu.num_hybrid_pmus = X86_HYBRID_NUM_PMUS;
|
x86_pmu.num_hybrid_pmus = X86_HYBRID_NUM_PMUS;
|
||||||
|
|
||||||
x86_pmu.late_ack = true;
|
|
||||||
x86_pmu.pebs_aliases = NULL;
|
x86_pmu.pebs_aliases = NULL;
|
||||||
x86_pmu.pebs_prec_dist = true;
|
x86_pmu.pebs_prec_dist = true;
|
||||||
x86_pmu.pebs_block = true;
|
x86_pmu.pebs_block = true;
|
||||||
@ -6167,6 +6172,7 @@ __init int intel_pmu_init(void)
|
|||||||
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_CORE_IDX];
|
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_CORE_IDX];
|
||||||
pmu->name = "cpu_core";
|
pmu->name = "cpu_core";
|
||||||
pmu->cpu_type = hybrid_big;
|
pmu->cpu_type = hybrid_big;
|
||||||
|
pmu->late_ack = true;
|
||||||
if (cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) {
|
if (cpu_feature_enabled(X86_FEATURE_HYBRID_CPU)) {
|
||||||
pmu->num_counters = x86_pmu.num_counters + 2;
|
pmu->num_counters = x86_pmu.num_counters + 2;
|
||||||
pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1;
|
pmu->num_counters_fixed = x86_pmu.num_counters_fixed + 1;
|
||||||
@ -6192,6 +6198,7 @@ __init int intel_pmu_init(void)
|
|||||||
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX];
|
pmu = &x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX];
|
||||||
pmu->name = "cpu_atom";
|
pmu->name = "cpu_atom";
|
||||||
pmu->cpu_type = hybrid_small;
|
pmu->cpu_type = hybrid_small;
|
||||||
|
pmu->mid_ack = true;
|
||||||
pmu->num_counters = x86_pmu.num_counters;
|
pmu->num_counters = x86_pmu.num_counters;
|
||||||
pmu->num_counters_fixed = x86_pmu.num_counters_fixed;
|
pmu->num_counters_fixed = x86_pmu.num_counters_fixed;
|
||||||
pmu->max_pebs_events = x86_pmu.max_pebs_events;
|
pmu->max_pebs_events = x86_pmu.max_pebs_events;
|
||||||
|
@ -656,6 +656,10 @@ struct x86_hybrid_pmu {
|
|||||||
struct event_constraint *event_constraints;
|
struct event_constraint *event_constraints;
|
||||||
struct event_constraint *pebs_constraints;
|
struct event_constraint *pebs_constraints;
|
||||||
struct extra_reg *extra_regs;
|
struct extra_reg *extra_regs;
|
||||||
|
|
||||||
|
unsigned int late_ack :1,
|
||||||
|
mid_ack :1,
|
||||||
|
enabled_ack :1;
|
||||||
};
|
};
|
||||||
|
|
||||||
static __always_inline struct x86_hybrid_pmu *hybrid_pmu(struct pmu *pmu)
|
static __always_inline struct x86_hybrid_pmu *hybrid_pmu(struct pmu *pmu)
|
||||||
@ -686,6 +690,16 @@ extern struct static_key_false perf_is_hybrid;
|
|||||||
__Fp; \
|
__Fp; \
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
#define hybrid_bit(_pmu, _field) \
|
||||||
|
({ \
|
||||||
|
bool __Fp = x86_pmu._field; \
|
||||||
|
\
|
||||||
|
if (is_hybrid() && (_pmu)) \
|
||||||
|
__Fp = hybrid_pmu(_pmu)->_field; \
|
||||||
|
\
|
||||||
|
__Fp; \
|
||||||
|
})
|
||||||
|
|
||||||
enum hybrid_pmu_type {
|
enum hybrid_pmu_type {
|
||||||
hybrid_big = 0x40,
|
hybrid_big = 0x40,
|
||||||
hybrid_small = 0x20,
|
hybrid_small = 0x20,
|
||||||
@ -755,6 +769,7 @@ struct x86_pmu {
|
|||||||
|
|
||||||
/* PMI handler bits */
|
/* PMI handler bits */
|
||||||
unsigned int late_ack :1,
|
unsigned int late_ack :1,
|
||||||
|
mid_ack :1,
|
||||||
enabled_ack :1;
|
enabled_ack :1;
|
||||||
/*
|
/*
|
||||||
* sysfs attrs
|
* sysfs attrs
|
||||||
@ -1115,9 +1130,10 @@ void x86_pmu_stop(struct perf_event *event, int flags);
|
|||||||
|
|
||||||
static inline void x86_pmu_disable_event(struct perf_event *event)
|
static inline void x86_pmu_disable_event(struct perf_event *event)
|
||||||
{
|
{
|
||||||
|
u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
|
||||||
struct hw_perf_event *hwc = &event->hw;
|
struct hw_perf_event *hwc = &event->hw;
|
||||||
|
|
||||||
wrmsrl(hwc->config_base, hwc->config);
|
wrmsrl(hwc->config_base, hwc->config & ~disable_mask);
|
||||||
|
|
||||||
if (is_counter_pair(hwc))
|
if (is_counter_pair(hwc))
|
||||||
wrmsrl(x86_pmu_config_addr(hwc->idx + 1), 0);
|
wrmsrl(x86_pmu_config_addr(hwc->idx + 1), 0);
|
||||||
|
@ -2016,6 +2016,7 @@ static void kvm_hv_hypercall_set_result(struct kvm_vcpu *vcpu, u64 result)
|
|||||||
|
|
||||||
static int kvm_hv_hypercall_complete(struct kvm_vcpu *vcpu, u64 result)
|
static int kvm_hv_hypercall_complete(struct kvm_vcpu *vcpu, u64 result)
|
||||||
{
|
{
|
||||||
|
trace_kvm_hv_hypercall_done(result);
|
||||||
kvm_hv_hypercall_set_result(vcpu, result);
|
kvm_hv_hypercall_set_result(vcpu, result);
|
||||||
++vcpu->stat.hypercalls;
|
++vcpu->stat.hypercalls;
|
||||||
return kvm_skip_emulated_instruction(vcpu);
|
return kvm_skip_emulated_instruction(vcpu);
|
||||||
@ -2139,6 +2140,7 @@ static bool hv_check_hypercall_access(struct kvm_vcpu_hv *hv_vcpu, u16 code)
|
|||||||
|
|
||||||
int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
|
int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu);
|
||||||
struct kvm_hv_hcall hc;
|
struct kvm_hv_hcall hc;
|
||||||
u64 ret = HV_STATUS_SUCCESS;
|
u64 ret = HV_STATUS_SUCCESS;
|
||||||
|
|
||||||
@ -2173,17 +2175,25 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
|
|||||||
hc.rep_idx = (hc.param >> HV_HYPERCALL_REP_START_OFFSET) & 0xfff;
|
hc.rep_idx = (hc.param >> HV_HYPERCALL_REP_START_OFFSET) & 0xfff;
|
||||||
hc.rep = !!(hc.rep_cnt || hc.rep_idx);
|
hc.rep = !!(hc.rep_cnt || hc.rep_idx);
|
||||||
|
|
||||||
if (hc.fast && is_xmm_fast_hypercall(&hc))
|
|
||||||
kvm_hv_hypercall_read_xmm(&hc);
|
|
||||||
|
|
||||||
trace_kvm_hv_hypercall(hc.code, hc.fast, hc.rep_cnt, hc.rep_idx,
|
trace_kvm_hv_hypercall(hc.code, hc.fast, hc.rep_cnt, hc.rep_idx,
|
||||||
hc.ingpa, hc.outgpa);
|
hc.ingpa, hc.outgpa);
|
||||||
|
|
||||||
if (unlikely(!hv_check_hypercall_access(to_hv_vcpu(vcpu), hc.code))) {
|
if (unlikely(!hv_check_hypercall_access(hv_vcpu, hc.code))) {
|
||||||
ret = HV_STATUS_ACCESS_DENIED;
|
ret = HV_STATUS_ACCESS_DENIED;
|
||||||
goto hypercall_complete;
|
goto hypercall_complete;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hc.fast && is_xmm_fast_hypercall(&hc)) {
|
||||||
|
if (unlikely(hv_vcpu->enforce_cpuid &&
|
||||||
|
!(hv_vcpu->cpuid_cache.features_edx &
|
||||||
|
HV_X64_HYPERCALL_XMM_INPUT_AVAILABLE))) {
|
||||||
|
kvm_queue_exception(vcpu, UD_VECTOR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
kvm_hv_hypercall_read_xmm(&hc);
|
||||||
|
}
|
||||||
|
|
||||||
switch (hc.code) {
|
switch (hc.code) {
|
||||||
case HVCALL_NOTIFY_LONG_SPIN_WAIT:
|
case HVCALL_NOTIFY_LONG_SPIN_WAIT:
|
||||||
if (unlikely(hc.rep)) {
|
if (unlikely(hc.rep)) {
|
||||||
|
@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
|
|||||||
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
|
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
|
||||||
{
|
{
|
||||||
ioapic->rtc_status.pending_eoi = 0;
|
ioapic->rtc_status.pending_eoi = 0;
|
||||||
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID);
|
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
|
static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
|
||||||
|
@ -43,13 +43,13 @@ struct kvm_vcpu;
|
|||||||
|
|
||||||
struct dest_map {
|
struct dest_map {
|
||||||
/* vcpu bitmap where IRQ has been sent */
|
/* vcpu bitmap where IRQ has been sent */
|
||||||
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID);
|
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vector sent to a given vcpu, only valid when
|
* Vector sent to a given vcpu, only valid when
|
||||||
* the vcpu's bit in map is set
|
* the vcpu's bit in map is set
|
||||||
*/
|
*/
|
||||||
u8 vectors[KVM_MAX_VCPU_ID];
|
u8 vectors[KVM_MAX_VCPU_ID + 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1644,7 +1644,7 @@ static int is_empty_shadow_page(u64 *spt)
|
|||||||
* aggregate version in order to make the slab shrinker
|
* aggregate version in order to make the slab shrinker
|
||||||
* faster
|
* faster
|
||||||
*/
|
*/
|
||||||
static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, unsigned long nr)
|
static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, long nr)
|
||||||
{
|
{
|
||||||
kvm->arch.n_used_mmu_pages += nr;
|
kvm->arch.n_used_mmu_pages += nr;
|
||||||
percpu_counter_add(&kvm_total_used_mmu_pages, nr);
|
percpu_counter_add(&kvm_total_used_mmu_pages, nr);
|
||||||
|
@ -646,7 +646,7 @@ static int svm_set_pi_irte_mode(struct kvm_vcpu *vcpu, bool activate)
|
|||||||
void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
|
void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vcpu_svm *svm = to_svm(vcpu);
|
struct vcpu_svm *svm = to_svm(vcpu);
|
||||||
struct vmcb *vmcb = svm->vmcb;
|
struct vmcb *vmcb = svm->vmcb01.ptr;
|
||||||
bool activated = kvm_vcpu_apicv_active(vcpu);
|
bool activated = kvm_vcpu_apicv_active(vcpu);
|
||||||
|
|
||||||
if (!enable_apicv)
|
if (!enable_apicv)
|
||||||
|
@ -515,7 +515,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm)
|
|||||||
* Also covers avic_vapic_bar, avic_backing_page, avic_logical_id,
|
* Also covers avic_vapic_bar, avic_backing_page, avic_logical_id,
|
||||||
* avic_physical_id.
|
* avic_physical_id.
|
||||||
*/
|
*/
|
||||||
WARN_ON(svm->vmcb01.ptr->control.int_ctl & AVIC_ENABLE_MASK);
|
WARN_ON(kvm_apicv_activated(svm->vcpu.kvm));
|
||||||
|
|
||||||
/* Copied from vmcb01. msrpm_base can be overwritten later. */
|
/* Copied from vmcb01. msrpm_base can be overwritten later. */
|
||||||
svm->vmcb->control.nested_ctl = svm->vmcb01.ptr->control.nested_ctl;
|
svm->vmcb->control.nested_ctl = svm->vmcb01.ptr->control.nested_ctl;
|
||||||
@ -702,8 +702,8 @@ int nested_svm_vmrun(struct kvm_vcpu *vcpu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Copy state save area fields which are handled by VMRUN */
|
/* Copy state save area fields which are handled by VMRUN */
|
||||||
void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
|
void svm_copy_vmrun_state(struct vmcb_save_area *to_save,
|
||||||
struct vmcb_save_area *to_save)
|
struct vmcb_save_area *from_save)
|
||||||
{
|
{
|
||||||
to_save->es = from_save->es;
|
to_save->es = from_save->es;
|
||||||
to_save->cs = from_save->cs;
|
to_save->cs = from_save->cs;
|
||||||
@ -722,7 +722,7 @@ void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
|
|||||||
to_save->cpl = 0;
|
to_save->cpl = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nested_svm_vmloadsave(struct vmcb *from_vmcb, struct vmcb *to_vmcb)
|
void svm_copy_vmloadsave_state(struct vmcb *to_vmcb, struct vmcb *from_vmcb)
|
||||||
{
|
{
|
||||||
to_vmcb->save.fs = from_vmcb->save.fs;
|
to_vmcb->save.fs = from_vmcb->save.fs;
|
||||||
to_vmcb->save.gs = from_vmcb->save.gs;
|
to_vmcb->save.gs = from_vmcb->save.gs;
|
||||||
@ -1385,7 +1385,7 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
|
|||||||
|
|
||||||
svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa;
|
svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa;
|
||||||
|
|
||||||
svm_copy_vmrun_state(save, &svm->vmcb01.ptr->save);
|
svm_copy_vmrun_state(&svm->vmcb01.ptr->save, save);
|
||||||
nested_load_control_from_vmcb12(svm, ctl);
|
nested_load_control_from_vmcb12(svm, ctl);
|
||||||
|
|
||||||
svm_switch_vmcb(svm, &svm->nested.vmcb02);
|
svm_switch_vmcb(svm, &svm->nested.vmcb02);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user