arch/x86/acpigen.c: Add a method to notify all CPU cores

Change-Id: If8b07fdcec51c344a82309d4af3b6127ad758baf
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/29895
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
Arthur Heymans 2018-11-28 13:18:57 +01:00 committed by Patrick Georgi
parent 6df3b64c77
commit 8f05527485
3 changed files with 19 additions and 11 deletions

View File

@ -369,6 +369,23 @@ void acpigen_write_processor_package(const char *const name,
acpigen_pop_len(); acpigen_pop_len();
} }
/* Method to notify all CPU cores */
void acpigen_write_processor_cnot(const unsigned int number_of_cores)
{
int core_id;
acpigen_write_method("\\_PR.CNOT", 1);
for (core_id = 0; core_id < number_of_cores; core_id++) {
char buffer[DEVICE_PATH_MAX];
snprintf(buffer, sizeof(buffer), CONFIG_ACPI_CPU_STRING,
core_id);
acpigen_emit_byte(NOTIFY_OP);
acpigen_emit_namestring(buffer);
acpigen_emit_byte(ARG0_OP);
}
acpigen_pop_len();
}
/* /*
* Generate ACPI AML code for OperationRegion * Generate ACPI AML code for OperationRegion
* Arg0: Pointer to struct opregion opreg = OPREGION(rname, space, offset, len) * Arg0: Pointer to struct opregion opreg = OPREGION(rname, space, offset, len)

View File

@ -277,6 +277,7 @@ void acpigen_write_processor(u8 cpuindex, u32 pblock_addr, u8 pblock_len);
void acpigen_write_processor_package(const char *name, void acpigen_write_processor_package(const char *name,
unsigned int first_core, unsigned int first_core,
unsigned int core_count); unsigned int core_count);
void acpigen_write_processor_cnot(const unsigned int number_of_cores);
void acpigen_write_TSS_package(int entries, acpi_tstate_t *tstate_list); void acpigen_write_TSS_package(int entries, acpi_tstate_t *tstate_list);
void acpigen_write_TSD_package(u32 domain, u32 numprocs, PSD_coord coordtype); void acpigen_write_TSD_package(u32 domain, u32 numprocs, PSD_coord coordtype);
void acpigen_write_mem32fixed(int readwrite, u32 base, u32 size); void acpigen_write_mem32fixed(int readwrite, u32 base, u32 size);

View File

@ -166,15 +166,5 @@ void generate_cpu_entries(struct device *device)
of the first and only package. */ of the first and only package. */
acpigen_write_processor_package("PPKG", 0, cores_per_package); acpigen_write_processor_package("PPKG", 0, cores_per_package);
/* Add a method to notify processor nodes */ acpigen_write_processor_cnot(cores_per_package);
acpigen_write_method("\\_PR.CNOT", 1);
for (coreID = 0; coreID < cores_per_package; coreID++) {
char buffer[DEVICE_PATH_MAX];
snprintf(buffer, sizeof(buffer), "\\_PR.CP%c%c",
'0' + coreID / 10, '0' + coreID % 10);
acpigen_emit_byte(NOTIFY_OP);
acpigen_emit_namestring(buffer);
acpigen_emit_byte(ARG0_OP);
}
acpigen_pop_len();
} }