Skip to content

Commit

Permalink
soc/amd: factor out common acpi_add_ivrs_table implementation
Browse files Browse the repository at this point in the history
Instead of open-coding this functionality in all AMD SoCs, factor it out
into a common implementation.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Idb65c398b747e70ec67107e0a1d4bd6551501347
Reviewed-on: https://review.coreboot.org/c/coreboot/+/80208
Reviewed-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Varshit Pandya <pandyavarshit@gmail.com>
Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
  • Loading branch information
felixheld committed Jan 26, 2024
1 parent 3ac92e9 commit a4a2a4f
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 42 deletions.
8 changes: 1 addition & 7 deletions src/soc/amd/cezanne/agesa_acpi.c
Expand Up @@ -10,20 +10,14 @@
uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current,
acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;

/* TODO: look into adding CRAT */

/* add ALIB SSDT from HOB */
current = acpi_align_current(current);
current = add_agesa_fsp_acpi_table(AMD_FSP_ACPI_ALIB_HOB_GUID, "ALIB", rsdp, current);

/* IVRS */
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

return current;
}
15 changes: 14 additions & 1 deletion src/soc/amd/common/block/acpi/ivrs.c
Expand Up @@ -297,7 +297,7 @@ static unsigned long acpi_fill_ivrs11(unsigned long current, acpi_ivrs_ivhd_t *i
return acpi_fill_ivrs40(current, ivhd, nb_dev, iommu_dev);
}

unsigned long acpi_fill_ivrs(acpi_ivrs_t *ivrs, unsigned long current)
static unsigned long acpi_fill_ivrs(acpi_ivrs_t *ivrs, unsigned long current)
{
unsigned long current_backup;
uint64_t mmio_x30_value;
Expand Down Expand Up @@ -433,3 +433,16 @@ unsigned long acpi_fill_ivrs(acpi_ivrs_t *ivrs, unsigned long current)

return current;
}

unsigned long acpi_add_ivrs_table(unsigned long current, acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;

current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);

return current;
}
2 changes: 1 addition & 1 deletion src/soc/amd/common/block/include/amdblocks/acpi.h
Expand Up @@ -56,6 +56,6 @@ uintptr_t add_agesa_fsp_acpi_table(guid_t guid, const char *name, acpi_rsdp_t *r
uintptr_t current);

void acpi_log_events(const struct chipset_power_state *ps);
unsigned long acpi_fill_ivrs(acpi_ivrs_t *ivrs, unsigned long current);
unsigned long acpi_add_ivrs_table(unsigned long current, acpi_rsdp_t *rsdp);

#endif /* AMD_BLOCK_ACPI_H */
7 changes: 1 addition & 6 deletions src/soc/amd/genoa_poc/acpi.c
Expand Up @@ -42,12 +42,7 @@ unsigned long soc_acpi_write_tables(const struct device *device, unsigned long c
struct acpi_rsdp *rsdp)
{
/* IVRS */
acpi_ivrs_t *ivrs;
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

return current;
}
Expand Down
8 changes: 1 addition & 7 deletions src/soc/amd/glinda/agesa_acpi.c
Expand Up @@ -12,20 +12,14 @@
uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current,
acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;

/* TODO: look into adding CRAT */

/* add ALIB SSDT from HOB */
current = acpi_align_current(current);
current = add_agesa_fsp_acpi_table(AMD_FSP_ACPI_ALIB_HOB_GUID, "ALIB", rsdp, current);

/* IVRS */
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

return current;
}
8 changes: 1 addition & 7 deletions src/soc/amd/mendocino/agesa_acpi.c
Expand Up @@ -12,20 +12,14 @@
uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current,
acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;

/* TODO: look into adding CRAT */

/* add ALIB SSDT from HOB */
current = acpi_align_current(current);
current = add_agesa_fsp_acpi_table(AMD_FSP_ACPI_ALIB_HOB_GUID, "ALIB", rsdp, current);

/* IVRS */
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

return current;
}
8 changes: 1 addition & 7 deletions src/soc/amd/phoenix/agesa_acpi.c
Expand Up @@ -13,20 +13,14 @@
uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current,
acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;

/* TODO: look into adding CRAT */

/* add ALIB SSDT from HOB */
current = acpi_align_current(current);
current = add_agesa_fsp_acpi_table(AMD_FSP_ACPI_ALIB_HOB_GUID, "ALIB", rsdp, current);

/* IVRS */
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

return current;
}
7 changes: 1 addition & 6 deletions src/soc/amd/picasso/agesa_acpi.c
Expand Up @@ -542,7 +542,6 @@ static unsigned long acpi_fill_crat(struct acpi_crat_header *crat, unsigned long
uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current,
acpi_rsdp_t *rsdp)
{
acpi_ivrs_t *ivrs;
struct acpi_crat_header *crat;

/* CRAT */
Expand All @@ -557,11 +556,7 @@ uintptr_t agesa_write_acpi_tables(const struct device *device, uintptr_t current
current = add_agesa_fsp_acpi_table(AMD_FSP_ACPI_ALIB_HOB_GUID, "ALIB", rsdp, current);

/* IVRS */
current = acpi_align_current(current);
ivrs = (acpi_ivrs_t *)current;
acpi_create_ivrs(ivrs, acpi_fill_ivrs);
current += ivrs->header.length;
acpi_add_table(rsdp, ivrs);
current = acpi_add_ivrs_table(current, rsdp);

/* Add SRAT, MSCT, SLIT if needed in the future */

Expand Down

0 comments on commit a4a2a4f

Please sign in to comment.