drivers/intel/gma/acpi: Reduce display switching stubs
_DCS, _DGS and _DSS are required by specification. However, we never implemented them properly, and no OS driver com- plained yet. So we stub them out and keep the traditional behavior in case an OS driver checks for their existence. The old implementations also only returned static values as there never was any write to their GNVS variables. The TRAP() that was called in one place is actually implemented by some ThinkPad's SMI handler as docking event. However, as the call precedes these SMI handlers in coreboot history, it's most likely an accident. Change-Id: Ib0b9fcdd58df254d3b2290900e3bc206a7abd92d Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39726 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: HAOUAS Elyes <ehaouas@noos.fr>
This commit is contained in:
parent
cc85ce0aa0
commit
e98f6af77b
|
@ -102,39 +102,38 @@ drivers_intel_gma_displays_ssdt_generate(const struct i915_gpu_controller_info *
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Method(_DCS, 0)
|
* _DCS, _DGS and _DSS are required by specification. However,
|
||||||
{
|
* we never implemented them properly, and no OS driver com-
|
||||||
Return (^^XDCS(<device number>))
|
* plained yet. So we stub them out and keep the traditional
|
||||||
}
|
* behavior in case an OS driver checks for their existence.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Method(_DCS, 0)
|
||||||
|
{
|
||||||
|
Return (0x1d)
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
acpigen_write_method("_DCS", 0);
|
acpigen_write_method("_DCS", 0);
|
||||||
acpigen_emit_byte(0xa4); /* ReturnOp. */
|
acpigen_write_return_integer(0x1d);
|
||||||
acpigen_emit_namestring("^^XDCS");
|
|
||||||
acpigen_write_byte(i);
|
|
||||||
acpigen_pop_len();
|
acpigen_pop_len();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Method(_DGS, 0)
|
Method(_DGS, 0)
|
||||||
{
|
{
|
||||||
Return (^^XDGS(<device number>))
|
Return (0)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
acpigen_write_method("_DGS", 0);
|
acpigen_write_method("_DGS", 0);
|
||||||
acpigen_emit_byte(0xa4); /* ReturnOp. */
|
acpigen_write_return_integer(0);
|
||||||
acpigen_emit_namestring("^^XDGS");
|
|
||||||
acpigen_write_byte(i);
|
|
||||||
acpigen_pop_len();
|
acpigen_pop_len();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
^^XDSS(0x5a, Arg0)
|
}
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
acpigen_write_method("_DSS", 1);
|
acpigen_write_method("_DSS", 1);
|
||||||
acpigen_emit_namestring("^^XDSS");
|
|
||||||
acpigen_write_byte(i);
|
|
||||||
acpigen_emit_byte(0x68); /* Arg0Op. */
|
|
||||||
acpigen_pop_len();
|
acpigen_pop_len();
|
||||||
|
|
||||||
acpigen_pop_len();
|
acpigen_pop_len();
|
||||||
|
|
|
@ -35,11 +35,6 @@
|
||||||
/* Display Output Switching */
|
/* Display Output Switching */
|
||||||
Method (_DOS, 1)
|
Method (_DOS, 1)
|
||||||
{
|
{
|
||||||
/* Windows 2000 and Windows XP call _DOS to enable/disable
|
|
||||||
* Display Output Switching during init and while a switch
|
|
||||||
* is already active
|
|
||||||
*/
|
|
||||||
Store (And(Arg0, 7), DSEN)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -80,33 +75,3 @@
|
||||||
XBCM (DerefOf (Index (BRIG, Local0)))
|
XBCM (DerefOf (Index (BRIG, Local0)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Device Current Status */
|
|
||||||
Method(XDCS, 1)
|
|
||||||
{
|
|
||||||
TRAP(1)
|
|
||||||
If (And(CSTE, ShiftLeft (1, Arg0))) {
|
|
||||||
Return (0x1f)
|
|
||||||
}
|
|
||||||
Return(0x1d)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Query Device Graphics State */
|
|
||||||
Method(XDGS, 1)
|
|
||||||
{
|
|
||||||
If (And(NSTE, ShiftLeft (1, Arg0))) {
|
|
||||||
Return(1)
|
|
||||||
}
|
|
||||||
Return(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Device Set State */
|
|
||||||
Method(XDSS, 1)
|
|
||||||
{
|
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
|
||||||
* display switch was completed
|
|
||||||
*/
|
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
|
||||||
Store (NSTE, CSTE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -12,8 +12,6 @@ DefinitionBlock(
|
||||||
0x20110725 // OEM revision
|
0x20110725 // OEM revision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Name(\DSEN, 1)
|
|
||||||
|
|
||||||
#include "acpi/platform.asl"
|
#include "acpi/platform.asl"
|
||||||
|
|
||||||
#include <soc/intel/skylake/acpi/globalnvs.asl>
|
#include <soc/intel/skylake/acpi/globalnvs.asl>
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
|
|
||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
|
@ -89,9 +88,6 @@ Field (GNVS, ByteAcc, NoLock, Preserve)
|
||||||
TLST, 8, // 0x3d - Display Toggle List pointer
|
TLST, 8, // 0x3d - Display Toggle List pointer
|
||||||
CADL, 8, // 0x3e - Currently Attached Devices List
|
CADL, 8, // 0x3e - Currently Attached Devices List
|
||||||
PADL, 8, // 0x3f - Previously Attached Devices List
|
PADL, 8, // 0x3f - Previously Attached Devices List
|
||||||
CSTE, 16, // 0x40 - Current display state
|
|
||||||
NSTE, 16, // 0x42 - Next display state
|
|
||||||
SSTE, 16, // 0x44 - Set display state
|
|
||||||
Offset (0x46),
|
Offset (0x46),
|
||||||
NDID, 8, // 0x46 - Number of Device IDs
|
NDID, 8, // 0x46 - Number of Device IDs
|
||||||
DID1, 32, // 0x47 - Device ID 1
|
DID1, 32, // 0x47 - Device ID 1
|
||||||
|
|
|
@ -75,9 +75,7 @@ typedef struct global_nvs_t {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -69,9 +69,7 @@ typedef struct {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
|
|
||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
|
@ -88,9 +87,7 @@ Field (GNVS, ByteAcc, NoLock, Preserve)
|
||||||
TLST, 8, // 0x3d - Display Toggle List pointer
|
TLST, 8, // 0x3d - Display Toggle List pointer
|
||||||
CADL, 8, // 0x3e - Currently Attached Devices List
|
CADL, 8, // 0x3e - Currently Attached Devices List
|
||||||
PADL, 8, // 0x3f - Previously Attached Devices List
|
PADL, 8, // 0x3f - Previously Attached Devices List
|
||||||
CSTE, 16, // 0x40 - Current display state
|
Offset (0x46),
|
||||||
NSTE, 16, // 0x42 - Next display state
|
|
||||||
SSTE, 16, // 0x44 - Set display state
|
|
||||||
NDID, 8, // 0x46 - Number of Device IDs
|
NDID, 8, // 0x46 - Number of Device IDs
|
||||||
DID1, 32, // 0x47 - Device ID 1
|
DID1, 32, // 0x47 - Device ID 1
|
||||||
DID2, 32, // 0x4b - Device ID 2
|
DID2, 32, // 0x4b - Device ID 2
|
||||||
|
|
|
@ -71,9 +71,7 @@ typedef struct {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
|
|
||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
|
@ -92,9 +91,6 @@ Field (GNVS, ByteAcc, NoLock, Preserve)
|
||||||
TLST, 8, // 0x3d - Display Toggle List pointer
|
TLST, 8, // 0x3d - Display Toggle List pointer
|
||||||
CADL, 8, // 0x3e - Currently Attached Devices List
|
CADL, 8, // 0x3e - Currently Attached Devices List
|
||||||
PADL, 8, // 0x3f - Previously Attached Devices List
|
PADL, 8, // 0x3f - Previously Attached Devices List
|
||||||
CSTE, 16, // 0x40 - Current display state
|
|
||||||
NSTE, 16, // 0x42 - Next display state
|
|
||||||
SSTE, 16, // 0x44 - Set display state
|
|
||||||
Offset (0x46),
|
Offset (0x46),
|
||||||
NDID, 8, // 0x46 - Number of Device IDs
|
NDID, 8, // 0x46 - Number of Device IDs
|
||||||
DID1, 32, // 0x47 - Device ID 1
|
DID1, 32, // 0x47 - Device ID 1
|
||||||
|
|
|
@ -73,9 +73,7 @@ typedef struct {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
|
|
||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
|
@ -92,9 +91,6 @@ Field (GNVS, ByteAcc, NoLock, Preserve)
|
||||||
TLST, 8, // 0x3d - Display Toggle List pointer
|
TLST, 8, // 0x3d - Display Toggle List pointer
|
||||||
CADL, 8, // 0x3e - Currently Attached Devices List
|
CADL, 8, // 0x3e - Currently Attached Devices List
|
||||||
PADL, 8, // 0x3f - Previously Attached Devices List
|
PADL, 8, // 0x3f - Previously Attached Devices List
|
||||||
CSTE, 16, // 0x40 - Current display state
|
|
||||||
NSTE, 16, // 0x42 - Next display state
|
|
||||||
SSTE, 16, // 0x44 - Set display state
|
|
||||||
Offset (0x46),
|
Offset (0x46),
|
||||||
NDID, 8, // 0x46 - Number of Device IDs
|
NDID, 8, // 0x46 - Number of Device IDs
|
||||||
DID1, 32, // 0x47 - Device ID 1
|
DID1, 32, // 0x47 - Device ID 1
|
||||||
|
|
|
@ -71,9 +71,7 @@ typedef struct {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -74,9 +74,7 @@ typedef struct global_nvs_t {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
u8 rsvd5[0x9];
|
u8 rsvd5[0x9];
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
|
|
||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
|
@ -89,9 +88,6 @@ Field (GNVS, ByteAcc, NoLock, Preserve)
|
||||||
TLST, 8, // 0x3d - Display Toggle List pointer
|
TLST, 8, // 0x3d - Display Toggle List pointer
|
||||||
CADL, 8, // 0x3e - Currently Attached Devices List
|
CADL, 8, // 0x3e - Currently Attached Devices List
|
||||||
PADL, 8, // 0x3f - Previously Attached Devices List
|
PADL, 8, // 0x3f - Previously Attached Devices List
|
||||||
CSTE, 16, // 0x40 - Current display state
|
|
||||||
NSTE, 16, // 0x42 - Next display state
|
|
||||||
SSTE, 16, // 0x44 - Set display state
|
|
||||||
Offset (0x46),
|
Offset (0x46),
|
||||||
NDID, 8, // 0x46 - Number of Device IDs
|
NDID, 8, // 0x46 - Number of Device IDs
|
||||||
DID1, 32, // 0x47 - Device ID 1
|
DID1, 32, // 0x47 - Device ID 1
|
||||||
|
|
|
@ -75,9 +75,7 @@ typedef struct global_nvs_t {
|
||||||
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
u8 tlst; /* 0x3d - Display Toggle List Pointer */
|
||||||
u8 cadl; /* 0x3e - currently attached devices */
|
u8 cadl; /* 0x3e - currently attached devices */
|
||||||
u8 padl; /* 0x3f - previously attached devices */
|
u8 padl; /* 0x3f - previously attached devices */
|
||||||
u16 cste; /* 0x40 - current display state */
|
u16 rsvd14[3];
|
||||||
u16 nste; /* 0x42 - next display state */
|
|
||||||
u16 sste; /* 0x44 - set display state */
|
|
||||||
u8 ndid; /* 0x46 - number of device ids */
|
u8 ndid; /* 0x46 - number of device ids */
|
||||||
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
u32 did[5]; /* 0x47 - 5b device id 1..5 */
|
||||||
/* TPM support */
|
/* TPM support */
|
||||||
|
|
Loading…
Reference in New Issue