Compare commits
	
		
			34 Commits
		
	
	
		
			upstream-8
			...
			brightness
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					aa3cac14ab | ||
| 
						 | 
					f3ecbaeb3b | ||
| 
						 | 
					e8df441ef2 | ||
| 
						 | 
					e824c88b95 | ||
| 
						 | 
					f7cea308fc | ||
| 
						 | 
					566623f0fc | ||
| 
						 | 
					2c8c5cf25b | ||
| 
						 | 
					c70505ff8d | ||
| 
						 | 
					7df47320ec | ||
| 
						 | 
					6ab4a7243c | ||
| 
						 | 
					38c3eda699 | ||
| 
						 | 
					4a2741633b | ||
| 
						 | 
					60f3d71981 | ||
| 
						 | 
					d6d4c5e355 | ||
| 
						 | 
					5b13dc0f5e | ||
| 
						 | 
					f941def9dd | ||
| 
						 | 
					b41369176f | ||
| 
						 | 
					e96476dd65 | ||
| 
						 | 
					9113e145db | ||
| 
						 | 
					bb54e49a54 | ||
| 
						 | 
					be0dfcd68a | ||
| 
						 | 
					ed92a6d587 | ||
| 
						 | 
					b21bd87af0 | ||
| 
						 | 
					f224ddbc78 | ||
| 
						 | 
					e3033b56fe | ||
| 
						 | 
					cfa8635d03 | ||
| 
						 | 
					868c102d2f | ||
| 
						 | 
					f6ed8684a5 | ||
| 
						 | 
					920d350c9f | ||
| 
						 | 
					d241bc97c9 | ||
| 
						 | 
					70657e373f | ||
| 
						 | 
					8d5df37c79 | ||
| 
						 | 
					ed35db9071 | ||
| 
						 | 
					f2182a3f95 | 
							
								
								
									
										36
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -1,70 +1,70 @@
 | 
				
			|||||||
[submodule "3rdparty/blobs"]
 | 
					[submodule "3rdparty/blobs"]
 | 
				
			||||||
	path = 3rdparty/blobs
 | 
						path = 3rdparty/blobs
 | 
				
			||||||
	url = ../blobs.git
 | 
						url = https://review.coreboot.org/blobs.git
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	ignore = dirty
 | 
						ignore = dirty
 | 
				
			||||||
[submodule "util/nvidia-cbootimage"]
 | 
					[submodule "util/nvidia-cbootimage"]
 | 
				
			||||||
	path = util/nvidia/cbootimage
 | 
						path = util/nvidia/cbootimage
 | 
				
			||||||
	url = ../nvidia-cbootimage.git
 | 
						url = https://review.coreboot.org/nvidia-cbootimage.git
 | 
				
			||||||
[submodule "vboot"]
 | 
					[submodule "vboot"]
 | 
				
			||||||
	path = 3rdparty/vboot
 | 
						path = 3rdparty/vboot
 | 
				
			||||||
	url = ../vboot.git
 | 
						url = https://review.coreboot.org/vboot.git
 | 
				
			||||||
	branch = main
 | 
						branch = main
 | 
				
			||||||
[submodule "arm-trusted-firmware"]
 | 
					[submodule "arm-trusted-firmware"]
 | 
				
			||||||
	path = 3rdparty/arm-trusted-firmware
 | 
						path = 3rdparty/arm-trusted-firmware
 | 
				
			||||||
	url = ../arm-trusted-firmware.git
 | 
						url = https://review.coreboot.org/arm-trusted-firmware.git
 | 
				
			||||||
[submodule "3rdparty/chromeec"]
 | 
					[submodule "3rdparty/chromeec"]
 | 
				
			||||||
	path = 3rdparty/chromeec
 | 
						path = 3rdparty/chromeec
 | 
				
			||||||
	url = ../chrome-ec.git
 | 
						url = https://review.coreboot.org/chrome-ec.git
 | 
				
			||||||
[submodule "libhwbase"]
 | 
					[submodule "libhwbase"]
 | 
				
			||||||
	path = 3rdparty/libhwbase
 | 
						path = 3rdparty/libhwbase
 | 
				
			||||||
	url = ../libhwbase.git
 | 
						url = https://review.coreboot.org/libhwbase.git
 | 
				
			||||||
[submodule "libgfxinit"]
 | 
					[submodule "libgfxinit"]
 | 
				
			||||||
	path = 3rdparty/libgfxinit
 | 
						path = 3rdparty/libgfxinit
 | 
				
			||||||
	url = ../libgfxinit.git
 | 
						url = https://review.coreboot.org/libgfxinit.git
 | 
				
			||||||
[submodule "3rdparty/fsp"]
 | 
					[submodule "3rdparty/fsp"]
 | 
				
			||||||
	path = 3rdparty/fsp
 | 
						path = 3rdparty/fsp
 | 
				
			||||||
	url = ../fsp.git
 | 
						url = https://review.coreboot.org/fsp.git
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	ignore = dirty
 | 
						ignore = dirty
 | 
				
			||||||
[submodule "opensbi"]
 | 
					[submodule "opensbi"]
 | 
				
			||||||
	path = 3rdparty/opensbi
 | 
						path = 3rdparty/opensbi
 | 
				
			||||||
	url = ../opensbi.git
 | 
						url = https://review.coreboot.org/opensbi.git
 | 
				
			||||||
[submodule "intel-microcode"]
 | 
					[submodule "intel-microcode"]
 | 
				
			||||||
	path = 3rdparty/intel-microcode
 | 
						path = 3rdparty/intel-microcode
 | 
				
			||||||
	url = ../intel-microcode.git
 | 
						url = https://review.coreboot.org/intel-microcode.git
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	ignore = dirty
 | 
						ignore = dirty
 | 
				
			||||||
	branch = main
 | 
						branch = main
 | 
				
			||||||
[submodule "3rdparty/ffs"]
 | 
					[submodule "3rdparty/ffs"]
 | 
				
			||||||
	path = 3rdparty/ffs
 | 
						path = 3rdparty/ffs
 | 
				
			||||||
	url = ../ffs.git
 | 
						url = https://review.coreboot.org/ffs.git
 | 
				
			||||||
[submodule "3rdparty/amd_blobs"]
 | 
					[submodule "3rdparty/amd_blobs"]
 | 
				
			||||||
	path = 3rdparty/amd_blobs
 | 
						path = 3rdparty/amd_blobs
 | 
				
			||||||
	url = ../amd_blobs
 | 
						url = https://review.coreboot.org/amd_blobs
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	ignore = dirty
 | 
						ignore = dirty
 | 
				
			||||||
[submodule "3rdparty/cmocka"]
 | 
					[submodule "3rdparty/cmocka"]
 | 
				
			||||||
	path = 3rdparty/cmocka
 | 
						path = 3rdparty/cmocka
 | 
				
			||||||
	url = ../cmocka.git
 | 
						url = https://review.coreboot.org/cmocka.git
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	branch = stable-1.1
 | 
						branch = stable-1.1
 | 
				
			||||||
[submodule "3rdparty/qc_blobs"]
 | 
					[submodule "3rdparty/qc_blobs"]
 | 
				
			||||||
	path = 3rdparty/qc_blobs
 | 
						path = 3rdparty/qc_blobs
 | 
				
			||||||
	url = ../qc_blobs.git
 | 
						url = https://review.coreboot.org/qc_blobs.git
 | 
				
			||||||
	update = none
 | 
						update = none
 | 
				
			||||||
	ignore = dirty
 | 
						ignore = dirty
 | 
				
			||||||
[submodule "3rdparty/intel-sec-tools"]
 | 
					[submodule "3rdparty/intel-sec-tools"]
 | 
				
			||||||
	path = 3rdparty/intel-sec-tools
 | 
						path = 3rdparty/intel-sec-tools
 | 
				
			||||||
	url = ../9esec-security-tooling.git
 | 
						url = https://review.coreboot.org/9esec-security-tooling.git
 | 
				
			||||||
[submodule "3rdparty/stm"]
 | 
					[submodule "3rdparty/stm"]
 | 
				
			||||||
	path = 3rdparty/stm
 | 
						path = 3rdparty/stm
 | 
				
			||||||
	url = ../STM
 | 
						url = https://review.coreboot.org/STM
 | 
				
			||||||
	branch = stmpe
 | 
						branch = stmpe
 | 
				
			||||||
[submodule "util/goswid"]
 | 
					[submodule "util/goswid"]
 | 
				
			||||||
	path = util/goswid
 | 
						path = util/goswid
 | 
				
			||||||
	url = ../goswid
 | 
						url = https://review.coreboot.org/goswid.git
 | 
				
			||||||
	branch = trunk
 | 
						branch = trunk
 | 
				
			||||||
