Commit 38db9b95 authored by Sudeep Holla's avatar Sudeep Holla

arch_topology: Add support to parse and detect cache attributes

Currently ACPI populates just the minimum information about the last
level cache from PPTT in order to feed the same to build sched_domains.
Similar support for DT platforms is not present.

In order to enable the same, the entire cache hierarchy information can
be built as part of CPU topoplogy parsing both on ACPI and DT platforms.

Note that this change builds the cacheinfo early even on ACPI systems,
but the current mechanism of building llc_sibling mask remains unchanged.

Link: https://lore.kernel.org/r/20220704101605.1318280-10-sudeep.holla@arm.comTested-by: default avatarIonela Voinescu <ionela.voinescu@arm.com>
Tested-by: default avatarConor Dooley <conor.dooley@microchip.com>
Reviewed-by: default avatarGavin Shan <gshan@redhat.com>
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 52110313
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/cacheinfo.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/device.h> #include <linux/device.h>
...@@ -780,15 +781,28 @@ __weak int __init parse_acpi_topology(void) ...@@ -780,15 +781,28 @@ __weak int __init parse_acpi_topology(void)
#if defined(CONFIG_ARM64) || defined(CONFIG_RISCV) #if defined(CONFIG_ARM64) || defined(CONFIG_RISCV)
void __init init_cpu_topology(void) void __init init_cpu_topology(void)
{ {
int ret, cpu;
reset_cpu_topology(); reset_cpu_topology();
ret = parse_acpi_topology();
if (!ret)
ret = of_have_populated_dt() && parse_dt_topology();
/* if (ret) {
* Discard anything that was parsed if we hit an error so we /*
* don't use partial information. * Discard anything that was parsed if we hit an error so we
*/ * don't use partial information.
if (parse_acpi_topology()) */
reset_cpu_topology();
else if (of_have_populated_dt() && parse_dt_topology())
reset_cpu_topology(); reset_cpu_topology();
return;
}
for_each_possible_cpu(cpu) {
ret = detect_cache_attributes(cpu);
if (ret) {
pr_info("Early cacheinfo failed, ret = %d\n", ret);
break;
}
}
} }
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment