lib/nhlt: add support for setting the oem_revision
In the ACPI header there's an OEM revision field that was previously just being implicitly set to 0. Allow for a board to provide a non-zero value for this field. Change-Id: Icd40c1c162c2645b3990a6f3361c592706251f82 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/17650 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
d008413a3c
commit
b4afe3c197
|
@ -162,7 +162,8 @@ uintptr_t nhlt_serialize(struct nhlt *nhlt, uintptr_t acpi_addr);
|
||||||
* valid after thisfunction is called.
|
* valid after thisfunction is called.
|
||||||
*/
|
*/
|
||||||
uintptr_t nhlt_serialize_oem_overrides(struct nhlt *nhlt, uintptr_t acpi_addr,
|
uintptr_t nhlt_serialize_oem_overrides(struct nhlt *nhlt, uintptr_t acpi_addr,
|
||||||
const char *oem_id, const char *oem_table_id);
|
const char *oem_id, const char *oem_table_id,
|
||||||
|
uint32_t oem_revision);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* While very similar to nhlt_serialize() the SoC specific function allows
|
* While very similar to nhlt_serialize() the SoC specific function allows
|
||||||
|
@ -177,7 +178,8 @@ uintptr_t nhlt_soc_serialize(struct nhlt *nhlt, uintptr_t acpi_addr);
|
||||||
* as updating ACPI field references for the serialized structure.
|
* as updating ACPI field references for the serialized structure.
|
||||||
*/
|
*/
|
||||||
uintptr_t nhlt_soc_serialize_oem_overrides(struct nhlt *nhlt,
|
uintptr_t nhlt_soc_serialize_oem_overrides(struct nhlt *nhlt,
|
||||||
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id);
|
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id,
|
||||||
|
uint32_t oem_revision);
|
||||||
|
|
||||||
/* Link and device types. */
|
/* Link and device types. */
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -390,11 +390,12 @@ static void nhlt_serialize_endpoints(struct nhlt *nhlt, struct cursor *cur)
|
||||||
|
|
||||||
uintptr_t nhlt_serialize(struct nhlt *nhlt, uintptr_t acpi_addr)
|
uintptr_t nhlt_serialize(struct nhlt *nhlt, uintptr_t acpi_addr)
|
||||||
{
|
{
|
||||||
return nhlt_serialize_oem_overrides(nhlt, acpi_addr, NULL, NULL);
|
return nhlt_serialize_oem_overrides(nhlt, acpi_addr, NULL, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t nhlt_serialize_oem_overrides(struct nhlt *nhlt,
|
uintptr_t nhlt_serialize_oem_overrides(struct nhlt *nhlt,
|
||||||
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id)
|
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id,
|
||||||
|
uint32_t oem_revision)
|
||||||
{
|
{
|
||||||
struct cursor cur;
|
struct cursor cur;
|
||||||
acpi_header_t *header;
|
acpi_header_t *header;
|
||||||
|
@ -424,6 +425,7 @@ uintptr_t nhlt_serialize_oem_overrides(struct nhlt *nhlt,
|
||||||
|
|
||||||
memcpy(header->oem_id, oem_id, oem_id_len);
|
memcpy(header->oem_id, oem_id, oem_id_len);
|
||||||
memcpy(header->oem_table_id, oem_table_id, oem_table_id_len);
|
memcpy(header->oem_table_id, oem_table_id, oem_table_id_len);
|
||||||
|
write_le32(&header->oem_revision, oem_revision);
|
||||||
memcpy(header->asl_compiler_id, ASLC, 4);
|
memcpy(header->asl_compiler_id, ASLC, 4);
|
||||||
|
|
||||||
cur.buf = (void *)(acpi_addr + sizeof(acpi_header_t));
|
cur.buf = (void *)(acpi_addr + sizeof(acpi_header_t));
|
||||||
|
|
|
@ -54,6 +54,7 @@ static unsigned long mainboard_write_acpi_tables(
|
||||||
struct nhlt *nhlt;
|
struct nhlt *nhlt;
|
||||||
const char *oem_id = NULL;
|
const char *oem_id = NULL;
|
||||||
const char *oem_table_id = NULL;
|
const char *oem_table_id = NULL;
|
||||||
|
uint32_t oem_revision = 0;
|
||||||
|
|
||||||
start_addr = current;
|
start_addr = current;
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ static unsigned long mainboard_write_acpi_tables(
|
||||||
variant_nhlt_oem_strings(&oem_id, &oem_table_id);
|
variant_nhlt_oem_strings(&oem_id, &oem_table_id);
|
||||||
|
|
||||||
end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,
|
end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,
|
||||||
oem_id, oem_table_id);
|
oem_id, oem_table_id, oem_revision);
|
||||||
|
|
||||||
if (end_addr != start_addr)
|
if (end_addr != start_addr)
|
||||||
acpi_add_table(rsdp, (void *)start_addr);
|
acpi_add_table(rsdp, (void *)start_addr);
|
||||||
|
|
|
@ -84,7 +84,7 @@ static unsigned long mainboard_write_acpi_tables(
|
||||||
printk(BIOS_ERR, "Couldn't add headset codec.\n");
|
printk(BIOS_ERR, "Couldn't add headset codec.\n");
|
||||||
|
|
||||||
end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,
|
end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,
|
||||||
oem_id, oem_table_id);
|
oem_id, oem_table_id, 0);
|
||||||
|
|
||||||
if (end_addr != start_addr)
|
if (end_addr != start_addr)
|
||||||
acpi_add_table(rsdp, (void *)start_addr);
|
acpi_add_table(rsdp, (void *)start_addr);
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
|
|
||||||
uintptr_t nhlt_soc_serialize(struct nhlt *nhlt, uintptr_t acpi_addr)
|
uintptr_t nhlt_soc_serialize(struct nhlt *nhlt, uintptr_t acpi_addr)
|
||||||
{
|
{
|
||||||
return nhlt_soc_serialize_oem_overrides(nhlt, acpi_addr, NULL, NULL);
|
return nhlt_soc_serialize_oem_overrides(nhlt, acpi_addr, NULL, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t nhlt_soc_serialize_oem_overrides(struct nhlt *nhlt,
|
uintptr_t nhlt_soc_serialize_oem_overrides(struct nhlt *nhlt,
|
||||||
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id)
|
uintptr_t acpi_addr, const char *oem_id, const char *oem_table_id,
|
||||||
|
uint32_t oem_revision)
|
||||||
{
|
{
|
||||||
global_nvs_t *gnvs;
|
global_nvs_t *gnvs;
|
||||||
|
|
||||||
|
@ -37,5 +38,5 @@ uintptr_t nhlt_soc_serialize_oem_overrides(struct nhlt *nhlt,
|
||||||
gnvs->nhll = nhlt_current_size(nhlt);
|
gnvs->nhll = nhlt_current_size(nhlt);
|
||||||
|
|
||||||
return nhlt_serialize_oem_overrides(nhlt, acpi_addr,
|
return nhlt_serialize_oem_overrides(nhlt, acpi_addr,
|
||||||
oem_id, oem_table_id);
|
oem_id, oem_table_id, oem_revision);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue