<p>Evgeny Zinoviev has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28393">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mb/lenovo: Dual Graphics for xx20/xx30 ThinkPads<br><br>Add CMOS option that allows to use both integrated and discrete GPU.<br><br>Change-Id: I8842fef0fa1235eb91abf6b7e655ed4d8598adc7<br>Signed-off-by: Evgeny Zinoviev <me@ch1p.com><br>---<br>M src/mainboard/lenovo/t420/cmos.layout<br>M src/mainboard/lenovo/t420/romstage.c<br>M src/mainboard/lenovo/t420s/cmos.layout<br>M src/mainboard/lenovo/t420s/romstage.c<br>M src/mainboard/lenovo/t430/cmos.layout<br>M src/mainboard/lenovo/t430/romstage.c<br>M src/mainboard/lenovo/t430s/cmos.default<br>M src/mainboard/lenovo/t430s/cmos.layout<br>M src/mainboard/lenovo/t430s/romstage.c<br>M src/mainboard/lenovo/t520/romstage.c<br>M src/mainboard/lenovo/t530/cmos.layout<br>M src/mainboard/lenovo/t530/romstage.c<br>12 files changed, 39 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/93/28393/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/lenovo/t420/cmos.layout b/src/mainboard/lenovo/t420/cmos.layout</span><br><span>index 5a9e570..f55c203 100644</span><br><span>--- a/src/mainboard/lenovo/t420/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t420/cmos.layout</span><br><span>@@ -129,6 +129,7 @@</span><br><span> 11 6 224M</span><br><span> 12 0 Integrated Only</span><br><span> 12 1 Discrete Only</span><br><span style="color: hsl(120, 100%, 40%);">+12 2 Dual Graphics</span><br><span> 13 0 Disable</span><br><span> 13 1 AC and battery</span><br><span> 13 2 AC only</span><br><span>diff --git a/src/mainboard/lenovo/t420/romstage.c b/src/mainboard/lenovo/t420/romstage.c</span><br><span>index 36e83a3..bef2562 100644</span><br><span>--- a/src/mainboard/lenovo/t420/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t420/romstage.c</span><br><span>@@ -30,6 +30,9 @@</span><br><span> </span><br><span> early_hybrid_graphics(&igd, &peg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (peg && igd)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Hide disabled devices */</span><br><span> reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);</span><br><span> reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD);</span><br><span>diff --git a/src/mainboard/lenovo/t420s/cmos.layout b/src/mainboard/lenovo/t420s/cmos.layout</span><br><span>index f395c0c..2be55f6 100644</span><br><span>--- a/src/mainboard/lenovo/t420s/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t420s/cmos.layout</span><br><span>@@ -129,6 +129,7 @@</span><br><span> 11 6 224M</span><br><span> 12 0 Integrated Only</span><br><span> 12 1 Discrete Only</span><br><span style="color: hsl(120, 100%, 40%);">+12 2 Dual Graphics</span><br><span> 13 0 Disable</span><br><span> 13 1 AC and battery</span><br><span> 13 2 AC only</span><br><span>diff --git a/src/mainboard/lenovo/t420s/romstage.c b/src/mainboard/lenovo/t420s/romstage.c</span><br><span>index 55011cf2..be8052c 100644</span><br><span>--- a/src/mainboard/lenovo/t420s/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t420s/romstage.c</span><br><span>@@ -32,6 +32,9 @@</span><br><span> </span><br><span> early_hybrid_graphics(&igd, &peg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (peg && igd)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Hide disabled devices */</span><br><span> reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);</span><br><span> reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD);</span><br><span>diff --git a/src/mainboard/lenovo/t430/cmos.layout b/src/mainboard/lenovo/t430/cmos.layout</span><br><span>index 2b687c2..1b50e7f 100644</span><br><span>--- a/src/mainboard/lenovo/t430/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t430/cmos.layout</span><br><span>@@ -128,6 +128,7 @@</span><br><span> 11 6 224M</span><br><span> 12 0 Integrated Only</span><br><span> 12 1 Discrete Only</span><br><span style="color: hsl(120, 100%, 40%);">+12 2 Dual Graphics</span><br><span> 13 0 Disable</span><br><span> 13 1 AC and battery</span><br><span> 13 2 AC only</span><br><span>diff --git a/src/mainboard/lenovo/t430/romstage.c b/src/mainboard/lenovo/t430/romstage.c</span><br><span>index 94679df..90d0886 100644</span><br><span>--- a/src/mainboard/lenovo/t430/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t430/romstage.c</span><br><span>@@ -30,6 +30,9 @@</span><br><span> </span><br><span> early_hybrid_graphics(&igd, &peg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (peg && igd)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Hide disabled devices */</span><br><span> reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);</span><br><span> reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD);</span><br><span>diff --git a/src/mainboard/lenovo/t430s/cmos.default b/src/mainboard/lenovo/t430s/cmos.default</span><br><span>index 979f132..6e61dae 100644</span><br><span>--- a/src/mainboard/lenovo/t430s/cmos.default</span><br><span>+++ b/src/mainboard/lenovo/t430s/cmos.default</span><br><span>@@ -13,4 +13,5 @@</span><br><span> sticky_fn=Disable</span><br><span> trackpoint=Enable</span><br><span> backlight=Both</span><br><span style="color: hsl(120, 100%, 40%);">+hybrid_graphics_mode=Integrated Only</span><br><span> usb_always_on=Disable</span><br><span>diff --git a/src/mainboard/lenovo/t430s/cmos.layout b/src/mainboard/lenovo/t430s/cmos.layout</span><br><span>index 538e624..eac168f 100644</span><br><span>--- a/src/mainboard/lenovo/t430s/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t430s/cmos.layout</span><br><span>@@ -76,7 +76,8 @@</span><br><span> </span><br><span> # coreboot config options: northbridge</span><br><span> 432 3 e 11 gfx_uma_size</span><br><span style="color: hsl(0, 100%, 40%);">-#435 5 r 0 unused</span><br><span style="color: hsl(120, 100%, 40%);">+435 2 e 13 hybrid_graphics_mode</span><br><span style="color: hsl(120, 100%, 40%);">+#437 3 r 0 unused</span><br><span> 440 8 h 0 volume</span><br><span> </span><br><span> # SandyBridge MRC Scrambler Seed values</span><br><span>@@ -128,6 +129,8 @@</span><br><span> 12 0 Disable</span><br><span> 12 1 AC and battery</span><br><span> 12 2 AC only</span><br><span style="color: hsl(120, 100%, 40%);">+13 0 Integrated Only</span><br><span style="color: hsl(120, 100%, 40%);">+13 2 Dual Graphics</span><br><span> </span><br><span> # -----------------------------------------------------------------</span><br><span> checksums</span><br><span>diff --git a/src/mainboard/lenovo/t430s/romstage.c b/src/mainboard/lenovo/t430s/romstage.c</span><br><span>index 3f6d9f2..de9e944 100644</span><br><span>--- a/src/mainboard/lenovo/t430s/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t430s/romstage.c</span><br><span>@@ -15,12 +15,16 @@</span><br><span> * GNU General Public License for more details.</span><br><span> */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <option.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <delay.h></span><br><span> #include <arch/byteorder.h></span><br><span> #include <arch/io.h></span><br><span> #include <device/pci_def.h></span><br><span> #include <console/console.h></span><br><span> #include <northbridge/intel/sandybridge/raminit_native.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <drivers/lenovo/hybrid_graphics/chip.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <ec/lenovo/pmh7/pmh7.h></span><br><span> </span><br><span> void pch_enable_lpc(void)</span><br><span> {</span><br><span>@@ -64,6 +68,17 @@</span><br><span> }</span><br><span> </span><br><span> void mainboard_early_init(int s3resume) {</span><br><span style="color: hsl(120, 100%, 40%);">+ enum hybrid_graphics_req mode = HYBRID_GRAPHICS_INTEGRATED;</span><br><span style="color: hsl(120, 100%, 40%);">+ get_option(&mode, "hybrid_graphics_mode");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mode == HYBRID_GRAPHICS_INTEGRATED) {</span><br><span style="color: hsl(120, 100%, 40%);">+ const size_t power_en = !!(pmh7_register_read(0x50) & 0x08);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (power_en) {</span><br><span style="color: hsl(120, 100%, 40%);">+ pmh7_register_clear_bit(0x50, 7); // DGPU_RST</span><br><span style="color: hsl(120, 100%, 40%);">+ udelay(100);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmh7_register_clear_bit(0x50, 3); // DGPU_PWR</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> void mainboard_config_superio(void)</span><br><span>diff --git a/src/mainboard/lenovo/t520/romstage.c b/src/mainboard/lenovo/t520/romstage.c</span><br><span>index 328ae37..4fcd651 100644</span><br><span>--- a/src/mainboard/lenovo/t520/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t520/romstage.c</span><br><span>@@ -42,6 +42,9 @@</span><br><span> </span><br><span> early_hybrid_graphics(&igd, &peg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (peg && igd)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Hide disabled devices */</span><br><span> reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);</span><br><span> reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD);</span><br><span>diff --git a/src/mainboard/lenovo/t530/cmos.layout b/src/mainboard/lenovo/t530/cmos.layout</span><br><span>index 9a099f5..3400a4d 100644</span><br><span>--- a/src/mainboard/lenovo/t530/cmos.layout</span><br><span>+++ b/src/mainboard/lenovo/t530/cmos.layout</span><br><span>@@ -129,6 +129,7 @@</span><br><span> 11 6 224M</span><br><span> 12 0 Integrated Only</span><br><span> 12 1 Discrete Only</span><br><span style="color: hsl(120, 100%, 40%);">+12 2 Dual Graphics</span><br><span> 13 0 Disable</span><br><span> 13 1 AC and battery</span><br><span> 13 2 AC only</span><br><span>diff --git a/src/mainboard/lenovo/t530/romstage.c b/src/mainboard/lenovo/t530/romstage.c</span><br><span>index ba7a229..88e07c1 100644</span><br><span>--- a/src/mainboard/lenovo/t530/romstage.c</span><br><span>+++ b/src/mainboard/lenovo/t530/romstage.c</span><br><span>@@ -34,6 +34,9 @@</span><br><span> </span><br><span> early_hybrid_graphics(&igd, &peg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (peg && igd)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Hide disabled devices */</span><br><span> reg32 = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);</span><br><span> reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28393">change 28393</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/28393"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I8842fef0fa1235eb91abf6b7e655ed4d8598adc7 </div>
<div style="display:none"> Gerrit-Change-Number: 28393 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Evgeny Zinoviev <me@ch1p.com> </div>