mb/google/brya: Implement shutdown function for dGPU
Variants of brya that have a dGPU also need to perform a special shutdown sequence in the _PTS ACPI Method. Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Change-Id: Ib760fa65e6e021c0949187f13f038d3e952e5910 Reviewed-on: https://review.coreboot.org/c/coreboot/+/65488 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Subrata Banik <subratabanik@google.com> Reviewed-by: Nick Vaccaro <nvaccaro@google.com>
This commit is contained in:
parent
ef886f3034
commit
52ccd293d7
|
@ -14,6 +14,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
WEAK_DEV_PTR(rp6_wwan);
|
WEAK_DEV_PTR(rp6_wwan);
|
||||||
|
WEAK_DEV_PTR(dgpu);
|
||||||
|
|
||||||
static void add_fw_config_oem_string(const struct fw_config *config, void *arg)
|
static void add_fw_config_oem_string(const struct fw_config *config, void *arg)
|
||||||
{
|
{
|
||||||
|
@ -102,7 +103,7 @@ static void mainboard_dev_init(struct device *dev)
|
||||||
mainboard_ec_init();
|
mainboard_ec_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mainboard_generate_shutdown(const struct device *dev)
|
static void mainboard_generate_wwan_shutdown(const struct device *dev)
|
||||||
{
|
{
|
||||||
const struct drivers_wwan_fm_config *config = config_of(dev);
|
const struct drivers_wwan_fm_config *config = config_of(dev);
|
||||||
const struct device *parent = dev->bus->dev;
|
const struct device *parent = dev->bus->dev;
|
||||||
|
@ -119,12 +120,18 @@ static void mainboard_generate_shutdown(const struct device *dev)
|
||||||
acpigen_emit_byte(ARG0_OP);
|
acpigen_emit_byte(ARG0_OP);
|
||||||
}
|
}
|
||||||
acpigen_write_if_end();
|
acpigen_write_if_end();
|
||||||
} else {
|
|
||||||
acpigen_emit_namestring(acpi_device_path_join(dev, "DPTS"));
|
|
||||||
acpigen_emit_byte(ARG0_OP);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mainboard_generate_dgpu_shutdown(const struct device *dev)
|
||||||
|
{
|
||||||
|
/* Call `_OFF` from the Power Resource associated with the dGPU's PEG port. */
|
||||||
|
const struct device *parent = dev->bus->dev;
|
||||||
|
|
||||||
|
if (parent)
|
||||||
|
acpigen_emit_namestring(acpi_device_path_join(parent, "PGPR._OFF"));
|
||||||
|
}
|
||||||
|
|
||||||
static void mainboard_generate_s0ix_hook(void)
|
static void mainboard_generate_s0ix_hook(void)
|
||||||
{
|
{
|
||||||
acpigen_write_if_lequal_op_int(ARG0_OP, 1);
|
acpigen_write_if_lequal_op_int(ARG0_OP, 1);
|
||||||
|
@ -145,14 +152,18 @@ static void mainboard_generate_s0ix_hook(void)
|
||||||
static void mainboard_fill_ssdt(const struct device *dev)
|
static void mainboard_fill_ssdt(const struct device *dev)
|
||||||
{
|
{
|
||||||
const struct device *wwan = DEV_PTR(rp6_wwan);
|
const struct device *wwan = DEV_PTR(rp6_wwan);
|
||||||
|
const struct device *dgpu = DEV_PTR(dgpu);
|
||||||
|
|
||||||
|
acpigen_write_scope("\\_SB");
|
||||||
|
acpigen_write_method_serialized("MPTS", 1);
|
||||||
|
if (wwan)
|
||||||
|
mainboard_generate_wwan_shutdown(wwan);
|
||||||
|
if (dgpu)
|
||||||
|
mainboard_generate_dgpu_shutdown(dgpu);
|
||||||
|
|
||||||
|
acpigen_write_method_end(); /* Method */
|
||||||
|
acpigen_write_scope_end(); /* Scope */
|
||||||
|
|
||||||
if (wwan) {
|
|
||||||
acpigen_write_scope("\\_SB");
|
|
||||||
acpigen_write_method_serialized("MPTS", 1);
|
|
||||||
mainboard_generate_shutdown(wwan);
|
|
||||||
acpigen_write_method_end(); /* Method */
|
|
||||||
acpigen_write_scope_end(); /* Scope */
|
|
||||||
}
|
|
||||||
/* for variant to fill additional SSDT */
|
/* for variant to fill additional SSDT */
|
||||||
variant_fill_ssdt(dev);
|
variant_fill_ssdt(dev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue