mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm
Pull ARM fixes from Russell King: "A few ARM fixes: - fix a crash while performing TLB maintanence on early ARM SMP cores - blacklist Scorpion CPUs for hardware breakpoints - ARMs asm/types.h has been included as part of the UAPI due to the way the makefiles work, move it to uapi/asm/types.h to make it official - fix up ftrace syscall name matching" * 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm: ARM: 8613/1: Fix the uaccess crash on PB11MPCore MAINTAINERS: update rmk's entries ARM: put types.h in uapi ARM: 8634/1: hw_breakpoint: blacklist Scorpion CPUs ARM: 8632/1: ftrace: fix syscall name matching
This commit is contained in:
commit
fa19a769f8
6 changed files with 55 additions and 5 deletions
10
MAINTAINERS
10
MAINTAINERS
|
@ -976,6 +976,7 @@ M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.armlinux.org.uk/
|
W: http://www.armlinux.org.uk/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git
|
||||||
F: arch/arm/
|
F: arch/arm/
|
||||||
|
|
||||||
ARM SUB-ARCHITECTURES
|
ARM SUB-ARCHITECTURES
|
||||||
|
@ -1153,6 +1154,7 @@ ARM/CLKDEV SUPPORT
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git clkdev
|
||||||
F: arch/arm/include/asm/clkdev.h
|
F: arch/arm/include/asm/clkdev.h
|
||||||
F: drivers/clk/clkdev.c
|
F: drivers/clk/clkdev.c
|
||||||
|
|
||||||
|
@ -7697,8 +7699,10 @@ F: drivers/net/dsa/mv88e6xxx/
|
||||||
F: Documentation/devicetree/bindings/net/dsa/marvell.txt
|
F: Documentation/devicetree/bindings/net/dsa/marvell.txt
|
||||||
|
|
||||||
MARVELL ARMADA DRM SUPPORT
|
MARVELL ARMADA DRM SUPPORT
|
||||||
M: Russell King <rmk+kernel@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-devel
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-fixes
|
||||||
F: drivers/gpu/drm/armada/
|
F: drivers/gpu/drm/armada/
|
||||||
F: include/uapi/drm/armada_drm.h
|
F: include/uapi/drm/armada_drm.h
|
||||||
F: Documentation/devicetree/bindings/display/armada/
|
F: Documentation/devicetree/bindings/display/armada/
|
||||||
|
@ -8903,8 +8907,10 @@ S: Supported
|
||||||
F: drivers/nfc/nxp-nci
|
F: drivers/nfc/nxp-nci
|
||||||
|
|
||||||
NXP TDA998X DRM DRIVER
|
NXP TDA998X DRM DRIVER
|
||||||
M: Russell King <rmk+kernel@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-devel
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-fixes
|
||||||
F: drivers/gpu/drm/i2c/tda998x_drv.c
|
F: drivers/gpu/drm/i2c/tda998x_drv.c
|
||||||
F: include/drm/i2c/tda998x.h
|
F: include/drm/i2c/tda998x.h
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,9 @@
|
||||||
#define ARM_CPU_XSCALE_ARCH_V2 0x4000
|
#define ARM_CPU_XSCALE_ARCH_V2 0x4000
|
||||||
#define ARM_CPU_XSCALE_ARCH_V3 0x6000
|
#define ARM_CPU_XSCALE_ARCH_V3 0x6000
|
||||||
|
|
||||||
|
/* Qualcomm implemented cores */
|
||||||
|
#define ARM_CPU_PART_SCORPION 0x510002d0
|
||||||
|
|
||||||
extern unsigned int processor_id;
|
extern unsigned int processor_id;
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15
|
#ifdef CONFIG_CPU_CP15
|
||||||
|
|
|
@ -54,6 +54,24 @@ static inline void *return_address(unsigned int level)
|
||||||
|
|
||||||
#define ftrace_return_address(n) return_address(n)
|
#define ftrace_return_address(n) return_address(n)
|
||||||
|
|
||||||
|
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
|
||||||
|
|
||||||
|
static inline bool arch_syscall_match_sym_name(const char *sym,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
if (!strcmp(sym, "sys_mmap2"))
|
||||||
|
sym = "sys_mmap_pgoff";
|
||||||
|
else if (!strcmp(sym, "sys_statfs64_wrapper"))
|
||||||
|
sym = "sys_statfs64";
|
||||||
|
else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
|
||||||
|
sym = "sys_fstatfs64";
|
||||||
|
else if (!strcmp(sym, "sys_arm_fadvise64_64"))
|
||||||
|
sym = "sys_fadvise64_64";
|
||||||
|
|
||||||
|
/* Ignore case since sym may start with "SyS" instead of "sys" */
|
||||||
|
return !strcasecmp(sym, name);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* ifndef __ASSEMBLY__ */
|
#endif /* ifndef __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _ASM_ARM_FTRACE */
|
#endif /* _ASM_ARM_FTRACE */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef _ASM_TYPES_H
|
#ifndef _UAPI_ASM_TYPES_H
|
||||||
#define _ASM_TYPES_H
|
#define _UAPI_ASM_TYPES_H
|
||||||
|
|
||||||
#include <asm-generic/int-ll64.h>
|
#include <asm-generic/int-ll64.h>
|
||||||
|
|
||||||
|
@ -37,4 +37,4 @@
|
||||||
#define __UINTPTR_TYPE__ unsigned long
|
#define __UINTPTR_TYPE__ unsigned long
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_TYPES_H */
|
#endif /* _UAPI_ASM_TYPES_H */
|
|
@ -1063,6 +1063,22 @@ static int __init arch_hw_breakpoint_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scorpion CPUs (at least those in APQ8060) seem to set DBGPRSR.SPD
|
||||||
|
* whenever a WFI is issued, even if the core is not powered down, in
|
||||||
|
* violation of the architecture. When DBGPRSR.SPD is set, accesses to
|
||||||
|
* breakpoint and watchpoint registers are treated as undefined, so
|
||||||
|
* this results in boot time and runtime failures when these are
|
||||||
|
* accessed and we unexpectedly take a trap.
|
||||||
|
*
|
||||||
|
* It's not clear if/how this can be worked around, so we blacklist
|
||||||
|
* Scorpion CPUs to avoid these issues.
|
||||||
|
*/
|
||||||
|
if (read_cpuid_part() == ARM_CPU_PART_SCORPION) {
|
||||||
|
pr_info("Scorpion CPU detected. Hardware breakpoints and watchpoints disabled\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
has_ossr = core_has_os_save_restore();
|
has_ossr = core_has_os_save_restore();
|
||||||
|
|
||||||
/* Determine how many BRPs/WRPs are available. */
|
/* Determine how many BRPs/WRPs are available. */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/smp_plat.h>
|
#include <asm/smp_plat.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
@ -40,8 +41,11 @@ static inline void ipi_flush_tlb_mm(void *arg)
|
||||||
static inline void ipi_flush_tlb_page(void *arg)
|
static inline void ipi_flush_tlb_page(void *arg)
|
||||||
{
|
{
|
||||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||||
|
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||||
|
|
||||||
local_flush_tlb_page(ta->ta_vma, ta->ta_start);
|
local_flush_tlb_page(ta->ta_vma, ta->ta_start);
|
||||||
|
|
||||||
|
uaccess_restore(__ua_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ipi_flush_tlb_kernel_page(void *arg)
|
static inline void ipi_flush_tlb_kernel_page(void *arg)
|
||||||
|
@ -54,8 +58,11 @@ static inline void ipi_flush_tlb_kernel_page(void *arg)
|
||||||
static inline void ipi_flush_tlb_range(void *arg)
|
static inline void ipi_flush_tlb_range(void *arg)
|
||||||
{
|
{
|
||||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||||
|
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||||
|
|
||||||
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
|
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
|
||||||
|
|
||||||
|
uaccess_restore(__ua_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ipi_flush_tlb_kernel_range(void *arg)
|
static inline void ipi_flush_tlb_kernel_range(void *arg)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue