Skip to content

Commit

Permalink
Support Multiple Kernel Options (#805)
Browse files Browse the repository at this point in the history
* modules/linux: Add support for multiple kernel versions

Follow same pattern as used for coreboot. Add existing kernel version
as default for all existing boards.

Signed-off-by: Matt DeVillier <[email protected]>

* modules/linux: Add option to use 4.19 LTS kernel

Add option to use kernel 4.19.139 (current LTS version).
Duplicate existing patches from 4.14.62 as they all apply cleanly.

Signed-off-by: Matt DeVillier <[email protected]>
  • Loading branch information
MrChromebox authored Aug 20, 2020
1 parent b14e564 commit f23ced0
Show file tree
Hide file tree
Showing 25 changed files with 185 additions and 6 deletions.
1 change: 1 addition & 0 deletions boards/kgpe-d16/kgpe-d16.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Configuration for a kgpe-d16 running non-Qubes
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-kgpe-d16.config
CONFIG_LINUX_CONFIG=config/linux-kgpe-d16.config
Expand Down
1 change: 1 addition & 0 deletions boards/librem13v2/librem13v2.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ CONFIG_COREBOOT_CONFIG=config/coreboot-librem13v2.config

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
Expand Down
1 change: 1 addition & 0 deletions boards/librem13v4/librem13v4.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ CONFIG_COREBOOT_CONFIG=config/coreboot-librem13v4.config

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
Expand Down
1 change: 1 addition & 0 deletions boards/librem15v3/librem15v3.config
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ CONFIG_COREBOOT_CONFIG=config/coreboot-librem15v3.config

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
Expand Down
1 change: 1 addition & 0 deletions boards/librem15v4/librem15v4.config
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ CONFIG_COREBOOT_CONFIG=config/coreboot-librem15v4.config

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-qemu-fbwhiptail.config
CONFIG_LINUX_CONFIG=config/linux-qemu.config
Expand Down
1 change: 1 addition & 0 deletions boards/qemu-coreboot/qemu-coreboot.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# will just drop into the recovery shell.
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-qemu.config
CONFIG_LINUX_CONFIG=config/linux-qemu.config
Expand Down
2 changes: 2 additions & 0 deletions boards/qemu-linuxboot/qemu-linuxboot.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Configuration for emulating LinuxBoot+Heads with qemu
#
export CONFIG_LINUXBOOT=y
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_LINUXBOOT_BOARD=qemu
CONFIG_LINUX_CONFIG=config/linux-linuxboot.config

Expand Down
2 changes: 2 additions & 0 deletions boards/r630/r630.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ CONFIG_LINUXBOOT=y
CONFIG_LINUXBOOT_ROM=blobs/r630-1.3.6.rom
CONFIG_LINUX_CONFIG=config/linux-linuxboot.config

export CONFIG_LINUX_VERSION=4.14.62

#CONFIG_CRYPTSETUP=y
CONFIG_FLASHROM=y
#CONFIG_GPG=y
Expand Down
2 changes: 2 additions & 0 deletions boards/s2600wf/s2600wf.config
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ CONFIG_LINUXBOOT=y
CONFIG_LINUXBOOT_ROM=blobs/s2600wf.rom
CONFIG_LINUX_CONFIG=config/linux-linuxboot.config

export CONFIG_LINUX_VERSION=4.14.62

#CONFIG_CRYPTSETUP=y
#CONFIG_FLASHROM=y
CONFIG_FLASHTOOLS=y
Expand Down
1 change: 1 addition & 0 deletions boards/t420/t420.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Configuration for a T420 running Qubes and other OS, T420 is identical to X230 on the Linux Side of things.
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-t420.config
CONFIG_LINUX_CONFIG=config/linux-x230.config
Expand Down
1 change: 1 addition & 0 deletions boards/t430-flash/t430-flash.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ BOARD=t430.flash

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_FLASHROM=y
CONFIG_FLASHTOOLS=y
Expand Down
1 change: 1 addition & 0 deletions boards/t430/t430.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Configuration for a t430 running Qubes and other OSes
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-t430.config
CONFIG_LINUX_CONFIG=config/linux-x230.config
Expand Down
2 changes: 2 additions & 0 deletions boards/tioga/tioga.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ CONFIG_LINUXBOOT=y
CONFIG_LINUXBOOT_ROM=blobs/tioga.rom
CONFIG_LINUX_CONFIG=config/linux-linuxboot.config

export CONFIG_LINUX_VERSION=4.14.62

# If you want to build with the go-based u-root instead of Heads
CONFIG_UROOT ?= n

Expand Down
2 changes: 2 additions & 0 deletions boards/winterfell/winterfell.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ CONFIG_LINUXBOOT=y
CONFIG_LINUXBOOT_ROM=blobs/winterfell.rom
CONFIG_LINUX_CONFIG=config/linux-linuxboot.config

export CONFIG_LINUX_VERSION=4.14.62

# If you want to build with the go-based u-root instead of Heads
CONFIG_UROOT ?= y

Expand Down
1 change: 1 addition & 0 deletions boards/x220/x220.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Configuration for a x220 running Qubes and other OS, X220 is identical to X230 on the Linux Side of things.
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-x220.config
CONFIG_LINUX_CONFIG=config/linux-x230.config
Expand Down
1 change: 1 addition & 0 deletions boards/x230-flash/x230-flash.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ BOARD=x230.flash

export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_FLASHROM=y
#CONFIG_GPG=y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# running Qubes and other OSes
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-x230-hotp-verification.config
CONFIG_LINUX_CONFIG=config/linux-x230.config
Expand Down
1 change: 1 addition & 0 deletions boards/x230/x230.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Configuration for a x230 running Qubes and other OSes
export CONFIG_COREBOOT=y
export CONFIG_COREBOOT_VERSION=4.8.1
export CONFIG_LINUX_VERSION=4.14.62

CONFIG_COREBOOT_CONFIG=config/coreboot-x230.config
CONFIG_LINUX_CONFIG=config/linux-x230.config
Expand Down
15 changes: 9 additions & 6 deletions modules/linux
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
modules-y += linux

ifeq "$(CONFIG_LINUX_VERSION)" "4.14.62"
linux_version := 4.14.62
linux_hash := 51ca4d7e8ee156dc0f19bc7768915cfae41dbb0b4f251e4fa8b178c5674c22ab
else ifeq "$(CONFIG_LINUX_VERSION)" "4.19.139"
linux_version := 4.19.139
linux_hash := 9c4ebf21fe949f80fbcfbbd6e7fe181040d325e89475e230ab53ef01f9d55605
else
$(error "$(BOARD): does not specify linux kernel version under CONFIG_LINUX_VERSION")
endif

linux_base_dir := linux-$(linux_version)

# TODO: fixup the patch process
Expand All @@ -15,12 +24,6 @@ linux_dir := $(linux_base_dir)/$(notdir $(basename $(linux_kconfig)))
linux_tar := linux-$(linux_version).tar.xz
linux_url := https://cdn.kernel.org/pub/linux/kernel/v4.x/$(linux_tar)

linux-4.9.38_hash := 76d789d87dd51d2fd58c095727171984fa4a992f5e25b9e3eb1e5fd5cd129074
linux-4.9.80_hash := 9e2e83ccc0afc3f23340ed5e58a35d8c6300a7c58aa98ca913848de41226477b
linux-4.14.62_hash := 51ca4d7e8ee156dc0f19bc7768915cfae41dbb0b4f251e4fa8b178c5674c22ab

linux_hash := $(linux-$(linux_version)_hash)

# Ensure that touching the config file will force a reconfig/rebuild
$(build)/$(linux_dir)/.configured: $(linux_kconfig)

Expand Down
54 changes: 54 additions & 0 deletions patches/linux-4.19.139/0000-efi_bds.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
diff -u --recursive ../../clean/linux-4.14.62/arch/x86/boot/compressed/eboot.c linux-4.14.62/arch/x86/boot/compressed/eboot.c
--- ../../clean/linux-4.14.62/arch/x86/boot/compressed/eboot.c 2018-08-09 06:16:40.000000000 -0400
+++ linux-4.14.62/arch/x86/boot/compressed/eboot.c 2018-08-09 10:13:11.801000000 -0400
@@ -630,8 +630,8 @@
u16 *s2;
u8 *s1;
int i;
- unsigned long ramdisk_addr;
- unsigned long ramdisk_size;
+ unsigned long ramdisk_addr = 0;
+ unsigned long ramdisk_size = 0;

efi_early = c;
sys_table = (efi_system_table_t *)(unsigned long)efi_early->table;
@@ -686,9 +686,6 @@
/* Fill in upper bits of command line address, NOP on 32 bit */
boot_params->ext_cmd_line_ptr = (u64)(unsigned long)cmdline_ptr >> 32;

- hdr->ramdisk_image = 0;
- hdr->ramdisk_size = 0;
-
/* Clear APM BIOS info */
memset(bi, 0, sizeof(*bi));

@@ -712,10 +709,16 @@

if (status != EFI_SUCCESS)
goto fail2;
- hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
- hdr->ramdisk_size = ramdisk_size & 0xffffffff;
- boot_params->ext_ramdisk_image = (u64)ramdisk_addr >> 32;
- boot_params->ext_ramdisk_size = (u64)ramdisk_size >> 32;
+
+ // don't overwrite the bzImage or loader provided ramdisk pointer
+ // unless the kernel command line specified a different one.
+ if (ramdisk_addr != 0)
+ {
+ hdr->ramdisk_image = ramdisk_addr & 0xffffffff;
+ hdr->ramdisk_size = ramdisk_size & 0xffffffff;
+ boot_params->ext_ramdisk_image = (u64)ramdisk_addr >> 32;
+ boot_params->ext_ramdisk_size = (u64)ramdisk_size >> 32;
+ }

return boot_params;
fail2:
--- clean/linux-4.14.62/arch/x86/boot/compressed/early_serial_console.c 2018-08-09 12:16:40.000000000 +0200
+++ linux-4.14.62/arch/x86/boot/compressed/early_serial_console.c 2018-09-28 11:59:36.824015244 +0200
@@ -1,5 +1,5 @@
#include "misc.h"

-int early_serial_base;
+int early_serial_base = 0x3f8;

#include "../early_serial_console.c"
32 changes: 32 additions & 0 deletions patches/linux-4.19.139/0001-fake-acpi.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
diff --recursive -u ./clean/linux-4.9.80/drivers/acpi/acpica/evxfevnt.c linux-4.9.80/drivers/acpi/acpica/evxfevnt.c
--- ./clean/linux-4.9.80/drivers/acpi/acpica/evxfevnt.c 2018-02-03 11:05:43.000000000 -0500
+++ linux-4.9.80/drivers/acpi/acpica/evxfevnt.c 2018-02-07 15:51:28.786502597 -0500
@@ -111,6 +111,8 @@
}

ACPI_ERROR((AE_INFO, "Hardware did not enter ACPI mode"));
+printk("%s:%d faking ACPI mode\n", __func__, __LINE__);
+ return_ACPI_STATUS(AE_OK);
return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
}

diff --recursive -u ./clean/linux-4.9.80/drivers/acpi/acpica/hwacpi.c linux-4.9.80/drivers/acpi/acpica/hwacpi.c
--- ./clean/linux-4.9.80/drivers/acpi/acpica/hwacpi.c 2018-02-03 11:05:43.000000000 -0500
+++ linux-4.9.80/drivers/acpi/acpica/hwacpi.c 2018-02-07 15:51:35.126557868 -0500
@@ -168,12 +168,16 @@

status = acpi_read_bit_register(ACPI_BITREG_SCI_ENABLE, &value);
if (ACPI_FAILURE(status)) {
+printk("%s:%d faking ACPI mode\n", __func__, __LINE__);
+ return_UINT32(ACPI_SYS_MODE_ACPI);
return_UINT32(ACPI_SYS_MODE_LEGACY);
}

if (value) {
return_UINT32(ACPI_SYS_MODE_ACPI);
} else {
+//printk("%s:%d faking ACPI mode\n", __func__, __LINE__);
+// return_UINT32(ACPI_SYS_MODE_ACPI);
return_UINT32(ACPI_SYS_MODE_LEGACY);
}
}
20 changes: 20 additions & 0 deletions patches/linux-4.19.139/0002-nmi-squelch.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
diff --recursive -u ./clean/linux-4.9.80/arch/x86/kernel/nmi.c linux-4.9.80/arch/x86/kernel/nmi.c
--- ./clean/linux-4.9.80/arch/x86/kernel/nmi.c 2018-02-03 11:05:43.000000000 -0500
+++ linux-4.9.80/arch/x86/kernel/nmi.c 2018-02-07 18:56:10.475613884 -0500
@@ -303,6 +303,8 @@

