summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/data/grub/cfg/default.config17
-rw-r--r--config/data/grub/cfg/nvme.config300
-rw-r--r--config/data/grub/cfg/xhci.config (renamed from config/data/grub/cfg/xhci_nvme.config)0
-rw-r--r--config/data/grub/mkhelper.cfg2
-rw-r--r--[-rwxr-xr-x]config/data/grub/module/default14
-rwxr-xr-xconfig/data/grub/module/nvme164
-rwxr-xr-xconfig/data/grub/module/xhci (renamed from config/data/grub/module/xhci_nvme)15
-rw-r--r--config/module/coreboot/dell3040micro_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/dell3050micro_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/dell3050microsecure_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/dell5050sff_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/dell7010sff_12mb/target.cfg4
-rw-r--r--config/module/coreboot/dell780mt_8mb/target.cfg4
-rw-r--r--config/module/coreboot/dell780mt_truncate_8mb/target.cfg4
-rw-r--r--config/module/coreboot/dell780usff_8mb/target.cfg4
-rw-r--r--config/module/coreboot/dell780usff_truncate_8mb/target.cfg4
-rw-r--r--config/module/coreboot/dell9020mt_nri_12mb/target.cfg4
-rw-r--r--config/module/coreboot/dell9020sff_nri_12mb/target.cfg4
-rw-r--r--config/module/coreboot/e7240_12mb/target.cfg4
-rw-r--r--config/module/coreboot/g43t_am3/target.cfg4
-rw-r--r--config/module/coreboot/g43t_am3_16mb/target.cfg4
-rw-r--r--config/module/coreboot/ga_g41m_es2l/target.cfg4
-rw-r--r--config/module/coreboot/hp8200sff_4mb/target.cfg4
-rw-r--r--config/module/coreboot/hp8200sff_8mb/target.cfg4
-rw-r--r--config/module/coreboot/hp820g2_12mb/target.cfg4
-rw-r--r--config/module/coreboot/hp8300cmt_16mb/target.cfg4
-rw-r--r--config/module/coreboot/hppro3500series_8mb/target.cfg4
-rw-r--r--config/module/coreboot/kcma_d8_16mb/target.cfg4
-rw-r--r--config/module/coreboot/kcma_d8_2mb/target.cfg4
-rw-r--r--config/module/coreboot/kgpe_d16_16mb/target.cfg4
-rw-r--r--config/module/coreboot/kgpe_d16_2mb/target.cfg4
-rw-r--r--config/module/coreboot/q45t_am/target.cfg4
-rw-r--r--config/module/coreboot/supermicro_x11ssh_f_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/t1650_12mb/target.cfg4
-rw-r--r--config/module/coreboot/t1700mt_bmrc_12mb/target.cfg4
-rw-r--r--config/module/coreboot/t1700sff_bmrc_12mb/target.cfg4
-rw-r--r--config/module/coreboot/t440plibremrc_12mb/target.cfg4
-rw-r--r--config/module/coreboot/t440plibremrc_4mcbfs_12mb/target.cfg4
-rw-r--r--config/module/coreboot/t480_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/t480s_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/t580_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/w541_12mb/target.cfg4
-rw-r--r--config/module/coreboot/x270_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/x280_vfsp_16mb/target.cfg4
-rw-r--r--config/module/coreboot/x2e_n150/target.cfg4
-rw-r--r--config/module/grub/default/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch4
-rw-r--r--config/module/grub/default/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch6
-rw-r--r--config/module/grub/default/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch4
-rw-r--r--config/module/grub/default/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch4
-rw-r--r--config/module/grub/default/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch10
-rw-r--r--config/module/grub/default/patches/0006-don-t-print-error-if-module-not-found.patch4
-rw-r--r--config/module/grub/default/patches/0007-don-t-print-empty-error-messages.patch8
-rw-r--r--config/module/grub/default/patches/0008-kern-coreboot-mmap-Map-to-reserved.patch4
-rw-r--r--config/module/grub/default/patches/0009-Revert-configure-Check-linker-for-image-base-support.patch70
-rw-r--r--config/module/grub/default/patches/0010-Revert-configure-Print-a-more-helpful-error-if-autoc.patch30
-rw-r--r--config/module/grub/default/patches/0010-bootstrap-Don-t-download-po-files.patch (renamed from config/module/grub/xhci_nvme/patches/0023-bootstrap-Don-t-download-po-files.patch)4
-rw-r--r--config/module/grub/default/patches/0011-force-disable-werror.patch (renamed from config/module/grub/default/patches/0012-force-disable-werror.patch)76
-rw-r--r--config/module/grub/default/target.cfg2
-rw-r--r--config/module/grub/nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch90
-rw-r--r--config/module/grub/nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch25
-rw-r--r--config/module/grub/nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch107
-rw-r--r--config/module/grub/nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch38
-rw-r--r--config/module/grub/nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch102
-rw-r--r--config/module/grub/nvme/patches/0006-don-t-print-error-if-module-not-found.patch34
-rw-r--r--config/module/grub/nvme/patches/0007-don-t-print-empty-error-messages.patch31
-rw-r--r--config/module/grub/nvme/patches/0008-Add-native-NVMe-driver-based-on-SeaBIOS.patch1074
-rw-r--r--config/module/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch70
-rw-r--r--config/module/grub/nvme/patches/0011-Revert-configure-Print-a-more-helpful-error-if-autoc.patch30
-rw-r--r--config/module/grub/nvme/patches/0012-bootstrap-Don-t-download-po-files.patch91
-rw-r--r--config/module/grub/nvme/patches/0013-force-disable-werror.patch602
-rw-r--r--config/module/grub/nvme/target.cfg5
-rw-r--r--config/module/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch (renamed from config/module/grub/xhci_nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch)2
-rw-r--r--config/module/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch (renamed from config/module/grub/xhci_nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch)4
-rw-r--r--config/module/grub/xhci/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch (renamed from config/module/grub/xhci_nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch)2
-rw-r--r--config/module/grub/xhci/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch (renamed from config/module/grub/xhci_nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch)2
-rw-r--r--config/module/grub/xhci/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch (renamed from config/module/grub/xhci_nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch)8
-rw-r--r--config/module/grub/xhci/patches/0006-don-t-print-error-if-module-not-found.patch (renamed from config/module/grub/xhci_nvme/patches/0006-don-t-print-error-if-module-not-found.patch)2
-rw-r--r--config/module/grub/xhci/patches/0007-don-t-print-empty-error-messages.patch (renamed from config/module/grub/xhci_nvme/patches/0007-don-t-print-empty-error-messages.patch)6
-rw-r--r--config/module/grub/xhci/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch (renamed from config/module/grub/xhci_nvme/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch)6
-rw-r--r--config/module/grub/xhci/patches/0009-usb-Add-enum-for-xHCI.patch (renamed from config/module/grub/xhci_nvme/patches/0009-usb-Add-enum-for-xHCI.patch)2
-rw-r--r--config/module/grub/xhci/patches/0010-usbtrans-Set-default-maximum-packet-size.patch (renamed from config/module/grub/xhci_nvme/patches/0010-usbtrans-Set-default-maximum-packet-size.patch)2
-rw-r--r--config/module/grub/xhci/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch (renamed from config/module/grub/xhci_nvme/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch)4
-rw-r--r--config/module/grub/xhci/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch (renamed from config/module/grub/xhci_nvme/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch)2
-rw-r--r--config/module/grub/xhci/patches/0013-grub-core-bus-usb-Add-xhci-support.patch (renamed from config/module/grub/xhci_nvme/patches/0013-grub-core-bus-usb-Add-xhci-support.patch)6
-rw-r--r--config/module/grub/xhci/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch (renamed from config/module/grub/xhci_nvme/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch)2
-rw-r--r--config/module/grub/xhci/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch (renamed from config/module/grub/xhci_nvme/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch)2
-rw-r--r--config/module/grub/xhci/patches/0016-xhci-fix-port-indexing.patch (renamed from config/module/grub/xhci_nvme/patches/0016-xhci-fix-port-indexing.patch)2
-rw-r--r--config/module/grub/xhci/patches/0017-xhci-configure-TT-for-non-root-hubs.patch (renamed from config/module/grub/xhci_nvme/patches/0017-xhci-configure-TT-for-non-root-hubs.patch)2
-rw-r--r--config/module/grub/xhci/patches/0018-Fix-compilation-on-x86_64.patch (renamed from config/module/grub/xhci_nvme/patches/0018-Fix-compilation-on-x86_64.patch)2
-rw-r--r--config/module/grub/xhci/patches/0019-kern-coreboot-mmap-Map-to-reserved.patch (renamed from config/module/grub/nvme/patches/0009-kern-coreboot-mmap-Map-to-reserved.patch)4
-rw-r--r--config/module/grub/xhci/patches/0020-bootstrap-Don-t-download-po-files.patch (renamed from config/module/grub/default/patches/0011-bootstrap-Don-t-download-po-files.patch)4
-rw-r--r--config/module/grub/xhci/patches/0021-force-disable-werror.patch (renamed from config/module/grub/xhci_nvme/patches/0024-force-disable-werror.patch)78
-rw-r--r--config/module/grub/xhci/target.cfg5
-rw-r--r--config/module/grub/xhci_nvme/patches/0019-Add-native-NVMe-driver-based-on-SeaBIOS.patch1074
-rw-r--r--config/module/grub/xhci_nvme/patches/0020-kern-coreboot-mmap-Map-to-reserved.patch37
-rw-r--r--config/module/grub/xhci_nvme/patches/0021-Revert-configure-Check-linker-for-image-base-support.patch70
-rw-r--r--config/module/grub/xhci_nvme/patches/0022-Revert-configure-Print-a-more-helpful-error-if-autoc.patch30
-rw-r--r--config/module/grub/xhci_nvme/target.cfg5
-rw-r--r--config/submodule/grub/xhci/ast.po/module.cfg (renamed from config/submodule/grub/nvme/ast.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ca.po/module.cfg (renamed from config/submodule/grub/nvme/ca.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/da.po/module.cfg (renamed from config/submodule/grub/nvme/da.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/de.po/module.cfg (renamed from config/submodule/grub/nvme/de.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/eo.po/module.cfg (renamed from config/submodule/grub/nvme/eo.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/es.po/module.cfg (renamed from config/submodule/grub/nvme/es.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/fi.po/module.cfg (renamed from config/submodule/grub/nvme/fi.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/fr.po/module.cfg (renamed from config/submodule/grub/nvme/fr.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/gl.po/module.cfg (renamed from config/submodule/grub/nvme/gl.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/gnulib/module.cfg (renamed from config/submodule/grub/nvme/gnulib/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/he.po/module.cfg (renamed from config/submodule/grub/nvme/he.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/hr.po/module.cfg (renamed from config/submodule/grub/nvme/hr.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/hu.po/module.cfg (renamed from config/submodule/grub/nvme/hu.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/id.po/module.cfg (renamed from config/submodule/grub/nvme/id.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/it.po/module.cfg (renamed from config/submodule/grub/nvme/it.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ja.po/module.cfg (renamed from config/submodule/grub/nvme/ja.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ka.po/module.cfg (renamed from config/submodule/grub/nvme/ka.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ko.po/module.cfg (renamed from config/submodule/grub/nvme/ko.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/lg.po/module.cfg (renamed from config/submodule/grub/nvme/lg.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/lt.po/module.cfg (renamed from config/submodule/grub/nvme/lt.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/module.list (renamed from config/submodule/grub/nvme/module.list)0
-rw-r--r--config/submodule/grub/xhci/nb.po/module.cfg (renamed from config/submodule/grub/nvme/nb.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/nl.po/module.cfg (renamed from config/submodule/grub/nvme/nl.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/pa.po/module.cfg (renamed from config/submodule/grub/nvme/pa.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/pl.po/module.cfg (renamed from config/submodule/grub/nvme/pl.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/pt.po/module.cfg (renamed from config/submodule/grub/nvme/pt.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/pt_BR.po/module.cfg (renamed from config/submodule/grub/nvme/pt_BR.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ro.po/module.cfg (renamed from config/submodule/grub/nvme/ro.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/ru.po/module.cfg (renamed from config/submodule/grub/nvme/ru.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/sl.po/module.cfg (renamed from config/submodule/grub/nvme/sl.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/sr.po/module.cfg (renamed from config/submodule/grub/nvme/sr.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/sv.po/module.cfg (renamed from config/submodule/grub/nvme/sv.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/tr.po/module.cfg (renamed from config/submodule/grub/nvme/tr.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/uk.po/module.cfg (renamed from config/submodule/grub/nvme/uk.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/vi.po/module.cfg (renamed from config/submodule/grub/nvme/vi.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/zh_CN.po/module.cfg (renamed from config/submodule/grub/nvme/zh_CN.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci/zh_TW.po/module.cfg (renamed from config/submodule/grub/nvme/zh_TW.po/module.cfg)0
-rw-r--r--config/submodule/grub/xhci_nvme/ast.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ca.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/da.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/de.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/eo.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/es.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/fi.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/fr.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/gl.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/gnulib/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/he.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/hr.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/hu.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/id.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/it.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ja.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ka.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ko.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/lg.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/lt.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/module.list36
-rw-r--r--config/submodule/grub/xhci_nvme/nb.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/nl.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/pa.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/pl.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/pt.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/pt_BR.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ro.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/ru.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/sl.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/sr.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/sv.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/tr.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/uk.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/vi.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/zh_CN.po/module.cfg5
-rw-r--r--config/submodule/grub/xhci_nvme/zh_TW.po/module.cfg5
172 files changed, 259 insertions, 4511 deletions
diff --git a/config/data/grub/cfg/default.config b/config/data/grub/cfg/default.config
index c454965c..33ce3a9a 100644
--- a/config/data/grub/cfg/default.config
+++ b/config/data/grub/cfg/default.config
@@ -55,7 +55,7 @@ if [ -f (cbfsdisk)/timeout.cfg ]; then
else
set timeout=8
fi
-set grub_scan_disk="ahci ata"
+set grub_scan_disk="nvme ahci ata"
if [ -f (cbfsdisk)/scan.cfg ]; then
source (cbfsdisk)/scan.cfg
fi
@@ -88,11 +88,17 @@ function search_grub {
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
if [ "${1}" != "nvme" ]; then
try_user_config "(${1}${i},${part})"
+ else
+ # TODO: do we care about other namesapces
+ try_user_config "(nvme${i}n1,${part})"
fi
done
if [ "${1}" != "nvme" ]; then
# raw devices e.g. (ahci0) instead of (ahci0,1)
try_user_config "(${1}${i})"
+ else
+ # TODO: do we care about other namesapces
+ try_user_config "(nvme${i}n1)"
fi
done
echo # Insert newline
@@ -118,11 +124,17 @@ function search_isolinux {
for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
if [ "${1}" != "nvme" ]; then
try_isolinux_config "(${1}${i},${part})"
+ else
+ # TODO: see above
+ try_isolinux_config "(nvme${i}n1,${part})"
fi
done
if [ "${1}" != "nvme" ]; then
# raw devices e.g. (usb0) instead of (usb0,1)
try_isolinux_config "(${1}${i})"
+ else
+ # TODO: do we care about other namesapces
+ try_isolinux_config "(nvme${i}n1)"
fi
done
echo # Insert newline
@@ -213,6 +225,9 @@ menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]' --hotkey='a'
menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' {
search_bootcfg ata
}
+menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on NVMe [e]' --hotkey='e' {
+ search_bootcfg nvme
+}
if [ -f (cbfsdisk)/grub.cfg ]; then
menuentry 'Load configuration (grub.cfg) in CBFS [t]' --hotkey='t' {
set root='(cbfsdisk)'
diff --git a/config/data/grub/cfg/nvme.config b/config/data/grub/cfg/nvme.config
deleted file mode 100644
index 33ce3a9a..00000000
--- a/config/data/grub/cfg/nvme.config
+++ /dev/null
@@ -1,300 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-# Copyright (C) 2014-2016,2020-2021,2023-2025 Leah Rowe <leah@libreboot.org>
-# Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
-
-set prefix=(memdisk)/boot/grub
-
-insmod at_keyboard
-insmod usb_keyboard
-insmod nativedisk
-insmod ehci
-insmod ohci
-insmod uhci
-insmod usb
-insmod usbms
-insmod regexp
-
-terminal_input --append at_keyboard
-terminal_input --append usb_keyboard
-terminal_output --append cbmemc
-
-# User interface overrides wherever "keystatus" is supported
-# Keep SHIFT key pressed before powering on to disable graphics
-if keystatus --shift; then
- terminal_output --append vga_text
-else
- gfxpayload=keep
- terminal_output --append gfxterm
-
- for dt in cbfsdisk memdisk; do
- for it in png jpg; do
- if [ -f (${dt})/background.${it} ]; then
- insmod ${it}
- background_image (${dt})/background.${it}
- fi
- done
- done
-fi
-
-# Keep CTRL pressed to enable default serial terminal (COM1 or the like)
-if keystatus --ctrl; then
- serial
- terminal_input --append serial
- terminal_output --append serial
-fi
-
-# Keep ALT pressed to enable spkmodem
-if keystatus --alt; then
- terminal_output --append spkmodem
-fi
-
-
-set default="0"
-if [ -f (cbfsdisk)/timeout.cfg ]; then
- source (cbfsdisk)/timeout.cfg
-else
- set timeout=8
-fi
-set grub_scan_disk="nvme ahci ata"
-if [ -f (cbfsdisk)/scan.cfg ]; then
- source (cbfsdisk)/scan.cfg
-fi
-
-if [ -f (cbfsdisk)/keymap.gkb ]; then
- keymap (cbfsdisk)/keymap.gkb
-fi
-
-function really_try_user_config {
- set root="${1}"
-
- if [ -f /"${2}"/grub.cfg ]; then
- unset superusers
- configfile /"${2}"/grub.cfg
- fi
-}
-
-function try_user_config {
- # The @/... entries are for cases where the BTRFS filesystem is being used
- for dir in grub boot/grub @/grub @/boot/grub grub2 boot/grub2 @/grub2 @/boot/grub2 boot @/boot; do
- really_try_user_config "${1}" "${dir}"
- done
- for dir in ubuntu debian redhat; do
- really_try_user_config "${1}" "EFI/${dir}"
- done
-}
-function search_grub {
- echo -n "Attempting to load grub.cfg from '${1}' devices"
- for i in 0 1 2 3 4 5 6 7 8; do
- for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
- if [ "${1}" != "nvme" ]; then
- try_user_config "(${1}${i},${part})"
- else
- # TODO: do we care about other namesapces
- try_user_config "(nvme${i}n1,${part})"
- fi
- done
- if [ "${1}" != "nvme" ]; then
- # raw devices e.g. (ahci0) instead of (ahci0,1)
- try_user_config "(${1}${i})"
- else
- # TODO: do we care about other namesapces
- try_user_config "(nvme${i}n1)"
- fi
- done
- echo # Insert newline
-}
-
-function try_isolinux_config {
- set root="${1}"
- for dir in '' /boot /EFI /@ /@/boot; do
- if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
- syslinux_configfile -i "${dir}"/isolinux/isolinux.cfg
- elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
- syslinux_configfile -s "${dir}"/syslinux/syslinux.cfg
- elif [ -f "${dir}"/syslinux/extlinux.conf ]; then
- syslinux_configfile -s "${dir}"/syslinux/extlinux.conf
- elif [ -f "${dir}"/extlinux/extlinux.conf ]; then
- syslinux_configfile -s "${dir}"/extlinux/extlinux.conf
- fi
- done
-}
-function search_isolinux {
- echo "\nAttempting to parse iso/sys/extlinux config from '${1}' devices"
- for i in 0 1 2 3 4 5 6 7 8; do
- for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
- if [ "${1}" != "nvme" ]; then
- try_isolinux_config "(${1}${i},${part})"
- else
- # TODO: see above
- try_isolinux_config "(nvme${i}n1,${part})"
- fi
- done
- if [ "${1}" != "nvme" ]; then
- # raw devices e.g. (usb0) instead of (usb0,1)
- try_isolinux_config "(${1}${i})"
- else
- # TODO: do we care about other namesapces
- try_isolinux_config "(nvme${i}n1)"
- fi
- done
- echo # Insert newline
-}
-function try_bootcfg {
- try_user_config "${1}"
- try_isolinux_config "${1}"
-}
-function search_bootcfg {
- search_grub "${1}"
- search_isolinux "${1}"
-}
-menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o' {
-
- for grub_disk in ${grub_scan_disk}; do
- search_bootcfg ${grub_disk}
- done
-
- # grub device enumeration is very slow, so checks are hardcoded
-
- raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9"
-
- # in practise, doing multiple redundant checks is perfectly fast
- # TODO: optimize grub itself, and use */? here for everything
-
- for vol in ${raidvol} ; do
- try_bootcfg "${vol}"
- done
-
- unset bootdev
- for grub_disk in ${grub_scan_disk}; do
- for i in 0 1 2 3 4 5 6 7 8; do
- for part in 1 2 3 4 5 6 7 8 9 10 11 12; do
- if [ "${grub_disk}" = "ahci" ]; then
- bootdev="${bootdev} (ahci${i},${part})"
- elif [ "${grub_disk}" = "ata" ]; then
- bootdev="${bootdev} (ata${i},${part})"
- elif [ "${grub_disk}" = "nvme" ]; then
- # TODO: do we care about other namesapces
- bootdev="${bootdev} (nvme${i}n1,${part})"
- fi
- done
- done
- done
-
- set pager=0
- echo -n "Attempting to unlock encrypted volumes"
- for dev in ${bootdev} ${raidvol}; do
- if cryptomount "${dev}" ; then break ; fi
- done
- set pager=1
- echo
-
- search_bootcfg crypto
-
- lvmvol=""
-
- # after cryptomount, lvm volumes might be available
- # using * is slow on some machines, but we use it here,
- # just once. in so doing, we find every lvm volume
- for vol in (*); do
- if regexp ^\\(lvm/ $vol; then
- lvmvol="${lvmvol} ${vol}"
- try_bootcfg "${vol}"
- fi
- done
-
- # user might have put luks inside lvm
- set pager=0
- echo "Attempting to unlock encrypted LVMs"
- for vol in ${lvmvol}; do
- cryptomount "$vol"
- done
- set pager=1
- echo
-
- search_bootcfg crypto
-
- true # Prevent pager requiring to accept each line instead of whole screen
-}
-
-menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on USB [s]' --hotkey='s' {
- search_bootcfg usb
-}
-menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]' --hotkey='a' {
- search_bootcfg ahci
-}
-menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' {
- search_bootcfg ata
-}
-menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on NVMe [e]' --hotkey='e' {
- search_bootcfg nvme
-}
-if [ -f (cbfsdisk)/grub.cfg ]; then
-menuentry 'Load configuration (grub.cfg) in CBFS [t]' --hotkey='t' {
- set root='(cbfsdisk)'
- if [ -f /grub.cfg ]; then
- configfile /grub.cfg
- fi
-}
-fi
-if [ -f (cbfsdisk)/grubtest.cfg ]; then
-menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey='t' {
- set root='(cbfsdisk)'
- if [ -f /grubtest.cfg ]; then
- configfile /grubtest.cfg
- fi
-}
-fi
-if [ -f (cbfsdisk)/seabios.elf ]; then
-menuentry 'Load SeaBIOS [b]' --hotkey='b' {
- set root='cbfsdisk'
- chainloader /seabios.elf
-}
-fi
-if [ -f (cbfsdisk)/img/grub2 ]; then
-menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
- set root='cbfsdisk'
- chainloader /fallback/payload
-}
-fi
-menuentry 'Poweroff [p]' --hotkey='p' {
- halt
-}
-menuentry 'Reboot [r]' --hotkey='r' {
- reboot
-}
-if [ -f (cbfsdisk)/img/memtest ]; then
-menuentry 'Load MemTest86+ [m]' --hotkey='m' {
- set root='cbfsdisk'
- chainloader /img/memtest
-}
-fi
-
-submenu 'Other [z]' --hotkey='z' {
- menuentry 'Enable default serial terminal [s]' --hotkey='s' {
- serial
- terminal_input --append serial
- terminal_output --append serial
- }
-
- menuentry 'Disable default serial terminal' {
- terminal_input --remove serial
- terminal_output --remove serial
- }
-
- menuentry 'Enable gfxterm' {
- terminal_output --append gfxterm
- terminal_output --remove vga_text
- }
- menuentry 'Disable gfxterm [g]' --hotkey='g' {
- terminal_output --remove gfxterm
- terminal_output --append vga_text
- }
-
- menuentry 'Enable spkmodem [a]' --hotkey='a' {
- terminal_output --append spkmodem
- }
-
- menuentry 'Disable spkmodem [z]' --hotkey='z' {
- terminal_output --remove spkmodem
- }
-}
diff --git a/config/data/grub/cfg/xhci_nvme.config b/config/data/grub/cfg/xhci.config
index dbcae070..dbcae070 100644
--- a/config/data/grub/cfg/xhci_nvme.config
+++ b/config/data/grub/cfg/xhci.config
diff --git a/config/data/grub/mkhelper.cfg b/config/data/grub/mkhelper.cfg
index 9e8dee58..dca4bf3d 100644
--- a/config/data/grub/mkhelper.cfg
+++ b/config/data/grub/mkhelper.cfg
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later
# can be overridden per-tree
-url="git://git.savannah.gnu.org/grub.git"
+url="https://gitlab.freedesktop.org/gnu-grub/grub.git"
bkup_url="https://codeberg.org/libreboot/grub"
bootstrapargs="--gnulib-srcdir=gnulib/ --no-git"
diff --git a/config/data/grub/module/default b/config/data/grub/module/default
index 39030e2a..78ee52fe 100755..100644
--- a/config/data/grub/module/default
+++ b/config/data/grub/module/default
@@ -33,8 +33,8 @@ configfile \
cpio \
cpio_be \
crc64 \
-crypto_cipher_mode_test \
crypto \
+crypto_cipher_mode_test \
cryptodisk \
diskfilter \
echo \
@@ -42,6 +42,7 @@ ehci \
eval \
exfat \
elf \
+extcmd \
ext2 \
fat \
functional_test \
@@ -60,6 +61,7 @@ gcry_kdf \
gcry_keccak \
gcry_md4 \
gcry_md5 \
+gcry_pubkey_dilithium \
gcry_rfc2268 \
gcry_rijndael \
gcry_rmd160 \
@@ -83,6 +85,7 @@ iorw \
iso9660 \
jpeg \
json \
+key_protector \
keylayouts \
keystatus \
linux \
@@ -102,23 +105,31 @@ mdraid09 \
mdraid09_be \
mdraid1x \
memdisk \
+memmove_bench \
memrw \
+mfa \
minicmd \
mmap \
+mpi \
+mldsa_test \
multiboot \
multiboot2 \
nativedisk \
+net \
normal \
ntfs \
+nvme \
ohci \
part_bsd \
part_dfly \
part_gpt \
part_msdos \
password \
+password_argon2 \
password_pbkdf2 \
pata \
pbkdf2 \
+pci \
pcidump \
pgp \
play \
@@ -154,6 +165,7 @@ ufs2 \
usb \
usb_keyboard \
usbms \
+virtionet \
xfs \
xzio \
zfs \
diff --git a/config/data/grub/module/nvme b/config/data/grub/module/nvme
deleted file mode 100755
index 4b832983..00000000
--- a/config/data/grub/module/nvme
+++ /dev/null
@@ -1,164 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# Install modules (installed, but not automatically loaded)
-grub_install_modules=" \
-hexdump \
-newc \
-odc \
-usbserial_common \
-usbserial_ftdi \
-usbserial_pl2303 \
-usbserial_usbdebug \
-video_colors \
-"
-# Modules (and always loaded)
-grub_modules=" \
-acpi \
-ahci \
-at_keyboard \
-all_video \
-ata \
-bitmap \
-bitmap_scale \
-boot \
-bsd \
-btrfs \
-cat \
-cbfs \
-cbls \
-cbmemc \
-cbtime \
-chain \
-configfile \
-cpio \
-cpio_be \
-crc64 \
-crypto_cipher_mode_test \
-crypto \
-cryptodisk \
-diskfilter \
-echo \
-ehci \
-eval \
-exfat \
-elf \
-ext2 \
-fat \
-functional_test \
-f2fs \
-gcry_arcfour \
-gcry_blake2 \
-gcry_blowfish \
-gcry_camellia \
-gcry_cast5 \
-gcry_crc \
-gcry_des \
-gcry_dsa \
-gcry_hwfeatures \
-gcry_idea \
-gcry_kdf \
-gcry_keccak \
-gcry_md4 \
-gcry_md5 \
-gcry_rfc2268 \
-gcry_rijndael \
-gcry_rmd160 \
-gcry_rsa \
-gcry_seed \
-gcry_serpent \
-gcry_sha1 \
-gcry_sha256 \
-gcry_sha512 \
-gcry_tiger \
-gcry_twofish \
-gcry_whirlpool \
-geli \
-gfxmenu \
-gfxterm_background \
-gzio \
-hashsum \
-halt \
-help \
-iorw \
-iso9660 \
-jpeg \
-json \
-keylayouts \
-keystatus \
-linux \
-linux16 \
-loadenv \
-loopback \
-ls \
-lsacpi \
-lsmmap \
-lspci \
-luks \
-luks2 \
-argon2 \
-lvm \
-lzopio \
-mdraid09 \
-mdraid09_be \
-mdraid1x \
-memdisk \
-memrw \
-minicmd \
-mmap \
-multiboot \
-multiboot2 \
-nativedisk \
-normal \
-ntfs \
-nvme \
-ohci \
-part_bsd \
-part_dfly \
-part_gpt \
-part_msdos \
-password \
-password_pbkdf2 \
-pata \
-pbkdf2 \
-pcidump \
-pgp \
-play \
-png \
-procfs \
-pubkey \
-raid5rec \
-raid6rec \
-read \
-reboot \
-regexp \
-romfs \
-scsi \
-search \
-search_fs_file \
-search_fs_uuid \
-search_label \
-serial \
-syslinuxcfg \
-setjmp \
-setpci \
-spkmodem \
-squash4 \
-sleep \
-tar \
-test \
-true \
-uhci \
-udf \
-ufs1 \
-ufs1_be \
-ufs2 \
-usb \
-usb_keyboard \
-usbms \
-xfs \
-xzio \
-zfs \
-zfscrypt \
-zfsinfo \
-zstd \
-"
diff --git a/config/data/grub/module/xhci_nvme b/config/data/grub/module/xhci
index 616fca40..ef0991aa 100755
--- a/config/data/grub/module/xhci_nvme
+++ b/config/data/grub/module/xhci
@@ -34,8 +34,8 @@ configfile \
cpio \
cpio_be \
crc64 \
-crypto_cipher_mode_test \
crypto \
+crypto_cipher_mode_test \
cryptodisk \
diskfilter \
echo \
@@ -43,6 +43,7 @@ ehci \
eval \
exfat \
elf \
+extcmd \
ext2 \
fat \
functional_test \
@@ -61,6 +62,7 @@ gcry_kdf \
gcry_keccak \
gcry_md4 \
gcry_md5 \
+gcry_pubkey_dilithium \
gcry_rfc2268 \
gcry_rijndael \
gcry_rmd160 \
@@ -84,6 +86,7 @@ iorw \
iso9660 \
jpeg \
json \
+key_protector \
keylayouts \
keystatus \
linux \
@@ -103,12 +106,17 @@ mdraid09 \
mdraid09_be \
mdraid1x \
memdisk \
+memmove_bench \
memrw \
+mfa \
minicmd \
mmap \
+mpi \
+mldsa_test \
multiboot \
multiboot2 \
nativedisk \
+net \
normal \
ntfs \
nvme \
@@ -118,15 +126,17 @@ part_dfly \
part_gpt \
part_msdos \
password \
+password_argon2 \
password_pbkdf2 \
pata \
pbkdf2 \
+pci \
pcidump \
pgp \
play \
png \
-pubkey \
procfs \
+pubkey \
raid5rec \
raid6rec \
read \
@@ -156,6 +166,7 @@ ufs2 \
usb \
usb_keyboard \
usbms \
+virtionet \
xfs \
xzio \
zfs \
diff --git a/config/module/coreboot/dell3040micro_vfsp_16mb/target.cfg b/config/module/coreboot/dell3040micro_vfsp_16mb/target.cfg
index 43dc1005..aebe068d 100644
--- a/config/module/coreboot/dell3040micro_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/dell3040micro_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="3040micro"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
diff --git a/config/module/coreboot/dell3050micro_vfsp_16mb/target.cfg b/config/module/coreboot/dell3050micro_vfsp_16mb/target.cfg
index fb975404..eb68286f 100644
--- a/config/module/coreboot/dell3050micro_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/dell3050micro_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="3050micro"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
diff --git a/config/module/coreboot/dell3050microsecure_vfsp_16mb/target.cfg b/config/module/coreboot/dell3050microsecure_vfsp_16mb/target.cfg
index 83976dc2..7e7d9f4c 100644
--- a/config/module/coreboot/dell3050microsecure_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/dell3050microsecure_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="3050micro"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_grubsea="y"
diff --git a/config/module/coreboot/dell5050sff_vfsp_16mb/target.cfg b/config/module/coreboot/dell5050sff_vfsp_16mb/target.cfg
index 6fd7f8d2..24eed0bb 100644
--- a/config/module/coreboot/dell5050sff_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/dell5050sff_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="5050sff"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
diff --git a/config/module/coreboot/dell7010sff_12mb/target.cfg b/config/module/coreboot/dell7010sff_12mb/target.cfg
index 9d31c1a3..e16afc53 100644
--- a/config/module/coreboot/dell7010sff_12mb/target.cfg
+++ b/config/module/coreboot/dell7010sff_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="t1650"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/dell780mt_8mb/target.cfg b/config/module/coreboot/dell780mt_8mb/target.cfg
index 90fe2548..832edb79 100644
--- a/config/module/coreboot/dell780mt_8mb/target.cfg
+++ b/config/module/coreboot/dell780mt_8mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci ata"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/dell780mt_truncate_8mb/target.cfg b/config/module/coreboot/dell780mt_truncate_8mb/target.cfg
index 90fe2548..832edb79 100644
--- a/config/module/coreboot/dell780mt_truncate_8mb/target.cfg
+++ b/config/module/coreboot/dell780mt_truncate_8mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci ata"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/dell780usff_8mb/target.cfg b/config/module/coreboot/dell780usff_8mb/target.cfg
index 90fe2548..832edb79 100644
--- a/config/module/coreboot/dell780usff_8mb/target.cfg
+++ b/config/module/coreboot/dell780usff_8mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci ata"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/dell780usff_truncate_8mb/target.cfg b/config/module/coreboot/dell780usff_truncate_8mb/target.cfg
index 90fe2548..832edb79 100644
--- a/config/module/coreboot/dell780usff_truncate_8mb/target.cfg
+++ b/config/module/coreboot/dell780usff_truncate_8mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci ata"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/dell9020mt_nri_12mb/target.cfg b/config/module/coreboot/dell9020mt_nri_12mb/target.cfg
index 9981c28b..4a894655 100644
--- a/config/module/coreboot/dell9020mt_nri_12mb/target.cfg
+++ b/config/module/coreboot/dell9020mt_nri_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="haswell"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/dell9020sff_nri_12mb/target.cfg b/config/module/coreboot/dell9020sff_nri_12mb/target.cfg
index 6b3c912e..ab0796f2 100644
--- a/config/module/coreboot/dell9020sff_nri_12mb/target.cfg
+++ b/config/module/coreboot/dell9020sff_nri_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="haswell"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
diff --git a/config/module/coreboot/e7240_12mb/target.cfg b/config/module/coreboot/e7240_12mb/target.cfg
index e1d56b77..4921718e 100644
--- a/config/module/coreboot/e7240_12mb/target.cfg
+++ b/config/module/coreboot/e7240_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="e7240"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/g43t_am3/target.cfg b/config/module/coreboot/g43t_am3/target.cfg
index 065b601f..6132057a 100644
--- a/config/module/coreboot/g43t_am3/target.cfg
+++ b/config/module/coreboot/g43t_am3/target.cfg
@@ -4,6 +4,6 @@ tree="default"
xarch="i386-elf"
payload_seabios="y"
payload_memtest="y"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/g43t_am3_16mb/target.cfg b/config/module/coreboot/g43t_am3_16mb/target.cfg
index 168eecea..5eb72522 100644
--- a/config/module/coreboot/g43t_am3_16mb/target.cfg
+++ b/config/module/coreboot/g43t_am3_16mb/target.cfg
@@ -5,6 +5,6 @@ xarch="i386-elf"
payload_seabios="y"
payload_memtest="y"
release="n"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/ga_g41m_es2l/target.cfg b/config/module/coreboot/ga_g41m_es2l/target.cfg
index 2488a3eb..a42e3468 100644
--- a/config/module/coreboot/ga_g41m_es2l/target.cfg
+++ b/config/module/coreboot/ga_g41m_es2l/target.cfg
@@ -4,5 +4,5 @@ tree="default"
xarch="i386-elf"
payload_seabios="y"
payload_memtest="y"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/hp8200sff_4mb/target.cfg b/config/module/coreboot/hp8200sff_4mb/target.cfg
index cd2a6382..e763b1a9 100644
--- a/config/module/coreboot/hp8200sff_4mb/target.cfg
+++ b/config/module/coreboot/hp8200sff_4mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="hp8200sff"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/hp8200sff_8mb/target.cfg b/config/module/coreboot/hp8200sff_8mb/target.cfg
index cd2a6382..e763b1a9 100644
--- a/config/module/coreboot/hp8200sff_8mb/target.cfg
+++ b/config/module/coreboot/hp8200sff_8mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="hp8200sff"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/hp820g2_12mb/target.cfg b/config/module/coreboot/hp820g2_12mb/target.cfg
index 0670747d..a47304d8 100644
--- a/config/module/coreboot/hp820g2_12mb/target.cfg
+++ b/config/module/coreboot/hp820g2_12mb/target.cfg
@@ -6,8 +6,8 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="hp820g2"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/hp8300cmt_16mb/target.cfg b/config/module/coreboot/hp8300cmt_16mb/target.cfg
index 70943fba..0ff6c7b6 100644
--- a/config/module/coreboot/hp8300cmt_16mb/target.cfg
+++ b/config/module/coreboot/hp8300cmt_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="ivybridge"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/hppro3500series_8mb/target.cfg b/config/module/coreboot/hppro3500series_8mb/target.cfg
index 3351a1df..8c3a7569 100644
--- a/config/module/coreboot/hppro3500series_8mb/target.cfg
+++ b/config/module/coreboot/hppro3500series_8mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="hppro3500series"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/kcma_d8_16mb/target.cfg b/config/module/coreboot/kcma_d8_16mb/target.cfg
index a9ab7e44..c3e2ecf6 100644
--- a/config/module/coreboot/kcma_d8_16mb/target.cfg
+++ b/config/module/coreboot/kcma_d8_16mb/target.cfg
@@ -6,8 +6,8 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/kcma_d8_2mb/target.cfg b/config/module/coreboot/kcma_d8_2mb/target.cfg
index e30b78d1..b7f678e2 100644
--- a/config/module/coreboot/kcma_d8_2mb/target.cfg
+++ b/config/module/coreboot/kcma_d8_2mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/kgpe_d16_16mb/target.cfg b/config/module/coreboot/kgpe_d16_16mb/target.cfg
index a9ab7e44..c3e2ecf6 100644
--- a/config/module/coreboot/kgpe_d16_16mb/target.cfg
+++ b/config/module/coreboot/kgpe_d16_16mb/target.cfg
@@ -6,8 +6,8 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/kgpe_d16_2mb/target.cfg b/config/module/coreboot/kgpe_d16_2mb/target.cfg
index e30b78d1..b7f678e2 100644
--- a/config/module/coreboot/kgpe_d16_2mb/target.cfg
+++ b/config/module/coreboot/kgpe_d16_2mb/target.cfg
@@ -6,6 +6,6 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/q45t_am/target.cfg b/config/module/coreboot/q45t_am/target.cfg
index 065b601f..6132057a 100644
--- a/config/module/coreboot/q45t_am/target.cfg
+++ b/config/module/coreboot/q45t_am/target.cfg
@@ -4,6 +4,6 @@ tree="default"
xarch="i386-elf"
payload_seabios="y"
payload_memtest="y"
-grubtree="nvme"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+grubtree="default"
+build_depend="seabios/build grub/default memtest86plus/default"
diff --git a/config/module/coreboot/supermicro_x11ssh_f_vfsp_16mb/target.cfg b/config/module/coreboot/supermicro_x11ssh_f_vfsp_16mb/target.cfg
index e15fbeae..6e109ac3 100644
--- a/config/module/coreboot/supermicro_x11ssh_f_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/supermicro_x11ssh_f_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="supermicro_x11_lga1151_series"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
diff --git a/config/module/coreboot/t1650_12mb/target.cfg b/config/module/coreboot/t1650_12mb/target.cfg
index 9d31c1a3..e16afc53 100644
--- a/config/module/coreboot/t1650_12mb/target.cfg
+++ b/config/module/coreboot/t1650_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="nvme"
+grubtree="default"
vcfg="t1650"
-build_depend="seabios/build grub/nvme memtest86plus/default"
+build_depend="seabios/build grub/default memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t1700mt_bmrc_12mb/target.cfg b/config/module/coreboot/t1700mt_bmrc_12mb/target.cfg
index 1cab2d28..4f470a01 100644
--- a/config/module/coreboot/t1700mt_bmrc_12mb/target.cfg
+++ b/config/module/coreboot/t1700mt_bmrc_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="t1700"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t1700sff_bmrc_12mb/target.cfg b/config/module/coreboot/t1700sff_bmrc_12mb/target.cfg
index 1cab2d28..4f470a01 100644
--- a/config/module/coreboot/t1700sff_bmrc_12mb/target.cfg
+++ b/config/module/coreboot/t1700sff_bmrc_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="t1700"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t440plibremrc_12mb/target.cfg b/config/module/coreboot/t440plibremrc_12mb/target.cfg
index 9981c28b..4a894655 100644
--- a/config/module/coreboot/t440plibremrc_12mb/target.cfg
+++ b/config/module/coreboot/t440plibremrc_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="haswell"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t440plibremrc_4mcbfs_12mb/target.cfg b/config/module/coreboot/t440plibremrc_4mcbfs_12mb/target.cfg
index 9981c28b..4a894655 100644
--- a/config/module/coreboot/t440plibremrc_4mcbfs_12mb/target.cfg
+++ b/config/module/coreboot/t440plibremrc_4mcbfs_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="haswell"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t480_vfsp_16mb/target.cfg b/config/module/coreboot/t480_vfsp_16mb/target.cfg
index 7a0bf95e..6dd96e26 100644
--- a/config/module/coreboot/t480_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/t480_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="t480"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t480s_vfsp_16mb/target.cfg b/config/module/coreboot/t480s_vfsp_16mb/target.cfg
index d83adedf..e1641fa1 100644
--- a/config/module/coreboot/t480s_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/t480s_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="t480s"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/t580_vfsp_16mb/target.cfg b/config/module/coreboot/t580_vfsp_16mb/target.cfg
index 7dc6981a..9d0050d9 100644
--- a/config/module/coreboot/t580_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/t580_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="t580"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/w541_12mb/target.cfg b/config/module/coreboot/w541_12mb/target.cfg
index 9981c28b..4a894655 100644
--- a/config/module/coreboot/w541_12mb/target.cfg
+++ b/config/module/coreboot/w541_12mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="haswell"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/x270_vfsp_16mb/target.cfg b/config/module/coreboot/x270_vfsp_16mb/target.cfg
index 701ef4c9..a7620285 100644
--- a/config/module/coreboot/x270_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/x270_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="x270"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/x280_vfsp_16mb/target.cfg b/config/module/coreboot/x280_vfsp_16mb/target.cfg
index 5cdbcdfa..6b942e37 100644
--- a/config/module/coreboot/x280_vfsp_16mb/target.cfg
+++ b/config/module/coreboot/x280_vfsp_16mb/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="x280"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="sklkbl"
payload_edk2="edk2_mrchromebox"
build_depend="$build_depend coreboot/edk2_mrchromebox"
diff --git a/config/module/coreboot/x2e_n150/target.cfg b/config/module/coreboot/x2e_n150/target.cfg
index e920e033..ec58e127 100644
--- a/config/module/coreboot/x2e_n150/target.cfg
+++ b/config/module/coreboot/x2e_n150/target.cfg
@@ -6,9 +6,9 @@ payload_seabios="y"
payload_grub="y"
payload_memtest="y"
grub_scan_disk="nvme ahci"
-grubtree="xhci_nvme"
+grubtree="xhci"
vcfg="x2e_n150"
-build_depend="seabios/build grub/xhci_nvme memtest86plus/default"
+build_depend="seabios/build grub/xhci memtest86plus/default"
IFD_platform="adl"
payload_edk2="edk2_mrchromebox"
diff --git a/config/module/grub/default/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch b/config/module/grub/default/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
index 7112b0aa..58368069 100644
--- a/config/module/grub/default/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
+++ b/config/module/grub/default/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
@@ -1,7 +1,7 @@
-From 5a2c887181e7cdbd6b38d544e460d02623c902e6 Mon Sep 17 00:00:00 2001
+From e450282a82ea84279322cac9e77f9fc642138217 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 31 Oct 2021 03:47:05 +0000
-Subject: [PATCH 01/10] mitigate grub's missing characters for borders/arrow
+Subject: [PATCH 01/11] mitigate grub's missing characters for borders/arrow
characters
This cleans up the display on the main screen in GRUB.
diff --git a/config/module/grub/default/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch b/config/module/grub/default/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
index af139ffc..0ff98bf6 100644
--- a/config/module/grub/default/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
+++ b/config/module/grub/default/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
@@ -1,14 +1,14 @@
-From 25d7d35e0af74361a5510c3e6313b8ce5e00cd6a Mon Sep 17 00:00:00 2001
+From 868c276214905e5be2af4e72279023225898e425 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sat, 19 Nov 2022 16:30:24 +0000
-Subject: [PATCH 02/10] say the name libreboot, in the grub menu
+Subject: [PATCH 02/11] say the name libreboot, in the grub menu
---
grub-core/normal/main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
-index de9a3f961..bed502cde 100644
+index de9a3f961..c7a172a8b 100644
--- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c
@@ -215,7 +215,7 @@ grub_normal_init_page (struct grub_term_output *term,
diff --git a/config/module/grub/default/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch b/config/module/grub/default/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
index bb07abd6..4ae351b8 100644
--- a/config/module/grub/default/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
+++ b/config/module/grub/default/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
@@ -1,7 +1,7 @@
-From acff2df937bb4172f9bdb46d12e82edbbcad7996 Mon Sep 17 00:00:00 2001
+From 58726beb8168b43a0127a4dd005bfc7f28625fe8 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Mon, 30 Oct 2023 22:19:21 +0000
-Subject: [PATCH 03/10] at_keyboard coreboot: force scancodes2+translate
+Subject: [PATCH 03/11] at_keyboard coreboot: force scancodes2+translate
Scan code set 2 with translation should be assumed in
every case, as the default starting position.
diff --git a/config/module/grub/default/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch b/config/module/grub/default/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
index fbcbb2c3..9d6afe82 100644
--- a/config/module/grub/default/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
+++ b/config/module/grub/default/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
@@ -1,7 +1,7 @@
-From 247133e1f9820bcb81f7d27fc1395d64dc7b0a89 Mon Sep 17 00:00:00 2001
+From 0e2a9035222fc308003132944884777dabf0f48c Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Tue, 31 Oct 2023 10:33:28 +0000
-Subject: [PATCH 04/10] keylayouts: don't print "Unknown key" message
+Subject: [PATCH 04/11] keylayouts: don't print "Unknown key" message
on keyboards with stuck keys, this results in GRUB just
spewing it repeatedly, preventing use of GRUB.
diff --git a/config/module/grub/default/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch b/config/module/grub/default/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
index 93b0c505..670833fa 100644
--- a/config/module/grub/default/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
+++ b/config/module/grub/default/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
@@ -1,7 +1,7 @@
-From c5ad46b7ba93136764fd1eae1bd0c0c32ce1c5b2 Mon Sep 17 00:00:00 2001
+From 5035acd30d48e2e42b8ae0c4a559db762ab7e6cd Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 16:14:58 +0000
-Subject: [PATCH 05/10] don't print missing prefix errors on the screen
+Subject: [PATCH 05/11] don't print missing prefix errors on the screen
we do actually set the prefix. this patch modifies
grub to still set grub_errno and return accordingly,
@@ -45,10 +45,10 @@ index 166445849..699b39bfa 100644
}
diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
-index 580c8d3b0..6806bff9c 100644
+index 9a94dee55..e7cd85d35 100644
--- a/grub-core/commands/nativedisk.c
+++ b/grub-core/commands/nativedisk.c
-@@ -186,7 +186,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
+@@ -188,7 +188,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
prefix = grub_env_get ("prefix");
if (! prefix)
@@ -72,7 +72,7 @@ index e7037f4ed..e5d4dbff1 100644
suffix = grub_efiemu_get_default_core_name ();
diff --git a/grub-core/font/font.c b/grub-core/font/font.c
-index 18de52562..2a0fea6c8 100644
+index 0fe4a30ed..8abcaec76 100644
--- a/grub-core/font/font.c
+++ b/grub-core/font/font.c
@@ -461,7 +461,7 @@ grub_font_load (const char *filename)
diff --git a/config/module/grub/default/patches/0006-don-t-print-error-if-module-not-found.patch b/config/module/grub/default/patches/0006-don-t-print-error-if-module-not-found.patch
index 2dbf6d87..cacad0bb 100644
--- a/config/module/grub/default/patches/0006-don-t-print-error-if-module-not-found.patch
+++ b/config/module/grub/default/patches/0006-don-t-print-error-if-module-not-found.patch
@@ -1,7 +1,7 @@
-From 6522ceca8949105b2e1575ada2f05b3061bfe8f3 Mon Sep 17 00:00:00 2001
+From 978e472d4f4c0777dd3296d559712b7af6230afc Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 16:36:22 +0000
-Subject: [PATCH 06/10] don't print error if module not found
+Subject: [PATCH 06/11] don't print error if module not found
still set grub_errno accordingly, and otherwise
behave the same. in libreboot, we remove a lot of
diff --git a/config/module/grub/default/patches/0007-don-t-print-empty-error-messages.patch b/config/module/grub/default/patches/0007-don-t-print-empty-error-messages.patch
index 67ae7d66..fe7f34ef 100644
--- a/config/module/grub/default/patches/0007-don-t-print-empty-error-messages.patch
+++ b/config/module/grub/default/patches/0007-don-t-print-empty-error-messages.patch
@@ -1,7 +1,7 @@
-From 557d3e583e6aaa887d7b3876c6980ba0e0e671a3 Mon Sep 17 00:00:00 2001
+From bae0d6479233726e1ebfd3da96dad6f706f63eca Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 17:25:20 +0000
-Subject: [PATCH 07/10] don't print empty error messages
+Subject: [PATCH 07/11] don't print empty error messages
this is part two of the quest to kill the prefix
error message. after i disabled prefix-related
@@ -13,10 +13,10 @@ Signed-off-by: Leah Rowe <leah@libreboot.org>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c
-index ba04b57fb..dab62646d 100644
+index f4c1b42c5..12a28f072 100644
--- a/grub-core/kern/err.c
+++ b/grub-core/kern/err.c
-@@ -116,7 +116,8 @@ grub_print_error (void)
+@@ -130,7 +130,8 @@ grub_print_error (void)
{
if (grub_errno != GRUB_ERR_NONE)
{
diff --git a/config/module/grub/default/patches/0008-kern-coreboot-mmap-Map-to-reserved.patch b/config/module/grub/default/patches/0008-kern-coreboot-mmap-Map-to-reserved.patch
index 7ce1bf09..8bd29e24 100644
--- a/config/module/grub/default/patches/0008-kern-coreboot-mmap-Map-to-reserved.patch
+++ b/config/module/grub/default/patches/0008-kern-coreboot-mmap-Map-to-reserved.patch
@@ -1,7 +1,7 @@
-From 101ea5afcfbe459e624df27c422f59b4ded07000 Mon Sep 17 00:00:00 2001
+From 4299c50fcc34a520b567d4ee26f8356be1430d36 Mon Sep 17 00:00:00 2001
From: Paul Menzel <pmenzel@molgen.mpg.de>
Date: Mon, 17 May 2021 10:24:36 +0200
-Subject: [PATCH 08/10] kern/coreboot/mmap: Map to reserved
+Subject: [PATCH 08/11] kern/coreboot/mmap: Map to reserved
https://git.savannah.gnu.org/cgit/grub.git/commit/?id=6de9ee86bf9ae50967413e6a73b5dfd13e5ffb50
diff --git a/config/module/grub/default/patches/0009-Revert-configure-Check-linker-for-image-base-support.patch b/config/module/grub/default/patches/0009-Revert-configure-Check-linker-for-image-base-support.patch
deleted file mode 100644
index 9bb2563d..00000000
--- a/config/module/grub/default/patches/0009-Revert-configure-Check-linker-for-image-base-support.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From a56ceedd60bd6515ad3c84ec6aa4c3d66a8bac87 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Wed, 24 Dec 2025 01:42:17 +0100
-Subject: [PATCH 09/10] Revert "configure: Check linker for --image-base
- support"
-
-This reverts commit 1a5417f39a0ccefcdd5440f2a67f84d2d2e26960.
----
- acinclude.m4 | 5 -----
- configure.ac | 14 ++------------
- 2 files changed, 2 insertions(+), 17 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 70c1912f8..fa7840f09 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -79,11 +79,6 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
- [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
- AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
- [cat > conftest.c <<\EOF
--asm (
-- ".globl start, _start, __start\n"
-- ".ifdef cmain; .set start = _start = __start = cmain\n.endif\n"
-- ".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n"
--);
- void cmain (void);
- void
- cmain (void)
-diff --git a/configure.ac b/configure.ac
-index d8ca1b7c1..041cfbab4 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1461,6 +1461,7 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_c
- TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc"
- TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
- TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc"
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- else
- TARGET_APPLE_LINKER=0
-@@ -1468,6 +1469,7 @@ else
- TARGET_IMG_LDSCRIPT=
- TARGET_IMG_LDFLAGS='-Wl,-N'
- TARGET_IMG_LDFLAGS_AC='-Wl,-N'
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- fi
-
-@@ -1798,18 +1800,6 @@ grub_PROG_TARGET_CC
- m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
-
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
--AX_CHECK_LINK_FLAG([-Wl,--image-base,0x400000],
-- [TARGET_IMG_BASE_LDOPT="-Wl,--image-base"],
-- [TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"],
-- [],
-- [AC_LANG_SOURCE([
--asm (".globl start; start:");
--asm (".globl _start; _start:");
--asm (".globl __start; __start:");
--void __main (void);
--void __main (void) {}
--int main (void);
-- ])])
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
- grub_PROG_LD_BUILD_ID_NONE
---
-2.47.3
-
diff --git a/config/module/grub/default/patches/0010-Revert-configure-Print-a-more-helpful-error-if-autoc.patch b/config/module/grub/default/patches/0010-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
deleted file mode 100644
index 0c968993..00000000
--- a/config/module/grub/default/patches/0010-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 66028b6bc149a25894fe5ca395b22804f389a18e Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Mon, 19 Jan 2026 15:27:23 +0000
-Subject: [PATCH 10/10] Revert "configure: Print a more helpful error if
- autoconf-archive is not installed"
-
-This reverts commit ac042f3f58d33ce9cd5ff61750f06da1a1d7b0eb.
----
- configure.ac | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 041cfbab4..209c0fb11 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1794,11 +1794,6 @@ LIBS=""
- # Defined in acinclude.m4.
- grub_ASM_USCORE
- grub_PROG_TARGET_CC
--
--# The error message produced by autoconf if autoconf-archive is not installed is
--# quite misleading and not very helpful. So, try point people in the right direction.
--m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
--
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
---
-2.47.3
-
diff --git a/config/module/grub/xhci_nvme/patches/0023-bootstrap-Don-t-download-po-files.patch b/config/module/grub/default/patches/0010-bootstrap-Don-t-download-po-files.patch
index cfb66047..d7917f4c 100644
--- a/config/module/grub/xhci_nvme/patches/0023-bootstrap-Don-t-download-po-files.patch
+++ b/config/module/grub/default/patches/0010-bootstrap-Don-t-download-po-files.patch
@@ -1,7 +1,7 @@
-From 5d18c96a22d98d137ea40bfc6aabadce933c2d45 Mon Sep 17 00:00:00 2001
+From 9db7a6d0d878a5a2791428d48a38ca3553b4bdbd Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 1 Feb 2026 20:30:55 +0100
-Subject: [PATCH 1/1] bootstrap: Don't download po files
+Subject: [PATCH 10/11] bootstrap: Don't download po files
GRUB doesn't verify checksums at all, and it pulls from
this URL recursively:
diff --git a/config/module/grub/default/patches/0012-force-disable-werror.patch b/config/module/grub/default/patches/0011-force-disable-werror.patch
index a4837f63..2c194fae 100644
--- a/config/module/grub/default/patches/0012-force-disable-werror.patch
+++ b/config/module/grub/default/patches/0011-force-disable-werror.patch
@@ -1,7 +1,7 @@
-From 2adf79420721b5f7e25d657ba1a6bb60aa221bce Mon Sep 17 00:00:00 2001
+From c6e1d70e259e7e551d1e392b63c93903cb24444a Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Mon, 21 Sep 2026 12:13:16 +0100
-Subject: [PATCH 1/1] force-disable werror
+Subject: [PATCH 11/11] force-disable werror
Signed-off-by: Leah Rowe <leah@libreboot.org>
---
@@ -33,10 +33,10 @@ index 43635d5ff..0f7f55e83 100644
if COND_STARFIELD
diff --git a/acinclude.m4 b/acinclude.m4
-index fa7840f09..d871737fd 100644
+index 478aab6d3..dd3b360f2 100644
--- a/acinclude.m4
+++ b/acinclude.m4
-@@ -368,7 +368,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
+@@ -379,7 +379,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
void foo (void) { volatile char a[8]; a[3]; }
]])])
@@ -45,7 +45,7 @@ index fa7840f09..d871737fd 100644
AC_MSG_RESULT([yes])
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
rm -f conftest.s
-@@ -430,7 +430,7 @@ link_nopie_needed=no]
+@@ -441,7 +441,7 @@ link_nopie_needed=no]
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
@@ -54,7 +54,7 @@ index fa7840f09..d871737fd 100644
AC_MSG_RESULT([no])
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
rm -f conftest.o
-@@ -446,7 +446,7 @@ AC_DEFUN([grub_CHECK_NO_PIE],
+@@ -457,7 +457,7 @@ AC_DEFUN([grub_CHECK_NO_PIE],
[AC_MSG_CHECKING([whether linker accepts -no-pie])
AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
[save_LDFLAGS="$LDFLAGS"
@@ -63,7 +63,7 @@ index fa7840f09..d871737fd 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_ld_no_pie=yes],
[grub_cv_cc_ld_no_pie=no])
-@@ -463,7 +463,7 @@ AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
+@@ -474,7 +474,7 @@ AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
[AC_MSG_CHECKING([whether linker accepts -nopie])
AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
[save_LDFLAGS="$LDFLAGS"
@@ -86,10 +86,10 @@ index 7ef171b2b..41772df6b 100644
CFLAGS_POSIX = -fno-builtin
diff --git a/configure.ac b/configure.ac
-index 209c0fb11..1b808ce7b 100644
+index 8d1f5870f..be42dde1e 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -433,10 +433,10 @@ AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
+@@ -460,10 +460,10 @@ AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
@@ -102,7 +102,7 @@ index 209c0fb11..1b808ce7b 100644
AC_HEADER_MAJOR
CFLAGS="$SAVED_CFLAGS"
-@@ -464,7 +464,7 @@ AC_SUBST([LIBUTIL])
+@@ -491,7 +491,7 @@ AC_SUBST([LIBUTIL])
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
SAVED_CFLAGS="$CFLAGS"
@@ -111,7 +111,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
[grub_cv_host_cc_wtrampolines=yes],
-@@ -520,7 +520,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
+@@ -547,7 +547,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
SAVED_CFLAGS="$CFLAGS"
grub_cv_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
@@ -120,7 +120,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x$flag = x1 ; then
grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
-@@ -614,7 +614,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
+@@ -651,7 +651,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
grub_cv_target_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
@@ -129,7 +129,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -649,7 +649,7 @@ if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
+@@ -686,7 +686,7 @@ if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
if test x"$grub_cv_target_cc_big_endian" != xno ; then
break
fi
@@ -138,7 +138,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
#error still little endian
-@@ -684,7 +684,7 @@ elif test x$target_cpu = xmipsel; then
+@@ -721,7 +721,7 @@ elif test x$target_cpu = xmipsel; then
if test x"$grub_cv_target_cc_little_endian" != xno ; then
break
fi
@@ -147,7 +147,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
#error still big endian
-@@ -722,7 +722,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
+@@ -759,7 +759,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
break
fi
@@ -156,7 +156,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
#error not o32 ABI
-@@ -794,7 +794,7 @@ fi
+@@ -831,7 +831,7 @@ fi
# on mips redirect cache flushing function to non-existant one.
if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
@@ -165,7 +165,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mflush_func=yes],
[grub_cv_cc_mflush_func=no])
-@@ -805,7 +805,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
+@@ -842,7 +842,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
fi
AC_CACHE_CHECK([whether -mno-gpopt works], [grub_cv_cc_mno_gpopt], [
@@ -174,7 +174,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mno_gpopt=yes],
[grub_cv_cc_mno_gpopt=no])
-@@ -822,7 +822,7 @@ if test "x$target_cpu" = xi386; then
+@@ -859,7 +859,7 @@ if test "x$target_cpu" = xi386; then
TARGET_CFLAGS="$TARGET_CFLAGS -falign-functions=1"
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
@@ -183,7 +183,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_falign_loop=yes],
[grub_cv_cc_falign_loop=no])
-@@ -833,7 +833,7 @@ if test "x$target_cpu" = xi386; then
+@@ -870,7 +870,7 @@ if test "x$target_cpu" = xi386; then
fi
AC_CACHE_CHECK([whether -falign-jumps works], [grub_cv_cc_falign_jumps], [
@@ -192,7 +192,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_falign_jumps=yes],
[grub_cv_cc_falign_jumps=no])
-@@ -845,7 +845,7 @@ if test "x$target_cpu" = xi386; then
+@@ -882,7 +882,7 @@ if test "x$target_cpu" = xi386; then
fi
AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
@@ -201,7 +201,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_freg_struct_return=yes],
[grub_cv_cc_freg_struct_return=no])
-@@ -863,7 +863,7 @@ fi
+@@ -900,7 +900,7 @@ fi
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ); then
AC_CACHE_CHECK([whether -Wa,-mx86-used-note works], [grub_cv_cc_mx86_used_note], [
@@ -210,7 +210,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mx86_used_note=yes],
[grub_cv_cc_mx86_used_note=no])
-@@ -877,7 +877,7 @@ fi
+@@ -914,7 +914,7 @@ fi
if test "x$target_cpu" = xloongarch64; then
AC_CACHE_CHECK([whether _mno_explicit_relocs works], [grub_cv_cc_mno_explicit_relocs], [
@@ -219,7 +219,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mno_explicit_relocs=yes],
[grub_cv_cc_mno_explicit_relocs=no])
-@@ -893,7 +893,7 @@ if test "x$target_cpu" = xloongarch64; then
+@@ -930,7 +930,7 @@ if test "x$target_cpu" = xloongarch64; then
if test x"$grub_cv_target_cc_mno_relax" != xno ; then
break
fi
@@ -228,7 +228,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -920,7 +920,7 @@ if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
+@@ -957,7 +957,7 @@ if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
if test x"$grub_cv_target_cc_mno_relax" != xno ; then
break
fi
@@ -237,7 +237,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -946,35 +946,35 @@ if test x"$platform" != xemu ; then
+@@ -983,35 +983,35 @@ if test x"$platform" != xemu ; then
AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
grub_cv_target_cc_soft_float=no
if test "x$target_cpu" = xarm64; then
@@ -280,7 +280,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_soft_float="-m4-nofpu"], [])
fi
-@@ -984,7 +984,7 @@ if test x"$platform" != xemu ; then
+@@ -1021,7 +1021,7 @@ if test x"$platform" != xemu ; then
if test x"$grub_cv_target_cc_soft_float" != xno ; then
break
fi
@@ -289,7 +289,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_soft_float="$cand"], [])
done
-@@ -1015,7 +1015,7 @@ if test x"$target_cpu" = xsparc64 ; then
+@@ -1052,7 +1052,7 @@ if test x"$target_cpu" = xsparc64 ; then
if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
break
fi
@@ -298,7 +298,7 @@ index 209c0fb11..1b808ce7b 100644
CPPFLAGS="$TARGET_CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_mno_app_regs="$cand"], [])
-@@ -1039,7 +1039,7 @@ if test x"$target_cpu" = xsparc64 ; then
+@@ -1076,7 +1076,7 @@ if test x"$target_cpu" = xsparc64 ; then
break
fi
LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
@@ -307,7 +307,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -1569,7 +1569,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1627,7 +1627,7 @@ if test "x$target_cpu" = xarm; then
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
break
fi
@@ -316,7 +316,7 @@ index 209c0fb11..1b808ce7b 100644
CPPFLAGS="$TARGET_CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_mno_movt="$cand"], [])
-@@ -1581,7 +1581,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1639,7 +1639,7 @@ if test "x$target_cpu" = xarm; then
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
fi
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
@@ -325,7 +325,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mthumb_interwork=yes],
[grub_cv_cc_mthumb_interwork=no])
-@@ -1595,7 +1595,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1653,7 +1653,7 @@ if test "x$target_cpu" = xarm; then
fi
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
@@ -334,7 +334,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_qn=yes],
[grub_cv_target_cc_qn=no])])
-@@ -1748,7 +1748,7 @@ if test "$target_cpu" = arm; then
+@@ -1806,7 +1806,7 @@ if test "$target_cpu" = arm; then
AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
grub_cv_target_cc_strict_align=
for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
@@ -343,7 +343,7 @@ index 209c0fb11..1b808ce7b 100644
LDFLAGS="$TARGET_LDFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x"$flag" = x1; then
-@@ -1834,7 +1834,7 @@ int va_arg_func (int fixed, va_list args);]], [[]])],
+@@ -1903,7 +1903,7 @@ int va_arg_func (int fixed, va_list args);]], [[]])],
fi
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
@@ -352,7 +352,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
[grub_cv_cc_wtrampolines=yes],
-@@ -2362,16 +2362,11 @@ AC_SUBST(END_SYMBOL)
+@@ -2433,16 +2433,11 @@ AC_SUBST(END_SYMBOL)
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
@@ -375,10 +375,10 @@ index 209c0fb11..1b808ce7b 100644
TARGET_CPP="$TARGET_CC -E"
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
-index 8577462d5..8a12861ba 100644
+index d9a664c3f..c7ee64b4b 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
-@@ -483,7 +483,7 @@ if COND_ENABLE_EFIEMU
+@@ -485,7 +485,7 @@ if COND_ENABLE_EFIEMU
efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
-rm -f $@
-rm -f $@.bin
@@ -387,7 +387,7 @@ index 8577462d5..8a12861ba 100644
if test "x$(TARGET_APPLE_LINKER)" = x1; then \
$(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
rm -f $@.bin ; \
-@@ -496,10 +496,10 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
+@@ -498,10 +498,10 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
# Link format -arch,x86_64 means Apple linker
efiemu64_c.o: efiemu/runtime/efiemu.c
@@ -542,7 +542,7 @@ index 4a7bee2fb..b3fb1db4f 100755
#
diff --git a/grub-core/lib/libgcrypt/configure.ac b/grub-core/lib/libgcrypt/configure.ac
-index 1d06ca3b1..0a4e0286a 100644
+index 4f4df34ac..f96dfb464 100644
--- a/grub-core/lib/libgcrypt/configure.ac
+++ b/grub-core/lib/libgcrypt/configure.ac
@@ -1007,7 +1007,7 @@ AC_CACHE_CHECK(whether the visibility attribute is supported,
diff --git a/config/module/grub/default/target.cfg b/config/module/grub/default/target.cfg
index cfa2a287..a7b98909 100644
--- a/config/module/grub/default/target.cfg
+++ b/config/module/grub/default/target.cfg
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: GPL-3.0-or-later
-rev="eaa3b8f0f90605a82c6bfda4c5c4b73c58eb81ac"
+rev="f10ad08fa2a02dce95774c1b5caee38254b30531"
tree="default"
diff --git a/config/module/grub/nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch b/config/module/grub/nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
deleted file mode 100644
index 41194e98..00000000
--- a/config/module/grub/nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 2c953c9160cbed357437891cf1790aeb1c2bd0f5 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sun, 31 Oct 2021 03:47:05 +0000
-Subject: [PATCH 01/10] mitigate grub's missing characters for borders/arrow
- characters
-
-This cleans up the display on the main screen in GRUB.
-
-Just don't draw a border, at all.
----
- grub-core/normal/menu_text.c | 49 ++----------------------------------
- 1 file changed, 2 insertions(+), 47 deletions(-)
-
-diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
-index 9c383e64a..8ec1dd1e8 100644
---- a/grub-core/normal/menu_text.c
-+++ b/grub-core/normal/menu_text.c
-@@ -108,47 +108,6 @@ grub_print_message_indented (const char *msg, int margin_left, int margin_right,
- grub_print_message_indented_real (msg, margin_left, margin_right, term, 0);
- }
-
--static void
--draw_border (struct grub_term_output *term, const struct grub_term_screen_geometry *geo)
--{
-- int i;
--
-- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
--
-- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1,
-- geo->first_entry_y - 1 });
-- grub_putcode (GRUB_UNICODE_CORNER_UL, term);
-- for (i = 0; i < geo->entry_width + 1; i++)
-- grub_putcode (GRUB_UNICODE_HLINE, term);
-- grub_putcode (GRUB_UNICODE_CORNER_UR, term);
--
-- for (i = 0; i < geo->num_entries; i++)
-- {
-- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1,
-- geo->first_entry_y + i });
-- grub_putcode (GRUB_UNICODE_VLINE, term);
-- grub_term_gotoxy (term,
-- (struct grub_term_coordinate) { geo->first_entry_x + geo->entry_width + 1,
-- geo->first_entry_y + i });
-- grub_putcode (GRUB_UNICODE_VLINE, term);
-- }
--
-- grub_term_gotoxy (term,
-- (struct grub_term_coordinate) { geo->first_entry_x - 1,
-- geo->first_entry_y - 1 + geo->num_entries + 1 });
-- grub_putcode (GRUB_UNICODE_CORNER_LL, term);
-- for (i = 0; i < geo->entry_width + 1; i++)
-- grub_putcode (GRUB_UNICODE_HLINE, term);
-- grub_putcode (GRUB_UNICODE_CORNER_LR, term);
--
-- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL);
--
-- grub_term_gotoxy (term,
-- (struct grub_term_coordinate) { geo->first_entry_x - 1,
-- (geo->first_entry_y - 1 + geo->num_entries
-- + GRUB_TERM_MARGIN + 1) });
--}
--
- static int
- print_message (int nested, int edit, struct grub_term_output *term, int dry_run)
- {
-@@ -167,10 +126,8 @@ command-line or ESC to discard edits and return to the GRUB menu."),
- {
- char *msg_translated;
-
-- msg_translated = grub_xasprintf (_("Use the %C and %C keys to select which "
-- "entry is highlighted."),
-- GRUB_UNICODE_UPARROW,
-- GRUB_UNICODE_DOWNARROW);
-+ msg_translated = grub_xasprintf (_("Use the arrow keys to select which "
-+ "entry is highlighted."));
- if (!msg_translated)
- return 0;
- ret += grub_print_message_indented_real (msg_translated, STANDARD_MARGIN,
-@@ -413,8 +370,6 @@ grub_menu_init_page (int nested, int edit,
-
- grub_term_normal_color = grub_color_menu_normal;
- grub_term_highlight_color = grub_color_menu_highlight;
-- if (geo->border)
-- draw_border (term, geo);
- grub_term_normal_color = old_color_normal;
- grub_term_highlight_color = old_color_highlight;
- geo->timeout_y = geo->first_entry_y + geo->num_entries
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch b/config/module/grub/nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
deleted file mode 100644
index 359f31f8..00000000
--- a/config/module/grub/nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 71623385f90580b2138110cf00ee66b7a05abcf6 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sat, 19 Nov 2022 16:30:24 +0000
-Subject: [PATCH 02/10] say the name libreboot, in the grub menu
-
----
- grub-core/normal/main.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
-index de9a3f961..bed502cde 100644
---- a/grub-core/normal/main.c
-+++ b/grub-core/normal/main.c
-@@ -215,7 +215,7 @@ grub_normal_init_page (struct grub_term_output *term,
-
- grub_term_cls (term);
-
-- msg_formatted = grub_xasprintf (_("GNU GRUB version %s"), PACKAGE_VERSION);
-+ msg_formatted = grub_xasprintf (_("Libreboot 26.01 Magnanimous Max (GRUB menu): https://libreboot.org/"));
- if (!msg_formatted)
- return;
-
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch b/config/module/grub/nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
deleted file mode 100644
index ab26c6b2..00000000
--- a/config/module/grub/nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From a21c5e997d6247d713717745b5f7bd380b98fce1 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Mon, 30 Oct 2023 22:19:21 +0000
-Subject: [PATCH 03/10] at_keyboard coreboot: force scancodes2+translate
-
-Scan code set 2 with translation should be assumed in
-every case, as the default starting position.
-
-However, GRUB is trying to detect and use other modes
-such as set 2 without translation, or set 1 without
-translation from set 2; it also detects no-mode and
-assumes mode 1, on really old keyboards.
-
-The current behaviour has been retained, for everything
-except GRUB_MACHINE_COREBOOT; for the latter, scan code
-set 2 with translation is hardcoded, and forced in code.
-
-This is required to make keyboard initialisation work on
-the MEC5035 EC used by the Dell Latitude E6400, when
-running GRUB as a coreboot payload on that laptop. The
-EC reports scancode set 2 with translation when probed,
-but actually only outputs scancode set 1.
-
-Since GRUB is attempting to use it without translation,
-and since the machine reports set 2 with translation,
-but only ever outputs set 1 scancodes, this results in
-wrong keypresses for every key.
-
-This fix fixed that, by forcing set 2 with translation,
-treating it as set 1, but only on coreboot. This is the
-same behaviour used in GNU+Linux systems and SeaBIOS.
-With this change, GRUB keyboard initialisation now works
-just fine on those machines.
-
-This has *also* been tested on other coreboot machines
-running GRUB; several HP EliteBooks, ThinkPads and
-Dell Precision T1650. All seems to work just fine.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- grub-core/term/at_keyboard.c | 20 ++++++++++++++++++--
- 1 file changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c
-index f8a129eb7..8207225c2 100644
---- a/grub-core/term/at_keyboard.c
-+++ b/grub-core/term/at_keyboard.c
-@@ -138,6 +138,7 @@ write_mode (int mode)
- return (i != GRUB_AT_TRIES);
- }
-
-+#if !defined (GRUB_MACHINE_COREBOOT)
- static int
- query_mode (void)
- {
-@@ -161,10 +162,12 @@ query_mode (void)
- return 3;
- return 0;
- }
-+#endif
-
- static void
- set_scancodes (void)
- {
-+#if !defined (GRUB_MACHINE_COREBOOT)
- /* You must have visited computer museum. Keyboard without scancode set
- knowledge. Assume XT. */
- if (!grub_keyboard_orig_set)
-@@ -173,20 +176,33 @@ set_scancodes (void)
- ps2_state.current_set = 1;
- return;
- }
-+#endif
-
- #if !USE_SCANCODE_SET
- ps2_state.current_set = 1;
- return;
--#else
-+#endif
-
-+#if defined (GRUB_MACHINE_COREBOOT)
-+ /* enable translation */
-+ grub_keyboard_controller_write (grub_keyboard_controller_orig
-+ & ~KEYBOARD_AT_DISABLE);
-+#else
-+ /* if not coreboot, disable translation and try mode 2 first, before 1 */
- grub_keyboard_controller_write (grub_keyboard_controller_orig
- & ~KEYBOARD_AT_TRANSLATE
- & ~KEYBOARD_AT_DISABLE);
-+#endif
-
- keyboard_controller_wait_until_ready ();
- grub_outb (KEYBOARD_COMMAND_ENABLE, KEYBOARD_REG_DATA);
--
- write_mode (2);
-+
-+#if defined (GRUB_MACHINE_COREBOOT)
-+ /* mode 2 with translation, so make grub treat as set 1 */
-+ ps2_state.current_set = 1;
-+#else
-+ /* if not coreboot, translation isn't set; test 2 and fall back to 1 */
- ps2_state.current_set = query_mode ();
- grub_dprintf ("atkeyb", "returned set %d\n", ps2_state.current_set);
- if (ps2_state.current_set == 2)
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch b/config/module/grub/nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
deleted file mode 100644
index 68dfb2f7..00000000
--- a/config/module/grub/nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 062379b1cd5a4f99324c625fb371c29eb00ad4a2 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Tue, 31 Oct 2023 10:33:28 +0000
-Subject: [PATCH 04/10] keylayouts: don't print "Unknown key" message
-
-on keyboards with stuck keys, this results in GRUB just
-spewing it repeatedly, preventing use of GRUB.
-
-in such cases, it's still possible to use the keyboard,
-and we should let the user at least boot.
-
-it often appears when people plug in faulty usb keyboards,
-but can appear for laptop keyboards too; one of my e6400
-has stuck keys.
-
-with this patch, grub should be a bit more reliable in
-terms of user experience, when the keyboard is faulty.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- grub-core/commands/keylayouts.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
-index aa3ba34f2..445fa0601 100644
---- a/grub-core/commands/keylayouts.c
-+++ b/grub-core/commands/keylayouts.c
-@@ -174,7 +174,6 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
- key = map_key_core (code, status, &alt_gr_consumed);
-
- if (key == 0 || key == GRUB_TERM_SHIFT) {
-- grub_printf ("Unknown key 0x%x detected\n", code);
- return GRUB_TERM_NO_KEY;
- }
-
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch b/config/module/grub/nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
deleted file mode 100644
index 53dbdd87..00000000
--- a/config/module/grub/nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From e77ca67985c1bef8afd93587232da3d298a8dd51 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sun, 5 Nov 2023 16:14:58 +0000
-Subject: [PATCH 05/10] don't print missing prefix errors on the screen
-
-we do actually set the prefix. this patch modifies
-grub to still set grub_errno and return accordingly,
-so the behaviour is otherwise identical, but it will
-no longer print a warning message on the screen.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- grub-core/commands/keylayouts.c | 2 +-
- grub-core/commands/loadenv.c | 2 +-
- grub-core/commands/nativedisk.c | 2 +-
- grub-core/efiemu/main.c | 3 +--
- grub-core/font/font.c | 2 +-
- grub-core/kern/dl.c | 2 +-
- 6 files changed, 6 insertions(+), 7 deletions(-)
-
-diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c
-index 445fa0601..00bcf7025 100644
---- a/grub-core/commands/keylayouts.c
-+++ b/grub-core/commands/keylayouts.c
-@@ -211,7 +211,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
- {
- const char *prefix = grub_env_get ("prefix");
- if (!prefix)
-- return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("variable `%s' isn't set"), "prefix");
-+ return (grub_errno = GRUB_ERR_BAD_ARGUMENT);
- filename = grub_xasprintf ("%s/layouts/%s.gkb", prefix, argv[0]);
- if (!filename)
- return grub_errno;
-diff --git a/grub-core/commands/loadenv.c b/grub-core/commands/loadenv.c
-index 166445849..699b39bfa 100644
---- a/grub-core/commands/loadenv.c
-+++ b/grub-core/commands/loadenv.c
-@@ -58,7 +58,7 @@ open_envblk_file (char *filename,
- prefix = grub_env_get ("prefix");
- if (! prefix)
- {
-- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
-+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
- return 0;
- }
-
-diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
-index 580c8d3b0..6806bff9c 100644
---- a/grub-core/commands/nativedisk.c
-+++ b/grub-core/commands/nativedisk.c
-@@ -186,7 +186,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
- prefix = grub_env_get ("prefix");
-
- if (! prefix)
-- return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
-+ return (grub_errno = GRUB_ERR_FILE_NOT_FOUND);
-
- if (prefix)
- path_prefix = (prefix[0] == '(') ? grub_strchr (prefix, ')') : NULL;
-diff --git a/grub-core/efiemu/main.c b/grub-core/efiemu/main.c
-index e7037f4ed..e5d4dbff1 100644
---- a/grub-core/efiemu/main.c
-+++ b/grub-core/efiemu/main.c
-@@ -231,8 +231,7 @@ grub_efiemu_autocore (void)
- prefix = grub_env_get ("prefix");
-
- if (! prefix)
-- return grub_error (GRUB_ERR_FILE_NOT_FOUND,
-- N_("variable `%s' isn't set"), "prefix");
-+ return (grub_errno = GRUB_ERR_FILE_NOT_FOUND);
-
- suffix = grub_efiemu_get_default_core_name ();
-
-diff --git a/grub-core/font/font.c b/grub-core/font/font.c
-index 18de52562..2a0fea6c8 100644
---- a/grub-core/font/font.c
-+++ b/grub-core/font/font.c
-@@ -461,7 +461,7 @@ grub_font_load (const char *filename)
-
- if (!prefix)
- {
-- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
-+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
- goto fail;
- }
- file = try_open_from_prefix (prefix, filename);
-diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
-index de8c3aa8d..eac3ea48d 100644
---- a/grub-core/kern/dl.c
-+++ b/grub-core/kern/dl.c
-@@ -880,7 +880,7 @@ grub_dl_load (const char *name)
- return 0;
-
- if (! grub_dl_dir) {
-- grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix");
-+ grub_errno = GRUB_ERR_FILE_NOT_FOUND;
- return 0;
- }
-
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0006-don-t-print-error-if-module-not-found.patch b/config/module/grub/nvme/patches/0006-don-t-print-error-if-module-not-found.patch
deleted file mode 100644
index 3851c7fe..00000000
--- a/config/module/grub/nvme/patches/0006-don-t-print-error-if-module-not-found.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 9412b6be27bce2d79f154761387d35f44184c069 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sun, 5 Nov 2023 16:36:22 +0000
-Subject: [PATCH 06/10] don't print error if module not found
-
-still set grub_errno accordingly, and otherwise
-behave the same. in libreboot, we remove a lot of
-modules but then rely on loading a grub.cfg
-provided by a distro; in almost all cases that works,
-but also in almost all cases, that will try to load
-a module we don't actually need, but then it prints
-a message. this can annoy some users, so silence it.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- grub-core/kern/dl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
-index eac3ea48d..6d67ba54f 100644
---- a/grub-core/kern/dl.c
-+++ b/grub-core/kern/dl.c
-@@ -510,7 +510,7 @@ grub_dl_resolve_name (grub_dl_t mod, Elf_Ehdr *e)
-
- s = grub_dl_find_section (e, ".modname");
- if (!s)
-- return grub_error (GRUB_ERR_BAD_MODULE, "no module name found");
-+ return (grub_errno = GRUB_ERR_BAD_MODULE);
-
- mod->name = grub_strdup ((char *) e + s->sh_offset);
- if (! mod->name)
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0007-don-t-print-empty-error-messages.patch b/config/module/grub/nvme/patches/0007-don-t-print-empty-error-messages.patch
deleted file mode 100644
index aa42420f..00000000
--- a/config/module/grub/nvme/patches/0007-don-t-print-empty-error-messages.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2ad50d482cae148df832ccd68f90b8111684ecde Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sun, 5 Nov 2023 17:25:20 +0000
-Subject: [PATCH 07/10] don't print empty error messages
-
-this is part two of the quest to kill the prefix
-error message. after i disabled prefix-related
-messages, it still printed "error: ." on screen.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- grub-core/kern/err.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c
-index ba04b57fb..dab62646d 100644
---- a/grub-core/kern/err.c
-+++ b/grub-core/kern/err.c
-@@ -116,7 +116,8 @@ grub_print_error (void)
- {
- if (grub_errno != GRUB_ERR_NONE)
- {
-- grub_err_printf (_("error: %s.\n"), grub_errmsg);
-+ if (grub_strlen(grub_errmsg) > 0)
-+ grub_err_printf (_("error: %s.\n"), grub_errmsg);
- grub_err_printed_errors++;
- }
- }
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0008-Add-native-NVMe-driver-based-on-SeaBIOS.patch b/config/module/grub/nvme/patches/0008-Add-native-NVMe-driver-based-on-SeaBIOS.patch
deleted file mode 100644
index e0b40f2f..00000000
--- a/config/module/grub/nvme/patches/0008-Add-native-NVMe-driver-based-on-SeaBIOS.patch
+++ /dev/null
@@ -1,1074 +0,0 @@
-From 202e20bef3766480aee18e679b9306387be615dc Mon Sep 17 00:00:00 2001
-From: Mate Kukri <km@mkukri.xyz>
-Date: Mon, 20 May 2024 11:43:35 +0100
-Subject: [PATCH 08/10] Add native NVMe driver based on SeaBIOS
-
-Tested to successfully boot Debian on QEMU and OptiPlex 3050.
-
-Signed-off-by: Mate Kukri <km@mkukri.xyz>
----
- Makefile.am | 2 +-
- grub-core/Makefile.core.def | 6 +
- grub-core/commands/nativedisk.c | 1 +
- grub-core/disk/nvme-int.h | 208 +++++++++
- grub-core/disk/nvme.c | 781 ++++++++++++++++++++++++++++++++
- include/grub/disk.h | 1 +
- 6 files changed, 998 insertions(+), 1 deletion(-)
- create mode 100644 grub-core/disk/nvme-int.h
- create mode 100644 grub-core/disk/nvme.c
-
-diff --git a/Makefile.am b/Makefile.am
-index 43635d5ff..2c86dbbf6 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -434,7 +434,7 @@ if COND_i386_coreboot
- FS_PAYLOAD_MODULES ?= $(shell cat grub-core/fs.lst)
- default_payload.elf: grub-mkstandalone grub-mkimage FORCE
- test -f $@ && rm $@ || true
-- pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
-+ pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata nvme ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
- endif
-
- endif
-diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
-index 0cf155128..176d35364 100644
---- a/grub-core/Makefile.core.def
-+++ b/grub-core/Makefile.core.def
-@@ -2773,3 +2773,9 @@ module = {
- cflags = '-Wno-uninitialized';
- cppflags = '-I$(srcdir)/lib/libtasn1-grub -I$(srcdir)/tests/asn1/';
- };
-+
-+module = {
-+ name = nvme;
-+ common = disk/nvme.c;
-+ enable = pci;
-+};
-diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
-index 6806bff9c..fd68a513e 100644
---- a/grub-core/commands/nativedisk.c
-+++ b/grub-core/commands/nativedisk.c
-@@ -78,6 +78,7 @@ get_uuid (const char *name, char **uuid, int getnative)
- case GRUB_DISK_DEVICE_ATA_ID:
- case GRUB_DISK_DEVICE_SCSI_ID:
- case GRUB_DISK_DEVICE_XEN:
-+ case GRUB_DISK_DEVICE_NVME_ID:
- if (getnative)
- break;
- /* FALLTHROUGH */
-diff --git a/grub-core/disk/nvme-int.h b/grub-core/disk/nvme-int.h
-new file mode 100644
-index 000000000..1295b58aa
---- /dev/null
-+++ b/grub-core/disk/nvme-int.h
-@@ -0,0 +1,208 @@
-+// NVMe datastructures and constants
-+//
-+// Copyright 2017 Amazon.com, Inc. or its affiliates.
-+//
-+// This file may be distributed under the terms of the GNU LGPLv3 license.
-+
-+#ifndef __NVME_INT_H
-+#define __NVME_INT_H
-+
-+#include <grub/types.h>
-+
-+/* Data structures */
-+
-+/* The register file of a NVMe host controller. This struct follows the naming
-+ scheme in the NVMe specification. */
-+struct nvme_reg {
-+ grub_uint64_t cap; /* controller capabilities */
-+ grub_uint32_t vs; /* version */
-+ grub_uint32_t intms; /* interrupt mask set */
-+ grub_uint32_t intmc; /* interrupt mask clear */
-+ grub_uint32_t cc; /* controller configuration */
-+ grub_uint32_t _res0;
-+ grub_uint32_t csts; /* controller status */
-+ grub_uint32_t _res1;
-+ grub_uint32_t aqa; /* admin queue attributes */
-+ grub_uint64_t asq; /* admin submission queue base address */
-+ grub_uint64_t acq; /* admin completion queue base address */
-+};
-+
-+/* Submission queue entry */
-+struct nvme_sqe {
-+ union {
-+ grub_uint32_t dword[16];
-+ struct {
-+ grub_uint32_t cdw0; /* Command DWORD 0 */
-+ grub_uint32_t nsid; /* Namespace ID */
-+ grub_uint64_t _res0;
-+ grub_uint64_t mptr; /* metadata ptr */
-+
-+ grub_uint64_t dptr_prp1;
-+ grub_uint64_t dptr_prp2;
-+ };
-+ };
-+};
-+
-+/* Completion queue entry */
-+struct nvme_cqe {
-+ union {
-+ grub_uint32_t dword[4];
-+ struct {
-+ grub_uint32_t cdw0;
-+ grub_uint32_t _res0;
-+ grub_uint16_t sq_head;
-+ grub_uint16_t sq_id;
-+ grub_uint16_t cid;
-+ grub_uint16_t status;
-+ };
-+ };
-+};
-+
-+/* The common part of every submission or completion queue. */
-+struct nvme_queue {
-+ grub_uint32_t *dbl; /* doorbell */
-+ grub_uint16_t mask; /* length - 1 */
-+};
-+
-+struct nvme_cq {
-+ struct nvme_queue common;
-+ struct nvme_cqe *cqe;
-+
-+ /* We have read upto (but not including) this entry in the queue. */
-+ grub_uint16_t head;
-+
-+ /* The current phase bit the controller uses to indicate that it has written
-+ a new entry. This is inverted after each wrap. */
-+ unsigned phase : 1;
-+};
-+
-+struct nvme_sq {
-+ struct nvme_queue common;
-+ struct nvme_sqe *sqe;
-+
-+ /* Corresponding completion queue. We only support a single SQ per CQ. */
-+ struct nvme_cq *cq;
-+
-+ /* The last entry the controller has fetched. */
-+ grub_uint16_t head;
-+
-+ /* The last value we have written to the tail doorbell. */
-+ grub_uint16_t tail;
-+};
-+
-+struct nvme_ctrl {
-+ grub_pci_device_t pci;
-+ struct nvme_reg volatile *reg;
-+
-+ grub_uint32_t ctrlnum;
-+
-+ grub_uint32_t doorbell_stride; /* in bytes */
-+
-+ struct nvme_sq admin_sq;
-+ struct nvme_cq admin_cq;
-+
-+ grub_uint32_t ns_count;
-+
-+ struct nvme_sq io_sq;
-+ struct nvme_cq io_cq;
-+};
-+
-+struct nvme_namespace {
-+ struct nvme_namespace *next;
-+ struct nvme_namespace **prev;
-+
-+ char *devname;
-+
-+ grub_uint32_t nsnum;
-+
-+ struct nvme_ctrl *ctrl;
-+
-+ grub_uint32_t ns_id;
-+
-+ grub_uint64_t lba_count; /* The total amount of sectors. */
-+
-+ grub_uint32_t block_size;
-+ grub_uint32_t metadata_size;
-+ grub_uint32_t max_req_size;
-+};
-+
-+/* Data structures for NVMe admin identify commands */
-+
-+struct nvme_identify_ctrl {
-+ grub_uint16_t vid;
-+ grub_uint16_t ssvid;
-+ char sn[20];
-+ char mn[40];
-+ char fr[8];
-+
-+ grub_uint8_t rab;
-+ grub_uint8_t ieee[3];
-+ grub_uint8_t cmic;
-+ grub_uint8_t mdts;
-+
-+ char _boring[516 - 78];
-+
-+ grub_uint32_t nn; /* number of namespaces */
-+};
-+
-+struct nvme_identify_ns_list {
-+ grub_uint32_t ns_id[1024];
-+};
-+
-+struct nvme_lba_format {
-+ grub_uint16_t ms;
-+ grub_uint8_t lbads;
-+ grub_uint8_t rp;
-+};
-+
-+struct nvme_identify_ns {
-+ grub_uint64_t nsze;
-+ grub_uint64_t ncap;
-+ grub_uint64_t nuse;
-+ grub_uint8_t nsfeat;
-+ grub_uint8_t nlbaf;
-+ grub_uint8_t flbas;
-+
-+ char _boring[128 - 27];
-+
-+ struct nvme_lba_format lbaf[16];
-+};
-+
-+union nvme_identify {
-+ struct nvme_identify_ns ns;
-+ struct nvme_identify_ctrl ctrl;
-+ struct nvme_identify_ns_list ns_list;
-+};
-+
-+/* NVMe constants */
-+
-+#define NVME_CAP_CSS_NVME (1ULL << 37)
-+
-+#define NVME_CSTS_FATAL (1U << 1)
-+#define NVME_CSTS_RDY (1U << 0)
-+
-+#define NVME_CC_EN (1U << 0)
-+
-+#define NVME_SQE_OPC_ADMIN_CREATE_IO_SQ 1U
-+#define NVME_SQE_OPC_ADMIN_CREATE_IO_CQ 5U
-+#define NVME_SQE_OPC_ADMIN_IDENTIFY 6U
-+
-+#define NVME_SQE_OPC_IO_WRITE 1U
-+#define NVME_SQE_OPC_IO_READ 2U
-+
-+#define NVME_ADMIN_IDENTIFY_CNS_ID_NS 0U
-+#define NVME_ADMIN_IDENTIFY_CNS_ID_CTRL 1U
-+#define NVME_ADMIN_IDENTIFY_CNS_GET_NS_LIST 2U
-+
-+#define NVME_CQE_DW3_P (1U << 16)
-+
-+#define NVME_PAGE_SIZE 4096
-+#define NVME_PAGE_MASK ~(NVME_PAGE_SIZE - 1)
-+
-+/* Length for the queue entries. */
-+#define NVME_SQE_SIZE_LOG 6
-+#define NVME_CQE_SIZE_LOG 4
-+
-+#endif
-+
-+/* EOF */
-diff --git a/grub-core/disk/nvme.c b/grub-core/disk/nvme.c
-new file mode 100644
-index 000000000..093237c70
---- /dev/null
-+++ b/grub-core/disk/nvme.c
-@@ -0,0 +1,781 @@
-+// Low level NVMe disk access
-+//
-+// Based on SeaBIOS NVMe driver - Copyright 2017 Amazon.com, Inc. or its affiliates.
-+// Port to GRUB2 done by Mate Kukri
-+//
-+// This file may be distributed under the terms of the GNU LGPLv3 license.
-+
-+#include <grub/disk.h>
-+#include <grub/dl.h>
-+#include <grub/pci.h>
-+#include "nvme-int.h"
-+
-+GRUB_MOD_LICENSE ("GPLv3"); /* LGPLv3 in reality but it is GPLv3 compatible */
-+
-+static grub_uint32_t grub_nvme_ctrlcnt;
-+static grub_uint32_t grub_nvme_nscnt;
-+
-+static struct nvme_namespace *grub_nvme_namespaces;
-+
-+// Page aligned "dma bounce buffer" of size NVME_PAGE_SIZE
-+static void *nvme_dma_buffer;
-+
-+static void *
-+zalloc_page_aligned(grub_uint32_t size)
-+{
-+ void *res = grub_memalign(NVME_PAGE_SIZE, size);
-+ if (res) grub_memset(res, 0, size);
-+ return res;
-+}
-+
-+static void
-+nvme_init_queue_common(struct nvme_ctrl *ctrl, struct nvme_queue *q, grub_uint16_t q_idx,
-+ grub_uint16_t length)
-+{
-+ grub_memset(q, 0, sizeof(*q));
-+ q->dbl = (grub_uint32_t *)((char *)ctrl->reg + 0x1000 + q_idx * ctrl->doorbell_stride);
-+ grub_dprintf("nvme", " q %p q_idx %u dbl %p\n", q, q_idx, q->dbl);
-+ q->mask = length - 1;
-+}
-+
-+static int
-+nvme_init_sq(struct nvme_ctrl *ctrl, struct nvme_sq *sq, grub_uint16_t q_idx, grub_uint16_t length,
-+ struct nvme_cq *cq)
-+{
-+ nvme_init_queue_common(ctrl, &sq->common, q_idx, length);
-+ sq->sqe = zalloc_page_aligned(sizeof(*sq->sqe) * length);
-+
-+ if (!sq->sqe) {
-+ return -1;
-+ }
-+
-+ grub_dprintf("nvme", "sq %p q_idx %u sqe %p\n", sq, q_idx, sq->sqe);
-+ sq->cq = cq;
-+ sq->head = 0;
-+ sq->tail = 0;
-+
-+ return 0;
-+}
-+
-+static int
-+nvme_init_cq(struct nvme_ctrl *ctrl, struct nvme_cq *cq, grub_uint16_t q_idx, grub_uint16_t length)
-+{
-+ nvme_init_queue_common(ctrl, &cq->common, q_idx, length);
-+ cq->cqe = zalloc_page_aligned(sizeof(*cq->cqe) * length);
-+ if (!cq->cqe) {
-+ return -1;
-+ }
-+
-+ cq->head = 0;
-+
-+ /* All CQE phase bits are initialized to zero. This means initially we wait
-+ for the host controller to set these to 1. */
-+ cq->phase = 1;
-+
-+ return 0;
-+}
-+
-+static int
-+nvme_poll_cq(struct nvme_cq *cq)
-+{
-+ grub_uint32_t dw3 = *(volatile grub_uint32_t *) &cq->cqe[cq->head].dword[3];
-+ return (!!(dw3 & NVME_CQE_DW3_P) == cq->phase);
-+}
-+
-+static int
-+nvme_is_cqe_success(struct nvme_cqe const *cqe)
-+{
-+ return ((cqe->status >> 1) & 0xFF) == 0;
-+}
-+
-+static struct nvme_cqe
-+nvme_error_cqe(void)
-+{
-+ struct nvme_cqe r;
-+
-+ /* 0xFF is a vendor specific status code != success. Should be okay for
-+ indicating failure. */
-+ grub_memset(&r, 0xFF, sizeof(r));
-+ return r;
-+}
-+
-+static struct nvme_cqe
-+nvme_consume_cqe(struct nvme_sq *sq)
-+{
-+ struct nvme_cq *cq = sq->cq;
-+
-+ if (!nvme_poll_cq(cq)) {
-+ /* Cannot consume a completion queue entry, if there is none ready. */
-+ return nvme_error_cqe();
-+ }
-+
-+ struct nvme_cqe *cqe = &cq->cqe[cq->head];
-+ grub_uint16_t cq_next_head = (cq->head + 1) & cq->common.mask;
-+ grub_dprintf("nvme", "cq %p head %u -> %u\n", cq, cq->head, cq_next_head);
-+ if (cq_next_head < cq->head) {
-+ grub_dprintf("nvme", "cq %p wrap\n", cq);
-+ cq->phase = ~cq->phase;
-+ }
-+ cq->head = cq_next_head;
-+
-+ /* Update the submission queue head. */
-+ if (cqe->sq_head != sq->head) {
-+ sq->head = cqe->sq_head;
-+ grub_dprintf("nvme", "sq %p advanced to %u\n", sq, cqe->sq_head);
-+ }
-+
-+ /* Tell the controller that we consumed the completion. */
-+ *(volatile grub_uint32_t *) cq->common.dbl = cq->head;
-+
-+ return *cqe;
-+}
-+
-+static struct nvme_cqe
-+nvme_wait(struct nvme_sq *sq)
-+{
-+ // static const unsigned nvme_timeout = 5000 /* ms */;
-+ // grub_uint32_t to = timer_calc(nvme_timeout);
-+ while (!nvme_poll_cq(sq->cq)) {
-+ /* FIXME
-+ yield();
-+
-+ if (timer_check(to)) {
-+ warn_timeout();
-+ return nvme_error_cqe();
-+ }*/
-+ }
-+
-+ return nvme_consume_cqe(sq);
-+}
-+
-+/* Returns the next submission queue entry (or NULL if the queue is full). It
-+ also fills out Command Dword 0 and clears the rest. */
-+static struct nvme_sqe *
-+nvme_get_next_sqe(struct nvme_sq *sq, grub_uint8_t opc, void *metadata, void *data, void *data2)
-+{
-+ if (((sq->head + 1) & sq->common.mask) == sq->tail) {
-+ grub_dprintf("nvme", "submission queue is full\n");
-+ return NULL;
-+ }
-+
-+ struct nvme_sqe *sqe = &sq->sqe[sq->tail];
-+ grub_dprintf("nvme", "sq %p next_sqe %u\n", sq, sq->tail);
-+
-+ grub_memset(sqe, 0, sizeof(*sqe));
-+ sqe->cdw0 = opc | (sq->tail << 16 /* CID */);
-+ sqe->mptr = (grub_uint32_t)metadata;
-+ sqe->dptr_prp1 = (grub_uint32_t)data;
-+ sqe->dptr_prp2 = (grub_uint32_t)data2;
-+
-+ return sqe;
-+}
-+
-+/* Call this after you've filled out an sqe that you've got from nvme_get_next_sqe. */
-+static void
-+nvme_commit_sqe(struct nvme_sq *sq)
-+{
-+ grub_dprintf("nvme", "sq %p commit_sqe %u\n", sq, sq->tail);
-+ sq->tail = (sq->tail + 1) & sq->common.mask;
-+ *(volatile grub_uint32_t *) sq->common.dbl = sq->tail;
-+}
-+
-+/* Perform an identify command on the admin queue and return the resulting
-+ buffer. This may be a NULL pointer, if something failed. This function
-+ cannot be used after initialization, because it uses buffers in tmp zone. */
-+static union nvme_identify *
-+nvme_admin_identify(struct nvme_ctrl *ctrl, grub_uint8_t cns, grub_uint32_t nsid)
-+{
-+ union nvme_identify *identify_buf = zalloc_page_aligned(4096);
-+ if (!identify_buf)
-+ return NULL;
-+
-+ struct nvme_sqe *cmd_identify;
-+ cmd_identify = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_IDENTIFY, NULL,
-+ identify_buf, NULL);
-+ if (!cmd_identify)
-+ goto error;
-+
-+ cmd_identify->nsid = nsid;
-+ cmd_identify->dword[10] = cns;
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ goto error;
-+ }
-+
-+ return identify_buf;
-+ error:
-+ grub_free(identify_buf);
-+ return NULL;
-+}
-+
-+static struct nvme_identify_ctrl *
-+nvme_admin_identify_ctrl(struct nvme_ctrl *ctrl)
-+{
-+ return &nvme_admin_identify(ctrl, NVME_ADMIN_IDENTIFY_CNS_ID_CTRL, 0)->ctrl;
-+}
-+
-+static struct nvme_identify_ns *
-+nvme_admin_identify_ns(struct nvme_ctrl *ctrl, grub_uint32_t ns_id)
-+{
-+ return &nvme_admin_identify(ctrl, NVME_ADMIN_IDENTIFY_CNS_ID_NS,
-+ ns_id)->ns;
-+}
-+
-+static void
-+nvme_probe_ns(struct nvme_ctrl *ctrl, grub_uint32_t ns_idx, grub_uint8_t mdts)
-+{
-+ grub_uint32_t ns_id = ns_idx + 1;
-+
-+ struct nvme_identify_ns *id = nvme_admin_identify_ns(ctrl, ns_id);
-+ if (!id) {
-+ grub_dprintf("nvme", "NVMe couldn't identify namespace %u.\n", ns_id);
-+ goto free_buffer;
-+ }
-+
-+ grub_uint8_t current_lba_format = id->flbas & 0xF;
-+ if (current_lba_format > id->nlbaf) {
-+ grub_dprintf("nvme", "NVMe NS %u: current LBA format %u is beyond what the "
-+ " namespace supports (%u)?\n",
-+ ns_id, current_lba_format, id->nlbaf + 1);
-+ goto free_buffer;
-+ }
-+
-+ if (!id->nsze) {
-+ grub_dprintf("nvme", "NVMe NS %u is inactive.\n", ns_id);
-+ goto free_buffer;
-+ }
-+
-+ if (!nvme_dma_buffer) {
-+ nvme_dma_buffer = zalloc_page_aligned(NVME_PAGE_SIZE);
-+ if (!nvme_dma_buffer) {
-+ goto free_buffer;
-+ }
-+ }
-+
-+ struct nvme_namespace *ns = grub_malloc(sizeof(*ns));
-+ if (!ns) {
-+ goto free_buffer;
-+ }
-+ grub_memset(ns, 0, sizeof(*ns));
-+ ns->ctrl = ctrl;
-+ ns->ns_id = ns_id;
-+ ns->lba_count = id->nsze;
-+
-+ struct nvme_lba_format *fmt = &id->lbaf[current_lba_format];
-+
-+ ns->block_size = 1U << fmt->lbads;
-+ ns->metadata_size = fmt->ms;
-+
-+ if (ns->block_size > NVME_PAGE_SIZE) {
-+ /* If we see devices that trigger this path, we need to increase our
-+ buffer size. */
-+ grub_free(ns);
-+ goto free_buffer;
-+ }
-+
-+ if (mdts) {
-+ ns->max_req_size = ((1U << mdts) * NVME_PAGE_SIZE) / ns->block_size;
-+ grub_dprintf("nvme", "NVME NS %u max request size: %d sectors\n",
-+ ns_id, ns->max_req_size);
-+ } else {
-+ ns->max_req_size = -1U;
-+ }
-+
-+ ns->devname = grub_xasprintf("nvme%un%u", ctrl->ctrlnum, ns_id);
-+ ns->nsnum = grub_nvme_nscnt++;
-+
-+ grub_list_push (GRUB_AS_LIST_P (&grub_nvme_namespaces), GRUB_AS_LIST (ns));
-+
-+free_buffer:
-+ grub_free(id);
-+}
-+
-+
-+/* Release memory allocated for a completion queue */
-+static void
-+nvme_destroy_cq(struct nvme_cq *cq)
-+{
-+ grub_free(cq->cqe);
-+ cq->cqe = NULL;
-+}
-+
-+/* Release memory allocated for a submission queue */
-+static void
-+nvme_destroy_sq(struct nvme_sq *sq)
-+{
-+ grub_free(sq->sqe);
-+ sq->sqe = NULL;
-+}
-+
-+/* Returns 0 on success. */
-+static int
-+nvme_create_io_cq(struct nvme_ctrl *ctrl, struct nvme_cq *cq, grub_uint16_t q_idx)
-+{
-+ int rc;
-+ struct nvme_sqe *cmd_create_cq;
-+ grub_uint32_t length = 1 + (ctrl->reg->cap & 0xffff);
-+ if (length > NVME_PAGE_SIZE / sizeof(struct nvme_cqe))
-+ length = NVME_PAGE_SIZE / sizeof(struct nvme_cqe);
-+
-+ rc = nvme_init_cq(ctrl, cq, q_idx, length);
-+ if (rc) {
-+ goto err;
-+ }
-+
-+ cmd_create_cq = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_CREATE_IO_CQ, NULL,
-+ cq->cqe, NULL);
-+ if (!cmd_create_cq) {
-+ goto err_destroy_cq;
-+ }
-+
-+ cmd_create_cq->dword[10] = (cq->common.mask << 16) | (q_idx >> 1);
-+ cmd_create_cq->dword[11] = 1 /* physically contiguous */;
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "create io cq failed: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+
-+ goto err_destroy_cq;
-+ }
-+
-+ return 0;
-+
-+err_destroy_cq:
-+ nvme_destroy_cq(cq);
-+err:
-+ return -1;
-+}
-+
-+/* Returns 0 on success. */
-+static int
-+nvme_create_io_sq(struct nvme_ctrl *ctrl, struct nvme_sq *sq, grub_uint16_t q_idx, struct nvme_cq *cq)
-+{
-+ int rc;
-+ struct nvme_sqe *cmd_create_sq;
-+ grub_uint32_t length = 1 + (ctrl->reg->cap & 0xffff);
-+ if (length > NVME_PAGE_SIZE / sizeof(struct nvme_cqe))
-+ length = NVME_PAGE_SIZE / sizeof(struct nvme_cqe);
-+
-+ rc = nvme_init_sq(ctrl, sq, q_idx, length, cq);
-+ if (rc) {
-+ goto err;
-+ }
-+
-+ cmd_create_sq = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_CREATE_IO_SQ, NULL,
-+ sq->sqe, NULL);
-+ if (!cmd_create_sq) {
-+ goto err_destroy_sq;
-+ }
-+
-+ cmd_create_sq->dword[10] = (sq->common.mask << 16) | (q_idx >> 1);
-+ cmd_create_sq->dword[11] = (q_idx >> 1) << 16 | 1 /* contiguous */;
-+ grub_dprintf("nvme", "sq %p create dword10 %08x dword11 %08x\n", sq,
-+ cmd_create_sq->dword[10], cmd_create_sq->dword[11]);
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "create io sq failed: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+ goto err_destroy_sq;
-+ }
-+
-+ return 0;
-+
-+err_destroy_sq:
-+ nvme_destroy_sq(sq);
-+err:
-+ return -1;
-+}
-+
-+/* Reads count sectors into buf. The buffer cannot cross page boundaries. */
-+static int
-+nvme_io_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *prp1, void *prp2,
-+ grub_uint16_t count, int write)
-+{
-+ if (((grub_uint32_t)prp1 & 0x3) || ((grub_uint32_t)prp2 & 0x3)) {
-+ /* Buffer is misaligned */
-+ return -1;
-+ }
-+
-+ struct nvme_sqe *io_read = nvme_get_next_sqe(&ns->ctrl->io_sq,
-+ write ? NVME_SQE_OPC_IO_WRITE
-+ : NVME_SQE_OPC_IO_READ,
-+ NULL, prp1, prp2);
-+ io_read->nsid = ns->ns_id;
-+ io_read->dword[10] = (grub_uint32_t)lba;
-+ io_read->dword[11] = (grub_uint32_t)(lba >> 32);
-+ io_read->dword[12] = (1U << 31 /* limited retry */) | (count - 1);
-+
-+ nvme_commit_sqe(&ns->ctrl->io_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ns->ctrl->io_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "read io: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+
-+ return -1;
-+ }
-+
-+ grub_dprintf("nvme", "ns %u %s lba %llu+%u\n", ns->ns_id, write ? "write" : "read",
-+ lba, count);
-+ return count;
-+}
-+
-+// Transfer up to one page of data using the internal dma bounce buffer
-+static int
-+nvme_bounce_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *buf, grub_uint16_t count,
-+ int write)
-+{
-+ grub_uint16_t const max_blocks = NVME_PAGE_SIZE / ns->block_size;
-+ grub_uint16_t blocks = count < max_blocks ? count : max_blocks;
-+
-+ if (write)
-+ grub_memcpy(nvme_dma_buffer, buf, blocks * ns->block_size);
-+
-+ int res = nvme_io_xfer(ns, lba, nvme_dma_buffer, NULL, blocks, write);
-+
-+ if (!write && res >= 0)
-+ grub_memcpy(buf, nvme_dma_buffer, res * ns->block_size);
-+
-+ return res;
-+}
-+
-+#define NVME_MAX_PRPL_ENTRIES 15 /* Allows requests up to 64kb */
-+
-+// Transfer data using page list (if applicable)
-+static int
-+nvme_prpl_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *buf, grub_uint16_t count,
-+ int write)
-+{
-+ grub_uint32_t base = (long)buf;
-+ grub_int32_t size;
-+
-+ if (count > ns->max_req_size)
-+ count = ns->max_req_size;
-+
-+ size = count * ns->block_size;
-+ /* Special case for transfers that fit into PRP1, but are unaligned */
-+ if (((size + (base & ~NVME_PAGE_MASK)) <= NVME_PAGE_SIZE))
-+ goto single;
-+
-+ /* Every request has to be page aligned */
-+ if (base & ~NVME_PAGE_MASK)
-+ goto bounce;
-+
-+ /* Make sure a full block fits into the last chunk */
-+ if (size & (ns->block_size - 1ULL))
-+ goto bounce;
-+
-+ /* Build PRP list if we need to describe more than 2 pages */
-+ if ((ns->block_size * count) > (NVME_PAGE_SIZE * 2)) {
-+ grub_uint32_t prpl_len = 0;
-+ grub_uint64_t *prpl = nvme_dma_buffer;
-+ int first_page = 1;
-+ for (; size > 0; base += NVME_PAGE_SIZE, size -= NVME_PAGE_SIZE) {
-+ if (first_page) {
-+ /* First page is special */
-+ first_page = 0;
-+ continue;
-+ }
-+ if (prpl_len >= NVME_MAX_PRPL_ENTRIES)
-+ goto bounce;
-+ prpl[prpl_len++] = base;
-+ }
-+ return nvme_io_xfer(ns, lba, buf, prpl, count, write);
-+ }
-+
-+ /* Directly embed the 2nd page if we only need 2 pages */
-+ if ((ns->block_size * count) > NVME_PAGE_SIZE)
-+ return nvme_io_xfer(ns, lba, buf, (char *) buf + NVME_PAGE_SIZE, count, write);
-+
-+single:
-+ /* One page is enough, don't expose anything else */
-+ return nvme_io_xfer(ns, lba, buf, NULL, count, write);
-+
-+bounce:
-+ /* Use bounce buffer to make transfer */
-+ return nvme_bounce_xfer(ns, lba, buf, count, write);
-+}
-+
-+static int
-+nvme_create_io_queues(struct nvme_ctrl *ctrl)
-+{
-+ if (nvme_create_io_cq(ctrl, &ctrl->io_cq, 3))
-+ goto err;
-+
-+ if (nvme_create_io_sq(ctrl, &ctrl->io_sq, 2, &ctrl->io_cq))
-+ goto err_free_cq;
-+
-+ return 0;
-+
-+ err_free_cq:
-+ nvme_destroy_cq(&ctrl->io_cq);
-+ err:
-+ return -1;
-+}
-+
-+/* Waits for CSTS.RDY to match rdy. Returns 0 on success. */
-+static int
-+nvme_wait_csts_rdy(struct nvme_ctrl *ctrl, unsigned rdy)
-+{
-+ // grub_uint32_t const max_to = 500 /* ms */ * ((ctrl->reg->cap >> 24) & 0xFFU);
-+ // grub_uint32_t to = timer_calc(max_to);
-+ grub_uint32_t csts;
-+
-+ while (rdy != ((csts = ctrl->reg->csts) & NVME_CSTS_RDY)) {
-+ // FIXME
-+ //yield();
-+
-+ if (csts & NVME_CSTS_FATAL) {
-+ grub_dprintf("nvme", "NVMe fatal error during controller shutdown\n");
-+ return -1;
-+ }
-+
-+ /*
-+ if (timer_check(to)) {
-+ warn_timeout();
-+ return -1;
-+ }*/
-+ }
-+
-+ return 0;
-+}
-+
-+/* Returns 0 on success. */
-+static int grub_nvme_controller_enable(struct nvme_ctrl *ctrl)
-+{
-+ grub_pci_address_t addr;
-+ int rc;
-+
-+ addr = grub_pci_make_address (ctrl->pci, GRUB_PCI_REG_COMMAND);
-+ grub_pci_write_word (addr, grub_pci_read_word (addr) | GRUB_PCI_COMMAND_BUS_MASTER);
-+
-+ /* Turn the controller off. */
-+ ctrl->reg->cc = 0;
-+ if (nvme_wait_csts_rdy(ctrl, 0)) {
-+ grub_dprintf("nvme", "NVMe fatal error during controller shutdown\n");
-+ return -1;
-+ }
-+
-+ ctrl->doorbell_stride = 4U << ((ctrl->reg->cap >> 32) & 0xF);
-+
-+ rc = nvme_init_cq(ctrl, &ctrl->admin_cq, 1,
-+ NVME_PAGE_SIZE / sizeof(struct nvme_cqe));
-+ if (rc) {
-+ return -1;
-+ }
-+
-+ rc = nvme_init_sq(ctrl, &ctrl->admin_sq, 0,
-+ NVME_PAGE_SIZE / sizeof(struct nvme_sqe), &ctrl->admin_cq);
-+ if (rc) {
-+ goto err_destroy_admin_cq;
-+ }
-+
-+ ctrl->reg->aqa = ctrl->admin_cq.common.mask << 16
-+ | ctrl->admin_sq.common.mask;
-+
-+ ctrl->reg->asq = (grub_uint32_t)ctrl->admin_sq.sqe;
-+ ctrl->reg->acq = (grub_uint32_t)ctrl->admin_cq.cqe;
-+
-+ grub_dprintf("nvme", " admin submission queue: %p\n", ctrl->admin_sq.sqe);
-+ grub_dprintf("nvme", " admin completion queue: %p\n", ctrl->admin_cq.cqe);
-+
-+ ctrl->reg->cc = NVME_CC_EN | (NVME_CQE_SIZE_LOG << 20)
-+ | (NVME_SQE_SIZE_LOG << 16 /* IOSQES */);
-+
-+ if (nvme_wait_csts_rdy(ctrl, 1)) {
-+ grub_dprintf("nvme", "NVMe fatal error while enabling controller\n");
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ /* The admin queue is set up and the controller is ready. Let's figure out
-+ what namespaces we have. */
-+
-+ struct nvme_identify_ctrl *identify = nvme_admin_identify_ctrl(ctrl);
-+
-+ if (!identify) {
-+ grub_dprintf("nvme", "NVMe couldn't identify controller.\n");
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ grub_dprintf("nvme", "NVMe has %u namespace%s.\n",
-+ identify->nn, (identify->nn == 1) ? "" : "s");
-+
-+ ctrl->ns_count = identify->nn;
-+ grub_uint8_t mdts = identify->mdts;
-+ grub_free(identify);
-+
-+ if ((ctrl->ns_count == 0) || nvme_create_io_queues(ctrl)) {
-+ /* No point to continue, if the controller says it doesn't have
-+ namespaces or we couldn't create I/O queues. */
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ /* Give the controller a global number */
-+ ctrl->ctrlnum = grub_nvme_ctrlcnt++;
-+
-+ /* Populate namespace IDs */
-+ for (grub_uint32_t ns_idx = 0; ns_idx < ctrl->ns_count; ns_idx++) {
-+ nvme_probe_ns(ctrl, ns_idx, mdts);
-+ }
-+
-+ grub_dprintf("nvme", "NVMe initialization complete!\n");
-+ return 0;
-+
-+ err_destroy_admin_sq:
-+ nvme_destroy_sq(&ctrl->admin_sq);
-+ err_destroy_admin_cq:
-+ nvme_destroy_cq(&ctrl->admin_cq);
-+ return -1;
-+}
-+
-+static int grub_nvme_pci_probe(grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)), void *data __attribute__ ((unused)))
-+{
-+ grub_pci_address_t addr;
-+ grub_uint32_t class, bar, version;
-+ struct nvme_reg volatile *reg;
-+
-+ class = grub_pci_read (grub_pci_make_address (dev, GRUB_PCI_REG_CLASS));
-+ if (class >> 16 != 0x0108)
-+ return 0;
-+ if ((class >> 8 & 0xff) != 2) { /* as of NVM 1.0e */
-+ grub_dprintf("nvme", "Found incompatble NVMe: prog-if=%02x\n", class >> 8 & 0xff);
-+ return 0;
-+ }
-+
-+ bar = grub_pci_read (grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0));
-+ reg = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK, sizeof (*reg));
-+
-+ addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
-+ grub_pci_write_word (addr, grub_pci_read_word (addr) | GRUB_PCI_COMMAND_MEM_ENABLED);
-+
-+ version = reg->vs;
-+ grub_dprintf("nvme", "Found NVMe controller with version %u.%u.%u.\n", version >> 16, (version >> 8) & 0xFF, version & 0xFF);
-+ grub_dprintf("nvme", " Capabilities %016llx\n", reg->cap);
-+
-+ if (~reg->cap & NVME_CAP_CSS_NVME) {
-+ grub_dprintf("nvme", "Controller doesn't speak NVMe command set. Skipping.\n");
-+ goto err;
-+ }
-+
-+ struct nvme_ctrl *ctrl = grub_malloc(sizeof(*ctrl));
-+ if (!ctrl)
-+ goto err;
-+
-+ grub_memset(ctrl, 0, sizeof(*ctrl));
-+
-+ ctrl->reg = reg;
-+ ctrl->pci = dev;
-+
-+ if (grub_nvme_controller_enable(ctrl))
-+ goto err_free_ctrl;
-+
-+ return 0;
-+
-+ err_free_ctrl:
-+ grub_free(ctrl);
-+ err:
-+ grub_dprintf("nvme", "Failed to enable NVMe controller.\n");
-+ return 0;
-+}
-+
-+static int
-+grub_nvme_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, grub_disk_pull_t pull)
-+{
-+ struct nvme_namespace *ns;
-+
-+ if (pull != GRUB_DISK_PULL_NONE)
-+ return 0;
-+
-+ FOR_LIST_ELEMENTS(ns, grub_nvme_namespaces)
-+ if (hook (ns->devname, hook_data))
-+ return 1;
-+
-+ return 0;
-+}
-+
-+static grub_err_t
-+grub_nvme_open (const char *name __attribute ((unused)), grub_disk_t disk __attribute ((unused)))
-+{
-+ struct nvme_namespace *ns;
-+
-+ FOR_LIST_ELEMENTS(ns, grub_nvme_namespaces)
-+ if (grub_strcmp (ns->devname, name) == 0)
-+ break;
-+
-+ if (! ns)
-+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
-+
-+ disk->total_sectors = ns->lba_count;
-+ disk->max_agglomerate = ns->max_req_size;
-+
-+ disk->id = ns->nsnum; /* global id of the namespace */
-+
-+ disk->data = ns;
-+
-+ return 0;
-+}
-+
-+static grub_err_t
-+nvme_readwrite(struct nvme_namespace *ns, grub_disk_addr_t sector, grub_size_t num_sectors, char *buf, int write)
-+{
-+ for (int i = 0; i < num_sectors;) {
-+ grub_uint16_t blocks_remaining = num_sectors - i;
-+ char *op_buf = buf + i * ns->block_size;
-+ int blocks = nvme_prpl_xfer(ns, sector + i, op_buf, blocks_remaining, write);
-+ if (blocks < 0)
-+ return GRUB_ERR_IO;
-+ i += blocks;
-+ }
-+ return GRUB_ERR_NONE;
-+}
-+
-+static grub_err_t
-+grub_nvme_read (grub_disk_t disk, grub_disk_addr_t sector, grub_size_t num_sectors, char *buf)
-+{
-+ return nvme_readwrite((struct nvme_namespace *) disk->data, sector, num_sectors, buf, 0);
-+}
-+
-+static grub_err_t
-+grub_nvme_write (grub_disk_t disk, grub_disk_addr_t sector, grub_size_t num_sectors, const char *buf)
-+{
-+ return nvme_readwrite((struct nvme_namespace *) disk->data, sector, num_sectors, buf, 1);
-+}
-+
-+static struct grub_disk_dev grub_nvme_dev =
-+ {
-+ .name = "nvme",
-+ .id = GRUB_DISK_DEVICE_NVME_ID,
-+ .disk_iterate = grub_nvme_iterate,
-+ .disk_open = grub_nvme_open,
-+ .disk_read = grub_nvme_read,
-+ .disk_write = grub_nvme_write,
-+ .next = 0
-+ };
-+
-+GRUB_MOD_INIT(nvme)
-+{
-+ grub_stop_disk_firmware ();
-+ grub_pci_iterate (grub_nvme_pci_probe, NULL);
-+ grub_disk_dev_register (&grub_nvme_dev);
-+}
-+
-+GRUB_MOD_FINI(nvme)
-+{
-+ grub_disk_dev_unregister (&grub_nvme_dev);
-+}
-diff --git a/include/grub/disk.h b/include/grub/disk.h
-index fbf23df7f..186e76f0b 100644
---- a/include/grub/disk.h
-+++ b/include/grub/disk.h
-@@ -52,6 +52,7 @@ enum grub_disk_dev_id
- GRUB_DISK_DEVICE_UBOOTDISK_ID,
- GRUB_DISK_DEVICE_XEN,
- GRUB_DISK_DEVICE_OBDISK_ID,
-+ GRUB_DISK_DEVICE_NVME_ID
- };
-
- struct grub_disk;
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch b/config/module/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch
deleted file mode 100644
index 8e78e8b7..00000000
--- a/config/module/grub/nvme/patches/0010-Revert-configure-Check-linker-for-image-base-support.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 7b0d621389fc1857c918058f82093f9630ea7730 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Wed, 24 Dec 2025 01:42:17 +0100
-Subject: [PATCH 10/10] Revert "configure: Check linker for --image-base
- support"
-
-This reverts commit 1a5417f39a0ccefcdd5440f2a67f84d2d2e26960.
----
- acinclude.m4 | 5 -----
- configure.ac | 14 ++------------
- 2 files changed, 2 insertions(+), 17 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 70c1912f8..fa7840f09 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -79,11 +79,6 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
- [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
- AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
- [cat > conftest.c <<\EOF
--asm (
-- ".globl start, _start, __start\n"
-- ".ifdef cmain; .set start = _start = __start = cmain\n.endif\n"
-- ".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n"
--);
- void cmain (void);
- void
- cmain (void)
-diff --git a/configure.ac b/configure.ac
-index d8ca1b7c1..041cfbab4 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1461,6 +1461,7 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_c
- TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc"
- TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
- TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc"
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- else
- TARGET_APPLE_LINKER=0
-@@ -1468,6 +1469,7 @@ else
- TARGET_IMG_LDSCRIPT=
- TARGET_IMG_LDFLAGS='-Wl,-N'
- TARGET_IMG_LDFLAGS_AC='-Wl,-N'
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- fi
-
-@@ -1798,18 +1800,6 @@ grub_PROG_TARGET_CC
- m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
-
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
--AX_CHECK_LINK_FLAG([-Wl,--image-base,0x400000],
-- [TARGET_IMG_BASE_LDOPT="-Wl,--image-base"],
-- [TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"],
-- [],
-- [AC_LANG_SOURCE([
--asm (".globl start; start:");
--asm (".globl _start; _start:");
--asm (".globl __start; __start:");
--void __main (void);
--void __main (void) {}
--int main (void);
-- ])])
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
- grub_PROG_LD_BUILD_ID_NONE
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0011-Revert-configure-Print-a-more-helpful-error-if-autoc.patch b/config/module/grub/nvme/patches/0011-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
deleted file mode 100644
index c0a504ff..00000000
--- a/config/module/grub/nvme/patches/0011-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From abf2bf6e2973ccaa994f63ff851ba11cbd45f1eb Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Mon, 19 Jan 2026 15:27:23 +0000
-Subject: [PATCH 1/1] Revert "configure: Print a more helpful error if
- autoconf-archive is not installed"
-
-This reverts commit ac042f3f58d33ce9cd5ff61750f06da1a1d7b0eb.
----
- configure.ac | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 041cfbab4..209c0fb11 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1794,11 +1794,6 @@ LIBS=""
- # Defined in acinclude.m4.
- grub_ASM_USCORE
- grub_PROG_TARGET_CC
--
--# The error message produced by autoconf if autoconf-archive is not installed is
--# quite misleading and not very helpful. So, try point people in the right direction.
--m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
--
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0012-bootstrap-Don-t-download-po-files.patch b/config/module/grub/nvme/patches/0012-bootstrap-Don-t-download-po-files.patch
deleted file mode 100644
index cfb66047..00000000
--- a/config/module/grub/nvme/patches/0012-bootstrap-Don-t-download-po-files.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 5d18c96a22d98d137ea40bfc6aabadce933c2d45 Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Sun, 1 Feb 2026 20:30:55 +0100
-Subject: [PATCH 1/1] bootstrap: Don't download po files
-
-GRUB doesn't verify checksums at all, and it pulls from
-this URL recursively:
-
-https://translationproject.org/latest/grub/
-
-These files can change at any time, and GRUB is just
-downloading them trustingly. Even if the upstream is
-totally benevolent, what if they got hacked?
-
-I downloaded them, hashed them and decided to mirror
-them on my RSYNC mirror. In this way, Libreboot can now
-use them in a deterministic fashion.
-
-Simply adding them to the GRUB source code would mean
-patching GRUB, which would add 8MB to lbmk. I won't do
-it.
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- bootstrap | 31 +++++++++++++------------------
- 1 file changed, 13 insertions(+), 18 deletions(-)
-
-diff --git a/bootstrap b/bootstrap
-index dc9fb4383..9fc5a5c36 100755
---- a/bootstrap
-+++ b/bootstrap
-@@ -1,5 +1,16 @@
- #! /bin/sh
--# DO NOT EDIT! GENERATED AUTOMATICALLY!
-+# THIS FILE WAS EDITED BY LIBREBOOT TO REMOVE
-+# HACKY GRUB BEHAVIOUR; po files now downloaded
-+# by lbmk, via config/submodule/grub/ - so that
-+# versioned files are possible, with proper checksum
-+# verification, and mirrors are used.
-+
-+# Yes. This file has been modified. I intend to
-+# eventually remove this hacky script. Probably
-+# replace the entire GRUB build system.
-+
-+# Please do fix/edit or (when possible) remove
-+# this file. Thank you.
-
- # Bootstrap this package from checked-out sources.
-
-@@ -145,13 +156,6 @@ bootstrap_post_import_hook() { :; }
- # Override it via your own definition in bootstrap.conf.
- bootstrap_epilogue() { :; }
-
--# The command to download all .po files for a specified domain into a
--# specified directory. Fill in the first %s with the destination
--# directory and the second with the domain name.
--po_download_command_format=\
--"wget --mirror --level=1 -nd -nv -A.po -P '%s' \
-- https://translationproject.org/latest/%s/"
--
- # When extracting the package name from an AC_INIT invocation,
- # prefer a non-empty tarname (4th argument of AC_INIT if given), else
- # fall back to the package name (1st argument with munging).
-@@ -909,14 +913,6 @@ autopull()
-
- # ----------------------------- Get translations. -----------------------------
-
--download_po_files() {
-- subdir=$1
-- domain=$2
-- echo "$me: getting translations into $subdir for $domain..."
-- cmd=$(printf "$po_download_command_format" "$subdir" "$domain")
-- eval "$cmd"
--}
--
- # Mirror .po files to $po_dir/.reference and copy only the new
- # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
- # Note po files that exist locally only are left in $po_dir but will
-@@ -932,8 +928,7 @@ update_po_files() {
- ref_po_dir="$po_dir/.reference"
-
- test -d $ref_po_dir || mkdir $ref_po_dir || return
-- download_po_files $ref_po_dir $domain \
-- && ls "$ref_po_dir"/*.po 2>/dev/null |
-+ ls "$ref_po_dir"/*.po 2>/dev/null |
- sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
-
- for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do
---
-2.47.3
-
diff --git a/config/module/grub/nvme/patches/0013-force-disable-werror.patch b/config/module/grub/nvme/patches/0013-force-disable-werror.patch
deleted file mode 100644
index a4837f63..00000000
--- a/config/module/grub/nvme/patches/0013-force-disable-werror.patch
+++ /dev/null
@@ -1,602 +0,0 @@
-From 2adf79420721b5f7e25d657ba1a6bb60aa221bce Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Mon, 21 Sep 2026 12:13:16 +0100
-Subject: [PATCH 1/1] force-disable werror
-
-Signed-off-by: Leah Rowe <leah@libreboot.org>
----
- Makefile.am | 4 +-
- acinclude.m4 | 8 +--
- conf/Makefile.common | 2 +-
- configure.ac | 79 +++++++++++++---------------
- grub-core/Makefile.am | 6 +--
- grub-core/lib/libgcrypt/configure | 36 ++++++-------
- grub-core/lib/libgcrypt/configure.ac | 14 ++---
- 7 files changed, 72 insertions(+), 77 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 43635d5ff..0f7f55e83 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -89,11 +89,11 @@ CLEANFILES += garbage-gen$(BUILD_EXEEXT)
- EXTRA_DIST += util/garbage-gen.c
-
- build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
-- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
-+ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall
- CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
-
- build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
-- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
-+ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall
- CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
-
- if COND_STARFIELD
-diff --git a/acinclude.m4 b/acinclude.m4
-index fa7840f09..d871737fd 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -368,7 +368,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[
- void foo (void) { volatile char a[8]; a[3]; }
- ]])])
--[if eval "$ac_compile -S -mstack-arg-probe -Werror -o conftest.s" 2> /dev/null; then]
-+[if eval "$ac_compile -S -mstack-arg-probe -o conftest.s" 2> /dev/null; then]
- AC_MSG_RESULT([yes])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.s
-@@ -430,7 +430,7 @@ link_nopie_needed=no]
- AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
- AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
-
--[if eval "$ac_compile -Wl,-r -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
-+[if eval "$ac_compile -Wl,-r -nostdlib -o conftest.o" 2> /dev/null; then]
- AC_MSG_RESULT([no])
- [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
- rm -f conftest.o
-@@ -446,7 +446,7 @@ AC_DEFUN([grub_CHECK_NO_PIE],
- [AC_MSG_CHECKING([whether linker accepts -no-pie])
- AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
- [save_LDFLAGS="$LDFLAGS"
--LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror"
-+LDFLAGS="$LDFLAGS -no-pie -nostdlib"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_ld_no_pie=yes],
- [grub_cv_cc_ld_no_pie=no])
-@@ -463,7 +463,7 @@ AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
- [AC_MSG_CHECKING([whether linker accepts -nopie])
- AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
- [save_LDFLAGS="$LDFLAGS"
--LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror"
-+LDFLAGS="$LDFLAGS -nopie -nostdlib"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_ld_no_pie_oneword=yes],
- [grub_cv_cc_ld_no_pie_oneword=no])
-diff --git a/conf/Makefile.common b/conf/Makefile.common
-index 7ef171b2b..41772df6b 100644
---- a/conf/Makefile.common
-+++ b/conf/Makefile.common
-@@ -77,7 +77,7 @@ grubconfdir = $(sysconfdir)/grub.d
- platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
- starfielddir = $(pkgdatadir)/themes/starfield
-
--CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion -Wno-error=attributes
-+CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion -Wno-error
- CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/lib/gnulib -I$(top_srcdir)/grub-core/lib/gnulib
-
- CFLAGS_POSIX = -fno-builtin
-diff --git a/configure.ac b/configure.ac
-index 209c0fb11..1b808ce7b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -433,10 +433,10 @@ AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
- AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
-
- # glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
--# warning which causes compilation failure later with -Werror. So use -Werror here
-+# warning which causes compilation failure later with. So use here
- # as well to force proper sys/sysmacros.h detection. Used in include/grub/osdep/major.h.
- SAVED_CFLAGS="$CFLAGS"
--CFLAGS="$HOST_CFLAGS -Werror"
-+CFLAGS="$HOST_CFLAGS"
- AC_HEADER_MAJOR
- CFLAGS="$SAVED_CFLAGS"
-
-@@ -464,7 +464,7 @@ AC_SUBST([LIBUTIL])
-
- AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
- SAVED_CFLAGS="$CFLAGS"
-- CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
-+ CFLAGS="$HOST_CFLAGS -Wtrampolines"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
- int va_arg_func (int fixed, va_list args);]], [[]])],
- [grub_cv_host_cc_wtrampolines=yes],
-@@ -520,7 +520,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
- SAVED_CFLAGS="$CFLAGS"
- grub_cv_cc_w_extra_flags=
- for x in $EXTRA_WARN_FLAGS; do
-- CFLAGS="$HOST_CFLAGS $x -Werror"
-+ CFLAGS="$HOST_CFLAGS $x"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
- if test x$flag = x1 ; then
- grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
-@@ -614,7 +614,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
-
- grub_cv_target_cc_w_extra_flags=
- for x in $EXTRA_WARN_FLAGS; do
-- CFLAGS="$TARGET_CFLAGS $x -Werror"
-+ CFLAGS="$TARGET_CFLAGS $x"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
-@@ -649,7 +649,7 @@ if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
- if test x"$grub_cv_target_cc_big_endian" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
- #error still little endian
-@@ -684,7 +684,7 @@ elif test x$target_cpu = xmipsel; then
- if test x"$grub_cv_target_cc_little_endian" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
- #error still big endian
-@@ -722,7 +722,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
- if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $arg -Werror"
-+ CFLAGS="$TARGET_CFLAGS $arg"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- #if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
- #error not o32 ABI
-@@ -794,7 +794,7 @@ fi
- # on mips redirect cache flushing function to non-existant one.
- if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
- AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
-- CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_mflush_func=yes],
- [grub_cv_cc_mflush_func=no])
-@@ -805,7 +805,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
- fi
-
- AC_CACHE_CHECK([whether -mno-gpopt works], [grub_cv_cc_mno_gpopt], [
-- CFLAGS="$TARGET_CFLAGS -mno-gpopt -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mno-gpopt"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_mno_gpopt=yes],
- [grub_cv_cc_mno_gpopt=no])
-@@ -822,7 +822,7 @@ if test "x$target_cpu" = xi386; then
- TARGET_CFLAGS="$TARGET_CFLAGS -falign-functions=1"
-
- AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
-- CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -falign-loops=1"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_falign_loop=yes],
- [grub_cv_cc_falign_loop=no])
-@@ -833,7 +833,7 @@ if test "x$target_cpu" = xi386; then
- fi
-
- AC_CACHE_CHECK([whether -falign-jumps works], [grub_cv_cc_falign_jumps], [
-- CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -falign-jumps=1"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_falign_jumps=yes],
- [grub_cv_cc_falign_jumps=no])
-@@ -845,7 +845,7 @@ if test "x$target_cpu" = xi386; then
- fi
-
- AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
-- CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
-+ CFLAGS="$TARGET_CFLAGS -freg-struct-return"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_freg_struct_return=yes],
- [grub_cv_cc_freg_struct_return=no])
-@@ -863,7 +863,7 @@ fi
-
- if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ); then
- AC_CACHE_CHECK([whether -Wa,-mx86-used-note works], [grub_cv_cc_mx86_used_note], [
-- CFLAGS="$TARGET_CFLAGS -Wa,-mx86-used-note=no -Werror"
-+ CFLAGS="$TARGET_CFLAGS -Wa,-mx86-used-note=no"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_mx86_used_note=yes],
- [grub_cv_cc_mx86_used_note=no])
-@@ -877,7 +877,7 @@ fi
-
- if test "x$target_cpu" = xloongarch64; then
- AC_CACHE_CHECK([whether _mno_explicit_relocs works], [grub_cv_cc_mno_explicit_relocs], [
-- CFLAGS="$TARGET_CFLAGS -mno-explicit-relocs -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mno-explicit-relocs"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_mno_explicit_relocs=yes],
- [grub_cv_cc_mno_explicit_relocs=no])
-@@ -893,7 +893,7 @@ if test "x$target_cpu" = xloongarch64; then
- if test x"$grub_cv_target_cc_mno_relax" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
-@@ -920,7 +920,7 @@ if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
- if test x"$grub_cv_target_cc_mno_relax" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
-@@ -946,35 +946,35 @@ if test x"$platform" != xemu ; then
- AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
- grub_cv_target_cc_soft_float=no
- if test "x$target_cpu" = xarm64; then
-- CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-mgeneral-regs-only"], [])
- fi
- if test "x$target_cpu" = xriscv32; then
-- CFLAGS="$TARGET_CFLAGS -march=rv32imac -mabi=ilp32 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -march=rv32imac -mabi=ilp32"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-march=rv32imac -mabi=ilp32"], [])
- # ISA spec version 20191213 factored out extensions Zicsr and Zifencei
-- CFLAGS="$TARGET_CFLAGS -march=rv32imac_zicsr_zifencei -mabi=ilp32 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -march=rv32imac_zicsr_zifencei -mabi=ilp32"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-march=rv32imac_zicsr_zifencei -mabi=ilp32"], [])
- fi
- if test "x$target_cpu" = xriscv64; then
-- CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-march=rv64imac -mabi=lp64"], [])
- # ISA spec version 20191213 factored out extensions Zicsr and Zifencei
-- CFLAGS="$TARGET_CFLAGS -march=rv64imac_zicsr_zifencei -mabi=lp64 -Werror"
-+ CFLAGS="$TARGET_CFLAGS -march=rv64imac_zicsr_zifencei -mabi=lp64"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-march=rv64imac_zicsr_zifencei -mabi=lp64"], [])
- fi
- if test "x$target_cpu" = xia64; then
-- CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
- fi
- if test "x$target_cpu" = xsh4; then
-- CFLAGS="$TARGET_CFLAGS -m4-nofpu -Werror"
-+ CFLAGS="$TARGET_CFLAGS -m4-nofpu"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="-m4-nofpu"], [])
- fi
-@@ -984,7 +984,7 @@ if test x"$platform" != xemu ; then
- if test x"$grub_cv_target_cc_soft_float" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_soft_float="$cand"], [])
- done
-@@ -1015,7 +1015,7 @@ if test x"$target_cpu" = xsparc64 ; then
- if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- CPPFLAGS="$TARGET_CPPFLAGS"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_mno_app_regs="$cand"], [])
-@@ -1039,7 +1039,7 @@ if test x"$target_cpu" = xsparc64 ; then
- break
- fi
- LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
-- CFLAGS="$TARGET_CFLAGS -Werror"
-+ CFLAGS="$TARGET_CFLAGS"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- asm (".globl start; start:");
- void __main (void);
-@@ -1569,7 +1569,7 @@ if test "x$target_cpu" = xarm; then
- if test x"$grub_cv_target_cc_mno_movt" != xno ; then
- break
- fi
-- CFLAGS="$TARGET_CFLAGS $cand -Werror"
-+ CFLAGS="$TARGET_CFLAGS $cand"
- CPPFLAGS="$TARGET_CPPFLAGS"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_mno_movt="$cand"], [])
-@@ -1581,7 +1581,7 @@ if test "x$target_cpu" = xarm; then
- TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
- fi
- AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
-- CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
-+ CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_cc_mthumb_interwork=yes],
- [grub_cv_cc_mthumb_interwork=no])
-@@ -1595,7 +1595,7 @@ if test "x$target_cpu" = xarm; then
- fi
-
- AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
-- CFLAGS="$TARGET_CFLAGS -Qn -Qunused-arguments -Werror"
-+ CFLAGS="$TARGET_CFLAGS -Qn -Qunused-arguments"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
- [grub_cv_target_cc_qn=yes],
- [grub_cv_target_cc_qn=no])])
-@@ -1748,7 +1748,7 @@ if test "$target_cpu" = arm; then
- AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
- grub_cv_target_cc_strict_align=
- for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
-- CFLAGS="$TARGET_CFLAGS $arg -Werror"
-+ CFLAGS="$TARGET_CFLAGS $arg"
- LDFLAGS="$TARGET_LDFLAGS"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
- if test x"$flag" = x1; then
-@@ -1834,7 +1834,7 @@ int va_arg_func (int fixed, va_list args);]], [[]])],
- fi
-
- AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
-- CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
-+ CFLAGS="$TARGET_CFLAGS -Wtrampolines"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
- int va_arg_func (int fixed, va_list args);]], [[]])],
- [grub_cv_cc_wtrampolines=yes],
-@@ -2362,16 +2362,11 @@ AC_SUBST(END_SYMBOL)
- AC_SUBST(PACKAGE)
- AC_SUBST(VERSION)
-
--AC_ARG_ENABLE([werror],
-- [AS_HELP_STRING([--disable-werror],
-- [do not use -Werror when building GRUB])])
--if test x"$enable_werror" != xno ; then
-- TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
-- HOST_CFLAGS="$HOST_CFLAGS -Werror"
-- if test "x$grub_cv_cc_target_clang" = xyes; then
-- TARGET_CFLAGS="$TARGET_CFLAGS -Wno-error=vla"
-- HOST_CFLAGS="$HOST_CFLAGS -Wno-error=vla"
-- fi
-+TARGET_CFLAGS="$TARGET_CFLAGS"
-+HOST_CFLAGS="$HOST_CFLAGS"
-+if test "x$grub_cv_cc_target_clang" = xyes; then
-+ TARGET_CFLAGS="$TARGET_CFLAGS -Wno-error"
-+ HOST_CFLAGS="$HOST_CFLAGS -Wno-error"
- fi
-
- TARGET_CPP="$TARGET_CC -E"
-diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
-index 8577462d5..8a12861ba 100644
---- a/grub-core/Makefile.am
-+++ b/grub-core/Makefile.am
-@@ -483,7 +483,7 @@ if COND_ENABLE_EFIEMU
- efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
- -rm -f $@
- -rm -f $@.bin
-- $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -static -O2 -c -o $@.bin $<
-+ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -nostdlib -static -O2 -c -o $@.bin $<
- if test "x$(TARGET_APPLE_LINKER)" = x1; then \
- $(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
- rm -f $@.bin ; \
-@@ -496,10 +496,10 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
-
- # Link format -arch,x86_64 means Apple linker
- efiemu64_c.o: efiemu/runtime/efiemu.c
-- $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
-+ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
-
- efiemu64_s.o: efiemu/runtime/efiemu.S
-- $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
-+ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
-
- efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF)
- -rm -f $@
-diff --git a/grub-core/lib/libgcrypt/configure b/grub-core/lib/libgcrypt/configure
-index 4a7bee2fb..b3fb1db4f 100755
---- a/grub-core/lib/libgcrypt/configure
-+++ b/grub-core/lib/libgcrypt/configure
-@@ -4705,8 +4705,8 @@ if test ${ac_cv_prog_cc_g+y}
- then :
- printf %s "(cached) " >&6
- else $as_nop
-- ac_save_c_werror_flag=$ac_c_werror_flag
-- ac_c_werror_flag=yes
-+ ac_save_c_werror_flag=no
-+ ac_c_werror_flag=no
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -4740,7 +4740,7 @@ if ac_fn_c_try_compile "$LINENO"
- then :
-
- else $as_nop
-- ac_c_werror_flag=$ac_save_c_werror_flag
-+ ac_c_werror_flag=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-@@ -4762,7 +4762,7 @@ fi
- rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-- ac_c_werror_flag=$ac_save_c_werror_flag
-+ ac_c_werror_flag=no
- fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
- printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
-@@ -5081,7 +5081,7 @@ else $as_nop
- grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
-- # or remarks (even with -Werror). So we grep stderr for any message
-+ # or remarks (even with). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
-@@ -5857,8 +5857,8 @@ if test ${ac_cv_prog_cc_g+y}
- then :
- printf %s "(cached) " >&6
- else $as_nop
-- ac_save_c_werror_flag=$ac_c_werror_flag
-- ac_c_werror_flag=yes
-+ ac_save_c_werror_flag=no
-+ ac_c_werror_flag=no
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -5892,7 +5892,7 @@ if ac_fn_c_try_compile "$LINENO"
- then :
-
- else $as_nop
-- ac_c_werror_flag=$ac_save_c_werror_flag
-+ ac_c_werror_flag=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-@@ -5914,7 +5914,7 @@ fi
- rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-- ac_c_werror_flag=$ac_save_c_werror_flag
-+ ac_c_werror_flag=no
- fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
- printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
-@@ -6233,7 +6233,7 @@ else $as_nop
- grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
-- # or remarks (even with -Werror). So we grep stderr for any message
-+ # or remarks (even with). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
-@@ -6500,7 +6500,7 @@ else $as_nop
- grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
- # icc doesn't choke on unknown options, it will just issue warnings
-- # or remarks (even with -Werror). So we grep stderr for any message
-+ # or remarks (even with). So we grep stderr for any message
- # that says an option was ignored or not supported.
- # When given -MP, icc 7.0 and 7.1 complain thusly:
- # icc: Command line warning: ignoring option '-M'; no argument required
-@@ -17454,7 +17454,7 @@ int foo __attribute__ ((visibility ("hidden"))) = 1;
-
- _ACEOF
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&5 2>&5 ; then
- if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
- if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
-@@ -17483,7 +17483,7 @@ int foo (int x);
-
- _ACEOF
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&5 2>&5 ; then
- if grep '\.hidden[ _]foo' conftest.s >/dev/null 2>&1;
- then
-@@ -17514,7 +17514,7 @@ extern int foo (int x) __asm ("xyzzy");
-
- _ACEOF
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&5 2>&5 ; then
- if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
- grep 'abccb' conftest.s >/dev/null 2>&1; then
-@@ -17571,9 +17571,9 @@ fi
-
-
- # Following attribute tests depend on warnings to cause compile to fail,
--# so set -Werror temporarily.
-+# so set temporarily.
- _gcc_cflags_save=$CFLAGS
--CFLAGS="$CFLAGS -Werror"
-+CFLAGS="$CFLAGS"
-
-
- #
-@@ -18275,10 +18275,10 @@ fi
- #############################################
-
-
--# Following tests depend on warnings to cause compile to fail, so set -Werror
-+# Following tests depend on warnings to cause compile to fail, so set
- # temporarily.
- _gcc_cflags_save=$CFLAGS
--CFLAGS="$CFLAGS -Werror"
-+CFLAGS="$CFLAGS"
-
-
- #
-diff --git a/grub-core/lib/libgcrypt/configure.ac b/grub-core/lib/libgcrypt/configure.ac
-index 1d06ca3b1..0a4e0286a 100644
---- a/grub-core/lib/libgcrypt/configure.ac
-+++ b/grub-core/lib/libgcrypt/configure.ac
-@@ -1007,7 +1007,7 @@ AC_CACHE_CHECK(whether the visibility attribute is supported,
- int bar __attribute__ ((visibility ("protected"))) = 1;
- ]])])
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
- if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
- if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
-@@ -1027,7 +1027,7 @@ if test "$gcry_cv_visibility_attribute" = "yes"; then
- int bar (int x) { return x; }
- ]])])
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
- if grep '\.hidden@<:@ _@:>@foo' conftest.s >/dev/null 2>&1;
- then
-@@ -1049,7 +1049,7 @@ if test "$gcry_cv_visibility_attribute" = "yes"; then
- int dfoo = 1;
- ]])])
-
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s \
-+ if ${CC-cc} -S conftest.c -o conftest.s \
- 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ; then
- if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
- grep 'abccb' conftest.s >/dev/null 2>&1; then
-@@ -1081,9 +1081,9 @@ fi
-
-
- # Following attribute tests depend on warnings to cause compile to fail,
--# so set -Werror temporarily.
-+# so set temporarily.
- _gcc_cflags_save=$CFLAGS
--CFLAGS="$CFLAGS -Werror"
-+CFLAGS="$CFLAGS"
-
-
- #
-@@ -1393,10 +1393,10 @@ fi
- #############################################
-
-
--# Following tests depend on warnings to cause compile to fail, so set -Werror
-+# Following tests depend on warnings to cause compile to fail, so set
- # temporarily.
- _gcc_cflags_save=$CFLAGS
--CFLAGS="$CFLAGS -Werror"
-+CFLAGS="$CFLAGS"
-
-
- #
---
-2.47.3
-
diff --git a/config/module/grub/nvme/target.cfg b/config/module/grub/nvme/target.cfg
deleted file mode 100644
index 15102b28..00000000
--- a/config/module/grub/nvme/target.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-rev="eaa3b8f0f90605a82c6bfda4c5c4b73c58eb81ac"
-
-tree="nvme"
diff --git a/config/module/grub/xhci_nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch b/config/module/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
index 7f489819..921f9d20 100644
--- a/config/module/grub/xhci_nvme/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
+++ b/config/module/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch
@@ -1,4 +1,4 @@
-From 8ce8095abbbcc69b50466cb2b890a59be5a9baed Mon Sep 17 00:00:00 2001
+From ea5f5d7388f3a2e92faee4c1d0edfab4edc1a39b Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 31 Oct 2021 03:47:05 +0000
Subject: [PATCH 01/21] mitigate grub's missing characters for borders/arrow
diff --git a/config/module/grub/xhci_nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch b/config/module/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
index fdf97c16..44a1799e 100644
--- a/config/module/grub/xhci_nvme/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
+++ b/config/module/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch
@@ -1,4 +1,4 @@
-From d073d6a6d3c63a2b37df754bb890f88482ef2a75 Mon Sep 17 00:00:00 2001
+From c7b6d14ea4364097261cee13989e049b04c09511 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sat, 19 Nov 2022 16:30:24 +0000
Subject: [PATCH 02/21] say the name libreboot, in the grub menu
@@ -8,7 +8,7 @@ Subject: [PATCH 02/21] say the name libreboot, in the grub menu
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
-index de9a3f961..1fabb9c86 100644
+index de9a3f961..c7a172a8b 100644
--- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c
@@ -215,7 +215,7 @@ grub_normal_init_page (struct grub_term_output *term,
diff --git a/config/module/grub/xhci_nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch b/config/module/grub/xhci/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
index 3e6d9203..0894210f 100644
--- a/config/module/grub/xhci_nvme/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
+++ b/config/module/grub/xhci/patches/0003-at_keyboard-coreboot-force-scancodes2-translate.patch
@@ -1,4 +1,4 @@
-From befc0d1c61b4ba0c43981774eeff0f0f026f513d Mon Sep 17 00:00:00 2001
+From ab4470d30e64c0bf7b98f68998177c2ae11040bd Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Mon, 30 Oct 2023 22:19:21 +0000
Subject: [PATCH 03/21] at_keyboard coreboot: force scancodes2+translate
diff --git a/config/module/grub/xhci_nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch b/config/module/grub/xhci/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
index 0fdcaac7..91183690 100644
--- a/config/module/grub/xhci_nvme/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
+++ b/config/module/grub/xhci/patches/0004-keylayouts-don-t-print-Unknown-key-message.patch
@@ -1,4 +1,4 @@
-From abe0aa9a6edba181b0f964f3cf4bcd7155322ac1 Mon Sep 17 00:00:00 2001
+From c23796da67e5d50bf5ea62e708c42e8c08c30677 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Tue, 31 Oct 2023 10:33:28 +0000
Subject: [PATCH 04/21] keylayouts: don't print "Unknown key" message
diff --git a/config/module/grub/xhci_nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch b/config/module/grub/xhci/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
index cec589e1..f6a1317d 100644
--- a/config/module/grub/xhci_nvme/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
+++ b/config/module/grub/xhci/patches/0005-don-t-print-missing-prefix-errors-on-the-screen.patch
@@ -1,4 +1,4 @@
-From f8d8c00b9ff65bbaef029b087d6b2ad1091b39e4 Mon Sep 17 00:00:00 2001
+From 8094171e90dd37011005f48623f67d14a6c4bf40 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 16:14:58 +0000
Subject: [PATCH 05/21] don't print missing prefix errors on the screen
@@ -45,10 +45,10 @@ index 166445849..699b39bfa 100644
}
diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
-index 580c8d3b0..6806bff9c 100644
+index 9a94dee55..e7cd85d35 100644
--- a/grub-core/commands/nativedisk.c
+++ b/grub-core/commands/nativedisk.c
-@@ -186,7 +186,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
+@@ -188,7 +188,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
prefix = grub_env_get ("prefix");
if (! prefix)
@@ -72,7 +72,7 @@ index e7037f4ed..e5d4dbff1 100644
suffix = grub_efiemu_get_default_core_name ();
diff --git a/grub-core/font/font.c b/grub-core/font/font.c
-index 18de52562..2a0fea6c8 100644
+index 0fe4a30ed..8abcaec76 100644
--- a/grub-core/font/font.c
+++ b/grub-core/font/font.c
@@ -461,7 +461,7 @@ grub_font_load (const char *filename)
diff --git a/config/module/grub/xhci_nvme/patches/0006-don-t-print-error-if-module-not-found.patch b/config/module/grub/xhci/patches/0006-don-t-print-error-if-module-not-found.patch
index afffefca..d066fba2 100644
--- a/config/module/grub/xhci_nvme/patches/0006-don-t-print-error-if-module-not-found.patch
+++ b/config/module/grub/xhci/patches/0006-don-t-print-error-if-module-not-found.patch
@@ -1,4 +1,4 @@
-From 807a54732c3a9b056d33a0fdb0baedd44b581f0b Mon Sep 17 00:00:00 2001
+From 20239d129efc0665abdd8420f630407a8fdb1fde Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 16:36:22 +0000
Subject: [PATCH 06/21] don't print error if module not found
diff --git a/config/module/grub/xhci_nvme/patches/0007-don-t-print-empty-error-messages.patch b/config/module/grub/xhci/patches/0007-don-t-print-empty-error-messages.patch
index 44a9c432..23fff3e9 100644
--- a/config/module/grub/xhci_nvme/patches/0007-don-t-print-empty-error-messages.patch
+++ b/config/module/grub/xhci/patches/0007-don-t-print-empty-error-messages.patch
@@ -1,4 +1,4 @@
-From 53ae675a60c53792b0296828fb66d414b2d3f70e Mon Sep 17 00:00:00 2001
+From 62f241265ef4af3e0baefb7eb10d0efb6fe76ac4 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 5 Nov 2023 17:25:20 +0000
Subject: [PATCH 07/21] don't print empty error messages
@@ -13,10 +13,10 @@ Signed-off-by: Leah Rowe <leah@libreboot.org>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c
-index ba04b57fb..dab62646d 100644
+index f4c1b42c5..12a28f072 100644
--- a/grub-core/kern/err.c
+++ b/grub-core/kern/err.c
-@@ -116,7 +116,8 @@ grub_print_error (void)
+@@ -130,7 +130,8 @@ grub_print_error (void)
{
if (grub_errno != GRUB_ERR_NONE)
{
diff --git a/config/module/grub/xhci_nvme/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch b/config/module/grub/xhci/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch
index 95e9fb7b..0bb83881 100644
--- a/config/module/grub/xhci_nvme/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch
+++ b/config/module/grub/xhci/patches/0008-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch
@@ -1,4 +1,4 @@
-From 64769f3b285e8bf2c21a65fba81673a0a4f6dde3 Mon Sep 17 00:00:00 2001
+From d0293e5aab6a4a1d7c6047ca75124d2c5db937fa Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Sun, 15 Nov 2020 19:00:27 +0100
Subject: [PATCH 08/21] grub-core/bus/usb: Parse SuperSpeed companion
@@ -174,10 +174,10 @@ index 3184ac9af..7d128449d 100644
grub_printf ("Endpoint #%d: %s, max packed size: %d, transfer type: %s, latency: %d\n",
endp->endp_addr & 15,
diff --git a/grub-core/disk/usbms.c b/grub-core/disk/usbms.c
-index b81e3ad9d..b1512dc12 100644
+index 016413313..26e48714a 100644
--- a/grub-core/disk/usbms.c
+++ b/grub-core/disk/usbms.c
-@@ -184,7 +184,7 @@ grub_usbms_attach (grub_usb_device_t usbdev, int configno, int interfno)
+@@ -186,7 +186,7 @@ grub_usbms_attach (grub_usb_device_t usbdev, int configno, int interfno)
for (j = 0; j < interf->endpointcnt; j++)
{
struct grub_usb_desc_endp *endp;
diff --git a/config/module/grub/xhci_nvme/patches/0009-usb-Add-enum-for-xHCI.patch b/config/module/grub/xhci/patches/0009-usb-Add-enum-for-xHCI.patch
index 5b79d33c..71c17cd7 100644
--- a/config/module/grub/xhci_nvme/patches/0009-usb-Add-enum-for-xHCI.patch
+++ b/config/module/grub/xhci/patches/0009-usb-Add-enum-for-xHCI.patch
@@ -1,4 +1,4 @@
-From 43522cfb0ec375be1b6a226103e9a55d4b88ee1d Mon Sep 17 00:00:00 2001
+From 4003a6ce5ac80e924f2f0df98dd70ca273a74174 Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Mon, 7 Dec 2020 08:41:22 +0100
Subject: [PATCH 09/21] usb: Add enum for xHCI
diff --git a/config/module/grub/xhci_nvme/patches/0010-usbtrans-Set-default-maximum-packet-size.patch b/config/module/grub/xhci/patches/0010-usbtrans-Set-default-maximum-packet-size.patch
index c6196f87..74b41230 100644
--- a/config/module/grub/xhci_nvme/patches/0010-usbtrans-Set-default-maximum-packet-size.patch
+++ b/config/module/grub/xhci/patches/0010-usbtrans-Set-default-maximum-packet-size.patch
@@ -1,4 +1,4 @@
-From 296f9b732393315bc3a91f8531f6ac9e7b9f43e0 Mon Sep 17 00:00:00 2001
+From 169bc1b6ff63b7240d95b360602255f3896cfa2d Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Mon, 7 Dec 2020 08:41:23 +0100
Subject: [PATCH 10/21] usbtrans: Set default maximum packet size
diff --git a/config/module/grub/xhci_nvme/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch b/config/module/grub/xhci/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch
index ac53118a..6ac83040 100644
--- a/config/module/grub/xhci_nvme/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch
+++ b/config/module/grub/xhci/patches/0011-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch
@@ -1,4 +1,4 @@
-From de471d16aeaab3cf12956d783604f22944ea7ed0 Mon Sep 17 00:00:00 2001
+From bae26e91d9fe9046257690b2e5452cb4831bd364 Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Sun, 15 Nov 2020 19:51:42 +0100
Subject: [PATCH 11/21] grub-core/bus/usb: Add function pointer for
@@ -45,7 +45,7 @@ index 5363a61f6..7a3f3e154 100644
.max_bulk_tds = GRUB_OHCI_TDS * 3 / 4
};
diff --git a/grub-core/bus/usb/uhci.c b/grub-core/bus/usb/uhci.c
-index 0fdea4c1e..03c4605b2 100644
+index a6782e7d2..8e67792d6 100644
--- a/grub-core/bus/usb/uhci.c
+++ b/grub-core/bus/usb/uhci.c
@@ -845,6 +845,8 @@ static struct grub_usb_controller_dev usb_controller =
diff --git a/config/module/grub/xhci_nvme/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch b/config/module/grub/xhci/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch
index fbedfc77..eba2ab84 100644
--- a/config/module/grub/xhci_nvme/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch
+++ b/config/module/grub/xhci/patches/0012-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch
@@ -1,4 +1,4 @@
-From 8966fadb8c19fd5c30dd585a53f465767c1cd627 Mon Sep 17 00:00:00 2001
+From c9cfb55e3100f677e16c98f864fe2a20b1954ce9 Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Mon, 7 Dec 2020 08:41:25 +0100
Subject: [PATCH 12/21] grub-core/bus/usb/usbhub: Add new private fields for
diff --git a/config/module/grub/xhci_nvme/patches/0013-grub-core-bus-usb-Add-xhci-support.patch b/config/module/grub/xhci/patches/0013-grub-core-bus-usb-Add-xhci-support.patch
index 1393092a..4189e2c1 100644
--- a/config/module/grub/xhci_nvme/patches/0013-grub-core-bus-usb-Add-xhci-support.patch
+++ b/config/module/grub/xhci/patches/0013-grub-core-bus-usb-Add-xhci-support.patch
@@ -1,4 +1,4 @@
-From 764e79efa273fadb8fc4b5ec286dd9e5688a58e8 Mon Sep 17 00:00:00 2001
+From 5f74f92abc0a04b14805c37402fd890d78dc4d06 Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Mon, 7 Dec 2020 08:41:26 +0100
Subject: [PATCH 13/21] grub-core/bus/usb: Add xhci support
@@ -67,10 +67,10 @@ index 43635d5ff..65016f856 100644
endif
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
-index 0cf155128..ec4c76ea8 100644
+index 85458a038..2c709390b 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
-@@ -675,6 +675,13 @@ module = {
+@@ -689,6 +689,13 @@ module = {
enable = arm_coreboot;
};
diff --git a/config/module/grub/xhci_nvme/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch b/config/module/grub/xhci/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
index bb5c4fd8..e4e35b0a 100644
--- a/config/module/grub/xhci_nvme/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
+++ b/config/module/grub/xhci/patches/0014-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
@@ -1,4 +1,4 @@
-From f289290da21c2eafdf52ae4859623971a3da07bb Mon Sep 17 00:00:00 2001
+From 42a0faf661cff68151da2bf09fb691b02797d9ef Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Mon, 7 Dec 2020 08:41:27 +0100
Subject: [PATCH 14/21] grub-core/bus/usb/usbhub: Add xHCI non root hub support
diff --git a/config/module/grub/xhci_nvme/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch b/config/module/grub/xhci/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch
index 9deb581d..660963c8 100644
--- a/config/module/grub/xhci_nvme/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch
+++ b/config/module/grub/xhci/patches/0015-xHCI-also-accept-SBRN-0x31-and-0x32.patch
@@ -1,4 +1,4 @@
-From e8bb5e7445dad3514c88d5286563781f27233e5e Mon Sep 17 00:00:00 2001
+From ec511d13a3f82274ef6072cfe2f5765859f132c7 Mon Sep 17 00:00:00 2001
From: Sven Anderson <sven@anderson.de>
Date: Sat, 28 May 2022 21:39:23 +0200
Subject: [PATCH 15/21] xHCI: also accept SBRN 0x31 and 0x32
diff --git a/config/module/grub/xhci_nvme/patches/0016-xhci-fix-port-indexing.patch b/config/module/grub/xhci/patches/0016-xhci-fix-port-indexing.patch
index b1cb368a..d712691f 100644
--- a/config/module/grub/xhci_nvme/patches/0016-xhci-fix-port-indexing.patch
+++ b/config/module/grub/xhci/patches/0016-xhci-fix-port-indexing.patch
@@ -1,4 +1,4 @@
-From 3db55ea63bc2c4fb41f7489a77a42c821256bbf5 Mon Sep 17 00:00:00 2001
+From 6347b84e4631889e39d0e26a9e1d8c639f0e3fb2 Mon Sep 17 00:00:00 2001
From: Sven Anderson <sven@anderson.de>
Date: Mon, 13 Jan 2025 19:51:41 +0100
Subject: [PATCH 16/21] xhci: fix port indexing
diff --git a/config/module/grub/xhci_nvme/patches/0017-xhci-configure-TT-for-non-root-hubs.patch b/config/module/grub/xhci/patches/0017-xhci-configure-TT-for-non-root-hubs.patch
index fb8ed0b4..aa5079b1 100644
--- a/config/module/grub/xhci_nvme/patches/0017-xhci-configure-TT-for-non-root-hubs.patch
+++ b/config/module/grub/xhci/patches/0017-xhci-configure-TT-for-non-root-hubs.patch
@@ -1,4 +1,4 @@
-From a82ef95fffc0a869e90467ce4f7c28282c084518 Mon Sep 17 00:00:00 2001
+From 106d716184721337f7e4370db1c255bf62883f7d Mon Sep 17 00:00:00 2001
From: Sven Anderson <sven@anderson.de>
Date: Mon, 13 Jan 2025 20:26:32 +0100
Subject: [PATCH 17/21] xhci: configure TT for non-root-hubs
diff --git a/config/module/grub/xhci_nvme/patches/0018-Fix-compilation-on-x86_64.patch b/config/module/grub/xhci/patches/0018-Fix-compilation-on-x86_64.patch
index 70a1a22c..f99801b6 100644
--- a/config/module/grub/xhci_nvme/patches/0018-Fix-compilation-on-x86_64.patch
+++ b/config/module/grub/xhci/patches/0018-Fix-compilation-on-x86_64.patch
@@ -1,4 +1,4 @@
-From cc671d76816c8370a85e289d5ac7bdf1f687ff3a Mon Sep 17 00:00:00 2001
+From 518f3f26c3d288965005f36d66bfa2bd0ae57525 Mon Sep 17 00:00:00 2001
From: Patrick Rudolph <patrick.rudolph@9elements.com>
Date: Wed, 24 Feb 2021 08:25:41 +0100
Subject: [PATCH 18/21] Fix compilation on x86_64
diff --git a/config/module/grub/nvme/patches/0009-kern-coreboot-mmap-Map-to-reserved.patch b/config/module/grub/xhci/patches/0019-kern-coreboot-mmap-Map-to-reserved.patch
index 11b82429..98589569 100644
--- a/config/module/grub/nvme/patches/0009-kern-coreboot-mmap-Map-to-reserved.patch
+++ b/config/module/grub/xhci/patches/0019-kern-coreboot-mmap-Map-to-reserved.patch
@@ -1,7 +1,7 @@
-From 9ec8534a4d27db37cf4feebd44fd9f8973a89e59 Mon Sep 17 00:00:00 2001
+From d205c0592028d4202f2796d275ac73b9411b6ff0 Mon Sep 17 00:00:00 2001
From: Paul Menzel <pmenzel@molgen.mpg.de>
Date: Mon, 17 May 2021 10:24:36 +0200
-Subject: [PATCH 09/10] kern/coreboot/mmap: Map to reserved
+Subject: [PATCH 19/21] kern/coreboot/mmap: Map to reserved
https://git.savannah.gnu.org/cgit/grub.git/commit/?id=6de9ee86bf9ae50967413e6a73b5dfd13e5ffb50
diff --git a/config/module/grub/default/patches/0011-bootstrap-Don-t-download-po-files.patch b/config/module/grub/xhci/patches/0020-bootstrap-Don-t-download-po-files.patch
index cfb66047..744e36ac 100644
--- a/config/module/grub/default/patches/0011-bootstrap-Don-t-download-po-files.patch
+++ b/config/module/grub/xhci/patches/0020-bootstrap-Don-t-download-po-files.patch
@@ -1,7 +1,7 @@
-From 5d18c96a22d98d137ea40bfc6aabadce933c2d45 Mon Sep 17 00:00:00 2001
+From 7e2ec472166142b1b77113aebe9071ed72492caa Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 1 Feb 2026 20:30:55 +0100
-Subject: [PATCH 1/1] bootstrap: Don't download po files
+Subject: [PATCH 20/21] bootstrap: Don't download po files
GRUB doesn't verify checksums at all, and it pulls from
this URL recursively:
diff --git a/config/module/grub/xhci_nvme/patches/0024-force-disable-werror.patch b/config/module/grub/xhci/patches/0021-force-disable-werror.patch
index a4837f63..85907a58 100644
--- a/config/module/grub/xhci_nvme/patches/0024-force-disable-werror.patch
+++ b/config/module/grub/xhci/patches/0021-force-disable-werror.patch
@@ -1,7 +1,7 @@
-From 2adf79420721b5f7e25d657ba1a6bb60aa221bce Mon Sep 17 00:00:00 2001
+From 99193a5ead80a2fa0e9876dfd07693689c88bc75 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Mon, 21 Sep 2026 12:13:16 +0100
-Subject: [PATCH 1/1] force-disable werror
+Subject: [PATCH 21/21] force-disable werror
Signed-off-by: Leah Rowe <leah@libreboot.org>
---
@@ -15,7 +15,7 @@ Signed-off-by: Leah Rowe <leah@libreboot.org>
7 files changed, 72 insertions(+), 77 deletions(-)
diff --git a/Makefile.am b/Makefile.am
-index 43635d5ff..0f7f55e83 100644
+index 65016f856..3bd20355f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -89,11 +89,11 @@ CLEANFILES += garbage-gen$(BUILD_EXEEXT)
@@ -33,10 +33,10 @@ index 43635d5ff..0f7f55e83 100644
if COND_STARFIELD
diff --git a/acinclude.m4 b/acinclude.m4
-index fa7840f09..d871737fd 100644
+index 478aab6d3..dd3b360f2 100644
--- a/acinclude.m4
+++ b/acinclude.m4
-@@ -368,7 +368,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
+@@ -379,7 +379,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
void foo (void) { volatile char a[8]; a[3]; }
]])])
@@ -45,7 +45,7 @@ index fa7840f09..d871737fd 100644
AC_MSG_RESULT([yes])
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
rm -f conftest.s
-@@ -430,7 +430,7 @@ link_nopie_needed=no]
+@@ -441,7 +441,7 @@ link_nopie_needed=no]
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
@@ -54,7 +54,7 @@ index fa7840f09..d871737fd 100644
AC_MSG_RESULT([no])
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
rm -f conftest.o
-@@ -446,7 +446,7 @@ AC_DEFUN([grub_CHECK_NO_PIE],
+@@ -457,7 +457,7 @@ AC_DEFUN([grub_CHECK_NO_PIE],
[AC_MSG_CHECKING([whether linker accepts -no-pie])
AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
[save_LDFLAGS="$LDFLAGS"
@@ -63,7 +63,7 @@ index fa7840f09..d871737fd 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_ld_no_pie=yes],
[grub_cv_cc_ld_no_pie=no])
-@@ -463,7 +463,7 @@ AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
+@@ -474,7 +474,7 @@ AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
[AC_MSG_CHECKING([whether linker accepts -nopie])
AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
[save_LDFLAGS="$LDFLAGS"
@@ -86,10 +86,10 @@ index 7ef171b2b..41772df6b 100644
CFLAGS_POSIX = -fno-builtin
diff --git a/configure.ac b/configure.ac
-index 209c0fb11..1b808ce7b 100644
+index 313c5ac6d..c476756e9 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -433,10 +433,10 @@ AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
+@@ -460,10 +460,10 @@ AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
@@ -102,7 +102,7 @@ index 209c0fb11..1b808ce7b 100644
AC_HEADER_MAJOR
CFLAGS="$SAVED_CFLAGS"
-@@ -464,7 +464,7 @@ AC_SUBST([LIBUTIL])
+@@ -491,7 +491,7 @@ AC_SUBST([LIBUTIL])
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
SAVED_CFLAGS="$CFLAGS"
@@ -111,7 +111,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
[grub_cv_host_cc_wtrampolines=yes],
-@@ -520,7 +520,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
+@@ -547,7 +547,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
SAVED_CFLAGS="$CFLAGS"
grub_cv_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
@@ -120,7 +120,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x$flag = x1 ; then
grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
-@@ -614,7 +614,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
+@@ -651,7 +651,7 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
grub_cv_target_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
@@ -129,7 +129,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -649,7 +649,7 @@ if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
+@@ -686,7 +686,7 @@ if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
if test x"$grub_cv_target_cc_big_endian" != xno ; then
break
fi
@@ -138,7 +138,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
#error still little endian
-@@ -684,7 +684,7 @@ elif test x$target_cpu = xmipsel; then
+@@ -721,7 +721,7 @@ elif test x$target_cpu = xmipsel; then
if test x"$grub_cv_target_cc_little_endian" != xno ; then
break
fi
@@ -147,7 +147,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
#error still big endian
-@@ -722,7 +722,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
+@@ -759,7 +759,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
break
fi
@@ -156,7 +156,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
#error not o32 ABI
-@@ -794,7 +794,7 @@ fi
+@@ -831,7 +831,7 @@ fi
# on mips redirect cache flushing function to non-existant one.
if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
@@ -165,7 +165,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mflush_func=yes],
[grub_cv_cc_mflush_func=no])
-@@ -805,7 +805,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
+@@ -842,7 +842,7 @@ if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
fi
AC_CACHE_CHECK([whether -mno-gpopt works], [grub_cv_cc_mno_gpopt], [
@@ -174,7 +174,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mno_gpopt=yes],
[grub_cv_cc_mno_gpopt=no])
-@@ -822,7 +822,7 @@ if test "x$target_cpu" = xi386; then
+@@ -859,7 +859,7 @@ if test "x$target_cpu" = xi386; then
TARGET_CFLAGS="$TARGET_CFLAGS -falign-functions=1"
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
@@ -183,7 +183,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_falign_loop=yes],
[grub_cv_cc_falign_loop=no])
-@@ -833,7 +833,7 @@ if test "x$target_cpu" = xi386; then
+@@ -870,7 +870,7 @@ if test "x$target_cpu" = xi386; then
fi
AC_CACHE_CHECK([whether -falign-jumps works], [grub_cv_cc_falign_jumps], [
@@ -192,7 +192,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_falign_jumps=yes],
[grub_cv_cc_falign_jumps=no])
-@@ -845,7 +845,7 @@ if test "x$target_cpu" = xi386; then
+@@ -882,7 +882,7 @@ if test "x$target_cpu" = xi386; then
fi
AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
@@ -201,7 +201,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_freg_struct_return=yes],
[grub_cv_cc_freg_struct_return=no])
-@@ -863,7 +863,7 @@ fi
+@@ -900,7 +900,7 @@ fi
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ); then
AC_CACHE_CHECK([whether -Wa,-mx86-used-note works], [grub_cv_cc_mx86_used_note], [
@@ -210,7 +210,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mx86_used_note=yes],
[grub_cv_cc_mx86_used_note=no])
-@@ -877,7 +877,7 @@ fi
+@@ -914,7 +914,7 @@ fi
if test "x$target_cpu" = xloongarch64; then
AC_CACHE_CHECK([whether _mno_explicit_relocs works], [grub_cv_cc_mno_explicit_relocs], [
@@ -219,7 +219,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mno_explicit_relocs=yes],
[grub_cv_cc_mno_explicit_relocs=no])
-@@ -893,7 +893,7 @@ if test "x$target_cpu" = xloongarch64; then
+@@ -930,7 +930,7 @@ if test "x$target_cpu" = xloongarch64; then
if test x"$grub_cv_target_cc_mno_relax" != xno ; then
break
fi
@@ -228,7 +228,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -920,7 +920,7 @@ if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
+@@ -957,7 +957,7 @@ if test "x$target_cpu" = xriscv64 || test "x$target_cpu" = xriscv32; then
if test x"$grub_cv_target_cc_mno_relax" != xno ; then
break
fi
@@ -237,7 +237,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -946,35 +946,35 @@ if test x"$platform" != xemu ; then
+@@ -983,35 +983,35 @@ if test x"$platform" != xemu ; then
AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
grub_cv_target_cc_soft_float=no
if test "x$target_cpu" = xarm64; then
@@ -280,7 +280,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_soft_float="-m4-nofpu"], [])
fi
-@@ -984,7 +984,7 @@ if test x"$platform" != xemu ; then
+@@ -1021,7 +1021,7 @@ if test x"$platform" != xemu ; then
if test x"$grub_cv_target_cc_soft_float" != xno ; then
break
fi
@@ -289,7 +289,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_soft_float="$cand"], [])
done
-@@ -1015,7 +1015,7 @@ if test x"$target_cpu" = xsparc64 ; then
+@@ -1052,7 +1052,7 @@ if test x"$target_cpu" = xsparc64 ; then
if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
break
fi
@@ -298,7 +298,7 @@ index 209c0fb11..1b808ce7b 100644
CPPFLAGS="$TARGET_CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_mno_app_regs="$cand"], [])
-@@ -1039,7 +1039,7 @@ if test x"$target_cpu" = xsparc64 ; then
+@@ -1076,7 +1076,7 @@ if test x"$target_cpu" = xsparc64 ; then
break
fi
LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
@@ -307,7 +307,7 @@ index 209c0fb11..1b808ce7b 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
-@@ -1569,7 +1569,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1628,7 +1628,7 @@ if test "x$target_cpu" = xarm; then
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
break
fi
@@ -316,7 +316,7 @@ index 209c0fb11..1b808ce7b 100644
CPPFLAGS="$TARGET_CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_mno_movt="$cand"], [])
-@@ -1581,7 +1581,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1640,7 +1640,7 @@ if test "x$target_cpu" = xarm; then
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
fi
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
@@ -325,7 +325,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mthumb_interwork=yes],
[grub_cv_cc_mthumb_interwork=no])
-@@ -1595,7 +1595,7 @@ if test "x$target_cpu" = xarm; then
+@@ -1654,7 +1654,7 @@ if test "x$target_cpu" = xarm; then
fi
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
@@ -334,7 +334,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_qn=yes],
[grub_cv_target_cc_qn=no])])
-@@ -1748,7 +1748,7 @@ if test "$target_cpu" = arm; then
+@@ -1807,7 +1807,7 @@ if test "$target_cpu" = arm; then
AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
grub_cv_target_cc_strict_align=
for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
@@ -343,7 +343,7 @@ index 209c0fb11..1b808ce7b 100644
LDFLAGS="$TARGET_LDFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x"$flag" = x1; then
-@@ -1834,7 +1834,7 @@ int va_arg_func (int fixed, va_list args);]], [[]])],
+@@ -1904,7 +1904,7 @@ int va_arg_func (int fixed, va_list args);]], [[]])],
fi
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
@@ -352,7 +352,7 @@ index 209c0fb11..1b808ce7b 100644
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
[grub_cv_cc_wtrampolines=yes],
-@@ -2362,16 +2362,11 @@ AC_SUBST(END_SYMBOL)
+@@ -2434,16 +2434,11 @@ AC_SUBST(END_SYMBOL)
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
@@ -375,10 +375,10 @@ index 209c0fb11..1b808ce7b 100644
TARGET_CPP="$TARGET_CC -E"
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
-index 8577462d5..8a12861ba 100644
+index d9a664c3f..c7ee64b4b 100644
--- a/grub-core/Makefile.am
+++ b/grub-core/Makefile.am
-@@ -483,7 +483,7 @@ if COND_ENABLE_EFIEMU
+@@ -485,7 +485,7 @@ if COND_ENABLE_EFIEMU
efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
-rm -f $@
-rm -f $@.bin
@@ -387,7 +387,7 @@ index 8577462d5..8a12861ba 100644
if test "x$(TARGET_APPLE_LINKER)" = x1; then \
$(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
rm -f $@.bin ; \
-@@ -496,10 +496,10 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
+@@ -498,10 +498,10 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
# Link format -arch,x86_64 means Apple linker
efiemu64_c.o: efiemu/runtime/efiemu.c
@@ -542,7 +542,7 @@ index 4a7bee2fb..b3fb1db4f 100755
#
diff --git a/grub-core/lib/libgcrypt/configure.ac b/grub-core/lib/libgcrypt/configure.ac
-index 1d06ca3b1..0a4e0286a 100644
+index 4f4df34ac..f96dfb464 100644
--- a/grub-core/lib/libgcrypt/configure.ac
+++ b/grub-core/lib/libgcrypt/configure.ac
@@ -1007,7 +1007,7 @@ AC_CACHE_CHECK(whether the visibility attribute is supported,
diff --git a/config/module/grub/xhci/target.cfg b/config/module/grub/xhci/target.cfg
new file mode 100644
index 00000000..e367c2bc
--- /dev/null
+++ b/config/module/grub/xhci/target.cfg
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+rev="f10ad08fa2a02dce95774c1b5caee38254b30531"
+
+tree="xhci"
diff --git a/config/module/grub/xhci_nvme/patches/0019-Add-native-NVMe-driver-based-on-SeaBIOS.patch b/config/module/grub/xhci_nvme/patches/0019-Add-native-NVMe-driver-based-on-SeaBIOS.patch
deleted file mode 100644
index f09ae69d..00000000
--- a/config/module/grub/xhci_nvme/patches/0019-Add-native-NVMe-driver-based-on-SeaBIOS.patch
+++ /dev/null
@@ -1,1074 +0,0 @@
-From 467fe4c5a98c0cfc1b357ec8acc360a03b5f7038 Mon Sep 17 00:00:00 2001
-From: Mate Kukri <km@mkukri.xyz>
-Date: Mon, 20 May 2024 11:43:35 +0100
-Subject: [PATCH 19/21] Add native NVMe driver based on SeaBIOS
-
-Tested to successfully boot Debian on QEMU and OptiPlex 3050.
-
-Signed-off-by: Mate Kukri <km@mkukri.xyz>
----
- Makefile.am | 2 +-
- grub-core/Makefile.core.def | 6 +
- grub-core/commands/nativedisk.c | 1 +
- grub-core/disk/nvme-int.h | 208 +++++++++
- grub-core/disk/nvme.c | 781 ++++++++++++++++++++++++++++++++
- include/grub/disk.h | 1 +
- 6 files changed, 998 insertions(+), 1 deletion(-)
- create mode 100644 grub-core/disk/nvme-int.h
- create mode 100644 grub-core/disk/nvme.c
-
-diff --git a/Makefile.am b/Makefile.am
-index 65016f856..7bc0866ba 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -434,7 +434,7 @@ if COND_i386_coreboot
- FS_PAYLOAD_MODULES ?= $(shell cat grub-core/fs.lst)
- default_payload.elf: grub-mkstandalone grub-mkimage FORCE
- test -f $@ && rm $@ || true
-- pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata xhci ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
-+ pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata nvme xhci ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
- endif
-
- endif
-diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
-index ec4c76ea8..08b83ad06 100644
---- a/grub-core/Makefile.core.def
-+++ b/grub-core/Makefile.core.def
-@@ -2780,3 +2780,9 @@ module = {
- cflags = '-Wno-uninitialized';
- cppflags = '-I$(srcdir)/lib/libtasn1-grub -I$(srcdir)/tests/asn1/';
- };
-+
-+module = {
-+ name = nvme;
-+ common = disk/nvme.c;
-+ enable = pci;
-+};
-diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
-index 6806bff9c..fd68a513e 100644
---- a/grub-core/commands/nativedisk.c
-+++ b/grub-core/commands/nativedisk.c
-@@ -78,6 +78,7 @@ get_uuid (const char *name, char **uuid, int getnative)
- case GRUB_DISK_DEVICE_ATA_ID:
- case GRUB_DISK_DEVICE_SCSI_ID:
- case GRUB_DISK_DEVICE_XEN:
-+ case GRUB_DISK_DEVICE_NVME_ID:
- if (getnative)
- break;
- /* FALLTHROUGH */
-diff --git a/grub-core/disk/nvme-int.h b/grub-core/disk/nvme-int.h
-new file mode 100644
-index 000000000..1295b58aa
---- /dev/null
-+++ b/grub-core/disk/nvme-int.h
-@@ -0,0 +1,208 @@
-+// NVMe datastructures and constants
-+//
-+// Copyright 2017 Amazon.com, Inc. or its affiliates.
-+//
-+// This file may be distributed under the terms of the GNU LGPLv3 license.
-+
-+#ifndef __NVME_INT_H
-+#define __NVME_INT_H
-+
-+#include <grub/types.h>
-+
-+/* Data structures */
-+
-+/* The register file of a NVMe host controller. This struct follows the naming
-+ scheme in the NVMe specification. */
-+struct nvme_reg {
-+ grub_uint64_t cap; /* controller capabilities */
-+ grub_uint32_t vs; /* version */
-+ grub_uint32_t intms; /* interrupt mask set */
-+ grub_uint32_t intmc; /* interrupt mask clear */
-+ grub_uint32_t cc; /* controller configuration */
-+ grub_uint32_t _res0;
-+ grub_uint32_t csts; /* controller status */
-+ grub_uint32_t _res1;
-+ grub_uint32_t aqa; /* admin queue attributes */
-+ grub_uint64_t asq; /* admin submission queue base address */
-+ grub_uint64_t acq; /* admin completion queue base address */
-+};
-+
-+/* Submission queue entry */
-+struct nvme_sqe {
-+ union {
-+ grub_uint32_t dword[16];
-+ struct {
-+ grub_uint32_t cdw0; /* Command DWORD 0 */
-+ grub_uint32_t nsid; /* Namespace ID */
-+ grub_uint64_t _res0;
-+ grub_uint64_t mptr; /* metadata ptr */
-+
-+ grub_uint64_t dptr_prp1;
-+ grub_uint64_t dptr_prp2;
-+ };
-+ };
-+};
-+
-+/* Completion queue entry */
-+struct nvme_cqe {
-+ union {
-+ grub_uint32_t dword[4];
-+ struct {
-+ grub_uint32_t cdw0;
-+ grub_uint32_t _res0;
-+ grub_uint16_t sq_head;
-+ grub_uint16_t sq_id;
-+ grub_uint16_t cid;
-+ grub_uint16_t status;
-+ };
-+ };
-+};
-+
-+/* The common part of every submission or completion queue. */
-+struct nvme_queue {
-+ grub_uint32_t *dbl; /* doorbell */
-+ grub_uint16_t mask; /* length - 1 */
-+};
-+
-+struct nvme_cq {
-+ struct nvme_queue common;
-+ struct nvme_cqe *cqe;
-+
-+ /* We have read upto (but not including) this entry in the queue. */
-+ grub_uint16_t head;
-+
-+ /* The current phase bit the controller uses to indicate that it has written
-+ a new entry. This is inverted after each wrap. */
-+ unsigned phase : 1;
-+};
-+
-+struct nvme_sq {
-+ struct nvme_queue common;
-+ struct nvme_sqe *sqe;
-+
-+ /* Corresponding completion queue. We only support a single SQ per CQ. */
-+ struct nvme_cq *cq;
-+
-+ /* The last entry the controller has fetched. */
-+ grub_uint16_t head;
-+
-+ /* The last value we have written to the tail doorbell. */
-+ grub_uint16_t tail;
-+};
-+
-+struct nvme_ctrl {
-+ grub_pci_device_t pci;
-+ struct nvme_reg volatile *reg;
-+
-+ grub_uint32_t ctrlnum;
-+
-+ grub_uint32_t doorbell_stride; /* in bytes */
-+
-+ struct nvme_sq admin_sq;
-+ struct nvme_cq admin_cq;
-+
-+ grub_uint32_t ns_count;
-+
-+ struct nvme_sq io_sq;
-+ struct nvme_cq io_cq;
-+};
-+
-+struct nvme_namespace {
-+ struct nvme_namespace *next;
-+ struct nvme_namespace **prev;
-+
-+ char *devname;
-+
-+ grub_uint32_t nsnum;
-+
-+ struct nvme_ctrl *ctrl;
-+
-+ grub_uint32_t ns_id;
-+
-+ grub_uint64_t lba_count; /* The total amount of sectors. */
-+
-+ grub_uint32_t block_size;
-+ grub_uint32_t metadata_size;
-+ grub_uint32_t max_req_size;
-+};
-+
-+/* Data structures for NVMe admin identify commands */
-+
-+struct nvme_identify_ctrl {
-+ grub_uint16_t vid;
-+ grub_uint16_t ssvid;
-+ char sn[20];
-+ char mn[40];
-+ char fr[8];
-+
-+ grub_uint8_t rab;
-+ grub_uint8_t ieee[3];
-+ grub_uint8_t cmic;
-+ grub_uint8_t mdts;
-+
-+ char _boring[516 - 78];
-+
-+ grub_uint32_t nn; /* number of namespaces */
-+};
-+
-+struct nvme_identify_ns_list {
-+ grub_uint32_t ns_id[1024];
-+};
-+
-+struct nvme_lba_format {
-+ grub_uint16_t ms;
-+ grub_uint8_t lbads;
-+ grub_uint8_t rp;
-+};
-+
-+struct nvme_identify_ns {
-+ grub_uint64_t nsze;
-+ grub_uint64_t ncap;
-+ grub_uint64_t nuse;
-+ grub_uint8_t nsfeat;
-+ grub_uint8_t nlbaf;
-+ grub_uint8_t flbas;
-+
-+ char _boring[128 - 27];
-+
-+ struct nvme_lba_format lbaf[16];
-+};
-+
-+union nvme_identify {
-+ struct nvme_identify_ns ns;
-+ struct nvme_identify_ctrl ctrl;
-+ struct nvme_identify_ns_list ns_list;
-+};
-+
-+/* NVMe constants */
-+
-+#define NVME_CAP_CSS_NVME (1ULL << 37)
-+
-+#define NVME_CSTS_FATAL (1U << 1)
-+#define NVME_CSTS_RDY (1U << 0)
-+
-+#define NVME_CC_EN (1U << 0)
-+
-+#define NVME_SQE_OPC_ADMIN_CREATE_IO_SQ 1U
-+#define NVME_SQE_OPC_ADMIN_CREATE_IO_CQ 5U
-+#define NVME_SQE_OPC_ADMIN_IDENTIFY 6U
-+
-+#define NVME_SQE_OPC_IO_WRITE 1U
-+#define NVME_SQE_OPC_IO_READ 2U
-+
-+#define NVME_ADMIN_IDENTIFY_CNS_ID_NS 0U
-+#define NVME_ADMIN_IDENTIFY_CNS_ID_CTRL 1U
-+#define NVME_ADMIN_IDENTIFY_CNS_GET_NS_LIST 2U
-+
-+#define NVME_CQE_DW3_P (1U << 16)
-+
-+#define NVME_PAGE_SIZE 4096
-+#define NVME_PAGE_MASK ~(NVME_PAGE_SIZE - 1)
-+
-+/* Length for the queue entries. */
-+#define NVME_SQE_SIZE_LOG 6
-+#define NVME_CQE_SIZE_LOG 4
-+
-+#endif
-+
-+/* EOF */
-diff --git a/grub-core/disk/nvme.c b/grub-core/disk/nvme.c
-new file mode 100644
-index 000000000..093237c70
---- /dev/null
-+++ b/grub-core/disk/nvme.c
-@@ -0,0 +1,781 @@
-+// Low level NVMe disk access
-+//
-+// Based on SeaBIOS NVMe driver - Copyright 2017 Amazon.com, Inc. or its affiliates.
-+// Port to GRUB2 done by Mate Kukri
-+//
-+// This file may be distributed under the terms of the GNU LGPLv3 license.
-+
-+#include <grub/disk.h>
-+#include <grub/dl.h>
-+#include <grub/pci.h>
-+#include "nvme-int.h"
-+
-+GRUB_MOD_LICENSE ("GPLv3"); /* LGPLv3 in reality but it is GPLv3 compatible */
-+
-+static grub_uint32_t grub_nvme_ctrlcnt;
-+static grub_uint32_t grub_nvme_nscnt;
-+
-+static struct nvme_namespace *grub_nvme_namespaces;
-+
-+// Page aligned "dma bounce buffer" of size NVME_PAGE_SIZE
-+static void *nvme_dma_buffer;
-+
-+static void *
-+zalloc_page_aligned(grub_uint32_t size)
-+{
-+ void *res = grub_memalign(NVME_PAGE_SIZE, size);
-+ if (res) grub_memset(res, 0, size);
-+ return res;
-+}
-+
-+static void
-+nvme_init_queue_common(struct nvme_ctrl *ctrl, struct nvme_queue *q, grub_uint16_t q_idx,
-+ grub_uint16_t length)
-+{
-+ grub_memset(q, 0, sizeof(*q));
-+ q->dbl = (grub_uint32_t *)((char *)ctrl->reg + 0x1000 + q_idx * ctrl->doorbell_stride);
-+ grub_dprintf("nvme", " q %p q_idx %u dbl %p\n", q, q_idx, q->dbl);
-+ q->mask = length - 1;
-+}
-+
-+static int
-+nvme_init_sq(struct nvme_ctrl *ctrl, struct nvme_sq *sq, grub_uint16_t q_idx, grub_uint16_t length,
-+ struct nvme_cq *cq)
-+{
-+ nvme_init_queue_common(ctrl, &sq->common, q_idx, length);
-+ sq->sqe = zalloc_page_aligned(sizeof(*sq->sqe) * length);
-+
-+ if (!sq->sqe) {
-+ return -1;
-+ }
-+
-+ grub_dprintf("nvme", "sq %p q_idx %u sqe %p\n", sq, q_idx, sq->sqe);
-+ sq->cq = cq;
-+ sq->head = 0;
-+ sq->tail = 0;
-+
-+ return 0;
-+}
-+
-+static int
-+nvme_init_cq(struct nvme_ctrl *ctrl, struct nvme_cq *cq, grub_uint16_t q_idx, grub_uint16_t length)
-+{
-+ nvme_init_queue_common(ctrl, &cq->common, q_idx, length);
-+ cq->cqe = zalloc_page_aligned(sizeof(*cq->cqe) * length);
-+ if (!cq->cqe) {
-+ return -1;
-+ }
-+
-+ cq->head = 0;
-+
-+ /* All CQE phase bits are initialized to zero. This means initially we wait
-+ for the host controller to set these to 1. */
-+ cq->phase = 1;
-+
-+ return 0;
-+}
-+
-+static int
-+nvme_poll_cq(struct nvme_cq *cq)
-+{
-+ grub_uint32_t dw3 = *(volatile grub_uint32_t *) &cq->cqe[cq->head].dword[3];
-+ return (!!(dw3 & NVME_CQE_DW3_P) == cq->phase);
-+}
-+
-+static int
-+nvme_is_cqe_success(struct nvme_cqe const *cqe)
-+{
-+ return ((cqe->status >> 1) & 0xFF) == 0;
-+}
-+
-+static struct nvme_cqe
-+nvme_error_cqe(void)
-+{
-+ struct nvme_cqe r;
-+
-+ /* 0xFF is a vendor specific status code != success. Should be okay for
-+ indicating failure. */
-+ grub_memset(&r, 0xFF, sizeof(r));
-+ return r;
-+}
-+
-+static struct nvme_cqe
-+nvme_consume_cqe(struct nvme_sq *sq)
-+{
-+ struct nvme_cq *cq = sq->cq;
-+
-+ if (!nvme_poll_cq(cq)) {
-+ /* Cannot consume a completion queue entry, if there is none ready. */
-+ return nvme_error_cqe();
-+ }
-+
-+ struct nvme_cqe *cqe = &cq->cqe[cq->head];
-+ grub_uint16_t cq_next_head = (cq->head + 1) & cq->common.mask;
-+ grub_dprintf("nvme", "cq %p head %u -> %u\n", cq, cq->head, cq_next_head);
-+ if (cq_next_head < cq->head) {
-+ grub_dprintf("nvme", "cq %p wrap\n", cq);
-+ cq->phase = ~cq->phase;
-+ }
-+ cq->head = cq_next_head;
-+
-+ /* Update the submission queue head. */
-+ if (cqe->sq_head != sq->head) {
-+ sq->head = cqe->sq_head;
-+ grub_dprintf("nvme", "sq %p advanced to %u\n", sq, cqe->sq_head);
-+ }
-+
-+ /* Tell the controller that we consumed the completion. */
-+ *(volatile grub_uint32_t *) cq->common.dbl = cq->head;
-+
-+ return *cqe;
-+}
-+
-+static struct nvme_cqe
-+nvme_wait(struct nvme_sq *sq)
-+{
-+ // static const unsigned nvme_timeout = 5000 /* ms */;
-+ // grub_uint32_t to = timer_calc(nvme_timeout);
-+ while (!nvme_poll_cq(sq->cq)) {
-+ /* FIXME
-+ yield();
-+
-+ if (timer_check(to)) {
-+ warn_timeout();
-+ return nvme_error_cqe();
-+ }*/
-+ }
-+
-+ return nvme_consume_cqe(sq);
-+}
-+
-+/* Returns the next submission queue entry (or NULL if the queue is full). It
-+ also fills out Command Dword 0 and clears the rest. */
-+static struct nvme_sqe *
-+nvme_get_next_sqe(struct nvme_sq *sq, grub_uint8_t opc, void *metadata, void *data, void *data2)
-+{
-+ if (((sq->head + 1) & sq->common.mask) == sq->tail) {
-+ grub_dprintf("nvme", "submission queue is full\n");
-+ return NULL;
-+ }
-+
-+ struct nvme_sqe *sqe = &sq->sqe[sq->tail];
-+ grub_dprintf("nvme", "sq %p next_sqe %u\n", sq, sq->tail);
-+
-+ grub_memset(sqe, 0, sizeof(*sqe));
-+ sqe->cdw0 = opc | (sq->tail << 16 /* CID */);
-+ sqe->mptr = (grub_uint32_t)metadata;
-+ sqe->dptr_prp1 = (grub_uint32_t)data;
-+ sqe->dptr_prp2 = (grub_uint32_t)data2;
-+
-+ return sqe;
-+}
-+
-+/* Call this after you've filled out an sqe that you've got from nvme_get_next_sqe. */
-+static void
-+nvme_commit_sqe(struct nvme_sq *sq)
-+{
-+ grub_dprintf("nvme", "sq %p commit_sqe %u\n", sq, sq->tail);
-+ sq->tail = (sq->tail + 1) & sq->common.mask;
-+ *(volatile grub_uint32_t *) sq->common.dbl = sq->tail;
-+}
-+
-+/* Perform an identify command on the admin queue and return the resulting
-+ buffer. This may be a NULL pointer, if something failed. This function
-+ cannot be used after initialization, because it uses buffers in tmp zone. */
-+static union nvme_identify *
-+nvme_admin_identify(struct nvme_ctrl *ctrl, grub_uint8_t cns, grub_uint32_t nsid)
-+{
-+ union nvme_identify *identify_buf = zalloc_page_aligned(4096);
-+ if (!identify_buf)
-+ return NULL;
-+
-+ struct nvme_sqe *cmd_identify;
-+ cmd_identify = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_IDENTIFY, NULL,
-+ identify_buf, NULL);
-+ if (!cmd_identify)
-+ goto error;
-+
-+ cmd_identify->nsid = nsid;
-+ cmd_identify->dword[10] = cns;
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ goto error;
-+ }
-+
-+ return identify_buf;
-+ error:
-+ grub_free(identify_buf);
-+ return NULL;
-+}
-+
-+static struct nvme_identify_ctrl *
-+nvme_admin_identify_ctrl(struct nvme_ctrl *ctrl)
-+{
-+ return &nvme_admin_identify(ctrl, NVME_ADMIN_IDENTIFY_CNS_ID_CTRL, 0)->ctrl;
-+}
-+
-+static struct nvme_identify_ns *
-+nvme_admin_identify_ns(struct nvme_ctrl *ctrl, grub_uint32_t ns_id)
-+{
-+ return &nvme_admin_identify(ctrl, NVME_ADMIN_IDENTIFY_CNS_ID_NS,
-+ ns_id)->ns;
-+}
-+
-+static void
-+nvme_probe_ns(struct nvme_ctrl *ctrl, grub_uint32_t ns_idx, grub_uint8_t mdts)
-+{
-+ grub_uint32_t ns_id = ns_idx + 1;
-+
-+ struct nvme_identify_ns *id = nvme_admin_identify_ns(ctrl, ns_id);
-+ if (!id) {
-+ grub_dprintf("nvme", "NVMe couldn't identify namespace %u.\n", ns_id);
-+ goto free_buffer;
-+ }
-+
-+ grub_uint8_t current_lba_format = id->flbas & 0xF;
-+ if (current_lba_format > id->nlbaf) {
-+ grub_dprintf("nvme", "NVMe NS %u: current LBA format %u is beyond what the "
-+ " namespace supports (%u)?\n",
-+ ns_id, current_lba_format, id->nlbaf + 1);
-+ goto free_buffer;
-+ }
-+
-+ if (!id->nsze) {
-+ grub_dprintf("nvme", "NVMe NS %u is inactive.\n", ns_id);
-+ goto free_buffer;
-+ }
-+
-+ if (!nvme_dma_buffer) {
-+ nvme_dma_buffer = zalloc_page_aligned(NVME_PAGE_SIZE);
-+ if (!nvme_dma_buffer) {
-+ goto free_buffer;
-+ }
-+ }
-+
-+ struct nvme_namespace *ns = grub_malloc(sizeof(*ns));
-+ if (!ns) {
-+ goto free_buffer;
-+ }
-+ grub_memset(ns, 0, sizeof(*ns));
-+ ns->ctrl = ctrl;
-+ ns->ns_id = ns_id;
-+ ns->lba_count = id->nsze;
-+
-+ struct nvme_lba_format *fmt = &id->lbaf[current_lba_format];
-+
-+ ns->block_size = 1U << fmt->lbads;
-+ ns->metadata_size = fmt->ms;
-+
-+ if (ns->block_size > NVME_PAGE_SIZE) {
-+ /* If we see devices that trigger this path, we need to increase our
-+ buffer size. */
-+ grub_free(ns);
-+ goto free_buffer;
-+ }
-+
-+ if (mdts) {
-+ ns->max_req_size = ((1U << mdts) * NVME_PAGE_SIZE) / ns->block_size;
-+ grub_dprintf("nvme", "NVME NS %u max request size: %d sectors\n",
-+ ns_id, ns->max_req_size);
-+ } else {
-+ ns->max_req_size = -1U;
-+ }
-+
-+ ns->devname = grub_xasprintf("nvme%un%u", ctrl->ctrlnum, ns_id);
-+ ns->nsnum = grub_nvme_nscnt++;
-+
-+ grub_list_push (GRUB_AS_LIST_P (&grub_nvme_namespaces), GRUB_AS_LIST (ns));
-+
-+free_buffer:
-+ grub_free(id);
-+}
-+
-+
-+/* Release memory allocated for a completion queue */
-+static void
-+nvme_destroy_cq(struct nvme_cq *cq)
-+{
-+ grub_free(cq->cqe);
-+ cq->cqe = NULL;
-+}
-+
-+/* Release memory allocated for a submission queue */
-+static void
-+nvme_destroy_sq(struct nvme_sq *sq)
-+{
-+ grub_free(sq->sqe);
-+ sq->sqe = NULL;
-+}
-+
-+/* Returns 0 on success. */
-+static int
-+nvme_create_io_cq(struct nvme_ctrl *ctrl, struct nvme_cq *cq, grub_uint16_t q_idx)
-+{
-+ int rc;
-+ struct nvme_sqe *cmd_create_cq;
-+ grub_uint32_t length = 1 + (ctrl->reg->cap & 0xffff);
-+ if (length > NVME_PAGE_SIZE / sizeof(struct nvme_cqe))
-+ length = NVME_PAGE_SIZE / sizeof(struct nvme_cqe);
-+
-+ rc = nvme_init_cq(ctrl, cq, q_idx, length);
-+ if (rc) {
-+ goto err;
-+ }
-+
-+ cmd_create_cq = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_CREATE_IO_CQ, NULL,
-+ cq->cqe, NULL);
-+ if (!cmd_create_cq) {
-+ goto err_destroy_cq;
-+ }
-+
-+ cmd_create_cq->dword[10] = (cq->common.mask << 16) | (q_idx >> 1);
-+ cmd_create_cq->dword[11] = 1 /* physically contiguous */;
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "create io cq failed: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+
-+ goto err_destroy_cq;
-+ }
-+
-+ return 0;
-+
-+err_destroy_cq:
-+ nvme_destroy_cq(cq);
-+err:
-+ return -1;
-+}
-+
-+/* Returns 0 on success. */
-+static int
-+nvme_create_io_sq(struct nvme_ctrl *ctrl, struct nvme_sq *sq, grub_uint16_t q_idx, struct nvme_cq *cq)
-+{
-+ int rc;
-+ struct nvme_sqe *cmd_create_sq;
-+ grub_uint32_t length = 1 + (ctrl->reg->cap & 0xffff);
-+ if (length > NVME_PAGE_SIZE / sizeof(struct nvme_cqe))
-+ length = NVME_PAGE_SIZE / sizeof(struct nvme_cqe);
-+
-+ rc = nvme_init_sq(ctrl, sq, q_idx, length, cq);
-+ if (rc) {
-+ goto err;
-+ }
-+
-+ cmd_create_sq = nvme_get_next_sqe(&ctrl->admin_sq,
-+ NVME_SQE_OPC_ADMIN_CREATE_IO_SQ, NULL,
-+ sq->sqe, NULL);
-+ if (!cmd_create_sq) {
-+ goto err_destroy_sq;
-+ }
-+
-+ cmd_create_sq->dword[10] = (sq->common.mask << 16) | (q_idx >> 1);
-+ cmd_create_sq->dword[11] = (q_idx >> 1) << 16 | 1 /* contiguous */;
-+ grub_dprintf("nvme", "sq %p create dword10 %08x dword11 %08x\n", sq,
-+ cmd_create_sq->dword[10], cmd_create_sq->dword[11]);
-+
-+ nvme_commit_sqe(&ctrl->admin_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ctrl->admin_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "create io sq failed: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+ goto err_destroy_sq;
-+ }
-+
-+ return 0;
-+
-+err_destroy_sq:
-+ nvme_destroy_sq(sq);
-+err:
-+ return -1;
-+}
-+
-+/* Reads count sectors into buf. The buffer cannot cross page boundaries. */
-+static int
-+nvme_io_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *prp1, void *prp2,
-+ grub_uint16_t count, int write)
-+{
-+ if (((grub_uint32_t)prp1 & 0x3) || ((grub_uint32_t)prp2 & 0x3)) {
-+ /* Buffer is misaligned */
-+ return -1;
-+ }
-+
-+ struct nvme_sqe *io_read = nvme_get_next_sqe(&ns->ctrl->io_sq,
-+ write ? NVME_SQE_OPC_IO_WRITE
-+ : NVME_SQE_OPC_IO_READ,
-+ NULL, prp1, prp2);
-+ io_read->nsid = ns->ns_id;
-+ io_read->dword[10] = (grub_uint32_t)lba;
-+ io_read->dword[11] = (grub_uint32_t)(lba >> 32);
-+ io_read->dword[12] = (1U << 31 /* limited retry */) | (count - 1);
-+
-+ nvme_commit_sqe(&ns->ctrl->io_sq);
-+
-+ struct nvme_cqe cqe = nvme_wait(&ns->ctrl->io_sq);
-+
-+ if (!nvme_is_cqe_success(&cqe)) {
-+ grub_dprintf("nvme", "read io: %08x %08x %08x %08x\n",
-+ cqe.dword[0], cqe.dword[1], cqe.dword[2], cqe.dword[3]);
-+
-+ return -1;
-+ }
-+
-+ grub_dprintf("nvme", "ns %u %s lba %llu+%u\n", ns->ns_id, write ? "write" : "read",
-+ lba, count);
-+ return count;
-+}
-+
-+// Transfer up to one page of data using the internal dma bounce buffer
-+static int
-+nvme_bounce_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *buf, grub_uint16_t count,
-+ int write)
-+{
-+ grub_uint16_t const max_blocks = NVME_PAGE_SIZE / ns->block_size;
-+ grub_uint16_t blocks = count < max_blocks ? count : max_blocks;
-+
-+ if (write)
-+ grub_memcpy(nvme_dma_buffer, buf, blocks * ns->block_size);
-+
-+ int res = nvme_io_xfer(ns, lba, nvme_dma_buffer, NULL, blocks, write);
-+
-+ if (!write && res >= 0)
-+ grub_memcpy(buf, nvme_dma_buffer, res * ns->block_size);
-+
-+ return res;
-+}
-+
-+#define NVME_MAX_PRPL_ENTRIES 15 /* Allows requests up to 64kb */
-+
-+// Transfer data using page list (if applicable)
-+static int
-+nvme_prpl_xfer(struct nvme_namespace *ns, grub_uint64_t lba, void *buf, grub_uint16_t count,
-+ int write)
-+{
-+ grub_uint32_t base = (long)buf;
-+ grub_int32_t size;
-+
-+ if (count > ns->max_req_size)
-+ count = ns->max_req_size;
-+
-+ size = count * ns->block_size;
-+ /* Special case for transfers that fit into PRP1, but are unaligned */
-+ if (((size + (base & ~NVME_PAGE_MASK)) <= NVME_PAGE_SIZE))
-+ goto single;
-+
-+ /* Every request has to be page aligned */
-+ if (base & ~NVME_PAGE_MASK)
-+ goto bounce;
-+
-+ /* Make sure a full block fits into the last chunk */
-+ if (size & (ns->block_size - 1ULL))
-+ goto bounce;
-+
-+ /* Build PRP list if we need to describe more than 2 pages */
-+ if ((ns->block_size * count) > (NVME_PAGE_SIZE * 2)) {
-+ grub_uint32_t prpl_len = 0;
-+ grub_uint64_t *prpl = nvme_dma_buffer;
-+ int first_page = 1;
-+ for (; size > 0; base += NVME_PAGE_SIZE, size -= NVME_PAGE_SIZE) {
-+ if (first_page) {
-+ /* First page is special */
-+ first_page = 0;
-+ continue;
-+ }
-+ if (prpl_len >= NVME_MAX_PRPL_ENTRIES)
-+ goto bounce;
-+ prpl[prpl_len++] = base;
-+ }
-+ return nvme_io_xfer(ns, lba, buf, prpl, count, write);
-+ }
-+
-+ /* Directly embed the 2nd page if we only need 2 pages */
-+ if ((ns->block_size * count) > NVME_PAGE_SIZE)
-+ return nvme_io_xfer(ns, lba, buf, (char *) buf + NVME_PAGE_SIZE, count, write);
-+
-+single:
-+ /* One page is enough, don't expose anything else */
-+ return nvme_io_xfer(ns, lba, buf, NULL, count, write);
-+
-+bounce:
-+ /* Use bounce buffer to make transfer */
-+ return nvme_bounce_xfer(ns, lba, buf, count, write);
-+}
-+
-+static int
-+nvme_create_io_queues(struct nvme_ctrl *ctrl)
-+{
-+ if (nvme_create_io_cq(ctrl, &ctrl->io_cq, 3))
-+ goto err;
-+
-+ if (nvme_create_io_sq(ctrl, &ctrl->io_sq, 2, &ctrl->io_cq))
-+ goto err_free_cq;
-+
-+ return 0;
-+
-+ err_free_cq:
-+ nvme_destroy_cq(&ctrl->io_cq);
-+ err:
-+ return -1;
-+}
-+
-+/* Waits for CSTS.RDY to match rdy. Returns 0 on success. */
-+static int
-+nvme_wait_csts_rdy(struct nvme_ctrl *ctrl, unsigned rdy)
-+{
-+ // grub_uint32_t const max_to = 500 /* ms */ * ((ctrl->reg->cap >> 24) & 0xFFU);
-+ // grub_uint32_t to = timer_calc(max_to);
-+ grub_uint32_t csts;
-+
-+ while (rdy != ((csts = ctrl->reg->csts) & NVME_CSTS_RDY)) {
-+ // FIXME
-+ //yield();
-+
-+ if (csts & NVME_CSTS_FATAL) {
-+ grub_dprintf("nvme", "NVMe fatal error during controller shutdown\n");
-+ return -1;
-+ }
-+
-+ /*
-+ if (timer_check(to)) {
-+ warn_timeout();
-+ return -1;
-+ }*/
-+ }
-+
-+ return 0;
-+}
-+
-+/* Returns 0 on success. */
-+static int grub_nvme_controller_enable(struct nvme_ctrl *ctrl)
-+{
-+ grub_pci_address_t addr;
-+ int rc;
-+
-+ addr = grub_pci_make_address (ctrl->pci, GRUB_PCI_REG_COMMAND);
-+ grub_pci_write_word (addr, grub_pci_read_word (addr) | GRUB_PCI_COMMAND_BUS_MASTER);
-+
-+ /* Turn the controller off. */
-+ ctrl->reg->cc = 0;
-+ if (nvme_wait_csts_rdy(ctrl, 0)) {
-+ grub_dprintf("nvme", "NVMe fatal error during controller shutdown\n");
-+ return -1;
-+ }
-+
-+ ctrl->doorbell_stride = 4U << ((ctrl->reg->cap >> 32) & 0xF);
-+
-+ rc = nvme_init_cq(ctrl, &ctrl->admin_cq, 1,
-+ NVME_PAGE_SIZE / sizeof(struct nvme_cqe));
-+ if (rc) {
-+ return -1;
-+ }
-+
-+ rc = nvme_init_sq(ctrl, &ctrl->admin_sq, 0,
-+ NVME_PAGE_SIZE / sizeof(struct nvme_sqe), &ctrl->admin_cq);
-+ if (rc) {
-+ goto err_destroy_admin_cq;
-+ }
-+
-+ ctrl->reg->aqa = ctrl->admin_cq.common.mask << 16
-+ | ctrl->admin_sq.common.mask;
-+
-+ ctrl->reg->asq = (grub_uint32_t)ctrl->admin_sq.sqe;
-+ ctrl->reg->acq = (grub_uint32_t)ctrl->admin_cq.cqe;
-+
-+ grub_dprintf("nvme", " admin submission queue: %p\n", ctrl->admin_sq.sqe);
-+ grub_dprintf("nvme", " admin completion queue: %p\n", ctrl->admin_cq.cqe);
-+
-+ ctrl->reg->cc = NVME_CC_EN | (NVME_CQE_SIZE_LOG << 20)
-+ | (NVME_SQE_SIZE_LOG << 16 /* IOSQES */);
-+
-+ if (nvme_wait_csts_rdy(ctrl, 1)) {
-+ grub_dprintf("nvme", "NVMe fatal error while enabling controller\n");
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ /* The admin queue is set up and the controller is ready. Let's figure out
-+ what namespaces we have. */
-+
-+ struct nvme_identify_ctrl *identify = nvme_admin_identify_ctrl(ctrl);
-+
-+ if (!identify) {
-+ grub_dprintf("nvme", "NVMe couldn't identify controller.\n");
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ grub_dprintf("nvme", "NVMe has %u namespace%s.\n",
-+ identify->nn, (identify->nn == 1) ? "" : "s");
-+
-+ ctrl->ns_count = identify->nn;
-+ grub_uint8_t mdts = identify->mdts;
-+ grub_free(identify);
-+
-+ if ((ctrl->ns_count == 0) || nvme_create_io_queues(ctrl)) {
-+ /* No point to continue, if the controller says it doesn't have
-+ namespaces or we couldn't create I/O queues. */
-+ goto err_destroy_admin_sq;
-+ }
-+
-+ /* Give the controller a global number */
-+ ctrl->ctrlnum = grub_nvme_ctrlcnt++;
-+
-+ /* Populate namespace IDs */
-+ for (grub_uint32_t ns_idx = 0; ns_idx < ctrl->ns_count; ns_idx++) {
-+ nvme_probe_ns(ctrl, ns_idx, mdts);
-+ }
-+
-+ grub_dprintf("nvme", "NVMe initialization complete!\n");
-+ return 0;
-+
-+ err_destroy_admin_sq:
-+ nvme_destroy_sq(&ctrl->admin_sq);
-+ err_destroy_admin_cq:
-+ nvme_destroy_cq(&ctrl->admin_cq);
-+ return -1;
-+}
-+
-+static int grub_nvme_pci_probe(grub_pci_device_t dev, grub_pci_id_t pciid __attribute__ ((unused)), void *data __attribute__ ((unused)))
-+{
-+ grub_pci_address_t addr;
-+ grub_uint32_t class, bar, version;
-+ struct nvme_reg volatile *reg;
-+
-+ class = grub_pci_read (grub_pci_make_address (dev, GRUB_PCI_REG_CLASS));
-+ if (class >> 16 != 0x0108)
-+ return 0;
-+ if ((class >> 8 & 0xff) != 2) { /* as of NVM 1.0e */
-+ grub_dprintf("nvme", "Found incompatble NVMe: prog-if=%02x\n", class >> 8 & 0xff);
-+ return 0;
-+ }
-+
-+ bar = grub_pci_read (grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0));
-+ reg = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK, sizeof (*reg));
-+
-+ addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
-+ grub_pci_write_word (addr, grub_pci_read_word (addr) | GRUB_PCI_COMMAND_MEM_ENABLED);
-+
-+ version = reg->vs;
-+ grub_dprintf("nvme", "Found NVMe controller with version %u.%u.%u.\n", version >> 16, (version >> 8) & 0xFF, version & 0xFF);
-+ grub_dprintf("nvme", " Capabilities %016llx\n", reg->cap);
-+
-+ if (~reg->cap & NVME_CAP_CSS_NVME) {
-+ grub_dprintf("nvme", "Controller doesn't speak NVMe command set. Skipping.\n");
-+ goto err;
-+ }
-+
-+ struct nvme_ctrl *ctrl = grub_malloc(sizeof(*ctrl));
-+ if (!ctrl)
-+ goto err;
-+
-+ grub_memset(ctrl, 0, sizeof(*ctrl));
-+
-+ ctrl->reg = reg;
-+ ctrl->pci = dev;
-+
-+ if (grub_nvme_controller_enable(ctrl))
-+ goto err_free_ctrl;
-+
-+ return 0;
-+
-+ err_free_ctrl:
-+ grub_free(ctrl);
-+ err:
-+ grub_dprintf("nvme", "Failed to enable NVMe controller.\n");
-+ return 0;
-+}
-+
-+static int
-+grub_nvme_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, grub_disk_pull_t pull)
-+{
-+ struct nvme_namespace *ns;
-+
-+ if (pull != GRUB_DISK_PULL_NONE)
-+ return 0;
-+
-+ FOR_LIST_ELEMENTS(ns, grub_nvme_namespaces)
-+ if (hook (ns->devname, hook_data))
-+ return 1;
-+
-+ return 0;
-+}
-+
-+static grub_err_t
-+grub_nvme_open (const char *name __attribute ((unused)), grub_disk_t disk __attribute ((unused)))
-+{
-+ struct nvme_namespace *ns;
-+
-+ FOR_LIST_ELEMENTS(ns, grub_nvme_namespaces)
-+ if (grub_strcmp (ns->devname, name) == 0)
-+ break;
-+
-+ if (! ns)
-+ return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
-+
-+ disk->total_sectors = ns->lba_count;
-+ disk->max_agglomerate = ns->max_req_size;
-+
-+ disk->id = ns->nsnum; /* global id of the namespace */
-+
-+ disk->data = ns;
-+
-+ return 0;
-+}
-+
-+static grub_err_t
-+nvme_readwrite(struct nvme_namespace *ns, grub_disk_addr_t sector, grub_size_t num_sectors, char *buf, int write)
-+{
-+ for (int i = 0; i < num_sectors;) {
-+ grub_uint16_t blocks_remaining = num_sectors - i;
-+ char *op_buf = buf + i * ns->block_size;
-+ int blocks = nvme_prpl_xfer(ns, sector + i, op_buf, blocks_remaining, write);
-+ if (blocks < 0)
-+ return GRUB_ERR_IO;
-+ i += blocks;
-+ }
-+ return GRUB_ERR_NONE;
-+}
-+
-+static grub_err_t
-+grub_nvme_read (grub_disk_t disk, grub_disk_addr_t sector, grub_size_t num_sectors, char *buf)
-+{
-+ return nvme_readwrite((struct nvme_namespace *) disk->data, sector, num_sectors, buf, 0);
-+}
-+
-+static grub_err_t
-+grub_nvme_write (grub_disk_t disk, grub_disk_addr_t sector, grub_size_t num_sectors, const char *buf)
-+{
-+ return nvme_readwrite((struct nvme_namespace *) disk->data, sector, num_sectors, buf, 1);
-+}
-+
-+static struct grub_disk_dev grub_nvme_dev =
-+ {
-+ .name = "nvme",
-+ .id = GRUB_DISK_DEVICE_NVME_ID,
-+ .disk_iterate = grub_nvme_iterate,
-+ .disk_open = grub_nvme_open,
-+ .disk_read = grub_nvme_read,
-+ .disk_write = grub_nvme_write,
-+ .next = 0
-+ };
-+
-+GRUB_MOD_INIT(nvme)
-+{
-+ grub_stop_disk_firmware ();
-+ grub_pci_iterate (grub_nvme_pci_probe, NULL);
-+ grub_disk_dev_register (&grub_nvme_dev);
-+}
-+
-+GRUB_MOD_FINI(nvme)
-+{
-+ grub_disk_dev_unregister (&grub_nvme_dev);
-+}
-diff --git a/include/grub/disk.h b/include/grub/disk.h
-index fbf23df7f..186e76f0b 100644
---- a/include/grub/disk.h
-+++ b/include/grub/disk.h
-@@ -52,6 +52,7 @@ enum grub_disk_dev_id
- GRUB_DISK_DEVICE_UBOOTDISK_ID,
- GRUB_DISK_DEVICE_XEN,
- GRUB_DISK_DEVICE_OBDISK_ID,
-+ GRUB_DISK_DEVICE_NVME_ID
- };
-
- struct grub_disk;
---
-2.47.3
-
diff --git a/config/module/grub/xhci_nvme/patches/0020-kern-coreboot-mmap-Map-to-reserved.patch b/config/module/grub/xhci_nvme/patches/0020-kern-coreboot-mmap-Map-to-reserved.patch
deleted file mode 100644
index ffa01e7a..00000000
--- a/config/module/grub/xhci_nvme/patches/0020-kern-coreboot-mmap-Map-to-reserved.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 331af0cc985aa5ec57964c6e3ab69f65c23f6481 Mon Sep 17 00:00:00 2001
-From: Paul Menzel <pmenzel@molgen.mpg.de>
-Date: Mon, 17 May 2021 10:24:36 +0200
-Subject: [PATCH 20/21] kern/coreboot/mmap: Map to reserved
-
-https://git.savannah.gnu.org/cgit/grub.git/commit/?id=6de9ee86bf9ae50967413e6a73b5dfd13e5ffb50
-
-Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de>
----
- grub-core/kern/coreboot/mmap.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/grub-core/kern/coreboot/mmap.c b/grub-core/kern/coreboot/mmap.c
-index caf8f7cef..2fc316e8d 100644
---- a/grub-core/kern/coreboot/mmap.c
-+++ b/grub-core/kern/coreboot/mmap.c
-@@ -59,7 +59,7 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, void *data)
- /* Multiboot mmaps match with the coreboot mmap
- definition. Therefore, we can just pass type
- through. */
-- mem_region->type,
-+ (mem_region->type >= 13) ? 2 : mem_region->type,
- ctx->hook_data))
- return 1;
- if (start < 0xa0000)
-@@ -81,7 +81,7 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, void *data)
- /* Multiboot mmaps match with the coreboot mmap
- definition. Therefore, we can just pass type
- through. */
-- mem_region->type,
-+ (mem_region->type >= 13) ? 2 : mem_region->type,
- ctx->hook_data))
- return 1;
- }
---
-2.47.3
-
diff --git a/config/module/grub/xhci_nvme/patches/0021-Revert-configure-Check-linker-for-image-base-support.patch b/config/module/grub/xhci_nvme/patches/0021-Revert-configure-Check-linker-for-image-base-support.patch
deleted file mode 100644
index 0e563fd5..00000000
--- a/config/module/grub/xhci_nvme/patches/0021-Revert-configure-Check-linker-for-image-base-support.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From cf791012987ea90f7a88edd21a0f619fbc40986d Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Wed, 24 Dec 2025 01:42:17 +0100
-Subject: [PATCH 21/21] Revert "configure: Check linker for --image-base
- support"
-
-This reverts commit 1a5417f39a0ccefcdd5440f2a67f84d2d2e26960.
----
- acinclude.m4 | 5 -----
- configure.ac | 14 ++------------
- 2 files changed, 2 insertions(+), 17 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 70c1912f8..fa7840f09 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -79,11 +79,6 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
- [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
- AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
- [cat > conftest.c <<\EOF
--asm (
-- ".globl start, _start, __start\n"
-- ".ifdef cmain; .set start = _start = __start = cmain\n.endif\n"
-- ".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n"
--);
- void cmain (void);
- void
- cmain (void)
-diff --git a/configure.ac b/configure.ac
-index d8ca1b7c1..041cfbab4 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1461,6 +1461,7 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_c
- TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc"
- TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
- TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc"
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- else
- TARGET_APPLE_LINKER=0
-@@ -1468,6 +1469,7 @@ else
- TARGET_IMG_LDSCRIPT=
- TARGET_IMG_LDFLAGS='-Wl,-N'
- TARGET_IMG_LDFLAGS_AC='-Wl,-N'
-+ TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
- TARGET_IMG_CFLAGS=
- fi
-
-@@ -1798,18 +1800,6 @@ grub_PROG_TARGET_CC
- m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
-
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
--AX_CHECK_LINK_FLAG([-Wl,--image-base,0x400000],
-- [TARGET_IMG_BASE_LDOPT="-Wl,--image-base"],
-- [TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"],
-- [],
-- [AC_LANG_SOURCE([
--asm (".globl start; start:");
--asm (".globl _start; _start:");
--asm (".globl __start; __start:");
--void __main (void);
--void __main (void) {}
--int main (void);
-- ])])
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
- grub_PROG_LD_BUILD_ID_NONE
---
-2.47.3
-
diff --git a/config/module/grub/xhci_nvme/patches/0022-Revert-configure-Print-a-more-helpful-error-if-autoc.patch b/config/module/grub/xhci_nvme/patches/0022-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
deleted file mode 100644
index c0a504ff..00000000
--- a/config/module/grub/xhci_nvme/patches/0022-Revert-configure-Print-a-more-helpful-error-if-autoc.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From abf2bf6e2973ccaa994f63ff851ba11cbd45f1eb Mon Sep 17 00:00:00 2001
-From: Leah Rowe <leah@libreboot.org>
-Date: Mon, 19 Jan 2026 15:27:23 +0000
-Subject: [PATCH 1/1] Revert "configure: Print a more helpful error if
- autoconf-archive is not installed"
-
-This reverts commit ac042f3f58d33ce9cd5ff61750f06da1a1d7b0eb.
----
- configure.ac | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 041cfbab4..209c0fb11 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1794,11 +1794,6 @@ LIBS=""
- # Defined in acinclude.m4.
- grub_ASM_USCORE
- grub_PROG_TARGET_CC
--
--# The error message produced by autoconf if autoconf-archive is not installed is
--# quite misleading and not very helpful. So, try point people in the right direction.
--m4_ifndef([AX_CHECK_LINK_FLAG], [m4_fatal([autoconf-archive is missing. You must install it to generate the configure script.])])
--
- if test "x$TARGET_APPLE_LINKER" != x1 ; then
- grub_PROG_OBJCOPY_ABSOLUTE
- fi
---
-2.47.3
-
diff --git a/config/module/grub/xhci_nvme/target.cfg b/config/module/grub/xhci_nvme/target.cfg
deleted file mode 100644
index 07d65c91..00000000
--- a/config/module/grub/xhci_nvme/target.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-rev="eaa3b8f0f90605a82c6bfda4c5c4b73c58eb81ac"
-
-tree="xhci_nvme"
diff --git a/config/submodule/grub/nvme/ast.po/module.cfg b/config/submodule/grub/xhci/ast.po/module.cfg
index 24f5340e..24f5340e 100644
--- a/config/submodule/grub/nvme/ast.po/module.cfg
+++ b/config/submodule/grub/xhci/ast.po/module.cfg
diff --git a/config/submodule/grub/nvme/ca.po/module.cfg b/config/submodule/grub/xhci/ca.po/module.cfg
index b12c8631..b12c8631 100644
--- a/config/submodule/grub/nvme/ca.po/module.cfg
+++ b/config/submodule/grub/xhci/ca.po/module.cfg
diff --git a/config/submodule/grub/nvme/da.po/module.cfg b/config/submodule/grub/xhci/da.po/module.cfg
index 3d9c17b5..3d9c17b5 100644
--- a/config/submodule/grub/nvme/da.po/module.cfg
+++ b/config/submodule/grub/xhci/da.po/module.cfg
diff --git a/config/submodule/grub/nvme/de.po/module.cfg b/config/submodule/grub/xhci/de.po/module.cfg
index 6fa5860c..6fa5860c 100644
--- a/config/submodule/grub/nvme/de.po/module.cfg
+++ b/config/submodule/grub/xhci/de.po/module.cfg
diff --git a/config/submodule/grub/nvme/eo.po/module.cfg b/config/submodule/grub/xhci/eo.po/module.cfg
index b3411b82..b3411b82 100644
--- a/config/submodule/grub/nvme/eo.po/module.cfg
+++ b/config/submodule/grub/xhci/eo.po/module.cfg
diff --git a/config/submodule/grub/nvme/es.po/module.cfg b/config/submodule/grub/xhci/es.po/module.cfg
index c07d060d..c07d060d 100644
--- a/config/submodule/grub/nvme/es.po/module.cfg
+++ b/config/submodule/grub/xhci/es.po/module.cfg
diff --git a/config/submodule/grub/nvme/fi.po/module.cfg b/config/submodule/grub/xhci/fi.po/module.cfg
index 1dee3f10..1dee3f10 100644
--- a/config/submodule/grub/nvme/fi.po/module.cfg
+++ b/config/submodule/grub/xhci/fi.po/module.cfg
diff --git a/config/submodule/grub/nvme/fr.po/module.cfg b/config/submodule/grub/xhci/fr.po/module.cfg
index b57cbc35..b57cbc35 100644
--- a/config/submodule/grub/nvme/fr.po/module.cfg
+++ b/config/submodule/grub/xhci/fr.po/module.cfg
diff --git a/config/submodule/grub/nvme/gl.po/module.cfg b/config/submodule/grub/xhci/gl.po/module.cfg
index ab6010e3..ab6010e3 100644
--- a/config/submodule/grub/nvme/gl.po/module.cfg
+++ b/config/submodule/grub/xhci/gl.po/module.cfg
diff --git a/config/submodule/grub/nvme/gnulib/module.cfg b/config/submodule/grub/xhci/gnulib/module.cfg
index eb5aa2b6..eb5aa2b6 100644
--- a/config/submodule/grub/nvme/gnulib/module.cfg
+++ b/config/submodule/grub/xhci/gnulib/module.cfg
diff --git a/config/submodule/grub/nvme/he.po/module.cfg b/config/submodule/grub/xhci/he.po/module.cfg
index d01485f5..d01485f5 100644
--- a/config/submodule/grub/nvme/he.po/module.cfg
+++ b/config/submodule/grub/xhci/he.po/module.cfg
diff --git a/config/submodule/grub/nvme/hr.po/module.cfg b/config/submodule/grub/xhci/hr.po/module.cfg
index f6cb61c6..f6cb61c6 100644
--- a/config/submodule/grub/nvme/hr.po/module.cfg
+++ b/config/submodule/grub/xhci/hr.po/module.cfg
diff --git a/config/submodule/grub/nvme/hu.po/module.cfg b/config/submodule/grub/xhci/hu.po/module.cfg
index 34ca727a..34ca727a 100644
--- a/config/submodule/grub/nvme/hu.po/module.cfg
+++ b/config/submodule/grub/xhci/hu.po/module.cfg
diff --git a/config/submodule/grub/nvme/id.po/module.cfg b/config/submodule/grub/xhci/id.po/module.cfg
index e70cfd5d..e70cfd5d 100644
--- a/config/submodule/grub/nvme/id.po/module.cfg
+++ b/config/submodule/grub/xhci/id.po/module.cfg
diff --git a/config/submodule/grub/nvme/it.po/module.cfg b/config/submodule/grub/xhci/it.po/module.cfg
index 7ed6dab2..7ed6dab2 100644
--- a/config/submodule/grub/nvme/it.po/module.cfg
+++ b/config/submodule/grub/xhci/it.po/module.cfg
diff --git a/config/submodule/grub/nvme/ja.po/module.cfg b/config/submodule/grub/xhci/ja.po/module.cfg
index 245471f5..245471f5 100644
--- a/config/submodule/grub/nvme/ja.po/module.cfg
+++ b/config/submodule/grub/xhci/ja.po/module.cfg
diff --git a/config/submodule/grub/nvme/ka.po/module.cfg b/config/submodule/grub/xhci/ka.po/module.cfg
index 2c22434c..2c22434c 100644
--- a/config/submodule/grub/nvme/ka.po/module.cfg
+++ b/config/submodule/grub/xhci/ka.po/module.cfg
diff --git a/config/submodule/grub/nvme/ko.po/module.cfg b/config/submodule/grub/xhci/ko.po/module.cfg
index c3ea0d2a..c3ea0d2a 100644
--- a/config/submodule/grub/nvme/ko.po/module.cfg
+++ b/config/submodule/grub/xhci/ko.po/module.cfg
diff --git a/config/submodule/grub/nvme/lg.po/module.cfg b/config/submodule/grub/xhci/lg.po/module.cfg
index 76006826..76006826 100644
--- a/config/submodule/grub/nvme/lg.po/module.cfg
+++ b/config/submodule/grub/xhci/lg.po/module.cfg
diff --git a/config/submodule/grub/nvme/lt.po/module.cfg b/config/submodule/grub/xhci/lt.po/module.cfg
index 4531b6f4..4531b6f4 100644
--- a/config/submodule/grub/nvme/lt.po/module.cfg
+++ b/config/submodule/grub/xhci/lt.po/module.cfg
diff --git a/config/submodule/grub/nvme/module.list b/config/submodule/grub/xhci/module.list
index d4f1e5e3..d4f1e5e3 100644
--- a/config/submodule/grub/nvme/module.list
+++ b/config/submodule/grub/xhci/module.list
diff --git a/config/submodule/grub/nvme/nb.po/module.cfg b/config/submodule/grub/xhci/nb.po/module.cfg
index e8340f93..e8340f93 100644
--- a/config/submodule/grub/nvme/nb.po/module.cfg
+++ b/config/submodule/grub/xhci/nb.po/module.cfg
diff --git a/config/submodule/grub/nvme/nl.po/module.cfg b/config/submodule/grub/xhci/nl.po/module.cfg
index 2f67d971..2f67d971 100644
--- a/config/submodule/grub/nvme/nl.po/module.cfg
+++ b/config/submodule/grub/xhci/nl.po/module.cfg
diff --git a/config/submodule/grub/nvme/pa.po/module.cfg b/config/submodule/grub/xhci/pa.po/module.cfg
index a4b1aa62..a4b1aa62 100644
--- a/config/submodule/grub/nvme/pa.po/module.cfg
+++ b/config/submodule/grub/xhci/pa.po/module.cfg
diff --git a/config/submodule/grub/nvme/pl.po/module.cfg b/config/submodule/grub/xhci/pl.po/module.cfg
index 5a8d17d1..5a8d17d1 100644
--- a/config/submodule/grub/nvme/pl.po/module.cfg
+++ b/config/submodule/grub/xhci/pl.po/module.cfg
diff --git a/config/submodule/grub/nvme/pt.po/module.cfg b/config/submodule/grub/xhci/pt.po/module.cfg
index 826f8752..826f8752 100644
--- a/config/submodule/grub/nvme/pt.po/module.cfg
+++ b/config/submodule/grub/xhci/pt.po/module.cfg
diff --git a/config/submodule/grub/nvme/pt_BR.po/module.cfg b/config/submodule/grub/xhci/pt_BR.po/module.cfg
index 8e0dcaaf..8e0dcaaf 100644
--- a/config/submodule/grub/nvme/pt_BR.po/module.cfg
+++ b/config/submodule/grub/xhci/pt_BR.po/module.cfg
diff --git a/config/submodule/grub/nvme/ro.po/module.cfg b/config/submodule/grub/xhci/ro.po/module.cfg
index e95467cd..e95467cd 100644
--- a/config/submodule/grub/nvme/ro.po/module.cfg
+++ b/config/submodule/grub/xhci/ro.po/module.cfg
diff --git a/config/submodule/grub/nvme/ru.po/module.cfg b/config/submodule/grub/xhci/ru.po/module.cfg
index 4d864e71..4d864e71 100644
--- a/config/submodule/grub/nvme/ru.po/module.cfg
+++ b/config/submodule/grub/xhci/ru.po/module.cfg
diff --git a/config/submodule/grub/nvme/sl.po/module.cfg b/config/submodule/grub/xhci/sl.po/module.cfg
index bf2548aa..bf2548aa 100644
--- a/config/submodule/grub/nvme/sl.po/module.cfg
+++ b/config/submodule/grub/xhci/sl.po/module.cfg
diff --git a/config/submodule/grub/nvme/sr.po/module.cfg b/config/submodule/grub/xhci/sr.po/module.cfg
index bf1352be..bf1352be 100644
--- a/config/submodule/grub/nvme/sr.po/module.cfg
+++ b/config/submodule/grub/xhci/sr.po/module.cfg
diff --git a/config/submodule/grub/nvme/sv.po/module.cfg b/config/submodule/grub/xhci/sv.po/module.cfg
index ed2f74bd..ed2f74bd 100644
--- a/config/submodule/grub/nvme/sv.po/module.cfg
+++ b/config/submodule/grub/xhci/sv.po/module.cfg
diff --git a/config/submodule/grub/nvme/tr.po/module.cfg b/config/submodule/grub/xhci/tr.po/module.cfg
index 83410286..83410286 100644
--- a/config/submodule/grub/nvme/tr.po/module.cfg
+++ b/config/submodule/grub/xhci/tr.po/module.cfg
diff --git a/config/submodule/grub/nvme/uk.po/module.cfg b/config/submodule/grub/xhci/uk.po/module.cfg
index 678efae7..678efae7 100644
--- a/config/submodule/grub/nvme/uk.po/module.cfg
+++ b/config/submodule/grub/xhci/uk.po/module.cfg
diff --git a/config/submodule/grub/nvme/vi.po/module.cfg b/config/submodule/grub/xhci/vi.po/module.cfg
index 61a7a058..61a7a058 100644
--- a/config/submodule/grub/nvme/vi.po/module.cfg
+++ b/config/submodule/grub/xhci/vi.po/module.cfg
diff --git a/config/submodule/grub/nvme/zh_CN.po/module.cfg b/config/submodule/grub/xhci/zh_CN.po/module.cfg
index 0ba80be9..0ba80be9 100644
--- a/config/submodule/grub/nvme/zh_CN.po/module.cfg
+++ b/config/submodule/grub/xhci/zh_CN.po/module.cfg
diff --git a/config/submodule/grub/nvme/zh_TW.po/module.cfg b/config/submodule/grub/xhci/zh_TW.po/module.cfg
index 4907e2f9..4907e2f9 100644
--- a/config/submodule/grub/nvme/zh_TW.po/module.cfg
+++ b/config/submodule/grub/xhci/zh_TW.po/module.cfg
diff --git a/config/submodule/grub/xhci_nvme/ast.po/module.cfg b/config/submodule/grub/xhci_nvme/ast.po/module.cfg
deleted file mode 100644
index 24f5340e..00000000
--- a/config/submodule/grub/xhci_nvme/ast.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ast.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ast.po"
-subhash="9960439950f0a6f89fcb3a014a0bdbf06e322f0cff699b9f4e8783dea9233cfde800cfa6b94811ddb42eec62bf1bfb9f0fd64805ac2d24b68f3a854f4e02b40b"
diff --git a/config/submodule/grub/xhci_nvme/ca.po/module.cfg b/config/submodule/grub/xhci_nvme/ca.po/module.cfg
deleted file mode 100644
index b12c8631..00000000
--- a/config/submodule/grub/xhci_nvme/ca.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ca.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ca.po"
-subhash="c58c3c96a9beabe5fd6383c15e65681909ca93b433f22e3103b977200692edab9e36c2485484ec3e50c7627e7623ae5d3b7166e63044828ed67cc07c5bfe5581"
diff --git a/config/submodule/grub/xhci_nvme/da.po/module.cfg b/config/submodule/grub/xhci_nvme/da.po/module.cfg
deleted file mode 100644
index 3d9c17b5..00000000
--- a/config/submodule/grub/xhci_nvme/da.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/da.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/da.po"
-subhash="d53dafc5e4c4a7a2943923c44fd7a6af8fb1b4b40297e639952c2f65baa068d9103414de69fd9030a926907d78d5d240244ac8e6e4ae94dac15330e228635e70"
diff --git a/config/submodule/grub/xhci_nvme/de.po/module.cfg b/config/submodule/grub/xhci_nvme/de.po/module.cfg
deleted file mode 100644
index 6fa5860c..00000000
--- a/config/submodule/grub/xhci_nvme/de.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/de.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/de.po"
-subhash="0d58da2e7d3d18ffa6d45a0e22bd8841699704438b95abc6658935fcec4b0f7fa8f279b5ed08ba3881e5fed56d3beedfeaaab14686146bf8dd194c7a4179065a"
diff --git a/config/submodule/grub/xhci_nvme/eo.po/module.cfg b/config/submodule/grub/xhci_nvme/eo.po/module.cfg
deleted file mode 100644
index b3411b82..00000000
--- a/config/submodule/grub/xhci_nvme/eo.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/eo.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/eo.po"
-subhash="14db316ab5b8599031019f5d7f0fc8f6c847478945170f1555f1bc0e427ad7133d3b5f40dc019f356ed86521255ac74f602ef7f081a4bc2c25dbaae7a0adc545"
diff --git a/config/submodule/grub/xhci_nvme/es.po/module.cfg b/config/submodule/grub/xhci_nvme/es.po/module.cfg
deleted file mode 100644
index c07d060d..00000000
--- a/config/submodule/grub/xhci_nvme/es.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/es.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/es.po"
-subhash="9821774d0c2c9ae498688d170f0563a0b4bac013922de0769c49c30830ecde27c0ea7bd599a6f2e9a317629faac326dbb3f0c159e4e72bf943f30febe88c08b6"
diff --git a/config/submodule/grub/xhci_nvme/fi.po/module.cfg b/config/submodule/grub/xhci_nvme/fi.po/module.cfg
deleted file mode 100644
index 1dee3f10..00000000
--- a/config/submodule/grub/xhci_nvme/fi.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/fi.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/fi.po"
-subhash="ec3cd99fd654c9008344148002310a4733b9edf9dbc8f0df952adac527230af936ae0dbd9acfab07b4b0cd7f0c01b2d17ba9e15fc7b527fc0dd974c9e42bf668"
diff --git a/config/submodule/grub/xhci_nvme/fr.po/module.cfg b/config/submodule/grub/xhci_nvme/fr.po/module.cfg
deleted file mode 100644
index b57cbc35..00000000
--- a/config/submodule/grub/xhci_nvme/fr.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/fr.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/fr.po"
-subhash="7d863df1d733b57bde6a4e15e37d100523d740c9b0b7a95eaffd8bfffbb32fabc21d4d76f8d6f8c9d3b68a11f472157a3e3d385cd2e360284a02697772a17eff"
diff --git a/config/submodule/grub/xhci_nvme/gl.po/module.cfg b/config/submodule/grub/xhci_nvme/gl.po/module.cfg
deleted file mode 100644
index ab6010e3..00000000
--- a/config/submodule/grub/xhci_nvme/gl.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/gl.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/gl.po"
-subhash="0e80f4a57e55c7b5c849f4283c830a6c4852a5d3e5a86fdaa00aeb02bc7ccbca72c6c4e2530bf1db6a6f83073c00c8f4df6f1e08a340ce58b58f5f09099cd616"
diff --git a/config/submodule/grub/xhci_nvme/gnulib/module.cfg b/config/submodule/grub/xhci_nvme/gnulib/module.cfg
deleted file mode 100644
index eb5aa2b6..00000000
--- a/config/submodule/grub/xhci_nvme/gnulib/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subgit="https://codeberg.org/libreboot/gnulib"
-subgit_bkup="git://git.sv.gnu.org/gnulib" # ALWAYS slow. only use as backup!
-subhash="9f48fb992a3d7e96610c4ce8be969cff2d61a01b"
diff --git a/config/submodule/grub/xhci_nvme/he.po/module.cfg b/config/submodule/grub/xhci_nvme/he.po/module.cfg
deleted file mode 100644
index d01485f5..00000000
--- a/config/submodule/grub/xhci_nvme/he.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/he.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/he.po"
-subhash="02c9775c3738f2ead03c3fb912f0706ce2716dbea9230ab342631a7207dda56ef0a14f2fe1d31ad60804aa2ab853897dfa39480630db6686152262962ffd283e"
diff --git a/config/submodule/grub/xhci_nvme/hr.po/module.cfg b/config/submodule/grub/xhci_nvme/hr.po/module.cfg
deleted file mode 100644
index f6cb61c6..00000000
--- a/config/submodule/grub/xhci_nvme/hr.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/hr.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/hr.po"
-subhash="baa819047d7ef709fdbd089c2ddee0d4ea0ec32cee7aff81ae087214fb0bf41fa0266750770f08b6f61d0831b7d4fc8358181e374b287ca7067a7832334c5047"
diff --git a/config/submodule/grub/xhci_nvme/hu.po/module.cfg b/config/submodule/grub/xhci_nvme/hu.po/module.cfg
deleted file mode 100644
index 34ca727a..00000000
--- a/config/submodule/grub/xhci_nvme/hu.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/hu.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/hu.po"
-subhash="f397b572cfc1e1a57a6415cb0f674041fbe661393cbb8c6f2f70da4e830e7019ac4cb7d6408a2695e19493e555e8a391c16a1c5b0d44fc653c5be433d4f94030"
diff --git a/config/submodule/grub/xhci_nvme/id.po/module.cfg b/config/submodule/grub/xhci_nvme/id.po/module.cfg
deleted file mode 100644
index e70cfd5d..00000000
--- a/config/submodule/grub/xhci_nvme/id.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/id.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/id.po"
-subhash="78154279f7c4495b3546318a9eb694ecf0e1ca5018085aa47a1bb4505cefbe8e44d4af56aadff75c598157a5f15a1168ac5ead0cefef98704852a3d5b9fe0158"
diff --git a/config/submodule/grub/xhci_nvme/it.po/module.cfg b/config/submodule/grub/xhci_nvme/it.po/module.cfg
deleted file mode 100644
index 7ed6dab2..00000000
--- a/config/submodule/grub/xhci_nvme/it.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/it.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/it.po"
-subhash="dbf178c85306eecbdb269617f3f803f188615a0637aa65752b991fa6a8581ef819ccdcb1e62c407977f38254b1f45787e7c288285808ea4f7d11e601bc584942"
diff --git a/config/submodule/grub/xhci_nvme/ja.po/module.cfg b/config/submodule/grub/xhci_nvme/ja.po/module.cfg
deleted file mode 100644
index 245471f5..00000000
--- a/config/submodule/grub/xhci_nvme/ja.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ja.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ja.po"
-subhash="df13d6e26079bd196c3f0bb3f0ea8f1d8279e0fc2706a5a1b3e0b388a667500efa64ca6d5c50d4a0bf7e5736d0af9bbf27e851883746ce8292ed5f91a6d025d7"
diff --git a/config/submodule/grub/xhci_nvme/ka.po/module.cfg b/config/submodule/grub/xhci_nvme/ka.po/module.cfg
deleted file mode 100644
index 2c22434c..00000000
--- a/config/submodule/grub/xhci_nvme/ka.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ka.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ka.po"
-subhash="2b21ab9170e3c08165c64d16080666f263aea8d3b69f44d89e050ae5a7d83599618857f48234eb0078d88c193d70c1e03f9f77dd9186f67c24968bb01fa8a386"
diff --git a/config/submodule/grub/xhci_nvme/ko.po/module.cfg b/config/submodule/grub/xhci_nvme/ko.po/module.cfg
deleted file mode 100644
index c3ea0d2a..00000000
--- a/config/submodule/grub/xhci_nvme/ko.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ko.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ko.po"
-subhash="988e67763e541a1ba6bd9db750088821608c81a9414b58b3759c6ac8d6ca7420e4a8a460b7cb03acc26132a59c12ca9c5549dbbe2ae062f3f007fb8a258e9785"
diff --git a/config/submodule/grub/xhci_nvme/lg.po/module.cfg b/config/submodule/grub/xhci_nvme/lg.po/module.cfg
deleted file mode 100644
index 76006826..00000000
--- a/config/submodule/grub/xhci_nvme/lg.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/lg.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/lg.po"
-subhash="f64cb2add4ee65973bbb5e3509d9203ba8f136870c67795c21c0dde266514848a0b9d161a1e71c2b8732d1ef5200798d1b8be7ca4b0b44fae5acfe1810282f15"
diff --git a/config/submodule/grub/xhci_nvme/lt.po/module.cfg b/config/submodule/grub/xhci_nvme/lt.po/module.cfg
deleted file mode 100644
index 4531b6f4..00000000
--- a/config/submodule/grub/xhci_nvme/lt.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/lt.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/lt.po"
-subhash="3770cf0624a892868df1c64100bccfcd41ca4707c96d92c1752570c2957c9d861065a5f9d5250bba307e520aedb00ebbcd4d09902a305421708a5da54b39cd56"
diff --git a/config/submodule/grub/xhci_nvme/module.list b/config/submodule/grub/xhci_nvme/module.list
deleted file mode 100644
index d4f1e5e3..00000000
--- a/config/submodule/grub/xhci_nvme/module.list
+++ /dev/null
@@ -1,36 +0,0 @@
-po/.reference/zh_TW.po
-po/.reference/zh_CN.po
-po/.reference/vi.po
-po/.reference/uk.po
-po/.reference/tr.po
-po/.reference/sv.po
-po/.reference/sr.po
-po/.reference/sl.po
-po/.reference/ru.po
-po/.reference/ro.po
-po/.reference/pt_BR.po
-po/.reference/pt.po
-po/.reference/pl.po
-po/.reference/pa.po
-po/.reference/nl.po
-po/.reference/nb.po
-po/.reference/lt.po
-po/.reference/lg.po
-po/.reference/ko.po
-po/.reference/ka.po
-po/.reference/ja.po
-po/.reference/it.po
-po/.reference/id.po
-po/.reference/hu.po
-po/.reference/hr.po
-po/.reference/he.po
-po/.reference/gl.po
-po/.reference/fr.po
-po/.reference/fi.po
-po/.reference/es.po
-po/.reference/eo.po
-po/.reference/de.po
-po/.reference/da.po
-po/.reference/ca.po
-po/.reference/ast.po
-gnulib
diff --git a/config/submodule/grub/xhci_nvme/nb.po/module.cfg b/config/submodule/grub/xhci_nvme/nb.po/module.cfg
deleted file mode 100644
index e8340f93..00000000
--- a/config/submodule/grub/xhci_nvme/nb.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/nb.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/nb.po"
-subhash="58671e04ed2ca88ece06ff5c6dc5e09fda1f1d7d0c510ece8f8777c090a39f0a1cf89e7783797219f343efb19aa0b75a7dcf3d8f7bc48589109ba0a18b14d122"
diff --git a/config/submodule/grub/xhci_nvme/nl.po/module.cfg b/config/submodule/grub/xhci_nvme/nl.po/module.cfg
deleted file mode 100644
index 2f67d971..00000000
--- a/config/submodule/grub/xhci_nvme/nl.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/nl.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/nl.po"
-subhash="8ce36e055a9587967d853a15167888ffd218707978c7ee80e697ddae766889cef90b7c354ee31794c6354a46d1c3138724e0b26cd3db7e737fd0e65e034e7d61"
diff --git a/config/submodule/grub/xhci_nvme/pa.po/module.cfg b/config/submodule/grub/xhci_nvme/pa.po/module.cfg
deleted file mode 100644
index a4b1aa62..00000000
--- a/config/submodule/grub/xhci_nvme/pa.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/pa.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/pa.po"
-subhash="00f2ea030d9f275cf4828e01cf7a9a0912f48ffeaad6b1085783bfb5772437e9a354cd4337b79fc6c0fc7827ebeeaa38b1422e105c00d4c58ea685824d8b28ea"
diff --git a/config/submodule/grub/xhci_nvme/pl.po/module.cfg b/config/submodule/grub/xhci_nvme/pl.po/module.cfg
deleted file mode 100644
index 5a8d17d1..00000000
--- a/config/submodule/grub/xhci_nvme/pl.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/pl.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/pl.po"
-subhash="1de3545a3015986435c091b7ee3339c5bd9bddb3e8814b6cfb55acdb957829dc453e05812063b7438ae6aec0abc232065413be7456fb95ad0a5da8d36e7076ce"
diff --git a/config/submodule/grub/xhci_nvme/pt.po/module.cfg b/config/submodule/grub/xhci_nvme/pt.po/module.cfg
deleted file mode 100644
index 826f8752..00000000
--- a/config/submodule/grub/xhci_nvme/pt.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/pt.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/pt.po"
-subhash="1bc2d024b1261b6f7a1fea00bc1ee45b29b860adfa98fcbb2022fbaf817ceefe12f961564bed01b129735fb838025e6d30e38020a9aeeb8aa5e14a2b22d07156"
diff --git a/config/submodule/grub/xhci_nvme/pt_BR.po/module.cfg b/config/submodule/grub/xhci_nvme/pt_BR.po/module.cfg
deleted file mode 100644
index 8e0dcaaf..00000000
--- a/config/submodule/grub/xhci_nvme/pt_BR.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/pt_BR.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/pt_BR.po"
-subhash="009b11465e67f310d50f4dcc8a34a2e3ba19ba9c3bfcb382065f8deb1818b2a879c146c27e6f49085c73ed6f8c9924feaa9a068fec47f8138df822f685f896ca"
diff --git a/config/submodule/grub/xhci_nvme/ro.po/module.cfg b/config/submodule/grub/xhci_nvme/ro.po/module.cfg
deleted file mode 100644
index e95467cd..00000000
--- a/config/submodule/grub/xhci_nvme/ro.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ro.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ro.po"
-subhash="f4c5f621ea217b06b07f6db29da921358de49ed9ebb655b0b1331fd48b0a68795c7c666f0b97833ad5f6e3fdbd0918b4e8f00bcc890e5f3673121c0b676ffda4"
diff --git a/config/submodule/grub/xhci_nvme/ru.po/module.cfg b/config/submodule/grub/xhci_nvme/ru.po/module.cfg
deleted file mode 100644
index 4d864e71..00000000
--- a/config/submodule/grub/xhci_nvme/ru.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/ru.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/ru.po"
-subhash="8883d7786863679e16214e9a3b2f4e607de9f7d958ae28756bab4cfd4f86356ef26c403d105aed9cf1d0ecd498059481ecf2b3d2df694a759510f4c442431494"
diff --git a/config/submodule/grub/xhci_nvme/sl.po/module.cfg b/config/submodule/grub/xhci_nvme/sl.po/module.cfg
deleted file mode 100644
index bf2548aa..00000000
--- a/config/submodule/grub/xhci_nvme/sl.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/sl.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/sl.po"
-subhash="3047e48665c0528eefdb201cff12c2ef5c937b10ee8cbca637ee6b5a9c8017604c7f849830ae0f5dcc4613efb490a41668f925d499e6083fa4587653327819cb"
diff --git a/config/submodule/grub/xhci_nvme/sr.po/module.cfg b/config/submodule/grub/xhci_nvme/sr.po/module.cfg
deleted file mode 100644
index bf1352be..00000000
--- a/config/submodule/grub/xhci_nvme/sr.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/sr.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/sr.po"
-subhash="5e9a51dfb02fef0daa26c1df37e606952f2f922a6933e5ce0890eaabc039ec5e13de50a4fd927d9c9ab15385cca9b8b1f33b35bccde50384f45c75769a5f04ea"
diff --git a/config/submodule/grub/xhci_nvme/sv.po/module.cfg b/config/submodule/grub/xhci_nvme/sv.po/module.cfg
deleted file mode 100644
index ed2f74bd..00000000
--- a/config/submodule/grub/xhci_nvme/sv.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/sv.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/sv.po"
-subhash="80b249091e2cfb369da1a4365fe76f7643ed6b34e46b4ee73359721ece6d87ef0c1f099a46f74b4c85416bea431c7dc36bf36ab16dce36e2d6c0c1b890b431dc"
diff --git a/config/submodule/grub/xhci_nvme/tr.po/module.cfg b/config/submodule/grub/xhci_nvme/tr.po/module.cfg
deleted file mode 100644
index 83410286..00000000
--- a/config/submodule/grub/xhci_nvme/tr.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/tr.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/tr.po"
-subhash="a83ebdd25d5438ff6489d88a8cb0657e606c2fc2c1efbc7dd34193fda4e0d92e10f9a29185c12e665af151b995c12b8bce755418d9e6c9978dddc23ca4a10d2b"
diff --git a/config/submodule/grub/xhci_nvme/uk.po/module.cfg b/config/submodule/grub/xhci_nvme/uk.po/module.cfg
deleted file mode 100644
index 678efae7..00000000
--- a/config/submodule/grub/xhci_nvme/uk.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/uk.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/uk.po"
-subhash="0545c90c2bc5df9ee813806cff9a5193d8fbef00aab80f85cef14f967c8d9fd650de3a0bd1063abb8fcc65b5c68e59a02832fda6827e7120fdf0a28fe58a3474"
diff --git a/config/submodule/grub/xhci_nvme/vi.po/module.cfg b/config/submodule/grub/xhci_nvme/vi.po/module.cfg
deleted file mode 100644
index 61a7a058..00000000
--- a/config/submodule/grub/xhci_nvme/vi.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/vi.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/vi.po"
-subhash="995754563bb472b93dfb5dd13b27b2540cebcf819be5ff2718553444b5fe06ad50a2fa8a0fdfcb06ab1bce9c2b870c950257c28b29e90413f1bfb42ad2643e72"
diff --git a/config/submodule/grub/xhci_nvme/zh_CN.po/module.cfg b/config/submodule/grub/xhci_nvme/zh_CN.po/module.cfg
deleted file mode 100644
index 0ba80be9..00000000
--- a/config/submodule/grub/xhci_nvme/zh_CN.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/zh_CN.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/zh_CN.po"
-subhash="8c77c78ae8e5c26107eec83a0a22465c6fc8399eb2e4f9a18f7c056f32a3e5392a313afd6520f72cc044efe6360fe0390f0a2f2edc825344d497e55ab83bfbb4"
diff --git a/config/submodule/grub/xhci_nvme/zh_TW.po/module.cfg b/config/submodule/grub/xhci_nvme/zh_TW.po/module.cfg
deleted file mode 100644
index 4907e2f9..00000000
--- a/config/submodule/grub/xhci_nvme/zh_TW.po/module.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-subcurl="https://www.mirrorservice.org/sites/libreboot.org/release/misc/grub/zh_TW.po"
-subcurl_bkup="https://mirror.math.princeton.edu/pub/libreboot/misc/grub/zh_TW.po"
-subhash="ef25bc8a0d558868a3135f6fe1816cad9fa0510b8adb48e04938053b3a0e95cc2061611601b0d23ec03e8e7c837cf5e9712eed108ee35aef98991591878f4577"