Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/29676
Change subject: drivers/nvidia: Add PCI mapped option rom driver ......................................................................
drivers/nvidia: Add PCI mapped option rom driver
Map the Nvidia PCI ids for easy PCI option rom integration.
Change-Id: Idd85ed1fe9b5ffe4c9b7944d5360a2898dbb07f8 Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com --- M src/device/pci_rom.c A src/drivers/nvidia/Kconfig A src/drivers/nvidia/Makefile.inc A src/drivers/nvidia/nvidia.c M src/include/device/pci_rom.h M src/mainboard/lenovo/t420/Kconfig M src/mainboard/lenovo/t420s/Kconfig M src/mainboard/lenovo/t430/Kconfig M src/mainboard/lenovo/t520/Kconfig M src/mainboard/lenovo/t530/Kconfig 10 files changed, 51 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/76/29676/1
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c index 65989d4..ecbe340 100644 --- a/src/device/pci_rom.c +++ b/src/device/pci_rom.c @@ -30,6 +30,7 @@
/* Rmodules don't like weak symbols. */ u32 __weak map_oprom_vendev(u32 vendev) { return vendev; } +u32 __weak map_oprom_vendev_nvidia(u32 vendev) { return vendev; }
struct rom_header *pci_rom_probe(struct device *dev) { @@ -43,6 +44,7 @@ u32 mapped_vendev;
mapped_vendev = map_oprom_vendev(vendev); + mapped_vendev = map_oprom_vendev_nvidia(mapped_vendev);
if (!rom_header) { if (vendev != mapped_vendev) { diff --git a/src/drivers/nvidia/Kconfig b/src/drivers/nvidia/Kconfig new file mode 100644 index 0000000..7e49473 --- /dev/null +++ b/src/drivers/nvidia/Kconfig @@ -0,0 +1,4 @@ +config DRIVERS_NVIDIA + bool + help + Select this driver when using Nvidia graphics cards. diff --git a/src/drivers/nvidia/Makefile.inc b/src/drivers/nvidia/Makefile.inc new file mode 100644 index 0000000..59bb61b --- /dev/null +++ b/src/drivers/nvidia/Makefile.inc @@ -0,0 +1 @@ +ramstage-$(CONFIG_DRIVERS_NVIDIA) += nvidia.c diff --git a/src/drivers/nvidia/nvidia.c b/src/drivers/nvidia/nvidia.c new file mode 100644 index 0000000..f43a18e --- /dev/null +++ b/src/drivers/nvidia/nvidia.c @@ -0,0 +1,37 @@ +/* + * This file is part of the coreboot project. + * + * Copyright (C) 2011 Chromium OS Authors + * Copyright (C) 2018 Patrick Rudolph siro@das-labor.org + * + * 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 <device/pci_rom.h> + +/** + * Some vga option roms are used for several chipsets but they only have one + * PCI ID in their header. If we encounter such an option rom, we need to do + * the mapping ourselves + */ +u32 map_oprom_vendev_nvidia(u32 vendev) +{ + u32 new_vendev = vendev; + + switch (vendev) { + case 0x10de0ffb: /* Nvidia Quadro K2000M */ + case 0x10de0ffc: /* Nvidia Quadro K1000M */ + new_vendev = 0x10de0ffc; /* Nvidia Quadro K1000M */ + break; + } + + return new_vendev; +} + diff --git a/src/include/device/pci_rom.h b/src/include/device/pci_rom.h index a4aa52a..f84e888 100644 --- a/src/include/device/pci_rom.h +++ b/src/include/device/pci_rom.h @@ -46,5 +46,5 @@ void pci_rom_ssdt(struct device *device);
u32 map_oprom_vendev(u32 vendev); - +u32 map_oprom_vendev_nvidia(u32 vendev); #endif diff --git a/src/mainboard/lenovo/t420/Kconfig b/src/mainboard/lenovo/t420/Kconfig index 41c0d37..52e1d9f 100644 --- a/src/mainboard/lenovo/t420/Kconfig +++ b/src/mainboard/lenovo/t420/Kconfig @@ -25,6 +25,7 @@ select GFX_GMA_INTERNAL_IS_LVDS select DRIVERS_LENOVO_HYBRID_GRAPHICS select INTEL_GMA_HAVE_VBT + select DRIVERS_NVIDIA
# Workaround for EC/KBC IRQ1. select SERIRQ_CONTINUOUS_MODE diff --git a/src/mainboard/lenovo/t420s/Kconfig b/src/mainboard/lenovo/t420s/Kconfig index 8eb241a..753032a 100644 --- a/src/mainboard/lenovo/t420s/Kconfig +++ b/src/mainboard/lenovo/t420s/Kconfig @@ -21,6 +21,7 @@ select MAINBOARD_HAS_TPM1 select DRIVERS_LENOVO_HYBRID_GRAPHICS select INTEL_GMA_HAVE_VBT + select DRIVERS_NVIDIA
# Workaround for EC/KBC IRQ1. select SERIRQ_CONTINUOUS_MODE diff --git a/src/mainboard/lenovo/t430/Kconfig b/src/mainboard/lenovo/t430/Kconfig index 242412f..57d0614 100644 --- a/src/mainboard/lenovo/t430/Kconfig +++ b/src/mainboard/lenovo/t430/Kconfig @@ -26,6 +26,8 @@ select MAINBOARD_HAS_LIBGFXINIT select GFX_GMA_INTERNAL_IS_LVDS select INTEL_GMA_HAVE_VBT + select DRIVERS_NVIDIA +
config MAINBOARD_DIR string diff --git a/src/mainboard/lenovo/t520/Kconfig b/src/mainboard/lenovo/t520/Kconfig index 79455e2..80976db 100644 --- a/src/mainboard/lenovo/t520/Kconfig +++ b/src/mainboard/lenovo/t520/Kconfig @@ -20,6 +20,7 @@ select MAINBOARD_HAS_TPM1 select DRIVERS_LENOVO_HYBRID_GRAPHICS select INTEL_GMA_HAVE_VBT if BOARD_LENOVO_T520 + select DRIVERS_NVIDIA
# Workaround for EC/KBC IRQ1. select SERIRQ_CONTINUOUS_MODE diff --git a/src/mainboard/lenovo/t530/Kconfig b/src/mainboard/lenovo/t530/Kconfig index d107504..e394fd0 100644 --- a/src/mainboard/lenovo/t530/Kconfig +++ b/src/mainboard/lenovo/t530/Kconfig @@ -22,6 +22,7 @@ select MAINBOARD_HAS_LIBGFXINIT select GFX_GMA_INTERNAL_IS_LVDS select INTEL_GMA_HAVE_VBT + select DRIVERS_NVIDIA
# Workaround for EC/KBC IRQ1. select SERIRQ_CONTINUOUS_MODE