__this_cpu_add(nmi_stats.unknown, 1);

+#if 0
+// qemu generates these for some reason
pr_emerg("Uhhuh. NMI received for unknown reason %02x on CPU %d.\n",
reason, smp_processor_id());

@@ -311,6 +313,7 @@
nmi_panic(regs, "NMI: Not continuing");

pr_emerg("Dazed and confused, but trying to continue\n");
+#endif
}
NOKPROBE_SYMBOL(unknown_nmi_error);

28 changes: 28 additions & 0 deletions patches/linux-4.19.139/0003-fake-trampoline.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
diff --recursive -u ./clean/linux-4.9.80/arch/x86/realmode/init.c linux-4.9.80/arch/x86/realmode/init.c
--- ./clean/linux-4.9.80/arch/x86/realmode/init.c 2018-02-03 11:05:43.000000000 -0500
+++ linux-4.9.80/arch/x86/realmode/init.c 2018-02-07 15:51:28.538500435 -0500
@@ -35,8 +35,8 @@
/* Has to be under 1M so we can execute real-mode AP code. */
mem = memblock_find_in_range(0, 1<<20, size, PAGE_SIZE);
if (!mem) {
- pr_info("No sub-1M memory is available for the trampoline\n");
- return;
+ mem = 0x4000;
+ pr_info("No sub-1M memory is available for the trampoline, guessing %p\n", mem);
}

