<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/29676">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">drivers/nvidia: Add PCI mapped option rom driver<br><br>Map the Nvidia PCI ids for easy PCI option rom integration.<br><br>Change-Id: Idd85ed1fe9b5ffe4c9b7944d5360a2898dbb07f8<br>Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com><br>---<br>M src/device/pci_rom.c<br>A src/drivers/nvidia/Kconfig<br>A src/drivers/nvidia/Makefile.inc<br>A src/drivers/nvidia/nvidia.c<br>M src/include/device/pci_rom.h<br>M src/mainboard/lenovo/t420/Kconfig<br>M src/mainboard/lenovo/t420s/Kconfig<br>M src/mainboard/lenovo/t430/Kconfig<br>M src/mainboard/lenovo/t520/Kconfig<br>M src/mainboard/lenovo/t530/Kconfig<br>10 files changed, 51 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/76/29676/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c</span><br><span>index 65989d4..ecbe340 100644</span><br><span>--- a/src/device/pci_rom.c</span><br><span>+++ b/src/device/pci_rom.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> </span><br><span> /* Rmodules don't like weak symbols. */</span><br><span> u32 __weak map_oprom_vendev(u32 vendev) { return vendev; }</span><br><span style="color: hsl(120, 100%, 40%);">+u32 __weak map_oprom_vendev_nvidia(u32 vendev) { return vendev; }</span><br><span> </span><br><span> struct rom_header *pci_rom_probe(struct device *dev)</span><br><span> {</span><br><span>@@ -43,6 +44,7 @@</span><br><span>    u32 mapped_vendev;</span><br><span> </span><br><span>       mapped_vendev = map_oprom_vendev(vendev);</span><br><span style="color: hsl(120, 100%, 40%);">+     mapped_vendev = map_oprom_vendev_nvidia(mapped_vendev);</span><br><span> </span><br><span>  if (!rom_header) {</span><br><span>           if (vendev != mapped_vendev) {</span><br><span>diff --git a/src/drivers/nvidia/Kconfig b/src/drivers/nvidia/Kconfig</span><br><span>new file mode 100644</span><br><span>index 0000000..7e49473</span><br><span>--- /dev/null</span><br><span>+++ b/src/drivers/nvidia/Kconfig</span><br><span>@@ -0,0 +1,4 @@</span><br><span style="color: hsl(120, 100%, 40%);">+config DRIVERS_NVIDIA</span><br><span style="color: hsl(120, 100%, 40%);">+     bool</span><br><span style="color: hsl(120, 100%, 40%);">+  help</span><br><span style="color: hsl(120, 100%, 40%);">+    Select this driver when using Nvidia graphics cards.</span><br><span>diff --git a/src/drivers/nvidia/Makefile.inc b/src/drivers/nvidia/Makefile.inc</span><br><span>new file mode 100644</span><br><span>index 0000000..59bb61b</span><br><span>--- /dev/null</span><br><span>+++ b/src/drivers/nvidia/Makefile.inc</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-$(CONFIG_DRIVERS_NVIDIA) += nvidia.c</span><br><span>diff --git a/src/drivers/nvidia/nvidia.c b/src/drivers/nvidia/nvidia.c</span><br><span>new file mode 100644</span><br><span>index 0000000..f43a18e</span><br><span>--- /dev/null</span><br><span>+++ b/src/drivers/nvidia/nvidia.c</span><br><span>@@ -0,0 +1,37 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2011 Chromium OS Authors</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2018 Patrick Rudolph <siro@das-labor.org></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/pci_rom.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * Some vga option roms are used for several chipsets but they only have one</span><br><span style="color: hsl(120, 100%, 40%);">+ * PCI ID in their header. If we encounter such an option rom, we need to do</span><br><span style="color: hsl(120, 100%, 40%);">+ * the mapping ourselves</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+u32 map_oprom_vendev_nvidia(u32 vendev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 new_vendev = vendev;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    switch (vendev) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case 0x10de0ffb:                /* Nvidia Quadro K2000M */</span><br><span style="color: hsl(120, 100%, 40%);">+    case 0x10de0ffc:                /* Nvidia Quadro K1000M */</span><br><span style="color: hsl(120, 100%, 40%);">+            new_vendev = 0x10de0ffc;        /* Nvidia Quadro K1000M */</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return new_vendev;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/src/include/device/pci_rom.h b/src/include/device/pci_rom.h</span><br><span>index a4aa52a..f84e888 100644</span><br><span>--- a/src/include/device/pci_rom.h</span><br><span>+++ b/src/include/device/pci_rom.h</span><br><span>@@ -46,5 +46,5 @@</span><br><span> void pci_rom_ssdt(struct device *device);</span><br><span> </span><br><span> u32 map_oprom_vendev(u32 vendev);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+u32 map_oprom_vendev_nvidia(u32 vendev);</span><br><span> #endif</span><br><span>diff --git a/src/mainboard/lenovo/t420/Kconfig b/src/mainboard/lenovo/t420/Kconfig</span><br><span>index 41c0d37..52e1d9f 100644</span><br><span>--- a/src/mainboard/lenovo/t420/Kconfig</span><br><span>+++ b/src/mainboard/lenovo/t420/Kconfig</span><br><span>@@ -25,6 +25,7 @@</span><br><span>      select GFX_GMA_INTERNAL_IS_LVDS</span><br><span>      select DRIVERS_LENOVO_HYBRID_GRAPHICS</span><br><span>        select INTEL_GMA_HAVE_VBT</span><br><span style="color: hsl(120, 100%, 40%);">+     select DRIVERS_NVIDIA</span><br><span> </span><br><span>    # Workaround for EC/KBC IRQ1.</span><br><span>        select SERIRQ_CONTINUOUS_MODE</span><br><span>diff --git a/src/mainboard/lenovo/t420s/Kconfig b/src/mainboard/lenovo/t420s/Kconfig</span><br><span>index 8eb241a..753032a 100644</span><br><span>--- a/src/mainboard/lenovo/t420s/Kconfig</span><br><span>+++ b/src/mainboard/lenovo/t420s/Kconfig</span><br><span>@@ -21,6 +21,7 @@</span><br><span>       select MAINBOARD_HAS_TPM1</span><br><span>    select DRIVERS_LENOVO_HYBRID_GRAPHICS</span><br><span>        select INTEL_GMA_HAVE_VBT</span><br><span style="color: hsl(120, 100%, 40%);">+     select DRIVERS_NVIDIA</span><br><span> </span><br><span>    # Workaround for EC/KBC IRQ1.</span><br><span>        select SERIRQ_CONTINUOUS_MODE</span><br><span>diff --git a/src/mainboard/lenovo/t430/Kconfig b/src/mainboard/lenovo/t430/Kconfig</span><br><span>index 242412f..57d0614 100644</span><br><span>--- a/src/mainboard/lenovo/t430/Kconfig</span><br><span>+++ b/src/mainboard/lenovo/t430/Kconfig</span><br><span>@@ -26,6 +26,8 @@</span><br><span>   select MAINBOARD_HAS_LIBGFXINIT</span><br><span>      select GFX_GMA_INTERNAL_IS_LVDS</span><br><span>      select INTEL_GMA_HAVE_VBT</span><br><span style="color: hsl(120, 100%, 40%);">+     select DRIVERS_NVIDIA</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> config MAINBOARD_DIR</span><br><span>  string</span><br><span>diff --git a/src/mainboard/lenovo/t520/Kconfig b/src/mainboard/lenovo/t520/Kconfig</span><br><span>index 79455e2..80976db 100644</span><br><span>--- a/src/mainboard/lenovo/t520/Kconfig</span><br><span>+++ b/src/mainboard/lenovo/t520/Kconfig</span><br><span>@@ -20,6 +20,7 @@</span><br><span>  select MAINBOARD_HAS_TPM1</span><br><span>    select DRIVERS_LENOVO_HYBRID_GRAPHICS</span><br><span>        select INTEL_GMA_HAVE_VBT if BOARD_LENOVO_T520</span><br><span style="color: hsl(120, 100%, 40%);">+        select DRIVERS_NVIDIA</span><br><span> </span><br><span>    # Workaround for EC/KBC IRQ1.</span><br><span>        select SERIRQ_CONTINUOUS_MODE</span><br><span>diff --git a/src/mainboard/lenovo/t530/Kconfig b/src/mainboard/lenovo/t530/Kconfig</span><br><span>index d107504..e394fd0 100644</span><br><span>--- a/src/mainboard/lenovo/t530/Kconfig</span><br><span>+++ b/src/mainboard/lenovo/t530/Kconfig</span><br><span>@@ -22,6 +22,7 @@</span><br><span>   select MAINBOARD_HAS_LIBGFXINIT</span><br><span>      select GFX_GMA_INTERNAL_IS_LVDS</span><br><span>      select INTEL_GMA_HAVE_VBT</span><br><span style="color: hsl(120, 100%, 40%);">+     select DRIVERS_NVIDIA</span><br><span> </span><br><span>    # Workaround for EC/KBC IRQ1.</span><br><span>        select SERIRQ_CONTINUOUS_MODE</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/29676">change 29676</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/29676"/><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: Idd85ed1fe9b5ffe4c9b7944d5360a2898dbb07f8 </div>
<div style="display:none"> Gerrit-Change-Number: 29676 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com> </div>