Skip to content

Commit e47ca40

Browse files
committed
Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 fixes from Catalin Marinas: - Enable Cortex-A510 erratum 2051678 by default as we do with other errata. - arm64 IORT: Check the node revision for PMCG resources to cope with old firmware based on a broken revision of the spec that had no way to describe the second register page (when an implementation is using the recommended RELOC_CTRS feature). * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: ACPI/IORT: Check node revision for PMCG resources arm64: Enable Cortex-A510 erratum 2051678 by default
2 parents 883fd0a + da5fb9e commit e47ca40

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

arch/arm64/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,7 @@ config ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE
672672

673673
config ARM64_ERRATUM_2051678
674674
bool "Cortex-A510: 2051678: disable Hardware Update of the page table dirty bit"
675+
default y
675676
help
676677
This options adds the workaround for ARM Cortex-A510 erratum ARM64_ERRATUM_2051678.
677678
Affected Coretex-A510 might not respect the ordering rules for

drivers/acpi/arm64/iort.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,9 +1361,17 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,
13611361
res[0].start = pmcg->page0_base_address;
13621362
res[0].end = pmcg->page0_base_address + SZ_4K - 1;
13631363
res[0].flags = IORESOURCE_MEM;
1364-
res[1].start = pmcg->page1_base_address;
1365-
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
1366-
res[1].flags = IORESOURCE_MEM;
1364+
/*
1365+
* The initial version in DEN0049C lacked a way to describe register
1366+
* page 1, which makes it broken for most PMCG implementations; in
1367+
* that case, just let the driver fail gracefully if it expects to
1368+
* find a second memory resource.
1369+
*/
1370+
if (node->revision > 0) {
1371+
res[1].start = pmcg->page1_base_address;
1372+
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
1373+
res[1].flags = IORESOURCE_MEM;
1374+
}
13671375

13681376
if (pmcg->overflow_gsiv)
13691377
acpi_iort_register_irq(pmcg->overflow_gsiv, "overflow",

0 commit comments

Comments
 (0)