<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>