mb/lenovo/t440p: Enable dGPU on Lenovo T440P

Enable the dGPU on the Lenovo T440P.  It uses the same code (roughly) of
the T430S.  By default, it is set to be disabled however it can be
enabled via the nvram option enable_dual_graphics. Removed hybrid graphics
options too as they are not valid for the T440p. Tested on a T440P with
Ubuntu 18.04.4 with Kernel 5.3.0-29 (successful). Tested on same machine
with Windows 10 1909 (machine check exception bluescreen).

Change-Id: Idf8c2c0d1ae34bda8736448d3e350396e3cf7a93
Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38723
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
Chris Morgan 2020-02-05 12:38:48 -06:00 committed by Patrick Georgi
parent 75372e5a75
commit f8a13d5a22
3 changed files with 22 additions and 4 deletions

View File

@ -10,4 +10,5 @@ f1_to_f12_as_primary=Enable
sticky_fn=Disable
trackpoint=Enable
backlight=Keyboard
enable_dual_graphics=Disable
usb_always_on=Disable

View File

@ -69,7 +69,7 @@ entries
424 1 e 1 f1_to_f12_as_primary
# coreboot config options: northbridge
#435 2 e 12 hybrid_graphics_mode
435 1 e 1 enable_dual_graphics
#437 3 r 0 unused
440 8 h 0 volume
@ -108,9 +108,6 @@ enumerations
10 1 Keyboard
#10 2 Thinklight only
10 3 None
#12 0 Integrated Only
#12 1 Discrete Only
#12 2 Dual Graphics
13 0 Disable
13 1 AC and battery
13 2 AC only

View File

@ -22,6 +22,9 @@
#include <northbridge/intel/haswell/pei_data.h>
#include <southbridge/intel/common/gpio.h>
#include <southbridge/intel/lynxpoint/pch.h>
#include <option.h>
#include <ec/lenovo/pmh7/pmh7.h>
#include <device/pci_ops.h>
static const struct rcba_config_instruction rcba_config[] = {
RCBA_SET_REG_16(D31IR, DIR_ROUTE(PIRQA, PIRQD, PIRQC, PIRQA)),
@ -100,4 +103,21 @@ void mainboard_romstage_entry(void)
};
romstage_common(&romstage_params);
u8 enable_peg;
if (get_option(&enable_peg, "enable_dual_graphics") != CB_SUCCESS)
enable_peg = 0;
bool power_en = pmh7_dgpu_power_state();
if (enable_peg != power_en)
pmh7_dgpu_power_enable(!power_en);
if (!enable_peg) {
// Hide disabled dGPU device
u32 reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);
reg32 &= ~DEVEN_D1F0EN;
pci_write_config32(PCI_DEV(0, 0, 0), DEVEN, reg32);
}
}