summaryrefslogtreecommitdiff
path: root/src/mainboard/google
diff options
context:
space:
mode:
authorTim Wawrzynczak <twawrzynczak@chromium.org>2022-04-29 13:31:00 -0600
committerTim Wawrzynczak <twawrzynczak@chromium.org>2022-05-20 14:59:31 +0000
commitf5cd9a15bac9b691cb7563abd6b9bae8588b1bca (patch)
treec0f5f32f086eb39a81e14821e713b2ea0f0ffcfd /src/mainboard/google
parent2a9b7d93136d5398c945555a7e57cdbaf6a54580 (diff)
mb/google/brya/acpi: Add support for NBCI _DSM subfunction
The Nvidia GPU supports another function named NBCI (NoteBook Common Interface), which has some subfunctions which are required for the Nvidia kernel driver to consume. The specification for this function comes from the Nvidia GN20 Software Design Guide. BUG=b:214581763 TEST=build Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Change-Id: I19eb9417923d297a084d6f5329682e91cd506a9e Reviewed-on: https://review.coreboot.org/c/coreboot/+/64008 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Subrata Banik <subratabanik@google.com> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Diffstat (limited to 'src/mainboard/google')
-rw-r--r--src/mainboard/google/brya/acpi/gpu_top.asl8
-rw-r--r--src/mainboard/google/brya/acpi/nbci.asl74
2 files changed, 82 insertions, 0 deletions
diff --git a/src/mainboard/google/brya/acpi/gpu_top.asl b/src/mainboard/google/brya/acpi/gpu_top.asl
index c23a0ce003..b7e90335b6 100644
--- a/src/mainboard/google/brya/acpi/gpu_top.asl
+++ b/src/mainboard/google/brya/acpi/gpu_top.asl
@@ -22,6 +22,7 @@ Scope (\_SB.PCI0.PEG0)
#include "power.asl"
#include "nvop.asl"
#include "nvjt.asl"
+ #include "nbci.asl"
Method (_DSM, 4, Serialized)
{
@@ -39,6 +40,13 @@ Scope (\_SB.PCI0.PEG0)
Return (NVJT (Arg2, Arg3))
}
}
+ ElseIf (Arg0 == ToUUID (UUID_NBCI))
+ {
+ If (ToInteger (Arg1) >= REVISION_MIN_NBCI)
+ {
+ Return (NBCI (Arg2, Arg3))
+ }
+ }
Return (NV_ERROR_UNSUPPORTED)
}
diff --git a/src/mainboard/google/brya/acpi/nbci.asl b/src/mainboard/google/brya/acpi/nbci.asl
new file mode 100644
index 0000000000..0564f7aea4
--- /dev/null
+++ b/src/mainboard/google/brya/acpi/nbci.asl
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#define NBCI_FUNC_SUPPORT 0
+#define NBCI_FUNC_PLATCAPS 1
+#define NBCI_FUNC_GETOBJBYTYPE 16
+#define NBCI_FUNC_GETCALLBACKS 19
+
+/* 'DR' in ASCII, for DRiver Object */
+#define NBCI_OBJTYPE_DR 0x4452
+
+Method (NBCI, 2, Serialized)
+{
+ Switch (ToInteger (Arg0))
+ {
+ Case (NBCI_FUNC_SUPPORT)
+ {
+ Return (ITOB(
+ (1 << NBCI_FUNC_SUPPORT) |
+ (1 << NBCI_FUNC_PLATCAPS) |
+ (1 << NBCI_FUNC_GETOBJBYTYPE)))
+ }
+ Case (NBCI_FUNC_PLATCAPS)
+ {
+ Return (ITOB(
+ (0 << 10) | /* No 3D Hotkeys */
+ (0 << 9) | /* Do not enumerate a dock */
+ (0 << 7) | /* Does not have DISPLAYSTATUS */
+ (0 << 5) | /* No LID support */
+ (0 << 4))) /* No Aux power state request */
+ }
+ Case (NBCI_FUNC_GETCALLBACKS)
+ {
+ Return (0)
+ }
+ Case (NBCI_FUNC_GETOBJBYTYPE)
+ {
+ CreateWordField (Arg1, 2, BFF0)
+ If (BFF0 == NBCI_OBJTYPE_DR)
+ {
+ Return (Buffer(0xa1)
+ {
+ /* DR ("Driver Object") is a data object which
+ * might vary depending on the eDP panel used. */
+ 0x57, 0x74, 0xdc, 0x86, 0x75, 0x84, 0xec, 0xe7,
+ 0x52, 0x44, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0xde, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x47, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x51, 0x00, 0x00, 0x00, 0x04, 0x00, 0x4f, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x4d, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x49, 0x00, 0x00, 0x00, 0x08, 0x00, 0x47, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x1c,
+ 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x41, 0x5d, 0xc9, 0x00, 0x01, 0x24, 0x2e, 0x00,
+ 0x02, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0xd9, 0x1c, 0x04, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x68, 0x9e,
+ 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+ })
+ } Else {
+ Return (NV_ERROR_UNSPECIFIED)
+ }
+
+ }
+ }
+
+ Return (NV_ERROR_UNSUPPORTED)
+}