summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2023-04-17 12:11:03 +0300
committerKyösti Mälkki <kyosti.malkki@gmail.com>2023-04-26 10:51:35 +0000
commitddc37d69cb29327217151bd15a906177bc7949de (patch)
treedf897f441d79176bee98aff415749661091ceef0
parentd48982acacbe87bfe78bf9b748d5a2f3fd3225c0 (diff)
ACPI: Add acpigen_write_PTC()
Change-Id: Ibaf2d7105e7a5da8a50ef32b682978ff55fe31e0 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/74473 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
-rw-r--r--src/acpi/acpigen.c31
-rw-r--r--src/include/acpi/acpigen.h1
2 files changed, 21 insertions, 11 deletions
diff --git a/src/acpi/acpigen.c b/src/acpi/acpigen.c
index d30893004e..d613becbc3 100644
--- a/src/acpi/acpigen.c
+++ b/src/acpi/acpigen.c
@@ -711,7 +711,7 @@ void acpigen_write_empty_PCT(void)
acpigen_emit_stream(stream, ARRAY_SIZE(stream));
}
-void acpigen_write_empty_PTC(void)
+void acpigen_write_PTC(uint8_t duty_width, uint8_t duty_offset, uint16_t p_cnt)
{
/*
Name (_PTC, Package (0x02)
@@ -719,31 +719,35 @@ void acpigen_write_empty_PTC(void)
ResourceTemplate ()
{
Register (FFixedHW,
- 0x00, // Bit Width
- 0x00, // Bit Offset
- 0x0000000000000000, // Address
+ 0x00, // Duty Width
+ 0x00, // Duty Offset
+ 0x0000000000000000, // P_CNT IO Address
,)
},
ResourceTemplate ()
{
Register (FFixedHW,
- 0x00, // Bit Width
- 0x00, // Bit Offset
- 0x0000000000000000, // Address
+ 0x00, // Duty Width
+ 0x00, // Duty Offset
+ 0x0000000000000000, // P_CNT IO Address
,)
}
})
*/
acpi_addr_t addr = {
- .space_id = ACPI_ADDRESS_SPACE_FIXED,
- .bit_width = 0,
- .bit_offset = 0,
+ .bit_width = duty_width,
+ .bit_offset = duty_offset,
.access_size = ACPI_ACCESS_SIZE_UNDEFINED,
- .addrl = 0,
+ .addrl = p_cnt,
.addrh = 0,
};
+ if (addr.addrl != 0)
+ addr.space_id = ACPI_ADDRESS_SPACE_IO;
+ else
+ addr.space_id = ACPI_ADDRESS_SPACE_FIXED;
+
acpigen_write_name("_PTC");
acpigen_write_package(2);
@@ -756,6 +760,11 @@ void acpigen_write_empty_PTC(void)
acpigen_pop_len();
}
+void acpigen_write_empty_PTC(void)
+{
+ acpigen_write_PTC(0, 0, 0);
+}
+
static void __acpigen_write_method(const char *name, uint8_t flags)
{
acpigen_emit_byte(METHOD_OP);
diff --git a/src/include/acpi/acpigen.h b/src/include/acpi/acpigen.h
index ae501432d1..180e93779d 100644
--- a/src/include/acpi/acpigen.h
+++ b/src/include/acpi/acpigen.h
@@ -431,6 +431,7 @@ void acpigen_write_PPC(u8 nr);
void acpigen_write_PPC_NVS(void);
void acpigen_write_empty_PCT(void);
void acpigen_write_empty_PTC(void);
+void acpigen_write_PTC(uint8_t duty_width, uint8_t duty_offset, uint16_t p_cnt);
void acpigen_write_PRW(u32 wake, u32 level);
void acpigen_write_STA(uint8_t status);
void acpigen_write_STA_ext(const char *namestring);