mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
- Cortex-A76 erratum workaround
- ftrace fix to enable syscall events on arm64 - Fix uninitialised pointer in iort_get_platform_device_domain() -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE5RElWfyWxS+3PLO2a9axLQDIXvEFAlwBhskACgkQa9axLQDI XvFS5g//UOW/9GvEXRCZF7Okm6FSYw/ADKnrr8Qv39JgKqp5AXG1Adg28QZzdiSD E+WKr07SyVj6lDc6gwGO4SzcOFNFO15DgdGY2i9v+cVQu5h/VmS3CiBlJG98WTFe Og0mDx3lnHLCUoYADt3YGzWDOXwco0OK2JGKs2Drk4ABoUEDt7dIsDfJtbIOGOpv Msx1KnQEuIV3dnZzr0+8PC89nbDG0A8+Mc7KScrESUmjNaO+c5hbcxxScsFswLCJ kaX6NttsqqilONt9JrQsDelYLrTP8A0UsYgTb2K36IyB5yCYhzZYMRVMw6wLhrKV VfnzjnN/xrJRnPoYW4yDTKLSLbnPuoF8k44XPR8AJA1AE+MLhT+C6yPZ3qcnFR7R LXtdDFBihe90HFYIBa1zt+E9jHoOTuWLkXJQTB0kdHjSXwwS0Ji7YuoyEolBQAUd QCkYdxSswnl5wGkXqI69V6lJ21lePtXZ8rnnl0lnNQNUyhzcuJFy9M7CcNKHHVcX pawnLlu3SJgZKrAR+d8SylSUVHqz3MV/8SuybC7WePl2d/0e4Qhry1y4RhrWuJZJ rxGNaBgql3sWmi4aHw65KaYna6YoXrsiwKwl0TK6ZgVzgR4Sk8AJkTk4WYF56ECc 7E+szTmN3oFm+Bveua9ibryYlx9ayA9wh0UNIrjFCnZDNz9bl4s= =HpOx -----END PGP SIGNATURE----- Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull arm64 fixes from Catalin Marinas: - Cortex-A76 erratum workaround - ftrace fix to enable syscall events on arm64 - Fix uninitialised pointer in iort_get_platform_device_domain() * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: ACPI/IORT: Fix iort_get_platform_device_domain() uninitialized pointer value arm64: ftrace: Fix to enable syscall events on arm64 arm64: Add workaround for Cortex-A76 erratum 1286807
This commit is contained in:
commit
868dda00b9
6 changed files with 59 additions and 6 deletions
|
@ -57,6 +57,7 @@ stable kernels.
|
||||||
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
| ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 |
|
||||||
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 |
|
||||||
| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 |
|
| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 |
|
||||||
|
| ARM | Cortex-A76 | #1286807 | ARM64_ERRATUM_1286807 |
|
||||||
| ARM | MMU-500 | #841119,#826419 | N/A |
|
| ARM | MMU-500 | #841119,#826419 | N/A |
|
||||||
| | | | |
|
| | | | |
|
||||||
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
||||||
|
|
|
@ -497,6 +497,24 @@ config ARM64_ERRATUM_1188873
|
||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
|
config ARM64_ERRATUM_1286807
|
||||||
|
bool "Cortex-A76: Modification of the translation table for a virtual address might lead to read-after-read ordering violation"
|
||||||
|
default y
|
||||||
|
select ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
|
help
|
||||||
|
This option adds workaround for ARM Cortex-A76 erratum 1286807
|
||||||
|
|
||||||
|
On the affected Cortex-A76 cores (r0p0 to r3p0), if a virtual
|
||||||
|
address for a cacheable mapping of a location is being
|
||||||
|
accessed by a core while another core is remapping the virtual
|
||||||
|
address to a new physical page using the recommended
|
||||||
|
break-before-make sequence, then under very rare circumstances
|
||||||
|
TLBI+DSB completes before a read using the translation being
|
||||||
|
invalidated has been observed by other observers. The
|
||||||
|
workaround repeats the TLBI+DSB operation.
|
||||||
|
|
||||||
|
If unsure, say Y.
|
||||||
|
|
||||||
config CAVIUM_ERRATUM_22375
|
config CAVIUM_ERRATUM_22375
|
||||||
bool "Cavium erratum 22375, 24313"
|
bool "Cavium erratum 22375, 24313"
|
||||||
default y
|
default y
|
||||||
|
@ -566,9 +584,16 @@ config QCOM_FALKOR_ERRATUM_1003
|
||||||
is unchanged. Work around the erratum by invalidating the walk cache
|
is unchanged. Work around the erratum by invalidating the walk cache
|
||||||
entries for the trampoline before entering the kernel proper.
|
entries for the trampoline before entering the kernel proper.
|
||||||
|
|
||||||
|
config ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Enable the repeat TLBI workaround for Falkor erratum 1009 and
|
||||||
|
Cortex-A76 erratum 1286807.
|
||||||
|
|
||||||
config QCOM_FALKOR_ERRATUM_1009
|
config QCOM_FALKOR_ERRATUM_1009
|
||||||
bool "Falkor E1009: Prematurely complete a DSB after a TLBI"
|
bool "Falkor E1009: Prematurely complete a DSB after a TLBI"
|
||||||
default y
|
default y
|
||||||
|
select ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
help
|
help
|
||||||
On Falkor v1, the CPU may prematurely complete a DSB following a
|
On Falkor v1, the CPU may prematurely complete a DSB following a
|
||||||
TLBI xxIS invalidate maintenance operation. Repeat the TLBI operation
|
TLBI xxIS invalidate maintenance operation. Repeat the TLBI operation
|
||||||
|
|
|
@ -56,6 +56,19 @@ static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return is_compat_task();
|
return is_compat_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
|
||||||
|
|
||||||
|
static inline bool arch_syscall_match_sym_name(const char *sym,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Since all syscall functions have __arm64_ prefix, we must skip it.
|
||||||
|
* However, as we described above, we decided to ignore compat
|
||||||
|
* syscalls, so we don't care about __arm64_compat_ prefix here.
|
||||||
|
*/
|
||||||
|
return !strcmp(sym + 8, name);
|
||||||
|
}
|
||||||
#endif /* ifndef __ASSEMBLY__ */
|
#endif /* ifndef __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* __ASM_FTRACE_H */
|
#endif /* __ASM_FTRACE_H */
|
||||||
|
|
|
@ -41,14 +41,14 @@
|
||||||
ALTERNATIVE("nop\n nop", \
|
ALTERNATIVE("nop\n nop", \
|
||||||
"dsb ish\n tlbi " #op, \
|
"dsb ish\n tlbi " #op, \
|
||||||
ARM64_WORKAROUND_REPEAT_TLBI, \
|
ARM64_WORKAROUND_REPEAT_TLBI, \
|
||||||
CONFIG_QCOM_FALKOR_ERRATUM_1009) \
|
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI) \
|
||||||
: : )
|
: : )
|
||||||
|
|
||||||
#define __TLBI_1(op, arg) asm ("tlbi " #op ", %0\n" \
|
#define __TLBI_1(op, arg) asm ("tlbi " #op ", %0\n" \
|
||||||
ALTERNATIVE("nop\n nop", \
|
ALTERNATIVE("nop\n nop", \
|
||||||
"dsb ish\n tlbi " #op ", %0", \
|
"dsb ish\n tlbi " #op ", %0", \
|
||||||
ARM64_WORKAROUND_REPEAT_TLBI, \
|
ARM64_WORKAROUND_REPEAT_TLBI, \
|
||||||
CONFIG_QCOM_FALKOR_ERRATUM_1009) \
|
CONFIG_ARM64_WORKAROUND_REPEAT_TLBI) \
|
||||||
: : "r" (arg))
|
: : "r" (arg))
|
||||||
|
|
||||||
#define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)
|
#define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)
|
||||||
|
|
|
@ -570,6 +570,20 @@ static const struct midr_range arm64_harden_el2_vectors[] = {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
|
|
||||||
|
static const struct midr_range arm64_repeat_tlbi_cpus[] = {
|
||||||
|
#ifdef CONFIG_QCOM_FALKOR_ERRATUM_1009
|
||||||
|
MIDR_RANGE(MIDR_QCOM_FALKOR_V1, 0, 0, 0, 0),
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_1286807
|
||||||
|
MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 3, 0),
|
||||||
|
#endif
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
const struct arm64_cpu_capabilities arm64_errata[] = {
|
const struct arm64_cpu_capabilities arm64_errata[] = {
|
||||||
#if defined(CONFIG_ARM64_ERRATUM_826319) || \
|
#if defined(CONFIG_ARM64_ERRATUM_826319) || \
|
||||||
defined(CONFIG_ARM64_ERRATUM_827319) || \
|
defined(CONFIG_ARM64_ERRATUM_827319) || \
|
||||||
|
@ -695,11 +709,11 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
||||||
.matches = is_kryo_midr,
|
.matches = is_kryo_midr,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_QCOM_FALKOR_ERRATUM_1009
|
#ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI
|
||||||
{
|
{
|
||||||
.desc = "Qualcomm Technologies Falkor erratum 1009",
|
.desc = "Qualcomm erratum 1009, ARM erratum 1286807",
|
||||||
.capability = ARM64_WORKAROUND_REPEAT_TLBI,
|
.capability = ARM64_WORKAROUND_REPEAT_TLBI,
|
||||||
ERRATA_MIDR_REV(MIDR_QCOM_FALKOR_V1, 0, 0),
|
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_858921
|
#ifdef CONFIG_ARM64_ERRATUM_858921
|
||||||
|
|
|
@ -700,7 +700,7 @@ static void iort_set_device_domain(struct device *dev,
|
||||||
*/
|
*/
|
||||||
static struct irq_domain *iort_get_platform_device_domain(struct device *dev)
|
static struct irq_domain *iort_get_platform_device_domain(struct device *dev)
|
||||||
{
|
{
|
||||||
struct acpi_iort_node *node, *msi_parent;
|
struct acpi_iort_node *node, *msi_parent = NULL;
|
||||||
struct fwnode_handle *iort_fwnode;
|
struct fwnode_handle *iort_fwnode;
|
||||||
struct acpi_iort_its_group *its;
|
struct acpi_iort_its_group *its;
|
||||||
int i;
|
int i;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue