aboutsummaryrefslogtreecommitdiff
path: root/resources/libreboot/patch
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libreboot/patch')
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_16mb/reused.list2
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_4mb/reused.list2
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_8mb/reused.list2
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch34
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/reused.list1
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_4mb/reused.list3
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch602
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch34
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_16mb/reused.list2
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_4mb/reused.list1
-rw-r--r--resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_8mb/reused.list1
11 files changed, 609 insertions, 75 deletions
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_16mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_16mb/reused.list
index 87ffa8b2..b67a87a3 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_16mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_16mb/reused.list
@@ -1,3 +1,3 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb//0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_4mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_4mb/reused.list
index 1df136f4..8029ef92 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_4mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_4mb/reused.list
@@ -1,3 +1,3 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_8mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_8mb/reused.list
index 1df136f4..8029ef92 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_8mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/r400_8mb/reused.list
@@ -1,3 +1,3 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
deleted file mode 100644
index 380c44ef..00000000
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From e583892f5c5f2284d135624de27cfdfefcd53cd7 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <info@minifree.org>
-Date: Sun, 17 Jul 2016 23:47:14 +0100
-Subject: [PATCH] NOTFORMERGE: lenovo/t400: hard-code enable integrated-only
- video
-
-Written with libreboot in mind. Libreboot uses native graphics
-initialization only, so we want to ensure that these systems
-only use the integrated (Intel) GPU for which native init exists.
-
-Native graphics initialization does not yet exist for the ATI GPUs
-on these laptops...
-
-Change-Id: I2c056a8fb498972f87c4ec1122b239fdc9a4c666
-Signed-off-by: Leah Rowe <info@minifree.org>
----
- src/drivers/lenovo/hybrid_graphics.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/drivers/lenovo/hybrid_graphics.c b/src/drivers/lenovo/hybrid_graphics.c
-index 9b46646..2a6c300 100644
---- a/src/drivers/lenovo/hybrid_graphics.c
-+++ b/src/drivers/lenovo/hybrid_graphics.c
-@@ -64,7 +64,6 @@ static void hybrid_graphics_enable_peg(struct device *dev)
- u8 hybrid_graphics_mode;
-
- hybrid_graphics_mode = HYBRID_GRAPHICS_INTEGRATED;
-- get_option(&hybrid_graphics_mode, "hybrid_graphics_mode");
-
- if (hybrid_graphics_mode == HYBRID_GRAPHICS_DISCRETE) {
- /* connect LVDS interface to dGPU */
---
-1.9.1
-
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/reused.list
index 40f49672..8029ef92 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_16mb/reused.list
@@ -1,2 +1,3 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_4mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_4mb/reused.list
index 1df136f4..44d1475f 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_4mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_4mb/reused.list
@@ -1,3 +1,4 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
+
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
new file mode 100644
index 00000000..68a868bb
--- /dev/null
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
@@ -0,0 +1,602 @@
+From 5fda1c61b94b7f746bc009d733bd4e4c71e5531c Mon Sep 17 00:00:00 2001
+From: Arthur Heymans <arthur@aheymans.xyz>
+Date: Thu, 4 Aug 2016 12:41:51 +0200
+Subject: [PATCH 1/2] Revert "drivers/lenovo: Add hybrid graphics driver"
+
+This reverts commit 5919ba42ed0ce5b1b13717514698444232c6036c.
+
+Change-Id: Ie28320be56a3309a3bb02915a4abe4852a375584
+
+diff --git a/src/drivers/lenovo/Kconfig b/src/drivers/lenovo/Kconfig
+index f8eddf2..f20f3b2 100644
+--- a/src/drivers/lenovo/Kconfig
++++ b/src/drivers/lenovo/Kconfig
+@@ -27,16 +27,3 @@ config DIGITIZER_ABSENT
+ endchoice
+
+ endif
+-
+-config DRIVERS_LENOVO_HYBRID_GRAPHICS
+- bool
+- default n
+-
+-config HYBRID_GRAPHICS_GPIO_NUM
+- depends on DRIVERS_LENOVO_HYBRID_GRAPHICS
+- int
+- default 52
+- help
+- Set a default GPIO that sets the panel LVDS signal routing to
+- integrated or discrete GPU.
+-
+diff --git a/src/drivers/lenovo/Makefile.inc b/src/drivers/lenovo/Makefile.inc
+index 66f8594..c50db5b 100644
+--- a/src/drivers/lenovo/Makefile.inc
++++ b/src/drivers/lenovo/Makefile.inc
+@@ -1,2 +1 @@
+ ramstage-$(CONFIG_DRIVERS_LENOVO_WACOM) += wacom.c
+-ramstage-$(CONFIG_DRIVERS_LENOVO_HYBRID_GRAPHICS) += hybrid_graphics.c
+diff --git a/src/drivers/lenovo/hybrid_graphics.c b/src/drivers/lenovo/hybrid_graphics.c
+deleted file mode 100644
+index 9b46646..0000000
+--- a/src/drivers/lenovo/hybrid_graphics.c
++++ /dev/null
+@@ -1,125 +0,0 @@
+-/*
+- * This file is part of the coreboot project.
+- *
+- * Copyright (C) 2015-2016 Patrick Rudolph
+- * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; version 2 of the License.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- */
+-
+-#include <types.h>
+-#include <string.h>
+-#include <option.h>
+-#include <device/device.h>
+-#include <device/pci_def.h>
+-#include <device/pci_ops.h>
+-#include <device/pci_ids.h>
+-#include <device/pci.h>
+-#include <console/console.h>
+-#include <southbridge/intel/common/gpio.h>
+-
+-/* Hybrid graphics allows to connect LVDS interface to either iGPU
+- * or dGPU depending on GPIO level.
+- * Nvidia is calling this functionality "muxed Optimus".
+- * Some devices, like T430s, only support "muxless Optimus" where the
+- * Intel GPU is always connected to the panel.
+- * As it is only linked on lenovo and only executed if the GPU exists
+- * we know for sure that the dGPU is there and connected to first PEG slot.
+- *
+- * Note: Once native gfx init is done for AMD or Nvida graphic
+- * cards, merge this code.
+- */
+-
+-#define HYBRID_GRAPHICS_INTEGRATED 0
+-#define HYBRID_GRAPHICS_DISCRETE 1
+-
+-static void hybrid_graphics_disable_peg(struct device *dev)
+-{
+- struct device *peg_dev;
+-
+- /* connect LVDS interface to iGPU */
+- set_gpio(CONFIG_HYBRID_GRAPHICS_GPIO_NUM, GPIO_LEVEL_HIGH);
+- printk(BIOS_DEBUG, "Hybrid graphics: Switching panel to integrated GPU.\n");
+- dev->enabled = 0;
+-
+- /* Disable PEG10 */
+- peg_dev = dev_find_slot(0, PCI_DEVFN(1, 0));
+- if (peg_dev)
+- peg_dev->enabled = 0;
+-
+- printk(BIOS_DEBUG, "Hybrid graphics: Disabled PEG10.\n");
+-}
+-
+-/* Called before VGA enable bits are set and only if dGPU
+- * is present. Enable/disable VGA devices here. */
+-static void hybrid_graphics_enable_peg(struct device *dev)
+-{
+- u8 hybrid_graphics_mode;
+-
+- hybrid_graphics_mode = HYBRID_GRAPHICS_INTEGRATED;
+- get_option(&hybrid_graphics_mode, "hybrid_graphics_mode");
+-
+- if (hybrid_graphics_mode == HYBRID_GRAPHICS_DISCRETE) {
+- /* connect LVDS interface to dGPU */
+- set_gpio(CONFIG_HYBRID_GRAPHICS_GPIO_NUM, GPIO_LEVEL_LOW);
+- printk(BIOS_DEBUG, "Hybrid graphics: Switching panel to discrete GPU.\n");
+- dev->enabled = 1;
+-
+- /* Disable IGD */
+- dev = dev_find_slot(0, PCI_DEVFN(2, 0));
+- if (dev && dev->ops->disable)
+- dev->ops->disable(dev);
+- dev->enabled = 0;
+-
+- printk(BIOS_DEBUG, "Hybrid graphics: Disabled IGD.\n");
+- } else
+- hybrid_graphics_disable_peg(dev);
+-}
+-
+-static struct pci_operations pci_dev_ops_pci = {
+- .set_subsystem = pci_dev_set_subsystem,
+-};
+-
+-struct device_operations hybrid_graphics_ops = {
+- .read_resources = pci_dev_read_resources,
+- .set_resources = pci_dev_set_resources,
+- .enable_resources = pci_dev_enable_resources,
+- .init = pci_dev_init,
+- .scan_bus = 0,
+- .enable = hybrid_graphics_enable_peg,
+- .disable = hybrid_graphics_disable_peg,
+- .ops_pci = &pci_dev_ops_pci,
+-};
+-
+-static const unsigned short pci_device_ids_nvidia[] = {
+- 0x0ffc, /* Nvidia NVS Quadro K1000m Lenovo W530 */
+- 0x0def, /* NVidia NVS 5400m Lenovo T430/T530 */
+- 0x0dfc, /* NVidia NVS 5200m Lenovo T430s */
+- 0x1056, /* NVidia NVS 4200m Lenovo T420/T520 */
+- 0x1057, /* NVidia NVS 4200m Lenovo T420/T520 */
+- 0x0a6c, /* NVidia NVS 3100m Lenovo T410/T510 */
+- 0 };
+-
+-static const struct pci_driver hybrid_peg_nvidia __pci_driver = {
+- .ops = &hybrid_graphics_ops,
+- .vendor = PCI_VENDOR_ID_NVIDIA,
+- .devices = pci_device_ids_nvidia,
+-};
+-
+-static const unsigned short pci_device_ids_amd[] = {
+- 0x9591, /* ATI Mobility Radeon HD 3650 Lenovo T500/W500 */
+- 0x95c4, /* ATI Mobility Radeon HD 3470 Lenovo T400/R400 */
+- 0 };
+-
+-static const struct pci_driver hybrid_peg_amd __pci_driver = {
+- .ops = &hybrid_graphics_ops,
+- .vendor = PCI_VENDOR_ID_ATI,
+- .devices = pci_device_ids_amd,
+-};
+diff --git a/src/mainboard/lenovo/t400/Kconfig b/src/mainboard/lenovo/t400/Kconfig
+index a444bf8..d74a813 100644
+--- a/src/mainboard/lenovo/t400/Kconfig
++++ b/src/mainboard/lenovo/t400/Kconfig
+@@ -22,7 +22,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
+ select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
+ select INTEL_INT15
+ select SUPERIO_NSC_PC87382
+- select DRIVERS_LENOVO_HYBRID_GRAPHICS
+
+ config MAINBOARD_DIR
+ string
+diff --git a/src/mainboard/lenovo/t400/cmos.default b/src/mainboard/lenovo/t400/cmos.default
+index 5cf3e63..ac9f96d 100644
+--- a/src/mainboard/lenovo/t400/cmos.default
++++ b/src/mainboard/lenovo/t400/cmos.default
+@@ -13,5 +13,3 @@ sticky_fn=Disable
+ power_management_beeps=Enable
+ low_battery_beep=Enable
+ sata_mode=AHCI
+-hybrid_graphics_mode=Integrated Only
+-gfx_uma_size=32M
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t400/cmos.layout b/src/mainboard/lenovo/t400/cmos.layout
+index b4b7766..b6db0dd 100644
+--- a/src/mainboard/lenovo/t400/cmos.layout
++++ b/src/mainboard/lenovo/t400/cmos.layout
+@@ -77,8 +77,7 @@ entries
+ 940 1 e 1 uwb
+
+ # coreboot config options: northbridge
+-944 2 e 12 hybrid_graphics_mode
+-946 4 e 11 gfx_uma_size
++941 3 e 11 gfx_uma_size
+
+ # coreboot config options: EC
+ 952 8 h 0 volume
+diff --git a/src/mainboard/lenovo/t420/cmos.default b/src/mainboard/lenovo/t420/cmos.default
+index 3a82c97..1b8e212 100644
+--- a/src/mainboard/lenovo/t420/cmos.default
++++ b/src/mainboard/lenovo/t420/cmos.default
+@@ -14,4 +14,3 @@ fn_ctrl_swap=Disable
+ sticky_fn=Disable
+ trackpoint=Enable
+ hyper_threading=Enable
+-hybrid_graphics_mode=Integrated Only
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t420/cmos.layout b/src/mainboard/lenovo/t420/cmos.layout
+index 58a4abe..bf0f195 100644
+--- a/src/mainboard/lenovo/t420/cmos.layout
++++ b/src/mainboard/lenovo/t420/cmos.layout
+@@ -77,8 +77,7 @@ entries
+
+ # coreboot config options: northbridge
+ 432 3 e 11 gfx_uma_size
+-435 2 e 12 hybrid_graphics_mode
+-#437 3 r 0 unused
++#435 5 r 0 unused
+
+ 440 8 h 0 volume
+
+@@ -136,8 +135,6 @@ enumerations
+ 11 4 160M
+ 11 5 192M
+ 11 6 224M
+-12 0 Integrated Only
+-12 1 Discrete Only
+
+ # -----------------------------------------------------------------
+ checksums
+diff --git a/src/mainboard/lenovo/t420s/Kconfig b/src/mainboard/lenovo/t420s/Kconfig
+index feacb51..935e659 100644
+--- a/src/mainboard/lenovo/t420s/Kconfig
++++ b/src/mainboard/lenovo/t420s/Kconfig
+@@ -18,7 +18,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
+ select INTEL_INT15
+ select SANDYBRIDGE_IVYBRIDGE_LVDS
+ select MAINBOARD_HAS_LPC_TPM
+- select DRIVERS_LENOVO_HYBRID_GRAPHICS
+
+ # Workaround for EC/KBC IRQ1.
+ select SERIRQ_CONTINUOUS_MODE
+diff --git a/src/mainboard/lenovo/t420s/cmos.default b/src/mainboard/lenovo/t420s/cmos.default
+index 3a82c97..1b8e212 100644
+--- a/src/mainboard/lenovo/t420s/cmos.default
++++ b/src/mainboard/lenovo/t420s/cmos.default
+@@ -14,4 +14,3 @@ fn_ctrl_swap=Disable
+ sticky_fn=Disable
+ trackpoint=Enable
+ hyper_threading=Enable
+-hybrid_graphics_mode=Integrated Only
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t420s/cmos.layout b/src/mainboard/lenovo/t420s/cmos.layout
+index 3521849..4362840 100644
+--- a/src/mainboard/lenovo/t420s/cmos.layout
++++ b/src/mainboard/lenovo/t420s/cmos.layout
+@@ -77,8 +77,7 @@ entries
+
+ # coreboot config options: northbridge
+ 432 3 e 11 gfx_uma_size
+-435 2 e 12 hybrid_graphics_mode
+-#437 3 r 0 unused
++#435 5 r 0 unused
+
+ 440 8 h 0 volume
+
+@@ -136,8 +135,6 @@ enumerations
+ 11 4 160M
+ 11 5 192M
+ 11 6 224M
+-12 0 Integrated Only
+-12 1 Discrete Only
+
+ # -----------------------------------------------------------------
+ checksums
+diff --git a/src/mainboard/lenovo/t520/Kconfig b/src/mainboard/lenovo/t520/Kconfig
+index ee5dd81..c70581a 100644
+--- a/src/mainboard/lenovo/t520/Kconfig
++++ b/src/mainboard/lenovo/t520/Kconfig
+@@ -18,7 +18,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
+ select INTEL_INT15
+ select SANDYBRIDGE_IVYBRIDGE_LVDS
+ select MAINBOARD_HAS_LPC_TPM
+- select DRIVERS_LENOVO_HYBRID_GRAPHICS
+
+ # Workaround for EC/KBC IRQ1.
+ select SERIRQ_CONTINUOUS_MODE
+diff --git a/src/mainboard/lenovo/t520/cmos.default b/src/mainboard/lenovo/t520/cmos.default
+index ad7dcf5..00e8863 100644
+--- a/src/mainboard/lenovo/t520/cmos.default
++++ b/src/mainboard/lenovo/t520/cmos.default
+@@ -15,4 +15,3 @@ sticky_fn=Disable
+ trackpoint=Enable
+ hyper_threading=Enable
+ backlight=Both
+-hybrid_graphics_mode=Integrated Only
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t520/cmos.layout b/src/mainboard/lenovo/t520/cmos.layout
+index 044c310..2cf3629 100644
+--- a/src/mainboard/lenovo/t520/cmos.layout
++++ b/src/mainboard/lenovo/t520/cmos.layout
+@@ -77,8 +77,7 @@ entries
+
+ # coreboot config options: northbridge
+ 432 3 e 11 gfx_uma_size
+-435 2 e 12 hybrid_graphics_mode
+-#437 3 r 0 unused
++#435 5 r 0 unused
+ 440 8 h 0 volume
+
+ # SandyBridge MRC Scrambler Seed values
+@@ -135,8 +134,6 @@ enumerations
+ 11 4 160M
+ 11 5 192M
+ 11 6 224M
+-12 0 Integrated Only
+-12 1 Discrete Only
+ # -----------------------------------------------------------------
+ checksums
+
+diff --git a/src/mainboard/lenovo/t530/Kconfig b/src/mainboard/lenovo/t530/Kconfig
+index 76147fc..030c01f 100644
+--- a/src/mainboard/lenovo/t530/Kconfig
++++ b/src/mainboard/lenovo/t530/Kconfig
+@@ -21,7 +21,6 @@ config BOARD_SPECIFIC_OPTIONS # dummy
+ select SANDYBRIDGE_IVYBRIDGE_LVDS
+ select ENABLE_VMX
+ select MAINBOARD_HAS_LPC_TPM
+- select DRIVERS_LENOVO_HYBRID_GRAPHICS
+
+ # Workaround for EC/KBC IRQ1.
+ select SERIRQ_CONTINUOUS_MODE
+diff --git a/src/mainboard/lenovo/t530/cmos.default b/src/mainboard/lenovo/t530/cmos.default
+index ad7dcf5..00e8863 100644
+--- a/src/mainboard/lenovo/t530/cmos.default
++++ b/src/mainboard/lenovo/t530/cmos.default
+@@ -15,4 +15,3 @@ sticky_fn=Disable
+ trackpoint=Enable
+ hyper_threading=Enable
+ backlight=Both
+-hybrid_graphics_mode=Integrated Only
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t530/cmos.layout b/src/mainboard/lenovo/t530/cmos.layout
+index 0e28bdd..e21c197 100644
+--- a/src/mainboard/lenovo/t530/cmos.layout
++++ b/src/mainboard/lenovo/t530/cmos.layout
+@@ -77,8 +77,7 @@ entries
+
+ # coreboot config options: northbridge
+ 432 3 e 11 gfx_uma_size
+-435 2 e 12 hybrid_graphics_mode
+-#437 3 r 0 unused
++#435 5 r 0 unused
+
+ 440 8 h 0 volume
+
+@@ -136,9 +135,6 @@ enumerations
+ 11 4 160M
+ 11 5 192M
+ 11 6 224M
+-12 0 Integrated Only
+-12 1 Discrete Only
+-
+ # -----------------------------------------------------------------
+ checksums
+
+diff --git a/src/southbridge/intel/i82801ix/Kconfig b/src/southbridge/intel/i82801ix/Kconfig
+index b3e5069..2822774 100644
+--- a/src/southbridge/intel/i82801ix/Kconfig
++++ b/src/southbridge/intel/i82801ix/Kconfig
+@@ -23,7 +23,6 @@ config SOUTHBRIDGE_INTEL_I82801IX
+ select USE_WATCHDOG_ON_BOOT
+ select HAVE_SMI_HANDLER
+ select HAVE_USBDEBUG_OPTIONS
+- select SOUTHBRIDGE_INTEL_COMMON_GPIO
+
+ if SOUTHBRIDGE_INTEL_I82801IX
+
+--
+2.9.2
+
+From 6aa0458a6976ecfad5bad524dd81dbfc9de2cf0f Mon Sep 17 00:00:00 2001
+From: Arthur Heymans <arthur@aheymans.xyz>
+Date: Thu, 4 Aug 2016 12:42:52 +0200
+Subject: [PATCH 2/2] Revert "Revert "mainboard/lenovo/t400: Add initial hybrid
+ graphics support""
+
+This reverts commit 14d1a93e444b91311eeed2a25953bf6c0779cdcb.
+
+Change-Id: I94221f87394988aa36a0e8b48695d5931c5a8461
+
+diff --git a/src/mainboard/lenovo/t400/cmos.default b/src/mainboard/lenovo/t400/cmos.default
+index ac9f96d..98ce970 100644
+--- a/src/mainboard/lenovo/t400/cmos.default
++++ b/src/mainboard/lenovo/t400/cmos.default
+@@ -13,3 +13,4 @@ sticky_fn=Disable
+ power_management_beeps=Enable
+ low_battery_beep=Enable
+ sata_mode=AHCI
++hybrid_graphics_mode=Integrated Only
+\ No newline at end of file
+diff --git a/src/mainboard/lenovo/t400/cmos.layout b/src/mainboard/lenovo/t400/cmos.layout
+index b6db0dd..8f49f4e 100644
+--- a/src/mainboard/lenovo/t400/cmos.layout
++++ b/src/mainboard/lenovo/t400/cmos.layout
+@@ -79,6 +79,10 @@ entries
+ # coreboot config options: northbridge
+ 941 3 e 11 gfx_uma_size
+
++# coreboot config options: graphics
++944 2 e 12 hybrid_graphics_mode
++#946 6 r 0 unused
++
+ # coreboot config options: EC
+ 952 8 h 0 volume
+
+diff --git a/src/mainboard/lenovo/t400/romstage.c b/src/mainboard/lenovo/t400/romstage.c
+index f518775..fcc545b 100644
+--- a/src/mainboard/lenovo/t400/romstage.c
++++ b/src/mainboard/lenovo/t400/romstage.c
+@@ -1,6 +1,7 @@
+ /*
+ * This file is part of the coreboot project.
+ *
++ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
+ * Copyright (C) 2012 secunet Security Networks AG
+ *
+ * This program is free software; you can redistribute it and/or
+@@ -34,6 +35,118 @@
+ #define LPC_DEV PCI_DEV(0, 0x1f, 0)
+ #define MCH_DEV PCI_DEV(0, 0, 0)
+
++#define HYBRID_GRAPHICS_INTEGRATED_ONLY 0
++#define HYBRID_GRAPHICS_DISCRETE_ONLY 1
++#define HYBRID_GRAPHICS_SWITCHABLE 2
++
++#define HYBRID_GRAPHICS_GP_LVL_BITS 0x004a0000
++#define HYBRID_GRAPHICS_GP_LVL2_BITS 0x00020000
++
++#define HYBRID_GRAPHICS_DETECT_GP_BITS 0x00000010
++
++#define HYBRID_GRAPHICS_INT_CLAIM_VGA 0x2
++#define HYBRID_GRAPHICS_SEC_VGA_EN 0x2
++
++static void hybrid_graphics_configure_switchable_graphics(bool enable)
++{
++ uint32_t tmp;
++
++ if (enable) {
++ /* Disable integrated graphics legacy VGA cycles */
++ tmp = pci_read_config16(MCH_DEV, D0F0_GGC);
++ pci_write_config16(MCH_DEV, D0F0_GGC, tmp | HYBRID_GRAPHICS_INT_CLAIM_VGA);
++
++ /* Enable secondary VGA controller */
++ tmp = pci_read_config16(MCH_DEV, D0F0_DEVEN);
++ pci_write_config16(MCH_DEV, D0F0_DEVEN, tmp | HYBRID_GRAPHICS_SEC_VGA_EN);
++ }
++ else {
++ /* Enable integrated graphics legacy VGA cycles */
++ tmp = pci_read_config16(MCH_DEV, D0F0_GGC);
++ pci_write_config16(MCH_DEV, D0F0_GGC, tmp & ~HYBRID_GRAPHICS_INT_CLAIM_VGA);
++
++ /* Disable secondary VGA controller */
++ tmp = pci_read_config16(MCH_DEV, D0F0_DEVEN);
++ pci_write_config16(MCH_DEV, D0F0_DEVEN, tmp & ~HYBRID_GRAPHICS_SEC_VGA_EN);
++ }
++}
++
++static void hybrid_graphics_set_up_gpio(void)
++{
++ uint32_t tmp;
++
++ /* Enable hybrid graphics GPIO lines */
++ tmp = inl(DEFAULT_GPIOBASE + GP_IO_USE_SEL);
++ tmp = tmp | HYBRID_GRAPHICS_GP_LVL_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_IO_USE_SEL);
++
++ tmp = inl(DEFAULT_GPIOBASE + GP_IO_USE_SEL2);
++ tmp = tmp | HYBRID_GRAPHICS_GP_LVL2_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_IO_USE_SEL2);
++
++ /* Set hybrid graphics control GPIO lines to output */
++ tmp = inl(DEFAULT_GPIOBASE + GP_IO_SEL);
++ tmp = tmp & ~HYBRID_GRAPHICS_GP_LVL_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_IO_SEL);
++
++ tmp = inl(DEFAULT_GPIOBASE + GP_IO_SEL2);
++ tmp = tmp & ~HYBRID_GRAPHICS_GP_LVL2_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_IO_SEL2);
++
++ /* Set hybrid graphics detect GPIO lines to input */
++ tmp = inl(DEFAULT_GPIOBASE + GP_IO_SEL);
++ tmp = tmp | HYBRID_GRAPHICS_DETECT_GP_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_IO_SEL);
++}
++
++static bool hybrid_graphics_installed(void)
++{
++ if (inl(DEFAULT_GPIOBASE + GP_LVL) & HYBRID_GRAPHICS_DETECT_GP_BITS)
++ return false;
++ else
++ return true;
++}
++
++static void hybrid_graphics_switch_to_integrated_graphics(void)
++{
++ uint32_t tmp;
++
++ /* Disable switchable graphics */
++ hybrid_graphics_configure_switchable_graphics(false);
++
++ /* Configure muxes */
++ tmp = inl(DEFAULT_GPIOBASE + GP_LVL);
++ tmp = tmp & ~HYBRID_GRAPHICS_GP_LVL_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_LVL);
++
++ tmp = inl(DEFAULT_GPIOBASE + GP_LVL2);
++ tmp = tmp & ~HYBRID_GRAPHICS_GP_LVL2_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_LVL2);
++}
++
++static void hybrid_graphics_switch_to_discrete_graphics(void)
++{
++ uint32_t tmp;
++
++ /* Disable switchable graphics */
++ hybrid_graphics_configure_switchable_graphics(false);
++
++ /* Configure muxes */
++ tmp = inl(DEFAULT_GPIOBASE + GP_LVL);
++ tmp = tmp | HYBRID_GRAPHICS_GP_LVL_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_LVL);
++
++ tmp = inl(DEFAULT_GPIOBASE + GP_LVL2);
++ tmp = tmp | HYBRID_GRAPHICS_GP_LVL2_BITS;
++ outl(tmp, DEFAULT_GPIOBASE + GP_LVL2);
++}
++
++static void hybrid_graphics_switch_to_dual_graphics(void)
++{
++ /* Enable switchable graphics */
++ hybrid_graphics_configure_switchable_graphics(true);
++}
++
+ static void default_southbridge_gpio_setup(void)
+ {
+ outl(0x197e23fe, DEFAULT_GPIOBASE + GP_IO_USE_SEL);
+@@ -95,6 +208,31 @@ void mainboard_romstage_entry(unsigned long bist)
+
+ default_southbridge_gpio_setup();
+
++ uint8_t hybrid_graphics_mode = HYBRID_GRAPHICS_INTEGRATED_ONLY;
++ get_option(&hybrid_graphics_mode, "hybrid_graphics_mode");
++
++ /* Set up hybrid graphics */
++ hybrid_graphics_set_up_gpio();
++ if (hybrid_graphics_installed()) {
++ /* Select appropriate hybrid graphics device */
++ printk(BIOS_DEBUG, "Hybrid graphics available, setting mode %d\n", hybrid_graphics_mode);
++ if (hybrid_graphics_mode == HYBRID_GRAPHICS_INTEGRATED_ONLY)
++ hybrid_graphics_switch_to_integrated_graphics();
++ else if (hybrid_graphics_mode == HYBRID_GRAPHICS_DISCRETE_ONLY)
++ hybrid_graphics_switch_to_discrete_graphics();
++ else if (hybrid_graphics_mode == HYBRID_GRAPHICS_SWITCHABLE)
++ hybrid_graphics_switch_to_integrated_graphics();
++ /* Switchable graphics are fully enabled after raminit */
++ /* FIXME
++ * Enabling switchable graphics prevents bootup!
++ * Debug and fix appropriately...
++ */
++ }
++ else {
++ printk(BIOS_DEBUG, "Hybrid graphics not installed\n");
++ hybrid_graphics_switch_to_integrated_graphics();
++ }
++
+ /* ASPM related setting, set early by original BIOS. */
+ DMIBAR16(0x204) &= ~(3 << 10);
+
+@@ -174,6 +312,11 @@ void mainboard_romstage_entry(unsigned long bist)
+ outl(inl(DEFAULT_GPIOBASE + 0x38) & ~0x400, DEFAULT_GPIOBASE + 0x38);
+
+ cbmem_initted = !cbmem_recovery(s3resume);
++
++ if (hybrid_graphics_installed())
++ if (hybrid_graphics_mode == HYBRID_GRAPHICS_SWITCHABLE)
++ hybrid_graphics_switch_to_dual_graphics();
++
+ #if CONFIG_HAVE_ACPI_RESUME
+ /* If there is no high memory area, we didn't boot before, so
+ * this is not a resume. In that case we just create the cbmem toc.
+--
+2.9.2
+
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
deleted file mode 100644
index 380c44ef..00000000
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From e583892f5c5f2284d135624de27cfdfefcd53cd7 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <info@minifree.org>
-Date: Sun, 17 Jul 2016 23:47:14 +0100
-Subject: [PATCH] NOTFORMERGE: lenovo/t400: hard-code enable integrated-only
- video
-
-Written with libreboot in mind. Libreboot uses native graphics
-initialization only, so we want to ensure that these systems
-only use the integrated (Intel) GPU for which native init exists.
-
-Native graphics initialization does not yet exist for the ATI GPUs
-on these laptops...
-
-Change-Id: I2c056a8fb498972f87c4ec1122b239fdc9a4c666
-Signed-off-by: Leah Rowe <info@minifree.org>
----
- src/drivers/lenovo/hybrid_graphics.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/drivers/lenovo/hybrid_graphics.c b/src/drivers/lenovo/hybrid_graphics.c
-index 9b46646..2a6c300 100644
---- a/src/drivers/lenovo/hybrid_graphics.c
-+++ b/src/drivers/lenovo/hybrid_graphics.c
-@@ -64,7 +64,6 @@ static void hybrid_graphics_enable_peg(struct device *dev)
- u8 hybrid_graphics_mode;
-
- hybrid_graphics_mode = HYBRID_GRAPHICS_INTEGRATED;
-- get_option(&hybrid_graphics_mode, "hybrid_graphics_mode");
-
- if (hybrid_graphics_mode == HYBRID_GRAPHICS_DISCRETE) {
- /* connect LVDS interface to dGPU */
---
-1.9.1
-
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_16mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_16mb/reused.list
index 1df136f4..8029ef92 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_16mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_16mb/reused.list
@@ -1,3 +1,3 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
+/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0001-Revert-hybrid-driver.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_4mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_4mb/reused.list
index 1df136f4..40f49672 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_4mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_4mb/reused.list
@@ -1,3 +1,2 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch
diff --git a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_8mb/reused.list b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_8mb/reused.list
index 1df136f4..40f49672 100644
--- a/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_8mb/reused.list
+++ b/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t500_8mb/reused.list
@@ -1,3 +1,2 @@
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-NOTFORMERGE-ec-lenovo-h8-wlan-trackpoint-touchpad-bl.patch
-/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/t400_8mb/0002-NOTFORMERGE-lenovo-t400-hard-code-enable-integrated-.patch
/resources/libreboot/patch/coreboot/d83b0e9ac4174cca92ac2c3b83a7e8491a9a1ff4/grub/x200_8mb/0001-add-acpi-c3-cpu-c4-state-for-gm45-thinpads.patch