diff --git a/src/drivers/gfx/nvidia/acpi/boost.asl b/src/drivers/gfx/nvidia/acpi/boost.asl index 98abc522f7..8a88955a52 100644 --- a/src/drivers/gfx/nvidia/acpi/boost.asl +++ b/src/drivers/gfx/nvidia/acpi/boost.asl @@ -10,7 +10,7 @@ #define GPS_FUNC_PSHARESTATUS 32 #define GPS_FUNC_PSHAREPARAMS 42 -Method (NVGB, 2, NotSerialized) +Method (GPS, 2, Serialized) { Printf("GPS {") @@ -24,13 +24,13 @@ Method (NVGB, 2, NotSerialized) // Get current platform status, thermal budget Case (GPS_FUNC_PSHARESTATUS) { - Printf(" GPS_FUNC_PSHARESTATUS") + Printf(" GPS_FUNC_PSHARESTATUS: %o", ToHexString(Arg1)) Local0 = Buffer (4) { 0 } } // Get GPU Boost platform parameters Case (GPS_FUNC_PSHAREPARAMS) { - Printf(" GPS_FUNC_PSHAREPARAMS") + Printf(" GPS_FUNC_PSHAREPARAMS: %o", ToHexString(Arg1)) CreateField (Arg1, 0, 3, QTYP) // Query Type CreateField (Arg1, 8, 1, GTMP) // GPU temperature status CreateField (Arg1, 9, 1, CTMP) // CPU temperature status @@ -44,6 +44,8 @@ Method (NVGB, 2, NotSerialized) VERS = 0x00010000 STAT = QTYP + Printf(" Query Type = %o", ToInteger(QTYP)) + Switch (ToInteger(QTYP)) { // Get current status Case (0) { diff --git a/src/drivers/gfx/nvidia/acpi/gpu.asl b/src/drivers/gfx/nvidia/acpi/gpu.asl index 19971e445e..5c24bc749b 100644 --- a/src/drivers/gfx/nvidia/acpi/gpu.asl +++ b/src/drivers/gfx/nvidia/acpi/gpu.asl @@ -10,11 +10,12 @@ #define GPS_REVISION_ID 0x200 #define JT_DSM_GUID "CBECA351-067B-4924-9CBD-B46B00B86F34" -#define JT_REVISION_ID 0x200 +#define JT_REVISION_ID 0x103 #define NVOP_DSM_GUID "A486D8F8-0BDA-471B-A72B-6042A6B5BEE0" #define NVOP_REVISION_ID 0x100 +// 00:01.0 Device (\_SB.PCI0.PEG0) { Name (_ADR, CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 16) @@ -24,12 +25,20 @@ Device (\_SB.PCI0.PEG0) Method (_ON) { + Printf("PEG0._ON {") + // TODO: Check for deferred GCx action + \_SB.PCI0.PEG0.DGPU._ON() _STA = 1 + Printf("} PEG0._ON") } Method (_OFF) { + Printf("PEG0._OFF {") + // TODO: Check for deferred GCx action + \_SB.PCI0.PEG0.DGPU._OFF() _STA = 0 + Printf("} PEG0._OFF") } } @@ -37,15 +46,13 @@ Device (\_SB.PCI0.PEG0) Name (_PR3, Package () { PWRR }) } +// 01:00.0 Device (\_SB.PCI0.PEG0.DGPU) { Name(_ADR, 0x00000000) - // GPU Power - Name (GPWR, 0) - - // GCx State - Name (GCST, 0) + Name (GPWR, 0) // GPU Power + Name (GCST, 6) // GCx State // For supporting Hybrid Graphics, the package refers to the PCIe controller // itself, which leverages GC6 Control methods under the dGPU namespace. @@ -54,6 +61,7 @@ Device (\_SB.PCI0.PEG0.DGPU) Method (_STA) { + Printf("DGPU._STA") /* * Only return "On" when: * - GPU power is good @@ -70,7 +78,7 @@ Device (\_SB.PCI0.PEG0.DGPU) Method (_ON) { - Printf("_ON {") + Printf("DGPU._ON {") Printf(" Enable GPU power") STXS(DGPU_PWR_EN) Sleep(10) @@ -80,12 +88,13 @@ Device (\_SB.PCI0.PEG0.DGPU) Sleep(10) GPWR = 1 - Printf("} _ON") + GCST = 0 + Printf("} DGPU._ON") } Method (_OFF) { - Printf("_OFF {") + Printf("DGPU._OFF {") Printf(" Put GPU in reset") CTXS(DGPU_RST_N) Sleep(10) @@ -95,36 +104,57 @@ Device (\_SB.PCI0.PEG0.DGPU) Sleep(10) GPWR = 0 - Printf("} _OFF") + GCST = 6 + Printf("} DGPU._OFF") } Method (_PS0) { // XGXS, XGIS, XCLM + Printf("_PS0 {}") } Method (_PS3) { // EGNS, EGIS, EGIN + Printf("_PS3 {}") } - Method (_DSM, 4, NotSerialized) + Method (_DSM, 4, Serialized) { + // Notebook Common Interface + If (Arg0 == ToUUID(NBCI_DSM_GUID)) { + Printf("NBCI_DSM_GUID") + If (Arg1 <= NBCI_REVISION_ID) { + Printf(" TODO: Unimplemented!") + } + } + // NVIDIA GPU Boost If (Arg0 == ToUUID(GPS_DSM_GUID)) { + Printf("GPS_DSM_GUID") If (Arg1 <= GPS_REVISION_ID) { - Return(NVGB(Arg2, Arg3)) + Return(GPS(Arg2, Arg3)) } } // NVIDIA Low Power States If (Arg0 == ToUUID(JT_DSM_GUID)) { + Printf("JT_DSM_GUID") If (Arg1 <= JT_REVISION_ID) { Return(NVJT(Arg2, Arg3)) } } - Printf("Unsupported GUID") + // Advanced Optimus + If (Arg0 == ToUUID(NVOP_DSM_GUID)) { + Printf("NVOP_DSM_GUID") + If (Arg1 <= NVOP_REVISION_ID) { + Printf(" TODO: Unimplemented!") + } + } + + Printf("Unsupported GUID: %o", ToHexString(Arg0)) Return(NVIDIA_ERROR_UNSUPPORTED) } diff --git a/src/drivers/gfx/nvidia/acpi/low_power_states.asl b/src/drivers/gfx/nvidia/acpi/low_power_states.asl index 3df57118a3..7648f64e07 100644 --- a/src/drivers/gfx/nvidia/acpi/low_power_states.asl +++ b/src/drivers/gfx/nvidia/acpi/low_power_states.asl @@ -7,19 +7,20 @@ #define JT_FUNC_POWERCONTROL 3 #define JT_FUNC_PLATPOLICY 4 -Method (NVJT, 2, NotSerialized) +Method (NVJT, 2, Serialized) { Printf("NVJT {") Switch (ToInteger(Arg0)) { Case (JT_FUNC_SUPPORT) { Printf(" JT_FUNC_SUPPORT"); // Functions supported: 0, 1, 3, 4 - Local0 = Buffer() { 0x1B, 0, 0, 0 } + //Local0 = Buffer() { 0x1B, 0, 0, 0 } + Local0 = Buffer() { 0x13, 0, 0, 0 } } Case (JT_FUNC_CAPS) { Printf(" JT_FUNC_CAPS"); - Local0 = Buffer(4) { 0, 0, 0, 0 } + Local0 = Buffer(4) { 0 } // G-SYNC NVSR Power Features CreateField (Local0, 0, 1, JTEN) @@ -78,7 +79,7 @@ Method (NVJT, 2, NotSerialized) GSW = 0 // Maximum Revision Supported - CreateField (Local0, 20, 16, MXRV) + CreateField (Local0, 20, 12, MXRV) MXRV = JT_REVISION_ID } @@ -89,7 +90,7 @@ Method (NVJT, 2, NotSerialized) } Case (JT_FUNC_PLATPOLICY) { - Printf(" JT_FUNC_PLATPOLICY"); + Printf(" JT_FUNC_PLATPOLICY: %o", ToHexString(Arg1)); //CreateField (Arg1, 2, 1, AUD) // Azalia Audio Device //CreateField (Arg1, 3, 1, ADM) // Audio Disable Mask //CreateField (Arg1, 4, 4, DGS) // Driver expected State Mask