[submodule "src/vendorcode/amd/opensil/genoa_poc/opensil"]
 | 
					[submodule "src/vendorcode/amd/opensil/genoa_poc/opensil"]
 | 
				
			||||||
	path = src/vendorcode/amd/opensil/genoa_poc/opensil
 | 
						path = src/vendorcode/amd/opensil/genoa_poc/opensil
 | 
				
			||||||
	url = ../opensil_genoa_poc.git
 | 
						url = https://review.coreboot.org/opensil_genoa_poc.git
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								src/drivers/gfx/nvidia/Kconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/drivers/gfx/nvidia/Kconfig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					config DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						bool
 | 
				
			||||||
 | 
						default n
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Support for NVIDIA Optimus graphics
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_BRIDGE
 | 
				
			||||||
 | 
						hex "PCI bridge for the GPU device"
 | 
				
			||||||
 | 
						default 0x01
 | 
				
			||||||
 | 
						depends on DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						depends on DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						bool
 | 
				
			||||||
 | 
						default n
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Support for NVIDIA Dynamic Boost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_TPP
 | 
				
			||||||
 | 
						int "Total processor power offset from default TGP in watts"
 | 
				
			||||||
 | 
						default 45
 | 
				
			||||||
 | 
						depends on DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  This identifies the available power for the CPU or GPU boost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MIN
 | 
				
			||||||
 | 
						int "Minimum TGP offset from default TGP in watts"
 | 
				
			||||||
 | 
						default 0
 | 
				
			||||||
 | 
						depends on DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  This is used to transfer power from the GPU to the CPU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MAX
 | 
				
			||||||
 | 
						int "Maximum TGP offset from default TGP in watts"
 | 
				
			||||||
 | 
						default 0
 | 
				
			||||||
 | 
						depends on DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  This is used to transfer power from the CPU to the GPU
 | 
				
			||||||
							
								
								
									
										5
									
								
								src/drivers/gfx/nvidia/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/drivers/gfx/nvidia/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					# SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					romstage-$(CONFIG_DRIVERS_GFX_NVIDIA) += romstage.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ramstage-$(CONFIG_DRIVERS_GFX_NVIDIA) += nvidia.c
 | 
				
			||||||
							
								
								
									
										96
									
								
								src/drivers/gfx/nvidia/acpi/coffeelake.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/drivers/gfx/nvidia/acpi/coffeelake.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					/* NVIDIA GC6 on CFL and CML CPU PCIe ports */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Memory mapped PCI express config space
 | 
				
			||||||
 | 
					OperationRegion (PCIC, SystemMemory, CONFIG_ECAM_MMCONF_BASE_ADDRESS + (CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 15), 0x1000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Field (PCIC, ByteAcc, NoLock, Preserve) {
 | 
				
			||||||
 | 
						PVID,   16,
 | 
				
			||||||
 | 
						PDID,   16,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset (0x248),
 | 
				
			||||||
 | 
							,   7,
 | 
				
			||||||
 | 
						L23E,   1,      /* L23_Rdy Entry Request */
 | 
				
			||||||
 | 
						L23R,   1,      /* L23_Rdy to Detect Transition */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset (0xC20),
 | 
				
			||||||
 | 
							,   4,
 | 
				
			||||||
 | 
						P0AP,   2,      /* Additional power savings */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset (0xC38),
 | 
				
			||||||
 | 
							,   3,
 | 
				
			||||||
 | 
						P0RM,   1,      /* Robust squelch mechanism */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Enter L23
 | 
				
			||||||
 | 
					Method (DL23, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("      GPU PORT DL23 START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						L23E = 1
 | 
				
			||||||
 | 
						Sleep (16)
 | 
				
			||||||
 | 
						Local0 = 0
 | 
				
			||||||
 | 
						While (L23E) {
 | 
				
			||||||
 | 
							If ((Local0 > 4)) {
 | 
				
			||||||
 | 
								Break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Sleep (16)
 | 
				
			||||||
 | 
							Local0++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						P0RM = 1
 | 
				
			||||||
 | 
						P0AP = 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("      GPU PORT DL23 FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exit L23
 | 
				
			||||||
 | 
					Method (L23D, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("      GPU PORT L23D START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						L23R = 1
 | 
				
			||||||
 | 
						Sleep (16)
 | 
				
			||||||
 | 
						Local0 = 0
 | 
				
			||||||
 | 
						While (L23R) {
 | 
				
			||||||
 | 
							If ((Local0 > 4)) {
 | 
				
			||||||
 | 
								Break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Sleep (16)
 | 
				
			||||||
 | 
							Local0++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						P0RM = 0
 | 
				
			||||||
 | 
						P0AP = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("      GPU PORT L23D FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Main power resource
 | 
				
			||||||
 | 
					PowerResource (PWRR, 0, 0) {
 | 
				
			||||||
 | 
						Name (_STA, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_ON, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PORT PWRR._ON")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							^^DEV0._ON()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_OFF, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PORT PWRR._OFF")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							^^DEV0._OFF()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D0
 | 
				
			||||||
 | 
					Name (_PR0, Package () { PWRR })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D3
 | 
				
			||||||
 | 
					Name (_PR3, Package () { PWRR })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "common/gpu.asl"
 | 
				
			||||||
							
								
								
									
										30
									
								
								src/drivers/gfx/nvidia/acpi/common/dsm.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/drivers/gfx/nvidia/acpi/common/dsm.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NV_ERROR_SUCCESS 0x0
 | 
				
			||||||
 | 
					#define NV_ERROR_UNSPECIFIED 0x80000001
 | 
				
			||||||
 | 
					#define NV_ERROR_UNSUPPORTED 0x80000002
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "gps.asl"
 | 
				
			||||||
 | 
					#include "nvjt.asl"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method (_DSM, 4, Serialized) {
 | 
				
			||||||
 | 
						Printf("GPU _DSM")
 | 
				
			||||||
 | 
						If (Arg0 == ToUUID (JT_DSM_GUID)) {
 | 
				
			||||||
 | 
							If (ToInteger(Arg1) >= JT_REVISION_ID_MIN) {
 | 
				
			||||||
 | 
								Return (NVJT(Arg2, Arg3))
 | 
				
			||||||
 | 
							} Else {
 | 
				
			||||||
 | 
								Printf("  Unsupported JT revision: %o", SFST(Arg1))
 | 
				
			||||||
 | 
								Return (NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} ElseIf (Arg0 == ToUUID (GPS_DSM_GUID)) {
 | 
				
			||||||
 | 
							If (ToInteger(Arg1) == GPS_REVISION_ID) {
 | 
				
			||||||
 | 
								Return (GPS(Arg2, Arg3))
 | 
				
			||||||
 | 
							} Else {
 | 
				
			||||||
 | 
								Printf("  Unsupported GPS revision: %o", SFST(Arg1))
 | 
				
			||||||
 | 
								Return (NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} Else {
 | 
				
			||||||
 | 
							Printf("  Unsupported GUID: %o", IDST(Arg0))
 | 
				
			||||||
 | 
							Return (NV_ERROR_UNSPECIFIED)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										66
									
								
								src/drivers/gfx/nvidia/acpi/common/gps.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/drivers/gfx/nvidia/acpi/common/gps.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define GPS_DSM_GUID "A3132D01-8CDA-49BA-A52E-BC9D46DF6B81"
 | 
				
			||||||
 | 
					#define GPS_REVISION_ID 0x00000200
 | 
				
			||||||
 | 
					#define GPS_FUNC_SUPPORT 0x00000000
 | 
				
			||||||
 | 
					#define GPS_FUNC_PSHARESTATUS 0x00000020
 | 
				
			||||||
 | 
					#define GPS_FUNC_PSHAREPARAMS 0x0000002A
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method(GPS, 2, Serialized) {
 | 
				
			||||||
 | 
						Printf("  GPU GPS")
 | 
				
			||||||
 | 
						Switch(ToInteger(Arg0)) {
 | 
				
			||||||
 | 
							Case(GPS_FUNC_SUPPORT) {
 | 
				
			||||||
 | 
								Printf("    Supported Functions")
 | 
				
			||||||
 | 
								Return(ITOB(
 | 
				
			||||||
 | 
									(1 << GPS_FUNC_SUPPORT) |
 | 
				
			||||||
 | 
									(1 << GPS_FUNC_PSHARESTATUS) |
 | 
				
			||||||
 | 
									(1 << GPS_FUNC_PSHAREPARAMS)
 | 
				
			||||||
 | 
								))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case(GPS_FUNC_PSHARESTATUS) {
 | 
				
			||||||
 | 
								Printf("    Power Share Status")
 | 
				
			||||||
 | 
								Return(ITOB(0))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case(GPS_FUNC_PSHAREPARAMS) {
 | 
				
			||||||
 | 
								Printf("    Power Share Parameters")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								CreateField(Arg1, 0, 4, QTYP) // Query type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Name(GPSP, Buffer(36) { 0x00 })
 | 
				
			||||||
 | 
								CreateDWordField(GPSP, 0, RSTS) // Response status
 | 
				
			||||||
 | 
								CreateDWordField(GPSP, 4, VERS) // Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Set query type of response
 | 
				
			||||||
 | 
								RSTS = QTYP
 | 
				
			||||||
 | 
								// Set version of response
 | 
				
			||||||
 | 
								VERS = 0x00010000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Switch(ToInteger(QTYP)) {
 | 
				
			||||||
 | 
									Case(0) {
 | 
				
			||||||
 | 
										Printf("      Request Current Information")
 | 
				
			||||||
 | 
										// No required information
 | 
				
			||||||
 | 
										Return(GPSP)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case(1) {
 | 
				
			||||||
 | 
										Printf("      Request Supported Fields")
 | 
				
			||||||
 | 
										// Support GPU temperature field
 | 
				
			||||||
 | 
										RSTS |= (1 << 8)
 | 
				
			||||||
 | 
										Return(GPSP)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case(2) {
 | 
				
			||||||
 | 
										Printf("      Request Current Limits")
 | 
				
			||||||
 | 
										// No required limits
 | 
				
			||||||
 | 
										Return(GPSP)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Default {
 | 
				
			||||||
 | 
										Printf("      Unknown Query: %o", SFST(QTYP))
 | 
				
			||||||
 | 
										Return(NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Default {
 | 
				
			||||||
 | 
								Printf("    Unsupported function: %o", SFST(Arg0))
 | 
				
			||||||
 | 
								Return(NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/drivers/gfx/nvidia/acpi/common/gpu.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/drivers/gfx/nvidia/acpi/common/gpu.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Device (DEV0) {
 | 
				
			||||||
 | 
						Name(_ADR, 0x00000000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#include "utility.asl"
 | 
				
			||||||
 | 
						#include "dsm.asl"
 | 
				
			||||||
 | 
						#include "power.asl"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if CONFIG(DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST)
 | 
				
			||||||
 | 
					Scope (\_SB) {
 | 
				
			||||||
 | 
						Device(NPCF) {
 | 
				
			||||||
 | 
							#include "utility.asl"
 | 
				
			||||||
 | 
							#include "nvpcf.asl"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										152
									
								
								src/drivers/gfx/nvidia/acpi/common/nvjt.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								src/drivers/gfx/nvidia/acpi/common/nvjt.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define JT_DSM_GUID "CBECA351-067B-4924-9CBD-B46B00B86F34"
 | 
				
			||||||
 | 
					#define JT_REVISION_ID_MIN 0x00000100
 | 
				
			||||||
 | 
					#define JT_REVISION_ID_MAX 0x00000200
 | 
				
			||||||
 | 
					#define JT_FUNC_SUPPORT 0x00000000
 | 
				
			||||||
 | 
					#define JT_FUNC_CAPS 0x00000001
 | 
				
			||||||
 | 
					#define JT_FUNC_POWERCONTROL 0x00000003
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//TODO: SMI traps and EGIN/XCLM
 | 
				
			||||||
 | 
					#define JT_GPC_GSS 0 // Get current GPU GCx sleep status
 | 
				
			||||||
 | 
					#define JT_GPC_EGNS 1 // Enter GC6 without self-refresh
 | 
				
			||||||
 | 
					#define JT_GPC_EGIS 2 // Enter GC6 with self-refresh
 | 
				
			||||||
 | 
					#define JT_GPC_XGXS 3 // Exit GC6 and stop self-refresh
 | 
				
			||||||
 | 
					#define JT_GPC_XGIS 4 // Exit GC6 for self-refresh update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define JT_DFGC_NONE 0 // Handle request immediately
 | 
				
			||||||
 | 
					#define JT_DFGC_DEFER 1 // Defer GPC and GPCX
 | 
				
			||||||
 | 
					//TODO #define JT_DFGC_CLEAR 2 // Clear pending requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deferred GC6 enter/exit until D3-cold (saved DFGC)
 | 
				
			||||||
 | 
					Name(DFEN, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deferred GC6 enter control (saved GPC)
 | 
				
			||||||
 | 
					Name(DFCI, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Deferred GC6 exit control (saved GPCX)
 | 
				
			||||||
 | 
					Name(DFCO, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method (NVJT, 2, Serialized) {
 | 
				
			||||||
 | 
						Printf("  GPU NVJT")
 | 
				
			||||||
 | 
						Switch (ToInteger(Arg0)) {
 | 
				
			||||||
 | 
							Case (JT_FUNC_SUPPORT) {
 | 
				
			||||||
 | 
								Printf("    Supported Functions")
 | 
				
			||||||
 | 
								Return(ITOB(
 | 
				
			||||||
 | 
									(1 << JT_FUNC_SUPPORT) |
 | 
				
			||||||
 | 
									(1 << JT_FUNC_CAPS) |
 | 
				
			||||||
 | 
									(1 << JT_FUNC_POWERCONTROL)
 | 
				
			||||||
 | 
								))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case (JT_FUNC_CAPS) {
 | 
				
			||||||
 | 
								Printf("    Capabilities")
 | 
				
			||||||
 | 
								Return(ITOB(
 | 
				
			||||||
 | 
									(1 << 0) | // G-SYNC NSVR power-saving features are enabled
 | 
				
			||||||
 | 
									(1 << 1) | // NVSR disabled
 | 
				
			||||||
 | 
									(2 << 3) | // Panel power and backlight are on the suspend rail
 | 
				
			||||||
 | 
									(0 << 5) | // self-refresh controller remains powered while panel is powered
 | 
				
			||||||
 | 
									(0 << 6) | // FB is not on the suspend rail but is powered on in GC6
 | 
				
			||||||
 | 
									(0 << 8) | // Combined power rail for all GPUs
 | 
				
			||||||
 | 
									(0 << 10) | // External SPI ROM
 | 
				
			||||||
 | 
									(1 << 11) | // No SMI handler for kernel panic exit while in GC6
 | 
				
			||||||
 | 
									(0 << 12) | // Supports notify on GC6 state done
 | 
				
			||||||
 | 
									(1 << 13) | // Support deferred GC6
 | 
				
			||||||
 | 
									(1 << 14) | // Support fine-grained root port control
 | 
				
			||||||
 | 
									(2 << 15) | // GC6 version is GC6-R
 | 
				
			||||||
 | 
									(0 << 17) | // GC6 exit ISR is not supported
 | 
				
			||||||
 | 
									(0 << 18) | // GC6 self wakeup not supported
 | 
				
			||||||
 | 
									(JT_REVISION_ID_MAX << 20) // Highest revision supported
 | 
				
			||||||
 | 
								))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case (JT_FUNC_POWERCONTROL) {
 | 
				
			||||||
 | 
								Printf("    Power Control: %o", SFST(Arg1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								CreateField (Arg1, 0, 3, GPC) // GPU power control
 | 
				
			||||||
 | 
								CreateField (Arg1, 4, 1, PPC) // Panel power control
 | 
				
			||||||
 | 
								CreateField (Arg1, 14, 2, DFGC) // Defer GC6 enter/exit until D3 cold
 | 
				
			||||||
 | 
								CreateField (Arg1, 16, 3, GPCX) // Deferred GC6 exit control
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Save deferred GC6 request
 | 
				
			||||||
 | 
								If ((ToInteger(GPC) != 0) || (ToInteger(DFGC) != 0)) {
 | 
				
			||||||
 | 
									DFEN = DFGC
 | 
				
			||||||
 | 
									DFCI = GPC
 | 
				
			||||||
 | 
									DFCO = GPCX
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Buffer to cache current state
 | 
				
			||||||
 | 
								Name (JTBF, Buffer (4) { 0, 0, 0, 0 })
 | 
				
			||||||
 | 
								CreateField (JTBF, 0, 3, CGCS) // Current GC state
 | 
				
			||||||
 | 
								CreateField (JTBF, 3, 1, CGPS) // Current GPU power status
 | 
				
			||||||
 | 
								CreateField (JTBF, 7, 1, CPSS) // Current panel and SRC state (0 when on)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// If doing deferred GC6 request, return now
 | 
				
			||||||
 | 
								If (ToInteger(DFGC) != 0) {
 | 
				
			||||||
 | 
									CGCS = 1
 | 
				
			||||||
 | 
									CGPS = 1
 | 
				
			||||||
 | 
									Return (JTBF)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Apply requested state
 | 
				
			||||||
 | 
								Switch (ToInteger(GPC)) {
 | 
				
			||||||
 | 
									Case (JT_GPC_GSS) {
 | 
				
			||||||
 | 
										Printf("    Get current GPU GCx sleep status")
 | 
				
			||||||
 | 
										//TODO: include transitions!
 | 
				
			||||||
 | 
										If (GTXS(DGPU_RST_N)) {
 | 
				
			||||||
 | 
											// GPU powered on
 | 
				
			||||||
 | 
											CGCS = 1
 | 
				
			||||||
 | 
											CGPS = 1
 | 
				
			||||||
 | 
										} ElseIf (GTXS(DGPU_PWR_EN)) {
 | 
				
			||||||
 | 
											// GPU powered off, GC6
 | 
				
			||||||
 | 
											CGCS = 3
 | 
				
			||||||
 | 
											CGPS = 0
 | 
				
			||||||
 | 
										} Else {
 | 
				
			||||||
 | 
											// GPU powered off, D3 cold
 | 
				
			||||||
 | 
											CGCS = 2
 | 
				
			||||||
 | 
											CGPS = 0
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case (JT_GPC_EGNS) {
 | 
				
			||||||
 | 
										Printf("    Enter GC6 without self-refresh")
 | 
				
			||||||
 | 
										GC6I()
 | 
				
			||||||
 | 
										CPSS = 1
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case (JT_GPC_EGIS) {
 | 
				
			||||||
 | 
										Printf("    Enter GC6 with self-refresh")
 | 
				
			||||||
 | 
										GC6I()
 | 
				
			||||||
 | 
										If (ToInteger(PPC) == 0) {
 | 
				
			||||||
 | 
											CPSS = 0
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case (JT_GPC_XGXS) {
 | 
				
			||||||
 | 
										Printf("    Exit GC6 and stop self-refresh")
 | 
				
			||||||
 | 
										GC6O()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										CGCS = 1
 | 
				
			||||||
 | 
										CGPS = 1
 | 
				
			||||||
 | 
										If (ToInteger(PPC) != 0) {
 | 
				
			||||||
 | 
											CPSS = 0
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case (JT_GPC_XGIS) {
 | 
				
			||||||
 | 
										Printf("    Exit GC6 for self-refresh update")
 | 
				
			||||||
 | 
										GC6O()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										CGCS = 1
 | 
				
			||||||
 | 
										CGPS = 1
 | 
				
			||||||
 | 
										If (ToInteger(PPC) != 0) {
 | 
				
			||||||
 | 
											CPSS = 0
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Default {
 | 
				
			||||||
 | 
										Printf("    Unsupported GPU power control: %o", SFST(GPC))
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Return (JTBF)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Default {
 | 
				
			||||||
 | 
								Printf("    Unsupported function: %o", SFST(Arg0))
 | 
				
			||||||
 | 
								Return (NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										113
									
								
								src/drivers/gfx/nvidia/acpi/common/nvpcf.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/drivers/gfx/nvidia/acpi/common/nvpcf.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NVPCF_DSM_GUID "36b49710-2483-11e7-9598-0800200c9a66"
 | 
				
			||||||
 | 
					#define NVPCF_REVISION_ID 0x00000200
 | 
				
			||||||
 | 
					#define NVPCF_ERROR_SUCCESS 0x0
 | 
				
			||||||
 | 
					#define NVPCF_ERROR_GENERIC 0x80000001
 | 
				
			||||||
 | 
					#define NVPCF_ERROR_UNSUPPORTED 0x80000002
 | 
				
			||||||
 | 
					#define NVPCF_FUNC_GET_SUPPORTED 0x00000000
 | 
				
			||||||
 | 
					#define NVPCF_FUNC_GET_STATIC_CONFIG_TABLES 0x00000001
 | 
				
			||||||
 | 
					#define NVPCF_FUNC_UPDATE_DYNAMIC_PARAMS 0x00000002
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Name(_HID, "NVDA0820")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Name(_UID, "NPCF")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method(_DSM, 4, Serialized) {
 | 
				
			||||||
 | 
						Printf("NVPCF _DSM")
 | 
				
			||||||
 | 
						If (Arg0 == ToUUID(NVPCF_DSM_GUID)) {
 | 
				
			||||||
 | 
							If (ToInteger(Arg1) == NVPCF_REVISION_ID) {
 | 
				
			||||||
 | 
								Return(NPCF(Arg2, Arg3))
 | 
				
			||||||
 | 
							} Else {
 | 
				
			||||||
 | 
								Printf("  Unsupported NVPCF revision: %o", SFST(Arg1))
 | 
				
			||||||
 | 
								Return(NVPCF_ERROR_GENERIC)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} Else {
 | 
				
			||||||
 | 
							Printf("  Unsupported GUID: %o", IDST(Arg0))
 | 
				
			||||||
 | 
							Return(NVPCF_ERROR_GENERIC)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method(NPCF, 2, Serialized) {
 | 
				
			||||||
 | 
						Printf("  NVPCF NPCF")
 | 
				
			||||||
 | 
						Switch(ToInteger(Arg0)) {
 | 
				
			||||||
 | 
							Case(NVPCF_FUNC_GET_SUPPORTED) {
 | 
				
			||||||
 | 
								Printf("    Supported Functions")
 | 
				
			||||||
 | 
								Return(ITOB(
 | 
				
			||||||
 | 
									(1 << NVPCF_FUNC_GET_SUPPORTED) |
 | 
				
			||||||
 | 
									(1 << NVPCF_FUNC_GET_STATIC_CONFIG_TABLES) |
 | 
				
			||||||
 | 
									(1 << NVPCF_FUNC_UPDATE_DYNAMIC_PARAMS)
 | 
				
			||||||
 | 
								))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case(NVPCF_FUNC_GET_STATIC_CONFIG_TABLES) {
 | 
				
			||||||
 | 
								Printf("    Get Static Config")
 | 
				
			||||||
 | 
								Return(Buffer(14) {
 | 
				
			||||||
 | 
									// Device table header
 | 
				
			||||||
 | 
									0x20, 0x03, 0x01,
 | 
				
			||||||
 | 
									// Intel + NVIDIA
 | 
				
			||||||
 | 
									0x00,
 | 
				
			||||||
 | 
									// Controller table header
 | 
				
			||||||
 | 
									0x23, 0x04, 0x05, 0x01,
 | 
				
			||||||
 | 
									// Dynamic boost controller
 | 
				
			||||||
 | 
									0x01,
 | 
				
			||||||
 | 
									// Supports DC
 | 
				
			||||||
 | 
									0x01,
 | 
				
			||||||
 | 
									// Reserved
 | 
				
			||||||
 | 
									0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
									// Checksum
 | 
				
			||||||
 | 
									0xAD
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Case(NVPCF_FUNC_UPDATE_DYNAMIC_PARAMS) {
 | 
				
			||||||
 | 
								Printf("    Update Dynamic Boost")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								CreateField(Arg1, 0x28, 2, ICMD) // Input command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Name(PCFP, Buffer(49) {
 | 
				
			||||||
 | 
									// Table version
 | 
				
			||||||
 | 
									0x23,
 | 
				
			||||||
 | 
									// Table header size
 | 
				
			||||||
 | 
									0x05,
 | 
				
			||||||
 | 
									// Size of common status in bytes
 | 
				
			||||||
 | 
									0x10,
 | 
				
			||||||
 | 
									// Size of controller entry in bytes
 | 
				
			||||||
 | 
									0x1C,
 | 
				
			||||||
 | 
									// Other fields filled in later
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								CreateByteField(PCFP, 0x04, CCNT) // Controller count
 | 
				
			||||||
 | 
								CreateWordField(PCFP, 0x19, ATPP) // AC TPP offset
 | 
				
			||||||
 | 
								CreateWordField(PCFP, 0x1D, AMXP) // AC maximum TGP offset
 | 
				
			||||||
 | 
								CreateWordField(PCFP, 0x21, AMNP) // AC minimum TGP offset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Switch(ToInteger(ICMD)) {
 | 
				
			||||||
 | 
									Case(0) {
 | 
				
			||||||
 | 
										Printf("      Get Controller Params")
 | 
				
			||||||
 | 
										// Number of controllers
 | 
				
			||||||
 | 
										CCNT = 1
 | 
				
			||||||
 | 
										// AC total processor power offset from default TGP in 1/8 watt units
 | 
				
			||||||
 | 
										ATPP = (CONFIG_DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_TPP << 3)
 | 
				
			||||||
 | 
										// AC maximum TGP offset from default TGP in 1/8 watt units
 | 
				
			||||||
 | 
										AMXP = (CONFIG_DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MAX << 3)
 | 
				
			||||||
 | 
										// AC minimum TGP offset from default TGP in 1/8 watt units
 | 
				
			||||||
 | 
										AMNP = (CONFIG_DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MIN << 3)
 | 
				
			||||||
 | 
										Printf("PCFP: %o", SFST(PCFP))
 | 
				
			||||||
 | 
										Return(PCFP)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Case(1) {
 | 
				
			||||||
 | 
										Printf("      Set Controller Status")
 | 
				
			||||||
 | 
										//TODO
 | 
				
			||||||
 | 
										Printf("PCFP: %o", SFST(PCFP))
 | 
				
			||||||
 | 
										Return(PCFP)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									Default {
 | 
				
			||||||
 | 
										Printf("      Unknown Input Command: %o", SFST(ICMD))
 | 
				
			||||||
 | 
										Return(NV_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							Default {
 | 
				
			||||||
 | 
								Printf("    Unsupported function: %o", SFST(Arg0))
 | 
				
			||||||
 | 
								Return(NVPCF_ERROR_UNSUPPORTED)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										120
									
								
								src/drivers/gfx/nvidia/acpi/common/power.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								src/drivers/gfx/nvidia/acpi/common/power.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//TODO: evaluate sleeps
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OperationRegion (PCIC, PCI_Config, 0x00, 0xFF)
 | 
				
			||||||
 | 
					Field (PCIC, DwordAcc, NoLock, Preserve) {
 | 
				
			||||||
 | 
						Offset (0x40),
 | 
				
			||||||
 | 
						SSID, 32, // Subsystem vendor and product ID
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Enter GC6
 | 
				
			||||||
 | 
					Method(GC6I, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("    GPU GC6I START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enter L23
 | 
				
			||||||
 | 
						^^DL23()
 | 
				
			||||||
 | 
						Sleep(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Put GPU into reset
 | 
				
			||||||
 | 
						Printf("      Put GPU into reset")
 | 
				
			||||||
 | 
						CTXS(DGPU_RST_N)
 | 
				
			||||||
 | 
						Sleep(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("    GPU GC6I FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exit GC6
 | 
				
			||||||
 | 
					Method(GC6O, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("    GPU GC6O START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Bring GPU out of reset
 | 
				
			||||||
 | 
						Printf("      Bring GPU out of reset")
 | 
				
			||||||
 | 
						STXS(DGPU_RST_N)
 | 
				
			||||||
 | 
						Sleep(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Exit L23
 | 
				
			||||||
 | 
						^^L23D()
 | 
				
			||||||
 | 
						Sleep(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("    GPU GC6O FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method (_ON, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("  GPU _ON START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						If (DFEN == JT_DFGC_DEFER) {
 | 
				
			||||||
 | 
							Switch (ToInteger(DFCO)) {
 | 
				
			||||||
 | 
								Case (JT_GPC_XGXS) {
 | 
				
			||||||
 | 
									Printf("    Exit GC6 and stop self-refresh")
 | 
				
			||||||
 | 
									GC6O()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								Default {
 | 
				
			||||||
 | 
									Printf("    Unsupported DFCO: %o", SFST(DFCO))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							DFEN = JT_DFGC_NONE
 | 
				
			||||||
 | 
						} Else {
 | 
				
			||||||
 | 
							Printf("    Standard RTD3 power on")
 | 
				
			||||||
 | 
							STXS(DGPU_PWR_EN)
 | 
				
			||||||
 | 
							Sleep(5)
 | 
				
			||||||
 | 
							GC6O()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("  GPU _ON FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method (_OFF, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("  GPU _OFF START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						If (DFEN == JT_DFGC_DEFER) {
 | 
				
			||||||
 | 
							Switch (ToInteger(DFCI)) {
 | 
				
			||||||
 | 
								Case (JT_GPC_EGNS) {
 | 
				
			||||||
 | 
									Printf("    Enter GC6 without self-refresh")
 | 
				
			||||||
 | 
									GC6I()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								Case (JT_GPC_EGIS) {
 | 
				
			||||||
 | 
									Printf("    Enter GC6 with self-refresh")
 | 
				
			||||||
 | 
									GC6I()
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								Default {
 | 
				
			||||||
 | 
									Printf("    Unsupported DFCI: %o", SFST(DFCI))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							DFEN = JT_DFGC_NONE
 | 
				
			||||||
 | 
						} Else {
 | 
				
			||||||
 | 
							Printf("    Standard RTD3 power off")
 | 
				
			||||||
 | 
							GC6I()
 | 
				
			||||||
 | 
							CTXS(DGPU_PWR_EN)
 | 
				
			||||||
 | 
							Sleep(5)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("  GPU _OFF FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Main power resource
 | 
				
			||||||
 | 
					PowerResource (PWRR, 0, 0) {
 | 
				
			||||||
 | 
						Name (_STA, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_ON, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PWRR._ON")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Restore SSID
 | 
				
			||||||
 | 
							^^SSID = DGPU_SSID
 | 
				
			||||||
 | 
							Printf("  Restore SSID: %o", SFST(^^SSID))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_OFF, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PWRR._OFF")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D0
 | 
				
			||||||
 | 
					Name (_PR0, Package () { PWRR })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D3
 | 
				
			||||||
 | 
					Name (_PR3, Package () { PWRR })
 | 
				
			||||||
							
								
								
									
										63
									
								
								src/drivers/gfx/nvidia/acpi/common/utility.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/drivers/gfx/nvidia/acpi/common/utility.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Convert a byte to a hex string, trimming extra parts
 | 
				
			||||||
 | 
					Method (BHEX, 1) {
 | 
				
			||||||
 | 
						Local0 = ToHexString(Arg0)
 | 
				
			||||||
 | 
						Return (Mid(Local0, SizeOf(Local0) - 2, 2))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UUID to string
 | 
				
			||||||
 | 
					Method (IDST, 1) {
 | 
				
			||||||
 | 
						Local0 = ""
 | 
				
			||||||
 | 
						Fprintf(
 | 
				
			||||||
 | 
							Local0,
 | 
				
			||||||
 | 
							"%o%o%o%o-%o%o-%o%o-%o%o-%o%o%o%o%o%o",
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[3])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[2])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[1])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[0])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[5])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[4])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[7])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[6])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[8])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[9])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[10])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[11])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[12])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[13])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[14])),
 | 
				
			||||||
 | 
							BHEX(DerefOf(Arg0[15]))
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						Return (Local0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Safe hex conversion, checks type first
 | 
				
			||||||
 | 
					Method (SFST, 1) {
 | 
				
			||||||
 | 
						Local0 = ObjectType(Arg0)
 | 
				
			||||||
 | 
						If (Local0 == 1 || Local0 == 2 || Local0 == 3) {
 | 
				
			||||||
 | 
							Return (ToHexString(Arg0))
 | 
				
			||||||
 | 
						} Else {
 | 
				
			||||||
 | 
							Return (Concatenate("Type: ", Arg0))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Convert from 4-byte buffer to 32-bit integer
 | 
				
			||||||
 | 
					Method (BTOI, 1) {
 | 
				
			||||||
 | 
						Return(
 | 
				
			||||||
 | 
							DerefOf(Arg0[0]) |
 | 
				
			||||||
 | 
							(DerefOf(Arg0[1]) << 8) |
 | 
				
			||||||
 | 
							(DerefOf(Arg0[2]) << 16) |
 | 
				
			||||||
 | 
							(DerefOf(Arg0[3]) << 24)
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Convert from 32-bit integer to 4-byte buffer
 | 
				
			||||||
 | 
					Method (ITOB, 1) {
 | 
				
			||||||
 | 
						Local0 = Buffer(4) { 0, 0, 0, 0 }
 | 
				
			||||||
 | 
						Local0[0] = Arg0 & 0xFF
 | 
				
			||||||
 | 
						Local0[1] = (Arg0 >> 8) & 0xFF
 | 
				
			||||||
 | 
						Local0[2] = (Arg0 >> 16) & 0xFF
 | 
				
			||||||
 | 
						Local0[3] = (Arg0 >> 24) & 0xFF
 | 
				
			||||||
 | 
						Return (Local0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										140
									
								
								src/drivers/gfx/nvidia/acpi/tigerlake.asl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								src/drivers/gfx/nvidia/acpi/tigerlake.asl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,140 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					/* NVIDIA GC6 on (TGL and ADL) (CPU and PCH) PCIe ports */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Port mapped PCI express config space
 | 
				
			||||||
 | 
					OperationRegion (PCIC, PCI_Config, 0x00, 0xFF)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Field (PCIC, AnyAcc, NoLock, Preserve) {
 | 
				
			||||||
 | 
						Offset(0x52),  /* LSTS - Link Status Register */
 | 
				
			||||||
 | 
						, 13,
 | 
				
			||||||
 | 
						LASX, 1,       /* 0, Link Active Status */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset(0x60),  /* RSTS - Root Status Register */
 | 
				
			||||||
 | 
						, 16,
 | 
				
			||||||
 | 
						PSPX, 1,       /* 16,  PME Status */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset(0xD8),  /* 0xD8, MPC - Miscellaneous Port Configuration Register */
 | 
				
			||||||
 | 
						, 30,
 | 
				
			||||||
 | 
						HPEX, 1,       /* 30,  Hot Plug SCI Enable */
 | 
				
			||||||
 | 
						PMEX, 1,       /* 31,  Power Management SCI Enable */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset (0xE0), /* 0xE0, SPR - Scratch Pad Register */
 | 
				
			||||||
 | 
						SCB0, 1,       /* Scratch bit 0 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Offset(0xE2),  /* 0xE2, RPPGEN - Root Port Power Gating Enable */
 | 
				
			||||||
 | 
						, 2,
 | 
				
			||||||
 | 
						L23E, 1,       /* 2,   L23_Rdy Entry Request (L23ER) */
 | 
				
			||||||
 | 
						L23R, 1,       /* 3,   L23_Rdy to Detect Transition (L23R2DT) */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Field (PCIC, AnyAcc, NoLock, WriteAsZeros) {
 | 
				
			||||||
 | 
						Offset(0xDC),  /* 0xDC, SMSCS - SMI/SCI Status Register */
 | 
				
			||||||
 | 
						, 30,
 | 
				
			||||||
 | 
						HPSX, 1,       /* 30,  Hot Plug SCI Status */
 | 
				
			||||||
 | 
						PMSX, 1        /* 31,  Power Management SCI Status */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Enter L23
 | 
				
			||||||
 | 
					Method (DL23, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("      GPU PORT DL23 START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						L23E = 1
 | 
				
			||||||
 | 
						Sleep (16)
 | 
				
			||||||
 | 
						Local0 = 0
 | 
				
			||||||
 | 
						While (L23E) {
 | 
				
			||||||
 | 
							If ((Local0 > 4)) {
 | 
				
			||||||
 | 
								Break
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Sleep (16)
 | 
				
			||||||
 | 
							Local0++
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						SCB0 = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("      GPU PORT DL23 FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Exit L23
 | 
				
			||||||
 | 
					Method (L23D, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("      GPU PORT L23D START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						If ((SCB0 == 1)) {
 | 
				
			||||||
 | 
							L23R = 1
 | 
				
			||||||
 | 
							Local0 = 0
 | 
				
			||||||
 | 
							While (L23R) {
 | 
				
			||||||
 | 
								If ((Local0 > 4)) {
 | 
				
			||||||
 | 
									Break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								Sleep (16)
 | 
				
			||||||
 | 
								Local0++
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							SCB0 = 0
 | 
				
			||||||
 | 
							Local0 = 0
 | 
				
			||||||
 | 
							While ((LASX == 0)) {
 | 
				
			||||||
 | 
								If ((Local0 > 8)) {
 | 
				
			||||||
 | 
									Break
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								Sleep (16)
 | 
				
			||||||
 | 
								Local0++
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("      GPU PORT L23D FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Method (HPME, 0, Serialized) {
 | 
				
			||||||
 | 
						Printf("  GPU PORT HPME START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						If (PMSX == 1) {
 | 
				
			||||||
 | 
							Printf("    Notify GPU driver of PME SCI")
 | 
				
			||||||
 | 
							Notify(DEV0, 0x2)
 | 
				
			||||||
 | 
							Printf("    Clear PME SCI")
 | 
				
			||||||
 | 
							PMSX = 1
 | 
				
			||||||
 | 
							Printf("    Consume PME notification")
 | 
				
			||||||
 | 
							PSPX = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Printf("  GPU PORT HPME FINISH")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Main power resource
 | 
				
			||||||
 | 
					PowerResource (PWRR, 0, 0) {
 | 
				
			||||||
 | 
						Name (_STA, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_ON, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PORT PWRR._ON")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							HPME();
 | 
				
			||||||
 | 
							If (PMEX == 1) {
 | 
				
			||||||
 | 
								Printf("  Disable power management SCI")
 | 
				
			||||||
 | 
								PMEX = 0
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							^^DEV0._ON()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Method (_OFF, 0, Serialized) {
 | 
				
			||||||
 | 
							Printf("GPU PORT PWRR._OFF")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							^^DEV0._OFF()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							If (PMEX == 0) {
 | 
				
			||||||
 | 
								Printf("  Enable power management SCI")
 | 
				
			||||||
 | 
								PMEX = 1
 | 
				
			||||||
 | 
								HPME()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_STA = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D0
 | 
				
			||||||
 | 
					Name (_PR0, Package () { PWRR })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Power resources for entering D3
 | 
				
			||||||
 | 
					Name (_PR3, Package () { PWRR })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "common/gpu.asl"
 | 
				
			||||||
							
								
								
									
										10
									
								
								src/drivers/gfx/nvidia/chip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/drivers/gfx/nvidia/chip.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _DRIVERS_GFX_NVIDIA_CHIP_H_
 | 
				
			||||||
 | 
					#define _DRIVERS_GFX_NVIDIA_CHIP_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct drivers_gfx_nvidia_config {
 | 
				
			||||||
 | 
						/* TODO: Set GPIOs in devicetree? */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _DRIVERS_GFX_NVIDIA_CHIP_H_ */
 | 
				
			||||||
							
								
								
									
										19
									
								
								src/drivers/gfx/nvidia/gpu.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/drivers/gfx/nvidia/gpu.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _DRIVERS_GFX_NVIDIA_GPU_H_
 | 
				
			||||||
 | 
					#define _DRIVERS_GFX_NVIDIA_GPU_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct nvidia_gpu_config {
 | 
				
			||||||
 | 
						/* GPIO for GPU_PWR_EN */
 | 
				
			||||||
 | 
						unsigned int power_gpio;
 | 
				
			||||||
 | 
						/* GPIO for GPU_RST# */
 | 
				
			||||||
 | 
						unsigned int reset_gpio;
 | 
				
			||||||
 | 
						/* Enable or disable GPU power */
 | 
				
			||||||
 | 
						bool enable;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void nvidia_set_power(const struct nvidia_gpu_config *config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _DRIVERS_NVIDIA_GPU_H_ */
 | 
				
			||||||
							
								
								
									
										71
									
								
								src/drivers/gfx/nvidia/nvidia.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/drivers/gfx/nvidia/nvidia.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "chip.h"
 | 
				
			||||||
 | 
					#include <console/console.h>
 | 
				
			||||||
 | 
					#include <device/device.h>
 | 
				
			||||||
 | 
					#include <device/pci.h>
 | 
				
			||||||
 | 
					#include <device/pci_ids.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NVIDIA_SUBSYSTEM_ID_OFFSET 0x40
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nvidia_read_resources(struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "%s: %s\n", __func__, dev_path(dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_dev_read_resources(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Find all BARs on GPU, mark them above 4g if prefetchable
 | 
				
			||||||
 | 
						for (int bar = PCI_BASE_ADDRESS_0; bar <= PCI_BASE_ADDRESS_5; bar += 4) {
 | 
				
			||||||
 | 
							struct resource *res = probe_resource(dev, bar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (res) {
 | 
				
			||||||
 | 
								if (res->flags & IORESOURCE_PREFETCH) {
 | 
				
			||||||
 | 
									printk(BIOS_INFO, "  BAR at 0x%02x marked above 4g\n", bar);
 | 
				
			||||||
 | 
									res->flags |= IORESOURCE_ABOVE_4G;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									printk(BIOS_DEBUG, "  BAR at 0x%02x not prefetch\n", bar);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								printk(BIOS_DEBUG, "  BAR at 0x%02x not found\n", bar);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nvidia_set_subsystem(struct device *dev, unsigned int vendor, unsigned int device)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						pci_write_config32(dev, NVIDIA_SUBSYSTEM_ID_OFFSET,
 | 
				
			||||||
 | 
							((device & 0xffff) << 16) | (vendor & 0xffff));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pci_operations nvidia_device_ops_pci = {
 | 
				
			||||||
 | 
						.set_subsystem = nvidia_set_subsystem,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct device_operations nvidia_device_ops = {
 | 
				
			||||||
 | 
						.read_resources   = nvidia_read_resources,
 | 
				
			||||||
 | 
						.set_resources    = pci_dev_set_resources,
 | 
				
			||||||
 | 
						.enable_resources = pci_dev_enable_resources,
 | 
				
			||||||
 | 
					#if CONFIG(HAVE_ACPI_TABLES)
 | 
				
			||||||
 | 
						.write_acpi_tables = pci_rom_write_acpi_tables,
 | 
				
			||||||
 | 
						.acpi_fill_ssdt    = pci_rom_ssdt,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						.init             = pci_dev_init,
 | 
				
			||||||
 | 
						.ops_pci          = &nvidia_device_ops_pci,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void nvidia_enable(struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!is_dev_enabled(dev) || dev->path.type != DEVICE_PATH_PCI)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (pci_read_config16(dev, PCI_VENDOR_ID) != PCI_VID_NVIDIA)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dev->ops = &nvidia_device_ops;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct chip_operations drivers_gfx_nvidia_ops = {
 | 
				
			||||||
 | 
						.name = "NVIDIA Optimus Graphics Device",
 | 
				
			||||||
 | 
						.enable_dev = nvidia_enable
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										33
									
								
								src/drivers/gfx/nvidia/romstage.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/drivers/gfx/nvidia/romstage.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <console/console.h>
 | 
				
			||||||
 | 
					#include <delay.h>
 | 
				
			||||||
 | 
					#include <device/device.h>
 | 
				
			||||||
 | 
					#include <device/pci.h>
 | 
				
			||||||
 | 
					#include <gpio.h>
 | 
				
			||||||
 | 
					#include "chip.h"
 | 
				
			||||||
 | 
					#include "gpu.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void nvidia_set_power(const struct nvidia_gpu_config *config)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!config->power_gpio || !config->reset_gpio) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "%s: GPU_PWR_EN and GPU_RST# must be set\n", __func__);
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "%s: GPU_PWR_EN = %d\n", __func__, config->power_gpio);
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "%s: GPU_RST# = %d\n", __func__, config->reset_gpio);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						gpio_set(config->reset_gpio, 0);
 | 
				
			||||||
 | 
						mdelay(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (config->enable) {
 | 
				
			||||||
 | 
							gpio_set(config->power_gpio, 1);
 | 
				
			||||||
 | 
							mdelay(25);
 | 
				
			||||||
 | 
							gpio_set(config->reset_gpio, 1);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							gpio_set(config->power_gpio, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mdelay(10);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								src/drivers/intel/dtbt/Kconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/drivers/intel/dtbt/Kconfig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					config DRIVERS_INTEL_DTBT
 | 
				
			||||||
 | 
						bool
 | 
				
			||||||
 | 
						default n
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Support for discrete Thunderbolt controllers
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/drivers/intel/dtbt/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/drivers/intel/dtbt/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					# SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ramstage-$(CONFIG_DRIVERS_INTEL_DTBT) += dtbt.c
 | 
				
			||||||
							
								
								
									
										8
									
								
								src/drivers/intel/dtbt/chip.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/drivers/intel/dtbt/chip.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _DRIVERS_INTEL_DTBT_CHIP_H_
 | 
				
			||||||
 | 
					#define _DRIVERS_INTEL_DTBT_CHIP_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct drivers_intel_dtbt_config {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _DRIVERS_INTEL_DTBT_CHIP_H_ */
 | 
				
			||||||
							
								
								
									
										214
									
								
								src/drivers/intel/dtbt/dtbt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								src/drivers/intel/dtbt/dtbt.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,214 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "chip.h"
 | 
				
			||||||
 | 
					#include <acpi/acpigen.h>
 | 
				
			||||||
 | 
					#include <console/console.h>
 | 
				
			||||||
 | 
					#include <delay.h>
 | 
				
			||||||
 | 
					#include <device/device.h>
 | 
				
			||||||
 | 
					#include <device/pci.h>
 | 
				
			||||||
 | 
					#include <device/pciexp.h>
 | 
				
			||||||
 | 
					#include <device/pci_ids.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PCIE2TBT 0x54C
 | 
				
			||||||
 | 
					#define PCIE2TBT_GO2SX ((0x02 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_GO2SX_NO_WAKE ((0x03 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_SX_EXIT_TBT_CONNECTED ((0x04 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_SX_EXIT_NO_TBT_CONNECTED ((0x05 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_SET_SECURITY_LEVEL ((0x08 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_GET_SECURITY_LEVEL ((0x09 << 1) | 1)
 | 
				
			||||||
 | 
					#define PCIE2TBT_BOOT_ON ((0x18 << 1) | 1)
 | 
				
			||||||
 | 
					#define TBT2PCIE 0x548
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void dtbt_cmd(struct device *dev, u32 command)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT send command %08x\n", command);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_write_config32(dev, PCIE2TBT, command);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u32 timeout;
 | 
				
			||||||
 | 
						u32 status;
 | 
				
			||||||
 | 
						for (timeout = 1000000; timeout > 0; timeout--) {
 | 
				
			||||||
 | 
							status = pci_read_config32(dev, TBT2PCIE);
 | 
				
			||||||
 | 
							if (status & 1) {
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							udelay(1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (timeout == 0) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT command %08x timeout on status %08x\n", command, status);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT command %08x status %08x\n", command, status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pci_write_config32(dev, PCIE2TBT, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u32 status_clear;
 | 
				
			||||||
 | 
						for (timeout = 1000000; timeout > 0; timeout--) {
 | 
				
			||||||
 | 
							status_clear = pci_read_config32(dev, TBT2PCIE);
 | 
				
			||||||
 | 
							if (!(status_clear & 1)) {
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							udelay(1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (timeout == 0) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT command %08x timeout on status clear %08x\n", command, status_clear);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void dtbt_fill_ssdt(const struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT fill SSDT\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!dev) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT device invalid\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "  Dev %s\n", dev_path(dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct bus *bus = dev->upstream;
 | 
				
			||||||
 | 
						if (!bus) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT bus invalid\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct device *parent = bus->dev;
 | 
				
			||||||
 | 
						if (!parent || parent->path.type != DEVICE_PATH_PCI) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT parent invalid\n");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "  Parent %s\n", dev_path(parent));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const char *parent_scope = acpi_device_path(parent);
 | 
				
			||||||
 | 
						if (!parent_scope) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "DTBT parent scope not valid\n");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ /* Scope */
 | 
				
			||||||
 | 
							printk(BIOS_DEBUG, "  Scope %s\n", parent_scope);
 | 
				
			||||||
 | 
							acpigen_write_scope(parent_scope);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							struct acpi_dp *dsd = acpi_dp_new_table("_DSD");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Indicate that device supports hotplug in D3. */
 | 
				
			||||||
 | 
							acpi_device_add_hotplug_support_in_d3(dsd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Indicate that port is external. */
 | 
				
			||||||
 | 
							acpi_device_add_external_facing_port(dsd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							acpi_dp_write(dsd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							{ /* Device */
 | 
				
			||||||
 | 
								const char *dev_name = acpi_device_name(dev);
 | 
				
			||||||
 | 
								printk(BIOS_DEBUG, "    Device %s\n", dev_name);
 | 
				
			||||||
 | 
								acpigen_write_device(dev_name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								acpigen_write_name_integer("_ADR", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								uintptr_t mmconf_base = (uintptr_t)CONFIG_ECAM_MMCONF_BASE_ADDRESS
 | 
				
			||||||
 | 
											+ (((uintptr_t)(bus->secondary)) << 20);
 | 
				
			||||||
 | 
								printk(BIOS_DEBUG, "      MMCONF base %08lx\n", mmconf_base);
 | 
				
			||||||
 | 
								const struct opregion opregion = OPREGION("PXCS", SYSTEMMEMORY, mmconf_base, 0x1000);
 | 
				
			||||||
 | 
								const struct fieldlist fieldlist[] = {
 | 
				
			||||||
 | 
									FIELDLIST_OFFSET(TBT2PCIE),
 | 
				
			||||||
 | 
									FIELDLIST_NAMESTR("TB2P", 32),
 | 
				
			||||||
 | 
									FIELDLIST_OFFSET(PCIE2TBT),
 | 
				
			||||||
 | 
									FIELDLIST_NAMESTR("P2TB", 32),
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								acpigen_write_opregion(&opregion);
 | 
				
			||||||
 | 
								acpigen_write_field("PXCS", fieldlist, ARRAY_SIZE(fieldlist),
 | 
				
			||||||
 | 
										    FIELD_DWORDACC | FIELD_NOLOCK | FIELD_PRESERVE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								{ /* Method */
 | 
				
			||||||
 | 
									acpigen_write_method_serialized("PTS", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_debug_string("DTBT prepare to sleep");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_store_int_to_namestr(PCIE2TBT_GO2SX_NO_WAKE, "P2TB");
 | 
				
			||||||
 | 
									acpigen_write_delay_until_namestr_int(600, "TB2P", PCIE2TBT_GO2SX_NO_WAKE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_debug_namestr("TB2P");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_store_int_to_namestr(0, "P2TB");
 | 
				
			||||||
 | 
									acpigen_write_delay_until_namestr_int(600, "TB2P", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_debug_namestr("TB2P");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									acpigen_write_method_end();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								acpigen_write_device_end();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							acpigen_write_scope_end();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ /* Scope */
 | 
				
			||||||
 | 
							acpigen_write_scope("\\");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							{ /* Method */
 | 
				
			||||||
 | 
								acpigen_write_method("TBTS", 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								acpigen_emit_namestring(acpi_device_path_join(dev, "PTS"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								acpigen_write_method_end();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							acpigen_write_scope_end();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *dtbt_acpi_name(const struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return "DTBT";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct pci_operations dtbt_device_ops_pci = {
 | 
				
			||||||
 | 
						.set_subsystem = 0,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct device_operations dtbt_device_ops = {
 | 
				
			||||||
 | 
						.read_resources   = pci_bus_read_resources,
 | 
				
			||||||
 | 
						.set_resources    = pci_dev_set_resources,
 | 
				
			||||||
 | 
						.enable_resources = pci_bus_enable_resources,
 | 
				
			||||||
 | 
						.acpi_fill_ssdt   = dtbt_fill_ssdt,
 | 
				
			||||||
 | 
						.acpi_name        = dtbt_acpi_name,
 | 
				
			||||||
 | 
						.scan_bus         = pciexp_scan_bridge,
 | 
				
			||||||
 | 
						.reset_bus        = pci_bus_reset,
 | 
				
			||||||
 | 
						.ops_pci          = &dtbt_device_ops_pci,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void dtbt_enable(struct device *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!is_dev_enabled(dev) || dev->path.type != DEVICE_PATH_PCI)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (pci_read_config16(dev, PCI_VENDOR_ID) != PCI_VID_INTEL)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO: check device ID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dev->ops = &dtbt_device_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_INFO, "DTBT controller found at %s\n", dev_path(dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT get security level\n");
 | 
				
			||||||
 | 
						dtbt_cmd(dev, PCIE2TBT_GET_SECURITY_LEVEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT set security level SL0\n");
 | 
				
			||||||
 | 
						dtbt_cmd(dev, PCIE2TBT_SET_SECURITY_LEVEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_DEBUG, "DTBT get security level\n");
 | 
				
			||||||
 | 
						dtbt_cmd(dev, PCIE2TBT_GET_SECURITY_LEVEL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (acpi_is_wakeup_s3()) {
 | 
				
			||||||
 | 
							printk(BIOS_INFO, "DTBT SX exit\n");
 | 
				
			||||||
 | 
							dtbt_cmd(dev, PCIE2TBT_SX_EXIT_TBT_CONNECTED);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							printk(BIOS_INFO, "DTBT boot on\n");
 | 
				
			||||||
 | 
							dtbt_cmd(dev, PCIE2TBT_BOOT_ON);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct chip_operations drivers_intel_dtbt_ops = {
 | 
				
			||||||
 | 
						.name = "Intel Discrete Thunderbolt Device",
 | 
				
			||||||
 | 
						.enable_dev = dtbt_enable
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
#include <smmstore.h>
 | 
					#include <smmstore.h>
 | 
				
			||||||
#include <types.h>
 | 
					#include <types.h>
 | 
				
			||||||
#include <cbmem.h>
 | 
					#include <cbmem.h>
 | 
				
			||||||
 | 
					#include <delay.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct smmstore_params_info info;
 | 
					static struct smmstore_params_info info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,6 +40,7 @@ static void init_store(void *unused)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	struct smmstore_params_init args;
 | 
						struct smmstore_params_init args;
 | 
				
			||||||
	uint32_t ret = ~0;
 | 
						uint32_t ret = ~0;
 | 
				
			||||||
 | 
						uint8_t retry = 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (smmstore_get_info(&info) < 0) {
 | 
						if (smmstore_get_info(&info) < 0) {
 | 
				
			||||||
		printk(BIOS_INFO, "SMMSTORE: Failed to get meta data\n");
 | 
							printk(BIOS_INFO, "SMMSTORE: Failed to get meta data\n");
 | 
				
			||||||
@@ -56,8 +58,17 @@ static void init_store(void *unused)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	printk(BIOS_INFO, "SMMSTORE: Setting up SMI handler\n");
 | 
						printk(BIOS_INFO, "SMMSTORE: Setting up SMI handler\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Issue SMI using APM to update the com buffer and to lock the SMMSTORE */
 | 
						/*
 | 
				
			||||||
	ret = call_smm(APM_CNT_SMMSTORE, SMMSTORE_CMD_INIT, &args);
 | 
						 * Issue SMI using APM to update the com buffer and to lock the SMMSTORE.
 | 
				
			||||||
 | 
						 * Retry 5 times in case the SMI isn't triggered immediately.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							ret = call_smm(APM_CNT_SMMSTORE, SMMSTORE_CMD_INIT, &args);
 | 
				
			||||||
 | 
							if (ret == SMMSTORE_RET_SUCCESS)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							mdelay(1);
 | 
				
			||||||
 | 
						} while (retry--);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ret != SMMSTORE_RET_SUCCESS) {
 | 
						if (ret != SMMSTORE_RET_SUCCESS) {
 | 
				
			||||||
		printk(BIOS_ERR, "SMMSTORE: Failed to install com buffer\n");
 | 
							printk(BIOS_ERR, "SMMSTORE: Failed to install com buffer\n");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,11 @@ config EC_SYSTEM76_EC_DGPU
 | 
				
			|||||||
	bool
 | 
						bool
 | 
				
			||||||
	default n
 | 
						default n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config EC_SYSTEM76_EC_LOCKDOWN
 | 
				
			||||||
 | 
						depends on EC_SYSTEM76_EC
 | 
				
			||||||
 | 
						bool
 | 
				
			||||||
 | 
						default n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config EC_SYSTEM76_EC_OLED
 | 
					config EC_SYSTEM76_EC_OLED
 | 
				
			||||||
	depends on EC_SYSTEM76_EC
 | 
						depends on EC_SYSTEM76_EC
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ ifeq ($(CONFIG_EC_SYSTEM76_EC),y)
 | 
				
			|||||||
all-y += system76_ec.c
 | 
					all-y += system76_ec.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ramstage-y += smbios.c
 | 
					ramstage-y += smbios.c
 | 
				
			||||||
 | 
					ramstage-$(CONFIG_EC_SYSTEM76_EC_LOCKDOWN) += lockdown.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
smm-$(CONFIG_DEBUG_SMI) += system76_ec.c
 | 
					smm-$(CONFIG_DEBUG_SMI) += system76_ec.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										59
									
								
								src/ec/system76/ec/lockdown.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/ec/system76/ec/lockdown.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "system76_ec.h"
 | 
				
			||||||
 | 
					#include <bootstate.h>
 | 
				
			||||||
 | 
					#include <commonlib/region.h>
 | 
				
			||||||
 | 
					#include <fmap.h>
 | 
				
			||||||
 | 
					#include <spi_flash.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int protect_region_by_name(const char *name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int res;
 | 
				
			||||||
 | 
						struct region region;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res = fmap_locate_area(name, ®ion);
 | 
				
			||||||
 | 
						if (res < 0) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "fmap_locate_area '%s' failed: %d\n", name, res);
 | 
				
			||||||
 | 
							return res;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res = spi_flash_ctrlr_protect_region(
 | 
				
			||||||
 | 
							boot_device_spi_flash(),
 | 
				
			||||||
 | 
							®ion,
 | 
				
			||||||
 | 
							WRITE_PROTECT
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
						if (res < 0) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "spi_flash_ctrlr_protect_region '%s' failed: %d\n", name, res);
 | 
				
			||||||
 | 
							return res;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_INFO, "protected '%s'\n", name);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void lock(void *unused)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint8_t state = SYSTEM76_EC_SECURITY_STATE_UNLOCK;
 | 
				
			||||||
 | 
						if (!system76_ec_security_get(&state)) {
 | 
				
			||||||
 | 
							printk(BIOS_INFO, "failed to get security state, assuming unlocked\n");
 | 
				
			||||||
 | 
							state = SYSTEM76_EC_SECURITY_STATE_UNLOCK;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printk(BIOS_INFO, "security state: %d\n", state);
 | 
				
			||||||
 | 
						if (state != SYSTEM76_EC_SECURITY_STATE_UNLOCK) {
 | 
				
			||||||
 | 
							// Protect WP_RO region, which should contain FMAP and COREBOOT
 | 
				
			||||||
 | 
							protect_region_by_name("WP_RO");
 | 
				
			||||||
 | 
							// Protect RW_MRC_CACHE region, this must be done after it is written
 | 
				
			||||||
 | 
							protect_region_by_name("RW_MRC_CACHE");
 | 
				
			||||||
 | 
							//TODO: protect entire flash except when in SMM?
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Keep in sync with mrc_cache.c
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#if CONFIG(MRC_WRITE_NV_LATE)
 | 
				
			||||||
 | 
					BOOT_STATE_INIT_ENTRY(BS_OS_RESUME_CHECK, BS_ON_EXIT, lock, NULL);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					BOOT_STATE_INIT_ENTRY(BS_DEV_RESOURCES, BS_ON_ENTRY, lock, NULL);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -26,6 +26,9 @@
 | 
				
			|||||||
#define CMD_PRINT_REG_LEN 3
 | 
					#define CMD_PRINT_REG_LEN 3
 | 
				
			||||||
#define CMD_PRINT_REG_DATA 4
 | 
					#define CMD_PRINT_REG_DATA 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get security state command
 | 
				
			||||||
 | 
					#define CMD_SECURITY_GET 20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline uint8_t system76_ec_read(uint8_t addr)
 | 
					static inline uint8_t system76_ec_read(uint8_t addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return inb(SYSTEM76_EC_BASE + (uint16_t)addr);
 | 
						return inb(SYSTEM76_EC_BASE + (uint16_t)addr);
 | 
				
			||||||
@@ -110,3 +113,9 @@ bool system76_ec_cmd(uint8_t cmd, const uint8_t *request_data,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool system76_ec_security_get(uint8_t *state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						*state = SYSTEM76_EC_SECURITY_STATE_LOCK;
 | 
				
			||||||
 | 
						return system76_ec_cmd(CMD_SECURITY_GET, NULL, 0, state, sizeof(*state));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,15 @@
 | 
				
			|||||||
#include <stdbool.h>
 | 
					#include <stdbool.h>
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Default value, flashing is prevented, cannot be set with CMD_SECURITY_SET
 | 
				
			||||||
 | 
					#define SYSTEM76_EC_SECURITY_STATE_LOCK 0
 | 
				
			||||||
 | 
					// Flashing is allowed, cannot be set with CMD_SECURITY_SET
 | 
				
			||||||
 | 
					#define SYSTEM76_EC_SECURITY_STATE_UNLOCK 1
 | 
				
			||||||
 | 
					// Flashing will be prevented on the next reboot
 | 
				
			||||||
 | 
					#define SYSTEM76_EC_SECURITY_STATE_PREPARE_LOCK 2
 | 
				
			||||||
 | 
					// Flashing will be allowed on the next reboot
 | 
				
			||||||
 | 
					#define SYSTEM76_EC_SECURITY_STATE_PREPARE_UNLOCK 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Send a command to the EC.  request_data/request_size are the request payload,
 | 
					 * Send a command to the EC.  request_data/request_size are the request payload,
 | 
				
			||||||
 * request_data can be NULL if request_size is 0.  reply_data/reply_size are
 | 
					 * request_data can be NULL if request_size is 0.  reply_data/reply_size are
 | 
				
			||||||
@@ -14,4 +23,6 @@
 | 
				
			|||||||
bool system76_ec_cmd(uint8_t cmd, const uint8_t *request_data,
 | 
					bool system76_ec_cmd(uint8_t cmd, const uint8_t *request_data,
 | 
				
			||||||
	uint8_t request_size, uint8_t *reply_data, uint8_t reply_size);
 | 
						uint8_t request_size, uint8_t *reply_data, uint8_t reply_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool system76_ec_security_get(uint8_t *state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,18 @@
 | 
				
			|||||||
#define DDR4_SPD_PART_OFF	329
 | 
					#define DDR4_SPD_PART_OFF	329
 | 
				
			||||||
#define DDR4_SPD_PART_LEN	20
 | 
					#define DDR4_SPD_PART_LEN	20
 | 
				
			||||||
#define DDR4_SPD_SN_OFF		325
 | 
					#define DDR4_SPD_SN_OFF		325
 | 
				
			||||||
 | 
					#define MAX_SPD_PAGE_SIZE_SPD5	128
 | 
				
			||||||
 | 
					#define MAX_SPD_SIZE		(SPD_PAGE_LEN * SPD_SN_LEN)
 | 
				
			||||||
 | 
					#define SPD_HUB_MEMREG(addr)	((u8)(0x80 | (addr)))
 | 
				
			||||||
 | 
					#define SPD5_MR11		0x0B
 | 
				
			||||||
 | 
					#define SPD5_MR0		0x00
 | 
				
			||||||
 | 
					#define SPD5_MEMREG_REG(addr)	((u8)((~0x80) & (addr)))
 | 
				
			||||||
 | 
					#define SPD5_MR0_SPD5_HUB_DEV	0x51
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct spd_offset_table {
 | 
				
			||||||
 | 
						u16 start;		/* Offset 0 */
 | 
				
			||||||
 | 
						u16 end;		/* Offset 2 */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct spd_block {
 | 
					struct spd_block {
 | 
				
			||||||
	u8 addr_map[CONFIG_DIMM_MAX]; /* 7 bit I2C addresses */
 | 
						u8 addr_map[CONFIG_DIMM_MAX]; /* 7 bit I2C addresses */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,7 +126,7 @@ static int rtc_month_days(unsigned int month, unsigned int year)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int month_days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 | 
						int month_days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return month_days[month] + (LEAP_YEAR(year) && month == 2);
 | 
						return month_days[month] + (LEAP_YEAR(year) && month == 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int rtc_invalid(const struct rtc_time *tm)
 | 
					int rtc_invalid(const struct rtc_time *tm)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,7 +209,7 @@ enum cb_err spd_fill_from_cache(uint8_t *spd_cache, struct spd_block *blk)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	dram_type = *(spd_cache + SC_SPD_OFFSET(i) + SPD_DRAM_TYPE);
 | 
						dram_type = *(spd_cache + SC_SPD_OFFSET(i) + SPD_DRAM_TYPE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dram_type == SPD_DRAM_DDR4)
 | 
						if (dram_type == SPD_DRAM_DDR4 || dram_type == SPD_DRAM_DDR5)
 | 
				
			||||||
		blk->len = SPD_PAGE_LEN_DDR4;
 | 
							blk->len = SPD_PAGE_LEN_DDR4;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		blk->len = SPD_PAGE_LEN;
 | 
							blk->len = SPD_PAGE_LEN;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ config BOARD_SPECIFIC_OPTIONS
 | 
				
			|||||||
	select BOARD_ROMSIZE_KB_16384
 | 
						select BOARD_ROMSIZE_KB_16384
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_SERIAL
 | 
						select DRIVERS_GENERIC_CBFS_SERIAL
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
	select DRIVERS_I2C_TAS5825M
 | 
						select DRIVERS_I2C_TAS5825M
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
					## SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootblock-y += bootblock.c
 | 
					bootblock-y += bootblock.c
 | 
				
			||||||
bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
					bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,19 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
					#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
				
			||||||
#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
					#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
 | 
						Scope (PCI0) {
 | 
				
			||||||
 | 
							Device (PEGP) {
 | 
				
			||||||
 | 
								Name (_ADR, CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 16)
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/coffeelake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scope (\_GPE) {
 | 
					Scope (\_GPE) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,12 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
			# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
								# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
				
			||||||
			register "PcieClkSrcUsage[8]" = "0x40"
 | 
								register "PcieClkSrcUsage[8]" = "0x40"
 | 
				
			||||||
			register "PcieClkSrcClkReq[8]" = "8"
 | 
								register "PcieClkSrcClkReq[8]" = "8"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
									device pci 00.2 on end # USB xHCI Host controller
 | 
				
			||||||
 | 
									device pci 00.3 on end # USB Type-C UCSI controller
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device pci 02.0 on  end # Integrated Graphics Device
 | 
							device pci 02.0 on  end # Integrated Graphics Device
 | 
				
			||||||
		device pci 04.0 on      # SA Thermal device
 | 
							device pci 04.0 on      # SA Thermal device
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/cnl_memcfg_init.h>
 | 
					#include <soc/cnl_memcfg_init.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct cnl_mb_cfg memcfg = {
 | 
					static const struct cnl_mb_cfg memcfg = {
 | 
				
			||||||
	.spd[0] = {
 | 
						.spd[0] = {
 | 
				
			||||||
@@ -20,5 +22,17 @@ static const struct cnl_mb_cfg memcfg = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
 | 
						memupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
						cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,16 @@
 | 
				
			|||||||
#ifndef VARIANT_GPIO_H
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
#define VARIANT_GPIO_H
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_C12
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x65d11558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
void variant_configure_early_gpios(void);
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
void variant_configure_gpios(void);
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_C12
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x65e11558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -10,6 +10,7 @@ config BOARD_SYSTEM76_ADL_COMMON
 | 
				
			|||||||
	select DRIVERS_INTEL_PMC
 | 
						select DRIVERS_INTEL_PMC
 | 
				
			||||||
	select DRIVERS_INTEL_USB4_RETIMER
 | 
						select DRIVERS_INTEL_USB4_RETIMER
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
 | 
						select EC_SYSTEM76_EC_LOCKDOWN
 | 
				
			||||||
	select HAVE_ACPI_RESUME
 | 
						select HAVE_ACPI_RESUME
 | 
				
			||||||
	select HAVE_ACPI_TABLES
 | 
						select HAVE_ACPI_TABLES
 | 
				
			||||||
	select HAVE_CMOS_DEFAULT
 | 
						select HAVE_CMOS_DEFAULT
 | 
				
			||||||
@@ -35,10 +36,12 @@ config BOARD_SYSTEM76_GALP6
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_GAZE17_3050
 | 
					config BOARD_SYSTEM76_GAZE17_3050
 | 
				
			||||||
	select BOARD_SYSTEM76_ADL_COMMON
 | 
						select BOARD_SYSTEM76_ADL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_GAZE17_3060_B
 | 
					config BOARD_SYSTEM76_GAZE17_3060_B
 | 
				
			||||||
	select BOARD_SYSTEM76_ADL_COMMON
 | 
						select BOARD_SYSTEM76_ADL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select MAINBOARD_USES_IFD_GBE_REGION
 | 
						select MAINBOARD_USES_IFD_GBE_REGION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,11 +51,15 @@ config BOARD_SYSTEM76_LEMP11
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_ORYP9
 | 
					config BOARD_SYSTEM76_ORYP9
 | 
				
			||||||
	select BOARD_SYSTEM76_ADL_COMMON
 | 
						select BOARD_SYSTEM76_ADL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
	select DRIVERS_I2C_TAS5825M
 | 
						select DRIVERS_I2C_TAS5825M
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_ORYP10
 | 
					config BOARD_SYSTEM76_ORYP10
 | 
				
			||||||
	select BOARD_SYSTEM76_ADL_COMMON
 | 
						select BOARD_SYSTEM76_ADL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if BOARD_SYSTEM76_ADL_COMMON
 | 
					if BOARD_SYSTEM76_ADL_COMMON
 | 
				
			||||||
@@ -97,6 +104,10 @@ config MAINBOARD_VERSION
 | 
				
			|||||||
	default "oryp9" if BOARD_SYSTEM76_ORYP9
 | 
						default "oryp9" if BOARD_SYSTEM76_ORYP9
 | 
				
			||||||
	default "oryp10" if BOARD_SYSTEM76_ORYP10
 | 
						default "oryp10" if BOARD_SYSTEM76_ORYP10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config CMOS_DEFAULT_FILE
 | 
				
			||||||
 | 
						default "src/mainboard/\$(MAINBOARDDIR)/cmos-csme.default" if BOARD_SYSTEM76_DARP8
 | 
				
			||||||
 | 
						default "src/mainboard/\$(MAINBOARDDIR)/cmos.default"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CONSOLE_POST
 | 
					config CONSOLE_POST
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,6 +117,12 @@ config D3COLD_SUPPORT
 | 
				
			|||||||
config DIMM_SPD_SIZE
 | 
					config DIMM_SPD_SIZE
 | 
				
			||||||
	default 512
 | 
						default 512
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_TPP
 | 
				
			||||||
 | 
						default 45 if BOARD_SYSTEM76_ORYP9 || BOARD_SYSTEM76_ORYP10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MAX
 | 
				
			||||||
 | 
						default 25 if BOARD_SYSTEM76_ORYP9 || BOARD_SYSTEM76_ORYP10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config FMDFILE
 | 
					config FMDFILE
 | 
				
			||||||
	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/board.fmd"
 | 
						default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/board.fmd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(CONFIG_DRIVERS_GFX_NVIDIA),y)
 | 
				
			||||||
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootblock-y += bootblock.c
 | 
					bootblock-y += bootblock.c
 | 
				
			||||||
bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
					bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if CONFIG(DRIVERS_GFX_NVIDIA)
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x6E
 | 
					#define EC_GPE_SCI 0x6E
 | 
				
			||||||
#define EC_GPE_SWI 0x6B
 | 
					#define EC_GPE_SWI 0x6B
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
@@ -7,6 +11,10 @@
 | 
				
			|||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
						Scope (PCI0) {
 | 
				
			||||||
		#include "backlight.asl"
 | 
					#if CONFIG(DRIVERS_GFX_NVIDIA)
 | 
				
			||||||
 | 
							Scope (PEG2) {
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/tigerlake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								src/mainboard/system76/adl/cmos-csme.default
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/mainboard/system76/adl/cmos-csme.default
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					boot_option=Fallback
 | 
				
			||||||
 | 
					debug_level=Debug
 | 
				
			||||||
 | 
					me_state=Enable
 | 
				
			||||||
@@ -81,6 +81,7 @@ chip soc/intel/alderlake
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		device ref p2sb on end
 | 
							device ref p2sb on end
 | 
				
			||||||
		device ref hda on
 | 
							device ref hda on
 | 
				
			||||||
 | 
								register "pch_hda_sdi_enable[0]" = "1"
 | 
				
			||||||
			register "pch_hda_audio_link_hda_enable" = "1"
 | 
								register "pch_hda_audio_link_hda_enable" = "1"
 | 
				
			||||||
			register "pch_hda_idisp_codec_enable" = "1"
 | 
								register "pch_hda_idisp_codec_enable" = "1"
 | 
				
			||||||
			register "pch_hda_idisp_link_frequency" = "HDA_LINKFREQ_96MHZ"
 | 
								register "pch_hda_idisp_link_frequency" = "HDA_LINKFREQ_96MHZ"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ DefinitionBlock(
 | 
				
			|||||||
		#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
							#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
				
			||||||
		#include <soc/intel/alderlake/acpi/southbridge.asl>
 | 
							#include <soc/intel/alderlake/acpi/southbridge.asl>
 | 
				
			||||||
		#include <soc/intel/alderlake/acpi/tcss.asl>
 | 
							#include <soc/intel/alderlake/acpi/tcss.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
chip soc/intel/alderlake
 | 
					chip soc/intel/alderlake
 | 
				
			||||||
 | 
						register "s0ix_enable" = "1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	register "power_limits_config[ADL_P_282_442_482_28W_CORE]" = "{
 | 
						register "power_limits_config[ADL_P_282_442_482_28W_CORE]" = "{
 | 
				
			||||||
		.tdp_pl1_override = 20,
 | 
							.tdp_pl1_override = 20,
 | 
				
			||||||
		.tdp_pl2_override = 56,
 | 
							.tdp_pl2_override = 56,
 | 
				
			||||||
@@ -152,6 +154,7 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_src = 4,
 | 
									.clk_src = 4,
 | 
				
			||||||
				.clk_req = 4,
 | 
									.clk_req = 4,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
 | 
									.pcie_rp_detect_timeout_ms = 50,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
			# FIXME: Drives do not exit D3cold on S3 exit
 | 
								# FIXME: Drives do not exit D3cold on S3 exit
 | 
				
			||||||
			#chip soc/intel/common/block/pcie/rtd3
 | 
								#chip soc/intel/common/block/pcie/rtd3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_B2
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_A14
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_F13
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x866d1558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -38,6 +38,10 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_req = 3,
 | 
									.clk_req = 3,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref pcie4_0 on
 | 
							device ref pcie4_0 on
 | 
				
			||||||
			# PCIe PEG0 x4, Clock 0 (SSD2)
 | 
								# PCIe PEG0 x4, Clock 0 (SSD2)
 | 
				
			||||||
@@ -98,6 +102,7 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_src = 1,
 | 
									.clk_src = 1,
 | 
				
			||||||
				.clk_req = 1,
 | 
									.clk_req = 1,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
 | 
									.pcie_rp_detect_timeout_ms = 50,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref pcie_rp9 on
 | 
							device ref pcie_rp9 on
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/meminit.h>
 | 
					#include <soc/meminit.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -17,6 +19,14 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
	const bool half_populated = false;
 | 
						const bool half_populated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Set primary display to internal graphics
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
	mupd->FspmConfig.PrimaryDisplay = 0;
 | 
						mupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_B2
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_A14
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_F13
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x867c1558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -38,6 +38,10 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_req = 3,
 | 
									.clk_req = 3,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref igpu on
 | 
							device ref igpu on
 | 
				
			||||||
			# DDIA is eDP
 | 
								# DDIA is eDP
 | 
				
			||||||
@@ -130,6 +134,7 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_src = 1,
 | 
									.clk_src = 1,
 | 
				
			||||||
				.clk_req = 1,
 | 
									.clk_req = 1,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
 | 
									.pcie_rp_detect_timeout_ms = 50,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref gbe on end
 | 
							device ref gbe on end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/meminit.h>
 | 
					#include <soc/meminit.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -17,6 +19,14 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
	const bool half_populated = false;
 | 
						const bool half_populated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Set primary display to internal graphics
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
	mupd->FspmConfig.PrimaryDisplay = 0;
 | 
						mupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -138,6 +138,7 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_src = 1,
 | 
									.clk_src = 1,
 | 
				
			||||||
				.clk_req = 1,
 | 
									.clk_req = 1,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
 | 
									.pcie_rp_detect_timeout_ms = 50,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
			# FIXME: Drives do not exit D3cold on S3 exit
 | 
								# FIXME: Drives do not exit D3cold on S3 exit
 | 
				
			||||||
			#chip soc/intel/common/block/pcie/rtd3
 | 
								#chip soc/intel/common/block/pcie/rtd3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,6 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
	const bool half_populated = false;
 | 
						const bool half_populated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mupd->FspmConfig.PchHdaAudioLinkHdaEnable = 1;
 | 
					 | 
				
			||||||
	mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
						mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
				
			||||||
	mupd->FspmConfig.GpioOverride = 0;
 | 
						mupd->FspmConfig.GpioOverride = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_B2
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_A14
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_A7
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x65f51558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -23,6 +23,10 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_req = 3,
 | 
									.clk_req = 3,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref igpu on
 | 
							device ref igpu on
 | 
				
			||||||
			register "ddi_portA_config" = "1"
 | 
								register "ddi_portA_config" = "1"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/meminit.h>
 | 
					#include <soc/meminit.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -20,10 +22,17 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
	const bool half_populated = false;
 | 
						const bool half_populated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Set primary display to internal graphics
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
	mupd->FspmConfig.PrimaryDisplay = 0;
 | 
						mupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mupd->FspmConfig.PchHdaAudioLinkHdaEnable = 1;
 | 
					 | 
				
			||||||
	mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
						mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
				
			||||||
	mupd->FspmConfig.GpioOverride = 0;
 | 
						mupd->FspmConfig.GpioOverride = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_B2
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_A14
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_A7
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x65f51558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -23,6 +23,10 @@ chip soc/intel/alderlake
 | 
				
			|||||||
				.clk_req = 3,
 | 
									.clk_req = 3,
 | 
				
			||||||
				.flags = PCIE_RP_LTR,
 | 
									.flags = PCIE_RP_LTR,
 | 
				
			||||||
			}"
 | 
								}"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device ref igpu on
 | 
							device ref igpu on
 | 
				
			||||||
			register "ddi_portA_config" = "1"
 | 
								register "ddi_portA_config" = "1"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/meminit.h>
 | 
					#include <soc/meminit.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -17,10 +19,17 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
 | 
				
			|||||||
	};
 | 
						};
 | 
				
			||||||
	const bool half_populated = false;
 | 
						const bool half_populated = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Set primary display to internal graphics
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
	mupd->FspmConfig.PrimaryDisplay = 0;
 | 
						mupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mupd->FspmConfig.PchHdaAudioLinkHdaEnable = 1;
 | 
					 | 
				
			||||||
	mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
						mupd->FspmConfig.DmiMaxLinkSpeed = 4;
 | 
				
			||||||
	mupd->FspmConfig.GpioOverride = 0;
 | 
						mupd->FspmConfig.GpioOverride = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,9 @@ config BOARD_SPECIFIC_OPTIONS
 | 
				
			|||||||
	select BOARD_ROMSIZE_KB_16384
 | 
						select BOARD_ROMSIZE_KB_16384
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_SERIAL
 | 
						select DRIVERS_GENERIC_CBFS_SERIAL
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
 | 
						select DRIVERS_I2C_TAS5825M
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select HAVE_ACPI_RESUME
 | 
						select HAVE_ACPI_RESUME
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,3 +10,4 @@ romstage-y += romstage.c
 | 
				
			|||||||
ramstage-y += ramstage.c
 | 
					ramstage-y += ramstage.c
 | 
				
			||||||
ramstage-y += gpio.c
 | 
					ramstage-y += gpio.c
 | 
				
			||||||
ramstage-y += hda_verb.c
 | 
					ramstage-y += hda_verb.c
 | 
				
			||||||
 | 
					ramstage-y += tas5825m.c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,11 +59,12 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
			# PCI Express Graphics #0 x16, Clock 7 (NVIDIA GPU)
 | 
								# PCI Express Graphics #0 x16, Clock 7 (NVIDIA GPU)
 | 
				
			||||||
			register "PcieClkSrcUsage[7]" = "0x40"
 | 
								register "PcieClkSrcUsage[7]" = "0x40"
 | 
				
			||||||
			register "PcieClkSrcClkReq[7]" = "7"
 | 
								register "PcieClkSrcClkReq[7]" = "7"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
			device pci 00.0 on end # VGA controller
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
			device pci 00.1 on end # Audio device
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
			device pci 00.2 on end # USB xHCI Host controller
 | 
									device pci 00.2 on end # USB xHCI Host controller
 | 
				
			||||||
			device pci 00.3 on end # USB Type-C UCSI controller
 | 
									device pci 00.3 on end # USB Type-C UCSI controller
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		# TODO: is this enough to disable iGPU?
 | 
							# TODO: is this enough to disable iGPU?
 | 
				
			||||||
		device pci 02.0 off end # Integrated Graphics Device
 | 
							device pci 02.0 off end # Integrated Graphics Device
 | 
				
			||||||
@@ -219,7 +220,16 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
		device pci 1f.3 on      # Intel HDA
 | 
							device pci 1f.3 on      # Intel HDA
 | 
				
			||||||
			register "PchHdaAudioLinkHda" = "1"
 | 
								register "PchHdaAudioLinkHda" = "1"
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device pci 1f.4 on  end # SMBus
 | 
							device pci 1f.4 on      # SMBus
 | 
				
			||||||
 | 
								chip drivers/i2c/tas5825m
 | 
				
			||||||
 | 
									register "id" = "0"
 | 
				
			||||||
 | 
									device i2c 4e on end # (8bit address: 0x9c)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								chip drivers/i2c/tas5825m
 | 
				
			||||||
 | 
									register "id" = "1"
 | 
				
			||||||
 | 
									device i2c 4f on end # (8bit address: 0x9e)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		device pci 1f.5 on  end # PCH SPI
 | 
							device pci 1f.5 on  end # PCH SPI
 | 
				
			||||||
		device pci 1f.6 off end # GbE
 | 
							device pci 1f.6 off end # GbE
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1240
									
								
								src/mainboard/system76/bonw14/tas5825m-normal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1240
									
								
								src/mainboard/system76/bonw14/tas5825m-normal.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1240
									
								
								src/mainboard/system76/bonw14/tas5825m-sub.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1240
									
								
								src/mainboard/system76/bonw14/tas5825m-sub.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								src/mainboard/system76/bonw14/tas5825m.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/mainboard/system76/bonw14/tas5825m.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/i2c/tas5825m/tas5825m.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "tas5825m-normal.c"
 | 
				
			||||||
 | 
					#include "tas5825m-sub.c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int tas5825m_setup(struct device *dev, int id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (id == 0)
 | 
				
			||||||
 | 
							return tas5825m_setup_normal(dev);
 | 
				
			||||||
 | 
						if (id == 1)
 | 
				
			||||||
 | 
							return tas5825m_setup_sub(dev);
 | 
				
			||||||
 | 
						return -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -6,9 +6,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
					 | 
				
			||||||
		#include "backlight.asl"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scope (\_GPE) {
 | 
					Scope (\_GPE) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ DefinitionBlock(
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
							#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
				
			||||||
		#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
							#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ config BOARD_SPECIFIC_OPTIONS
 | 
				
			|||||||
	select BOARD_ROMSIZE_KB_16384
 | 
						select BOARD_ROMSIZE_KB_16384
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_SERIAL
 | 
						select DRIVERS_GENERIC_CBFS_SERIAL
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
					## SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootblock-y += bootblock.c
 | 
					bootblock-y += bootblock.c
 | 
				
			||||||
bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
					bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
					#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
				
			||||||
#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
					#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
@@ -7,7 +9,10 @@
 | 
				
			|||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
						Scope (PCI0) {
 | 
				
			||||||
		#include "backlight.asl"
 | 
							Device (PEGP) {
 | 
				
			||||||
 | 
								Name (_ADR, CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 16)
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/coffeelake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,12 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
			# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
								# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
				
			||||||
			register "PcieClkSrcUsage[8]" = "0x40"
 | 
								register "PcieClkSrcUsage[8]" = "0x40"
 | 
				
			||||||
			register "PcieClkSrcClkReq[8]" = "8"
 | 
								register "PcieClkSrcClkReq[8]" = "8"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
									device pci 00.2 on end # USB xHCI Host controller
 | 
				
			||||||
 | 
									device pci 00.3 on end # USB Type-C UCSI controller
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device pci 02.0 on      # Integrated Graphics Device
 | 
							device pci 02.0 on      # Integrated Graphics Device
 | 
				
			||||||
			register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
								register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ DefinitionBlock(
 | 
				
			|||||||
	Device (\_SB.PCI0) {
 | 
						Device (\_SB.PCI0) {
 | 
				
			||||||
		#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
							#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
				
			||||||
		#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
							#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/cnl_memcfg_init.h>
 | 
					#include <soc/cnl_memcfg_init.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct cnl_mb_cfg memcfg = {
 | 
					static const struct cnl_mb_cfg memcfg = {
 | 
				
			||||||
	.spd[0] = {
 | 
						.spd[0] = {
 | 
				
			||||||
@@ -20,5 +22,17 @@ static const struct cnl_mb_cfg memcfg = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
 | 
						memupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
						cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_K21
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x85501558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_K21
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x85201558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,10 +1,6 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	Scope (PCI0) {
 | 
					 | 
				
			||||||
		#include "backlight.asl"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	#include "ac.asl"
 | 
						#include "ac.asl"
 | 
				
			||||||
	#include "battery.asl"
 | 
						#include "battery.asl"
 | 
				
			||||||
	#include "buttons.asl"
 | 
						#include "buttons.asl"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ DefinitionBlock(
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		#include <soc/intel/skylake/acpi/systemagent.asl>
 | 
							#include <soc/intel/skylake/acpi/systemagent.asl>
 | 
				
			||||||
		#include <soc/intel/skylake/acpi/pch.asl>
 | 
							#include <soc/intel/skylake/acpi/pch.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ config BOARD_SPECIFIC_OPTIONS
 | 
				
			|||||||
	select BOARD_ROMSIZE_KB_16384
 | 
						select BOARD_ROMSIZE_KB_16384
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_SERIAL
 | 
						select DRIVERS_GENERIC_CBFS_SERIAL
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
	select DRIVERS_I2C_TAS5825M
 | 
						select DRIVERS_I2C_TAS5825M
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <mainboard/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x17 /* GPP_B23 */
 | 
					#define EC_GPE_SCI 0x17 /* GPP_B23 */
 | 
				
			||||||
#define EC_GPE_SWI 0x26 /* GPP_G6 */
 | 
					#define EC_GPE_SWI 0x26 /* GPP_G6 */
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
@@ -8,7 +10,10 @@ Scope (\_SB)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
						Scope (PCI0) {
 | 
				
			||||||
		#include "backlight.asl"
 | 
							Device (PEGP) {
 | 
				
			||||||
 | 
								Name (_ADR, CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 16)
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/coffeelake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,6 +63,12 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
			# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
								# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
				
			||||||
			register "PcieClkSrcUsage[8]" = "0x40"
 | 
								register "PcieClkSrcUsage[8]" = "0x40"
 | 
				
			||||||
			register "PcieClkSrcClkReq[8]" = "8"
 | 
								register "PcieClkSrcClkReq[8]" = "8"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
									device pci 00.2 on end # USB xHCI Host controller
 | 
				
			||||||
 | 
									device pci 00.3 on end # USB Type-C UCSI controller
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device pci 02.0 on      # Integrated Graphics Device
 | 
							device pci 02.0 on      # Integrated Graphics Device
 | 
				
			||||||
			register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
								register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ DefinitionBlock(
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
							#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
				
			||||||
		#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
							#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,16 @@
 | 
				
			|||||||
#ifndef MAINBOARD_GPIO_H
 | 
					#ifndef MAINBOARD_GPIO_H
 | 
				
			||||||
#define MAINBOARD_GPIO_H
 | 
					#define MAINBOARD_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_C12
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x95e61558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
void mainboard_configure_early_gpios(void);
 | 
					void mainboard_configure_early_gpios(void);
 | 
				
			||||||
void mainboard_configure_gpios(void);
 | 
					void mainboard_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
 | 
					#include <mainboard/gpio.h>
 | 
				
			||||||
#include <soc/cnl_memcfg_init.h>
 | 
					#include <soc/cnl_memcfg_init.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -20,6 +22,18 @@ static const struct cnl_mb_cfg memcfg = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
 | 
						memupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Allow memory speeds higher than 2666 MT/s
 | 
						// Allow memory speeds higher than 2666 MT/s
 | 
				
			||||||
	memupd->FspmConfig.SaOcSupport = 1;
 | 
						memupd->FspmConfig.SaOcSupport = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ config BOARD_SPECIFIC_OPTIONS
 | 
				
			|||||||
	select BOARD_ROMSIZE_KB_16384
 | 
						select BOARD_ROMSIZE_KB_16384
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_SERIAL
 | 
						select DRIVERS_GENERIC_CBFS_SERIAL
 | 
				
			||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
	select DRIVERS_I2C_TAS5825M
 | 
						select DRIVERS_I2C_TAS5825M
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
## SPDX-License-Identifier: GPL-2.0-only
 | 
					## SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
				
			||||||
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootblock-y += bootblock.c
 | 
					bootblock-y += bootblock.c
 | 
				
			||||||
bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
					bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
					#define EC_GPE_SCI 0x03 /* GPP_K3 */
 | 
				
			||||||
#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
					#define EC_GPE_SWI 0x06 /* GPP_K6 */
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
@@ -7,7 +9,10 @@
 | 
				
			|||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
						Scope (PCI0) {
 | 
				
			||||||
		#include "backlight.asl"
 | 
							Device (PEGP) {
 | 
				
			||||||
 | 
								Name (_ADR, CONFIG_DRIVERS_GFX_NVIDIA_BRIDGE << 16)
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/coffeelake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,12 @@ chip soc/intel/cannonlake
 | 
				
			|||||||
			# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
								# PCI Express Graphics #0 x16, Clock 8 (NVIDIA GPU)
 | 
				
			||||||
			register "PcieClkSrcUsage[8]" = "0x40"
 | 
								register "PcieClkSrcUsage[8]" = "0x40"
 | 
				
			||||||
			register "PcieClkSrcClkReq[8]" = "8"
 | 
								register "PcieClkSrcClkReq[8]" = "8"
 | 
				
			||||||
 | 
								chip drivers/gfx/nvidia
 | 
				
			||||||
 | 
									device pci 00.0 on end # VGA controller
 | 
				
			||||||
 | 
									device pci 00.1 on end # Audio device
 | 
				
			||||||
 | 
									device pci 00.2 on end # USB xHCI Host controller
 | 
				
			||||||
 | 
									device pci 00.3 on end # USB Type-C UCSI controller
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		device pci 02.0 on      # Integrated Graphics Device
 | 
							device pci 02.0 on      # Integrated Graphics Device
 | 
				
			||||||
			register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
								register "gfx" = "GMA_DEFAULT_PANEL(0)"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ DefinitionBlock(
 | 
				
			|||||||
	Device (\_SB.PCI0) {
 | 
						Device (\_SB.PCI0) {
 | 
				
			||||||
		#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
							#include <soc/intel/common/block/acpi/acpi/northbridge.asl>
 | 
				
			||||||
		#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
							#include <soc/intel/cannonlake/acpi/southbridge.asl>
 | 
				
			||||||
 | 
							#include <drivers/intel/gma/acpi/default_brightness_levels.asl>
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
						#include <southbridge/intel/common/acpi/sleepstates.asl>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <drivers/gfx/nvidia/gpu.h>
 | 
				
			||||||
#include <soc/cnl_memcfg_init.h>
 | 
					#include <soc/cnl_memcfg_init.h>
 | 
				
			||||||
#include <soc/romstage.h>
 | 
					#include <soc/romstage.h>
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
#include <variant/romstage.h>
 | 
					#include <variant/romstage.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct cnl_mb_cfg memcfg = {
 | 
					static const struct cnl_mb_cfg memcfg = {
 | 
				
			||||||
@@ -21,6 +23,18 @@ static const struct cnl_mb_cfg memcfg = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
					void mainboard_memory_init_params(FSPM_UPD *memupd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						const struct nvidia_gpu_config config = {
 | 
				
			||||||
 | 
							.power_gpio = DGPU_PWR_EN,
 | 
				
			||||||
 | 
							.reset_gpio = DGPU_RST_N,
 | 
				
			||||||
 | 
							.enable = true,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enable dGPU power
 | 
				
			||||||
 | 
						nvidia_set_power(&config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Set primary display to internal graphics
 | 
				
			||||||
 | 
						memupd->FspmConfig.PrimaryDisplay = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	variant_configure_fspm(memupd);
 | 
						variant_configure_fspm(memupd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
						cannonlake_memcfg_init(&memupd->FspmConfig, &memcfg);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_K21
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x50d31558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef VARIANT_GPIO_H
 | 
				
			||||||
 | 
					#define VARIANT_GPIO_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/gpio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DGPU_RST_N	GPP_F22
 | 
				
			||||||
 | 
					#define DGPU_PWR_EN	GPP_F23
 | 
				
			||||||
 | 
					#define DGPU_GC6	GPP_K21
 | 
				
			||||||
 | 
					#define DGPU_SSID	0x65e51558
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __ACPI__
 | 
				
			||||||
 | 
					void variant_configure_early_gpios(void);
 | 
				
			||||||
 | 
					void variant_configure_gpios(void);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -8,6 +8,7 @@ config BOARD_SYSTEM76_RPL_COMMON
 | 
				
			|||||||
	select DRIVERS_GENERIC_CBFS_UUID
 | 
						select DRIVERS_GENERIC_CBFS_UUID
 | 
				
			||||||
	select DRIVERS_I2C_HID
 | 
						select DRIVERS_I2C_HID
 | 
				
			||||||
	select EC_SYSTEM76_EC
 | 
						select EC_SYSTEM76_EC
 | 
				
			||||||
 | 
						select EC_SYSTEM76_EC_LOCKDOWN
 | 
				
			||||||
	select HAVE_ACPI_RESUME
 | 
						select HAVE_ACPI_RESUME
 | 
				
			||||||
	select HAVE_ACPI_TABLES
 | 
						select HAVE_ACPI_TABLES
 | 
				
			||||||
	select HAVE_CMOS_DEFAULT
 | 
						select HAVE_CMOS_DEFAULT
 | 
				
			||||||
@@ -27,13 +28,27 @@ config BOARD_SYSTEM76_RPL_COMMON
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_ADDW3
 | 
					config BOARD_SYSTEM76_ADDW3
 | 
				
			||||||
	select BOARD_SYSTEM76_RPL_COMMON
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						select DRIVERS_INTEL_DTBT
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select MAINBOARD_USES_IFD_GBE_REGION
 | 
						select MAINBOARD_USES_IFD_GBE_REGION
 | 
				
			||||||
	select PCIEXP_HOTPLUG
 | 
						select PCIEXP_HOTPLUG
 | 
				
			||||||
	select SOC_INTEL_ALDERLAKE_PCH_S
 | 
						select SOC_INTEL_ALDERLAKE_PCH_S
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
 | 
						select PCIEXP_HOTPLUG
 | 
				
			||||||
 | 
						select SOC_INTEL_ALDERLAKE_PCH_S
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_BONW15
 | 
					config BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	select BOARD_SYSTEM76_RPL_COMMON
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						select DRIVERS_INTEL_DTBT
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select PCIEXP_HOTPLUG
 | 
						select PCIEXP_HOTPLUG
 | 
				
			||||||
	select SOC_INTEL_ALDERLAKE_PCH_S
 | 
						select SOC_INTEL_ALDERLAKE_PCH_S
 | 
				
			||||||
@@ -50,6 +65,8 @@ config BOARD_SYSTEM76_GALP7
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_GAZE18
 | 
					config BOARD_SYSTEM76_GAZE18
 | 
				
			||||||
	select BOARD_SYSTEM76_RPL_COMMON
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select SOC_INTEL_ALDERLAKE_PCH_P
 | 
						select SOC_INTEL_ALDERLAKE_PCH_P
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,12 +78,17 @@ config BOARD_SYSTEM76_LEMP12
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_ORYP11
 | 
					config BOARD_SYSTEM76_ORYP11
 | 
				
			||||||
	select BOARD_SYSTEM76_RPL_COMMON
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select SOC_INTEL_ALDERLAKE_PCH_P
 | 
						select SOC_INTEL_ALDERLAKE_PCH_P
 | 
				
			||||||
	select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES
 | 
						select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_SERW13
 | 
					config BOARD_SYSTEM76_SERW13
 | 
				
			||||||
	select BOARD_SYSTEM76_RPL_COMMON
 | 
						select BOARD_SYSTEM76_RPL_COMMON
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA
 | 
				
			||||||
 | 
						select DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST
 | 
				
			||||||
 | 
						select DRIVERS_INTEL_DTBT
 | 
				
			||||||
	select EC_SYSTEM76_EC_DGPU
 | 
						select EC_SYSTEM76_EC_DGPU
 | 
				
			||||||
	select PCIEXP_HOTPLUG
 | 
						select PCIEXP_HOTPLUG
 | 
				
			||||||
	select SOC_INTEL_ALDERLAKE_PCH_S
 | 
						select SOC_INTEL_ALDERLAKE_PCH_S
 | 
				
			||||||
@@ -78,6 +100,7 @@ config MAINBOARD_DIR
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config VARIANT_DIR
 | 
					config VARIANT_DIR
 | 
				
			||||||
	default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
						default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
				
			||||||
 | 
						default "addw4" if BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
	default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
						default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	default "darp9" if BOARD_SYSTEM76_DARP9
 | 
						default "darp9" if BOARD_SYSTEM76_DARP9
 | 
				
			||||||
	default "galp7" if BOARD_SYSTEM76_GALP7
 | 
						default "galp7" if BOARD_SYSTEM76_GALP7
 | 
				
			||||||
@@ -91,6 +114,7 @@ config OVERRIDE_DEVICETREE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config MAINBOARD_PART_NUMBER
 | 
					config MAINBOARD_PART_NUMBER
 | 
				
			||||||
	default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
						default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
				
			||||||
 | 
						default "addw4" if BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
	default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
						default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	default "darp9" if BOARD_SYSTEM76_DARP9
 | 
						default "darp9" if BOARD_SYSTEM76_DARP9
 | 
				
			||||||
	default "galp7" if BOARD_SYSTEM76_GALP7
 | 
						default "galp7" if BOARD_SYSTEM76_GALP7
 | 
				
			||||||
@@ -100,7 +124,7 @@ config MAINBOARD_PART_NUMBER
 | 
				
			|||||||
	default "serw13" if BOARD_SYSTEM76_SERW13
 | 
						default "serw13" if BOARD_SYSTEM76_SERW13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MAINBOARD_SMBIOS_PRODUCT_NAME
 | 
					config MAINBOARD_SMBIOS_PRODUCT_NAME
 | 
				
			||||||
	default "Adder WS" if BOARD_SYSTEM76_ADDW3
 | 
						default "Adder WS" if BOARD_SYSTEM76_ADDW3 || BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
	default "Bonobo WS" if BOARD_SYSTEM76_BONW15
 | 
						default "Bonobo WS" if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	default "Darter Pro" if BOARD_SYSTEM76_DARP9
 | 
						default "Darter Pro" if BOARD_SYSTEM76_DARP9
 | 
				
			||||||
	default "Galago Pro" if BOARD_SYSTEM76_GALP7
 | 
						default "Galago Pro" if BOARD_SYSTEM76_GALP7
 | 
				
			||||||
@@ -111,6 +135,7 @@ config MAINBOARD_SMBIOS_PRODUCT_NAME
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
config MAINBOARD_VERSION
 | 
					config MAINBOARD_VERSION
 | 
				
			||||||
	default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
						default "addw3" if BOARD_SYSTEM76_ADDW3
 | 
				
			||||||
 | 
						default "addw4" if BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
	default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
						default "bonw15" if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	default "darp9" if BOARD_SYSTEM76_DARP9
 | 
						default "darp9" if BOARD_SYSTEM76_DARP9
 | 
				
			||||||
	default "galp7" if BOARD_SYSTEM76_GALP7
 | 
						default "galp7" if BOARD_SYSTEM76_GALP7
 | 
				
			||||||
@@ -119,6 +144,10 @@ config MAINBOARD_VERSION
 | 
				
			|||||||
	default "oryp11" if BOARD_SYSTEM76_ORYP11
 | 
						default "oryp11" if BOARD_SYSTEM76_ORYP11
 | 
				
			||||||
	default "serw13" if BOARD_SYSTEM76_SERW13
 | 
						default "serw13" if BOARD_SYSTEM76_SERW13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config CMOS_DEFAULT_FILE
 | 
				
			||||||
 | 
						default "src/mainboard/\$(MAINBOARDDIR)/cmos-csme.default" if BOARD_SYSTEM76_DARP9
 | 
				
			||||||
 | 
						default "src/mainboard/\$(MAINBOARDDIR)/cmos.default"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CONSOLE_POST
 | 
					config CONSOLE_POST
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -128,6 +157,17 @@ config D3COLD_SUPPORT
 | 
				
			|||||||
config DIMM_SPD_SIZE
 | 
					config DIMM_SPD_SIZE
 | 
				
			||||||
	default 512
 | 
						default 512
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_BRIDGE
 | 
				
			||||||
 | 
						default 0x02 if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_TPP
 | 
				
			||||||
 | 
						default 45 if BOARD_SYSTEM76_ORYP11
 | 
				
			||||||
 | 
						default 55 if BOARD_SYSTEM76_ADDW3 || BOARD_SYSTEM76_ADDW4 || BOARD_SYSTEM76_GAZE18 || BOARD_SYSTEM76_SERW13
 | 
				
			||||||
 | 
						default 80 if BOARD_SYSTEM76_BONW15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config DRIVERS_GFX_NVIDIA_DYNAMIC_BOOST_MAX
 | 
				
			||||||
 | 
						default 25 if BOARD_SYSTEM76_ADDW3 || BOARD_SYSTEM76_ADDW4 || BOARD_SYSTEM76_BONW15 || BOARD_SYSTEM76_GAZE18 || BOARD_SYSTEM76_ORYP11 || BOARD_SYSTEM76_SERW13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config FMDFILE
 | 
					config FMDFILE
 | 
				
			||||||
	default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/variants/\$(CONFIG_VARIANT_DIR)/board.fmd"
 | 
						default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/variants/\$(CONFIG_VARIANT_DIR)/board.fmd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,9 @@
 | 
				
			|||||||
config BOARD_SYSTEM76_ADDW3
 | 
					config BOARD_SYSTEM76_ADDW3
 | 
				
			||||||
	bool "addw3"
 | 
						bool "addw3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config BOARD_SYSTEM76_ADDW4
 | 
				
			||||||
 | 
						bool "addw4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config BOARD_SYSTEM76_BONW15
 | 
					config BOARD_SYSTEM76_BONW15
 | 
				
			||||||
	bool "bonw15"
 | 
						bool "bonw15"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(CONFIG_DRIVERS_GFX_NVIDIA),y)
 | 
				
			||||||
 | 
					CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/variants/$(VARIANT_DIR)/include
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bootblock-y += bootblock.c
 | 
					bootblock-y += bootblock.c
 | 
				
			||||||
bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
					bootblock-y += variants/$(VARIANT_DIR)/gpio_early.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <drivers/intel/gma/acpi/gma.asl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Scope (GFX0)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Name (BRIG, Package (22) {
 | 
					 | 
				
			||||||
		40, /* default AC */
 | 
					 | 
				
			||||||
		40, /* default Battery */
 | 
					 | 
				
			||||||
		5,
 | 
					 | 
				
			||||||
		10,
 | 
					 | 
				
			||||||
		15,
 | 
					 | 
				
			||||||
		20,
 | 
					 | 
				
			||||||
		25,
 | 
					 | 
				
			||||||
		30,
 | 
					 | 
				
			||||||
		35,
 | 
					 | 
				
			||||||
		40,
 | 
					 | 
				
			||||||
		45,
 | 
					 | 
				
			||||||
		50,
 | 
					 | 
				
			||||||
		55,
 | 
					 | 
				
			||||||
		60,
 | 
					 | 
				
			||||||
		65,
 | 
					 | 
				
			||||||
		70,
 | 
					 | 
				
			||||||
		75,
 | 
					 | 
				
			||||||
		80,
 | 
					 | 
				
			||||||
		85,
 | 
					 | 
				
			||||||
		90,
 | 
					 | 
				
			||||||
		95,
 | 
					 | 
				
			||||||
		100
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,5 +1,9 @@
 | 
				
			|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if CONFIG(DRIVERS_GFX_NVIDIA)
 | 
				
			||||||
 | 
					#include <variant/gpio.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EC_GPE_SCI 0x6E
 | 
					#define EC_GPE_SCI 0x6E
 | 
				
			||||||
#define EC_GPE_SWI 0x6B
 | 
					#define EC_GPE_SWI 0x6B
 | 
				
			||||||
#include <ec/system76/ec/acpi/ec.asl>
 | 
					#include <ec/system76/ec/acpi/ec.asl>
 | 
				
			||||||
@@ -7,6 +11,16 @@
 | 
				
			|||||||
Scope (\_SB) {
 | 
					Scope (\_SB) {
 | 
				
			||||||
	#include "sleep.asl"
 | 
						#include "sleep.asl"
 | 
				
			||||||
	Scope (PCI0) {
 | 
						Scope (PCI0) {
 | 
				
			||||||
		#include "backlight.asl"
 | 
					#if CONFIG(DRIVERS_GFX_NVIDIA)
 | 
				
			||||||
 | 
					#if CONFIG(SOC_INTEL_ALDERLAKE_PCH_P) || CONFIG(BOARD_SYSTEM76_BONW15)
 | 
				
			||||||
 | 
							Scope (PEG2) {
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/tigerlake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
							Scope (PEG1) {
 | 
				
			||||||
 | 
								#include <drivers/gfx/nvidia/acpi/tigerlake.asl>
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif // CONFIG(DRIVERS_GFX_NVIDIA)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user