diff --git a/config/linux-linuxboot.config b/config/linux-linuxboot.config index a4f17dd5..3067da04 100644 --- a/config/linux-linuxboot.config +++ b/config/linux-linuxboot.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.9.38 Kernel Configuration +# Linux/x86 4.9.80 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y @@ -336,6 +336,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_FAST_FEATURE_TESTS=y CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set +CONFIG_RETPOLINE=y # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_X86_INTEL_LPSS is not set # CONFIG_X86_AMD_PLATFORM_DEVICE is not set @@ -393,7 +394,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=y CONFIG_PERF_EVENTS_INTEL_CSTATE=y # CONFIG_PERF_EVENTS_AMD_POWER is not set # CONFIG_VM86 is not set -# CONFIG_X86_VSYSCALL_EMULATION is not set +CONFIG_X86_VSYSCALL_EMULATION=y # CONFIG_I8K is not set CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=y @@ -678,6 +679,7 @@ CONFIG_NET_PTP_CLASSIFY=y # CONFIG_L2TP is not set # CONFIG_BRIDGE is not set CONFIG_HAVE_NET_DSA=y +# CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set # CONFIG_DECNET is not set # CONFIG_LLC2 is not set @@ -754,6 +756,7 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_MMIO=y @@ -2371,6 +2374,7 @@ CONFIG_OPTIMIZE_INLINING=y # CONFIG_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set +CONFIG_PAGE_TABLE_ISOLATION=y CONFIG_SECURITYFS=y # CONFIG_INTEL_TXT is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y diff --git a/config/linux-qemu.config b/config/linux-qemu.config index c633c664..ea52ecba 100644 --- a/config/linux-qemu.config +++ b/config/linux-qemu.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.9.38 Kernel Configuration +# Linux/x86 4.9.80 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y @@ -336,6 +336,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_FAST_FEATURE_TESTS=y CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set +CONFIG_RETPOLINE=y # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_X86_INTEL_LPSS is not set # CONFIG_X86_AMD_PLATFORM_DEVICE is not set @@ -393,7 +394,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=y CONFIG_PERF_EVENTS_INTEL_CSTATE=y # CONFIG_PERF_EVENTS_AMD_POWER is not set # CONFIG_VM86 is not set -# CONFIG_X86_VSYSCALL_EMULATION is not set +CONFIG_X86_VSYSCALL_EMULATION=y # CONFIG_I8K is not set CONFIG_MICROCODE=y CONFIG_MICROCODE_INTEL=y @@ -448,7 +449,12 @@ CONFIG_X86_PMEM_LEGACY_DEVICE=y CONFIG_X86_PMEM_LEGACY=y # CONFIG_X86_CHECK_BIOS_CORRUPTION is not set CONFIG_X86_RESERVE_LOW=64 -# CONFIG_MTRR is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y CONFIG_ARCH_RANDOM=y CONFIG_X86_SMAP=y # CONFIG_X86_INTEL_MPX is not set @@ -674,6 +680,7 @@ CONFIG_NET_PTP_CLASSIFY=y # CONFIG_L2TP is not set # CONFIG_BRIDGE is not set CONFIG_HAVE_NET_DSA=y +# CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set # CONFIG_DECNET is not set # CONFIG_LLC2 is not set @@ -750,6 +757,7 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_MMIO=y @@ -2366,6 +2374,7 @@ CONFIG_OPTIMIZE_INLINING=y # CONFIG_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set +CONFIG_PAGE_TABLE_ISOLATION=y CONFIG_SECURITYFS=y # CONFIG_INTEL_TXT is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y diff --git a/config/linux-x230.config b/config/linux-x230.config index 16dfddaa..ecd64631 100644 --- a/config/linux-x230.config +++ b/config/linux-x230.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 4.9.38 Kernel Configuration +# Linux/x86 4.9.80 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y @@ -327,6 +327,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_FAST_FEATURE_TESTS=y CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set +CONFIG_RETPOLINE=y # CONFIG_X86_EXTENDED_PLATFORM is not set # CONFIG_X86_INTEL_LPSS is not set # CONFIG_X86_AMD_PLATFORM_DEVICE is not set @@ -383,7 +384,7 @@ CONFIG_PERF_EVENTS_INTEL_UNCORE=y CONFIG_PERF_EVENTS_INTEL_CSTATE=y # CONFIG_PERF_EVENTS_AMD_POWER is not set # CONFIG_VM86 is not set -# CONFIG_X86_VSYSCALL_EMULATION is not set +CONFIG_X86_VSYSCALL_EMULATION=y # CONFIG_I8K is not set # CONFIG_MICROCODE is not set # CONFIG_X86_MSR is not set @@ -623,6 +624,7 @@ CONFIG_NET_PTP_CLASSIFY=y # CONFIG_L2TP is not set # CONFIG_BRIDGE is not set CONFIG_HAVE_NET_DSA=y +# CONFIG_NET_DSA is not set # CONFIG_VLAN_8021Q is not set # CONFIG_DECNET is not set # CONFIG_LLC2 is not set @@ -699,6 +701,7 @@ CONFIG_EXTRA_FIRMWARE="" # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_MMIO=y @@ -2404,6 +2407,7 @@ CONFIG_OPTIMIZE_INLINING=y # CONFIG_KEYS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set +CONFIG_PAGE_TABLE_ISOLATION=y CONFIG_SECURITYFS=y # CONFIG_INTEL_TXT is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y diff --git a/modules/linux b/modules/linux index 90cc5ab1..fe41cdea 100644 --- a/modules/linux +++ b/modules/linux @@ -1,11 +1,12 @@ modules-y += linux -linux_version := 4.9.38 +linux_version := 4.9.80 linux_dir := linux-$(linux_version) 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_hash := $(linux-$(linux_version)_hash) @@ -36,7 +37,7 @@ linux_output += $(build)/$(BOARD)/bzImage # qemu linux_modules-$(CONFIG_LINUX_E1000) += drivers/net/ethernet/intel/e1000/e1000.ko -# x230 +# x230 and winterfell linux_modules-$(CONFIG_LINUX_E1000E) += drivers/net/ethernet/intel/e1000e/e1000e.ko # Dell R630 ethernet and RAID controller diff --git a/patches/linux-4.9.38.patch b/patches/linux-4.9.80.patch similarity index 82% rename from patches/linux-4.9.38.patch rename to patches/linux-4.9.80.patch index af2619e7..d7e24d1a 100644 --- a/patches/linux-4.9.38.patch +++ b/patches/linux-4.9.80.patch @@ -1,6 +1,6 @@ -diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/early_serial_console.c linux-4.9.38/arch/x86/boot/compressed/early_serial_console.c ---- clean/linux-4.9.38/arch/x86/boot/compressed/early_serial_console.c 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/boot/compressed/early_serial_console.c 2017-12-01 16:03:10.524787842 -0500 +diff --recursive -u ./clean/linux-4.9.80/arch/x86/boot/compressed/early_serial_console.c linux-4.9.80/arch/x86/boot/compressed/early_serial_console.c +--- ./clean/linux-4.9.80/arch/x86/boot/compressed/early_serial_console.c 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/arch/x86/boot/compressed/early_serial_console.c 2018-02-07 15:51:28.534500400 -0500 @@ -1,5 +1,5 @@ #include "misc.h" @@ -8,9 +8,9 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/early_serial_con +int early_serial_base = 0x3f8; #include "../early_serial_console.c" -diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4.9.38/arch/x86/boot/compressed/eboot.c ---- clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/boot/compressed/eboot.c 2017-12-04 13:44:42.902439205 -0500 +diff --recursive -u ./clean/linux-4.9.80/arch/x86/boot/compressed/eboot.c linux-4.9.80/arch/x86/boot/compressed/eboot.c +--- ./clean/linux-4.9.80/arch/x86/boot/compressed/eboot.c 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/arch/x86/boot/compressed/eboot.c 2018-02-07 15:51:28.534500400 -0500 @@ -16,6 +16,71 @@ #include "../string.h" #include "eboot.h" @@ -83,7 +83,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. static efi_system_table_t *sys_table; static struct efi_config *efi_early; -@@ -710,6 +782,132 @@ +@@ -710,6 +775,132 @@ } } @@ -216,7 +216,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. /* * Because the x86 boot code expects to be passed a boot_params we * need to create one ourselves (usually the bootloader would create -@@ -735,23 +933,17 @@ +@@ -735,23 +926,17 @@ unsigned long ramdisk_addr; unsigned long ramdisk_size; @@ -244,7 +244,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. return NULL; } -@@ -814,6 +1006,21 @@ +@@ -814,6 +999,21 @@ if (status != EFI_SUCCESS) goto fail2; @@ -266,7 +266,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. hdr->ramdisk_image = ramdisk_addr & 0xffffffff; hdr->ramdisk_size = ramdisk_size & 0xffffffff; boot_params->ext_ramdisk_image = (u64)ramdisk_addr >> 32; -@@ -1068,6 +1275,7 @@ +@@ -1068,6 +1268,7 @@ struct boot_params *efi_main(struct efi_config *c, struct boot_params *boot_params) { @@ -274,7 +274,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. struct desc_ptr *gdt = NULL; efi_loaded_image_t *image; struct setup_header *hdr = &boot_params->hdr; -@@ -1079,12 +1287,14 @@ +@@ -1079,12 +1280,14 @@ efi_early = c; @@ -289,7 +289,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. /* Check if we were booted by the EFI firmware */ if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) goto fail; -@@ -1098,9 +1308,11 @@ +@@ -1098,9 +1301,11 @@ setup_efi_pci(boot_params); @@ -301,7 +301,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. efi_printk(sys_table, "Failed to alloc mem for gdt structure\n"); goto fail; } -@@ -1124,6 +1336,7 @@ +@@ -1124,6 +1329,7 @@ hdr->pref_address, hdr->kernel_alignment); if (status != EFI_SUCCESS) { @@ -309,7 +309,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. efi_printk(sys_table, "efi_relocate_kernel() failed!\n"); goto fail; } -@@ -1132,8 +1345,10 @@ +@@ -1132,8 +1338,10 @@ hdr->code32_start = bzimage_addr; } @@ -320,7 +320,7 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. efi_printk(sys_table, "exit_boot() failed!\n"); goto fail; } -@@ -1194,8 +1409,263 @@ +@@ -1194,8 +1402,263 @@ asm volatile("cli"); asm volatile ("lgdt %0" : : "m" (*gdt)); @@ -584,9 +584,9 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/eboot.c linux-4. +} + +#endif -diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/head_64.S linux-4.9.38/arch/x86/boot/compressed/head_64.S ---- clean/linux-4.9.38/arch/x86/boot/compressed/head_64.S 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/boot/compressed/head_64.S 2017-12-01 15:46:51.952803007 -0500 +diff --recursive -u ./clean/linux-4.9.80/arch/x86/boot/compressed/head_64.S linux-4.9.80/arch/x86/boot/compressed/head_64.S +--- ./clean/linux-4.9.80/arch/x86/boot/compressed/head_64.S 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/arch/x86/boot/compressed/head_64.S 2018-02-07 15:51:28.534500400 -0500 @@ -268,6 +268,11 @@ addq %rbp, efi64_config+32(%rip) @@ -619,9 +619,9 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/compressed/head_64.S linux- preferred_addr: #endif -diff --recursive -u clean/linux-4.9.38/arch/x86/boot/header.S linux-4.9.38/arch/x86/boot/header.S ---- clean/linux-4.9.38/arch/x86/boot/header.S 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/boot/header.S 2017-12-01 09:59:11.737255340 -0500 +diff --recursive -u ./clean/linux-4.9.80/arch/x86/boot/header.S linux-4.9.80/arch/x86/boot/header.S +--- ./clean/linux-4.9.80/arch/x86/boot/header.S 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/arch/x86/boot/header.S 2018-02-07 15:51:28.534500400 -0500 @@ -171,7 +171,11 @@ .long 0x200 # SizeOfHeaders @@ -634,10 +634,10 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/boot/header.S linux-4.9.38/arch/ .word 0 # DllCharacteristics #ifdef CONFIG_X86_32 .long 0 # SizeOfStackReserve -diff --recursive -u clean/linux-4.9.38/arch/x86/Kconfig linux-4.9.38/arch/x86/Kconfig ---- clean/linux-4.9.38/arch/x86/Kconfig 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/Kconfig 2017-12-01 09:58:28.892507523 -0500 -@@ -1772,6 +1772,15 @@ +diff --recursive -u ./clean/linux-4.9.80/arch/x86/Kconfig linux-4.9.80/arch/x86/Kconfig +--- ./clean/linux-4.9.80/arch/x86/Kconfig 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/arch/x86/Kconfig 2018-02-07 15:51:28.538500435 -0500 +@@ -1786,6 +1786,15 @@ See Documentation/efi-stub.txt for more information. @@ -653,9 +653,29 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/Kconfig linux-4.9.38/arch/x86/Kc config EFI_MIXED bool "EFI mixed-mode support" depends on EFI_STUB && X86_64 -diff --recursive -u clean/linux-4.9.38/arch/x86/realmode/init.c linux-4.9.38/arch/x86/realmode/init.c ---- clean/linux-4.9.38/arch/x86/realmode/init.c 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/arch/x86/realmode/init.c 2017-10-11 18:38:36.027243511 -0400 +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); + +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); @@ -681,9 +701,9 @@ diff --recursive -u clean/linux-4.9.38/arch/x86/realmode/init.c linux-4.9.38/arc setup_real_mode(); set_real_mode_permissions(); -diff --recursive -u clean/linux-4.9.38/drivers/acpi/acpica/evxfevnt.c linux-4.9.38/drivers/acpi/acpica/evxfevnt.c ---- clean/linux-4.9.38/drivers/acpi/acpica/evxfevnt.c 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/drivers/acpi/acpica/evxfevnt.c 2017-10-11 18:38:36.027243511 -0400 +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 @@ } @@ -693,9 +713,9 @@ diff --recursive -u clean/linux-4.9.38/drivers/acpi/acpica/evxfevnt.c linux-4.9. return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE); } -diff --recursive -u clean/linux-4.9.38/drivers/acpi/acpica/hwacpi.c linux-4.9.38/drivers/acpi/acpica/hwacpi.c ---- clean/linux-4.9.38/drivers/acpi/acpica/hwacpi.c 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/drivers/acpi/acpica/hwacpi.c 2017-10-11 18:38:36.027243511 -0400 +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); @@ -713,9 +733,27 @@ diff --recursive -u clean/linux-4.9.38/drivers/acpi/acpica/hwacpi.c linux-4.9.38 return_UINT32(ACPI_SYS_MODE_LEGACY); } } -diff --recursive -u clean/linux-4.9.38/include/linux/efi.h linux-4.9.38/include/linux/efi.h ---- clean/linux-4.9.38/include/linux/efi.h 2017-07-15 06:17:55.000000000 -0400 -+++ linux-4.9.38/include/linux/efi.h 2017-11-30 13:46:12.391653428 -0500 +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 */ +diff --recursive -u ./clean/linux-4.9.80/include/linux/efi.h linux-4.9.80/include/linux/efi.h +--- ./clean/linux-4.9.80/include/linux/efi.h 2018-02-03 11:05:43.000000000 -0500 ++++ linux-4.9.80/include/linux/efi.h 2018-02-07 15:51:35.130557903 -0500 @@ -287,10 +287,10 @@ void *create_event; void *set_timer;