memblock_reserve(mem, size);
@@ -138,7 +138,12 @@
static int __init init_real_mode(void)
{
if (!real_mode_header)
- panic("Real mode trampoline was not allocated");
+ {
+ // ignore for now
+ //panic("Real mode trampoline was not allocated");
+ pr_warn("Real mode trampoline was not allocated");
+ return 0;
+ }

setup_real_mode();
set_real_mode_permissions();
18 changes: 18 additions & 0 deletions patches/linux-4.19.139/0010-winterfell-ahci.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
diff --recursive -u ./clean/linux-4.9.80/drivers/ata/libahci.c linux-4.9.80/drivers/ata/libahci.c
--- ./clean/linux-4.9.80/drivers/ata/libahci.c 2018-02-03 11:05:43.000000000 -0500
+++ linux-4.9.80/drivers/ata/libahci.c 2018-02-07 18:02:32.526535910 -0500
@@ -537,8 +537,12 @@
}

/* fabricate port_map from cap.nr_ports for < AHCI 1.3 */
- if (!port_map && vers < 0x10300) {
- port_map = (1 << ahci_nr_ports(cap)) - 1;
+ if (!port_map) { // && vers < 0x10300) {
+ printk("%s: saved_port=%02x\n", __func__, hpriv->saved_port_map);
+ writel(0x1, mmio + HOST_PORTS_IMPL);
+ port_map = readl(mmio + HOST_PORTS_IMPL);
+
+ //port_map = (1 << ahci_nr_ports(cap)) - 1;
dev_warn(dev, "forcing PORTS_IMPL to 0x%x\n", port_map);

/* write the fixed up value to the PI register */

0 comments on commit f23ced0

Please sign in to comment.