summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/master
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/current/master')
-rw-r--r--freed-ora/current/master/ARM-tegra-usb-no-reset.patch4
-rw-r--r--freed-ora/current/master/Add-EFI-signature-data-types.patch6
-rw-r--r--freed-ora/current/master/Add-an-EFI-signature-blob-parser-and-key-loader.patch4
-rw-r--r--freed-ora/current/master/Add-option-to-automatically-enforce-module-signature.patch16
-rw-r--r--freed-ora/current/master/Add-secure_modules-call.patch10
-rw-r--r--freed-ora/current/master/Add-sysrq-option-to-disable-secure-boot-mode.patch16
-rw-r--r--freed-ora/current/master/HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch84
-rw-r--r--freed-ora/current/master/Input-add-driver-for-the-Goodix-touchpanel.patch479
-rw-r--r--freed-ora/current/master/KEYS-Add-a-system-blacklist-keyring.patch4
-rw-r--r--freed-ora/current/master/Kbuild-Add-an-option-to-enable-GCC-VTA.patch6
-rw-r--r--freed-ora/current/master/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch12
-rw-r--r--freed-ora/current/master/Makefile1
-rw-r--r--freed-ora/current/master/Makefile.release2
-rw-r--r--freed-ora/current/master/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch8
-rw-r--r--freed-ora/current/master/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch6
-rw-r--r--freed-ora/current/master/Revert-Revert-ACPI-video-change-acpi-video-brightnes.patch6
-rw-r--r--freed-ora/current/master/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch2
-rw-r--r--freed-ora/current/master/acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch37
-rw-r--r--freed-ora/current/master/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch2
-rw-r--r--freed-ora/current/master/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch5
-rw-r--r--freed-ora/current/master/arm-dts-sun7i-bananapi.patch213
-rw-r--r--freed-ora/current/master/asus-wmi-Restrict-debugfs-interface-when-module-load.patch8
-rw-r--r--freed-ora/current/master/ath9k-rx-dma-stop-check.patch6
-rw-r--r--freed-ora/current/master/blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch79
-rw-r--r--freed-ora/current/master/cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch41
-rw-r--r--freed-ora/current/master/config-arm-generic11
-rw-r--r--freed-ora/current/master/config-arm6419
-rw-r--r--freed-ora/current/master/config-armv742
-rw-r--r--freed-ora/current/master/config-armv7-generic81
-rw-r--r--freed-ora/current/master/config-armv7-lpae2
-rw-r--r--freed-ora/current/master/config-debug4
-rw-r--r--freed-ora/current/master/config-generic84
-rw-r--r--freed-ora/current/master/config-nodebug6
-rw-r--r--freed-ora/current/master/config-powerpc-generic2
-rw-r--r--freed-ora/current/master/config-powerpc644
-rw-r--r--freed-ora/current/master/config-powerpc64p74
-rw-r--r--freed-ora/current/master/config-s390x3
-rw-r--r--freed-ora/current/master/config-x86-32-generic2
-rw-r--r--freed-ora/current/master/config-x86-generic11
-rw-r--r--freed-ora/current/master/config-x86_64-generic2
-rw-r--r--freed-ora/current/master/crash-driver.patch6
-rw-r--r--freed-ora/current/master/criu-no-expert.patch6
-rwxr-xr-xfreed-ora/current/master/deblob-3.193004
-rwxr-xr-xfreed-ora/current/master/deblob-check55
-rw-r--r--freed-ora/current/master/disable-i8042-check-on-apple-mac.patch6
-rw-r--r--freed-ora/current/master/dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch42
-rw-r--r--freed-ora/current/master/dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch40
-rw-r--r--freed-ora/current/master/dm-cache-only-use-overwrite-optimisation-for-promoti.patch32
-rw-r--r--freed-ora/current/master/drm-i915-hush-check-crtc-state.patch4
-rw-r--r--freed-ora/current/master/efi-Add-EFI_SECURE_BOOT-bit.patch8
-rw-r--r--freed-ora/current/master/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch2
-rw-r--r--freed-ora/current/master/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch4
-rw-r--r--freed-ora/current/master/groups-Consolidate-the-setgroups-permission-checks.patch90
-rw-r--r--freed-ora/current/master/hibernate-Disable-in-a-signed-modules-environment.patch8
-rw-r--r--freed-ora/current/master/input-kill-stupid-messages.patch2
-rw-r--r--freed-ora/current/master/input-silence-i8042-noise.patch8
-rw-r--r--freed-ora/current/master/isofs-Fix-infinite-looping-over-CE-entries.patch54
-rw-r--r--freed-ora/current/master/kernel-arm64.patch6973
-rw-r--r--freed-ora/current/master/kernel.spec233
-rw-r--r--freed-ora/current/master/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch2
-rw-r--r--freed-ora/current/master/mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch41
-rw-r--r--freed-ora/current/master/mnt-Update-unprivileged-remount-test.patch280
-rw-r--r--freed-ora/current/master/no-pcspkr-modalias.patch2
-rw-r--r--freed-ora/current/master/patch-3.18-gnu-3.19-rc6-gnu.xz.sign7
-rw-r--r--freed-ora/current/master/pinctrl-pinctrl-single-must-be-initialized-early.patch4
-rw-r--r--freed-ora/current/master/powerpc-powernv-force-all-CPUs-to-be-bootable.patch46
-rw-r--r--freed-ora/current/master/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch39
-rw-r--r--freed-ora/current/master/samsung-laptop-Add-use_native_backlight-quirk-and-en.patch107
-rw-r--r--freed-ora/current/master/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch4
-rw-r--r--freed-ora/current/master/silence-fbcon-logo.patch4
-rw-r--r--freed-ora/current/master/sources2
-rw-r--r--freed-ora/current/master/uapi-linux-target_core_user.h-fix-headers_install.sh.patch36
-rw-r--r--freed-ora/current/master/uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch38
-rw-r--r--freed-ora/current/master/uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch36
-rw-r--r--freed-ora/current/master/uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch33
-rw-r--r--freed-ora/current/master/umount-Disallow-unprivileged-mount-force.patch33
-rw-r--r--freed-ora/current/master/userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch280
-rw-r--r--freed-ora/current/master/userns-Allow-setting-gid_maps-without-privilege-when.patch40
-rw-r--r--freed-ora/current/master/userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch39
-rw-r--r--freed-ora/current/master/userns-Document-what-the-invariant-required-for-safe.patch48
-rw-r--r--freed-ora/current/master/userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch98
-rw-r--r--freed-ora/current/master/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch46
-rw-r--r--freed-ora/current/master/userns-Only-allow-the-creator-of-the-userns-unprivil.patch54
-rw-r--r--freed-ora/current/master/userns-Rename-id_map_mutex-to-userns_state_mutex.patch80
-rw-r--r--freed-ora/current/master/userns-Unbreak-the-unprivileged-remount-tests.patch91
-rw-r--r--freed-ora/current/master/x86-Lock-down-IO-port-access-when-module-security-is.patch4
-rw-r--r--freed-ora/current/master/x86-Restrict-MSR-access-when-module-loading-is-restr.patch6
-rw-r--r--freed-ora/current/master/x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch72
-rw-r--r--freed-ora/current/master/x86-tls-Validate-TLS-entries-to-protect-espfix.patch77
-rw-r--r--freed-ora/current/master/xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch44
90 files changed, 3871 insertions, 9733 deletions
diff --git a/freed-ora/current/master/ARM-tegra-usb-no-reset.patch b/freed-ora/current/master/ARM-tegra-usb-no-reset.patch
index 2b1058b26..c356aec66 100644
--- a/freed-ora/current/master/ARM-tegra-usb-no-reset.patch
+++ b/freed-ora/current/master/ARM-tegra-usb-no-reset.patch
@@ -9,10 +9,10 @@ Patch for disconnect issues with storage attached to a
1 file changed, 7 insertions(+)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index b649fef2e35d..fb89290710ad 100644
+index aeb50bb6ba9c..5859e12dd498 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5023,6 +5023,13 @@ static void hub_event(struct work_struct *work)
+@@ -5021,6 +5021,13 @@ static void hub_event(struct work_struct *work)
(u16) hub->change_bits[0],
(u16) hub->event_bits[0]);
diff --git a/freed-ora/current/master/Add-EFI-signature-data-types.patch b/freed-ora/current/master/Add-EFI-signature-data-types.patch
index 8a9a9f5fb..c19381982 100644
--- a/freed-ora/current/master/Add-EFI-signature-data-types.patch
+++ b/freed-ora/current/master/Add-EFI-signature-data-types.patch
@@ -14,10 +14,10 @@ Signed-off-by: David Howells <dhowells@redhat.com>
1 file changed, 20 insertions(+)
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 130ba866a24a..58d7feadd149 100644
+index 16ec1c00919d..b7cb7dc5ebb4 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -586,6 +586,12 @@ void efi_native_runtime_setup(void);
+@@ -589,6 +589,12 @@ void efi_native_runtime_setup(void);
#define DEVICE_TREE_GUID \
EFI_GUID( 0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 )
@@ -30,7 +30,7 @@ index 130ba866a24a..58d7feadd149 100644
typedef struct {
efi_guid_t guid;
u64 table;
-@@ -801,6 +807,20 @@ typedef struct _efi_file_io_interface {
+@@ -804,6 +810,20 @@ typedef struct _efi_file_io_interface {
#define EFI_INVALID_TABLE_ADDR (~0UL)
diff --git a/freed-ora/current/master/Add-an-EFI-signature-blob-parser-and-key-loader.patch b/freed-ora/current/master/Add-an-EFI-signature-blob-parser-and-key-loader.patch
index 7c5c7e7cd..978a3fc72 100644
--- a/freed-ora/current/master/Add-an-EFI-signature-blob-parser-and-key-loader.patch
+++ b/freed-ora/current/master/Add-an-EFI-signature-blob-parser-and-key-loader.patch
@@ -159,10 +159,10 @@ index 000000000000..424896a0b169
+ return 0;
+}
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 58d7feadd149..b1d686e9175e 100644
+index b7cb7dc5ebb4..fb972b96959a 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -919,6 +919,10 @@ extern bool efi_poweroff_required(void);
+@@ -923,6 +923,10 @@ extern bool efi_poweroff_required(void);
char * __init efi_md_typeattr_format(char *buf, size_t size,
const efi_memory_desc_t *md);
diff --git a/freed-ora/current/master/Add-option-to-automatically-enforce-module-signature.patch b/freed-ora/current/master/Add-option-to-automatically-enforce-module-signature.patch
index a4ceb74e3..4b3671743 100644
--- a/freed-ora/current/master/Add-option-to-automatically-enforce-module-signature.patch
+++ b/freed-ora/current/master/Add-option-to-automatically-enforce-module-signature.patch
@@ -33,10 +33,10 @@ index 199f453cb4de..ec38acf00b40 100644
290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
2D0/A00 ALL e820_map E820 memory map table
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 41a503c15862..7b8969db8398 100644
+index 0dc9d0144a27..58273956750d 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -1611,6 +1611,16 @@ config EFI_MIXED
+@@ -1660,6 +1660,16 @@ config EFI_MIXED
If unsure, say N.
@@ -54,7 +54,7 @@ index 41a503c15862..7b8969db8398 100644
def_bool y
prompt "Enable seccomp to safely compute untrusted bytecode"
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index 1acf605a646d..6da2da7ac9c3 100644
+index 92b9a5f2aed6..2192da755e34 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -12,6 +12,7 @@
@@ -129,10 +129,10 @@ index 225b0988043a..90dbfb73e11f 100644
* The sentinel is set to a nonzero value (0xff) in header.S.
*
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index ab08aa2276fb..f4eb99432db1 100644
+index ab4734e5411d..5d52d67d5097 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
-@@ -1150,6 +1150,12 @@ void __init setup_arch(char **cmdline_p)
+@@ -1152,6 +1152,12 @@ void __init setup_arch(char **cmdline_p)
io_delay_init();
@@ -146,7 +146,7 @@ index ab08aa2276fb..f4eb99432db1 100644
* Parse the ACPI tables for possible boot-time SMP configuration.
*/
diff --git a/include/linux/module.h b/include/linux/module.h
-index 341a73ecea2e..cca08ac450e2 100644
+index d4b96d6c926a..c47f75720dbd 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -188,6 +188,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
@@ -163,10 +163,10 @@ index 341a73ecea2e..cca08ac450e2 100644
extern int modules_disabled; /* for sysctl */
diff --git a/kernel/module.c b/kernel/module.c
-index 6507ffcb5445..cace4bd04956 100644
+index 98c3d7955a51..6244f24abe27 100644
--- a/kernel/module.c
+++ b/kernel/module.c
-@@ -3845,6 +3845,13 @@ void module_layout(struct module *mod,
+@@ -3896,6 +3896,13 @@ void module_layout(struct module *mod,
EXPORT_SYMBOL(module_layout);
#endif
diff --git a/freed-ora/current/master/Add-secure_modules-call.patch b/freed-ora/current/master/Add-secure_modules-call.patch
index d68a7e103..84ff314ac 100644
--- a/freed-ora/current/master/Add-secure_modules-call.patch
+++ b/freed-ora/current/master/Add-secure_modules-call.patch
@@ -16,10 +16,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
2 files changed, 17 insertions(+)
diff --git a/include/linux/module.h b/include/linux/module.h
-index 71f282a4e307..341a73ecea2e 100644
+index b653d7c0a05a..d4b96d6c926a 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
-@@ -516,6 +516,8 @@ int unregister_module_notifier(struct notifier_block *nb);
+@@ -502,6 +502,8 @@ int unregister_module_notifier(struct notifier_block *nb);
extern void print_modules(void);
@@ -28,7 +28,7 @@ index 71f282a4e307..341a73ecea2e 100644
#else /* !CONFIG_MODULES... */
/* Given an address, look for it in the exception tables. */
-@@ -626,6 +628,11 @@ static inline int unregister_module_notifier(struct notifier_block *nb)
+@@ -612,6 +614,11 @@ static inline int unregister_module_notifier(struct notifier_block *nb)
static inline void print_modules(void)
{
}
@@ -41,10 +41,10 @@ index 71f282a4e307..341a73ecea2e 100644
#ifdef CONFIG_SYSFS
diff --git a/kernel/module.c b/kernel/module.c
-index 88cec1ddb1e3..6507ffcb5445 100644
+index d856e96a3cce..98c3d7955a51 100644
--- a/kernel/module.c
+++ b/kernel/module.c
-@@ -3844,3 +3844,13 @@ void module_layout(struct module *mod,
+@@ -3895,3 +3895,13 @@ void module_layout(struct module *mod,
}
EXPORT_SYMBOL(module_layout);
#endif
diff --git a/freed-ora/current/master/Add-sysrq-option-to-disable-secure-boot-mode.patch b/freed-ora/current/master/Add-sysrq-option-to-disable-secure-boot-mode.patch
index e0c567d78..bbd41f249 100644
--- a/freed-ora/current/master/Add-sysrq-option-to-disable-secure-boot-mode.patch
+++ b/freed-ora/current/master/Add-sysrq-option-to-disable-secure-boot-mode.patch
@@ -15,7 +15,7 @@ Upstream-status: Fedora mustard
7 files changed, 65 insertions(+), 10 deletions(-)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index bc31a43b31a0..5f80d12a55cb 100644
+index b40d6174242f..0ee7749bad74 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -70,6 +70,11 @@
@@ -215,23 +215,23 @@ index 387fa7d05c98..4b07e30b3279 100644
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
struct sysrq_key_op *__sysrq_get_key_op(int key);
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
-index 379650b984f8..070f29fefdc2 100644
+index 7b40c5f07dce..8a60477b96e1 100644
--- a/kernel/debug/kdb/kdb_main.c
+++ b/kernel/debug/kdb/kdb_main.c
-@@ -1924,7 +1924,7 @@ static int kdb_sr(int argc, const char **argv)
- if (argc != 1)
+@@ -1968,7 +1968,7 @@ static int kdb_sr(int argc, const char **argv)
return KDB_ARGCOUNT;
+
kdb_trap_printk++;
-- __handle_sysrq(*argv[1], false);
-+ __handle_sysrq(*argv[1], SYSRQ_FROM_KERNEL);
+- __handle_sysrq(*argv[1], check_mask);
++ __handle_sysrq(*argv[1], check_mask & SYSRQ_FROM_KERNEL);
kdb_trap_printk--;
return 0;
diff --git a/kernel/module.c b/kernel/module.c
-index cace4bd04956..a33be993df25 100644
+index 6244f24abe27..b77554170d76 100644
--- a/kernel/module.c
+++ b/kernel/module.c
-@@ -108,9 +108,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
+@@ -107,9 +107,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
#ifdef CONFIG_MODULE_SIG
#ifdef CONFIG_MODULE_SIG_FORCE
diff --git a/freed-ora/current/master/HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch b/freed-ora/current/master/HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch
deleted file mode 100644
index 357ad1932..000000000
--- a/freed-ora/current/master/HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From: Alan Wu <alan.c.wu@gmail.com>
-Date: Mon, 3 Nov 2014 18:26:12 -0800
-Subject: [PATCH] HID: add support for MS Surface Pro 3 Type Cover
-
-Surface Pro 3 Type Cover that works with Ubuntu (and possibly Arch) from this thread. Both trackpad and keyboard work after compiling my own kernel.
-http://ubuntuforums.org/showthread.php?t=2231207&page=2&s=44910e0c56047e4f93dfd9fea58121ef
-
-Also includes Jarrad Whitaker's message which sources
-http://winaero.com/blog/how-to-install-linux-on-surface-pro-3/
-which he says is sourced from a Russian site
-
-Signed-off-by: Alan Wu <alan.c.wu@gmail.com>
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
----
- drivers/hid/hid-core.c | 6 ++++++
- drivers/hid/hid-ids.h | 1 +
- drivers/hid/hid-microsoft.c | 2 ++
- drivers/hid/usbhid/hid-quirks.c | 1 +
- 4 files changed, 10 insertions(+)
-
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 3402033fa52a..3d3820ecaa49 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -702,6 +702,11 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
- if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
- type == HID_COLLECTION_PHYSICAL)
- hid->group = HID_GROUP_SENSOR_HUB;
-+
-+ if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
-+ hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 &&
-+ hid->group == HID_GROUP_MULTITOUCH)
-+ hid->group = HID_GROUP_GENERIC;
- }
-
- static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
-@@ -1862,6 +1867,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
- { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
- { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
-diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 7c863738e419..ab562f41c00c 100644
---- a/drivers/hid/hid-ids.h
-+++ b/drivers/hid/hid-ids.h
-@@ -649,6 +649,7 @@
- #define USB_DEVICE_ID_MS_SURFACE_PRO_2 0x0799
- #define USB_DEVICE_ID_MS_TOUCH_COVER_2 0x07a7
- #define USB_DEVICE_ID_MS_TYPE_COVER_2 0x07a9
-+#define USB_DEVICE_ID_MS_TYPE_COVER_3 0x07dc
-
- #define USB_VENDOR_ID_MOJO 0x8282
- #define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
-diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c
-index 8ba17a946f2a..cacda43f6a6f 100644
---- a/drivers/hid/hid-microsoft.c
-+++ b/drivers/hid/hid-microsoft.c
-@@ -274,6 +274,8 @@ static const struct hid_device_id ms_devices[] = {
- .driver_data = MS_NOGET },
- { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500),
- .driver_data = MS_DUPLICATE_USAGES },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3),
-+ .driver_data = MS_HIDINPUT },
-
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT),
- .driver_data = MS_PRESENTER },
-diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
-index 552671ee7c5d..41814fced1cc 100644
---- a/drivers/hid/usbhid/hid-quirks.c
-+++ b/drivers/hid/usbhid/hid-quirks.c
-@@ -78,6 +78,7 @@ static const struct hid_blacklist {
- { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
- { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
-+ { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
- { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
---
-2.1.0
-
diff --git a/freed-ora/current/master/Input-add-driver-for-the-Goodix-touchpanel.patch b/freed-ora/current/master/Input-add-driver-for-the-Goodix-touchpanel.patch
deleted file mode 100644
index 30004ff92..000000000
--- a/freed-ora/current/master/Input-add-driver-for-the-Goodix-touchpanel.patch
+++ /dev/null
@@ -1,479 +0,0 @@
-From: Bastien Nocera <hadess@hadess.net>
-Date: Fri, 31 Oct 2014 09:26:16 -0700
-Subject: [PATCH] Input: add driver for the Goodix touchpanel
-
-Add a driver for the Goodix touchscreen panel found in Onda v975w tablets.
-The driver is based off the Android driver gt9xx.c found in some Android
-code dumps, but now bears no resemblance to the original driver.
-
-The driver was tested on the aforementioned tablet.
-
-Signed-off-by: Bastien Nocera <hadess@hadess.net>
-Tested-by: Bastien Nocera <hadess@hadess.net>
-Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
----
- MAINTAINERS | 6 +
- drivers/input/touchscreen/Kconfig | 13 ++
- drivers/input/touchscreen/Makefile | 1 +
- drivers/input/touchscreen/goodix.c | 395 +++++++++++++++++++++++++++++++++++++
- 4 files changed, 415 insertions(+)
- create mode 100644 drivers/input/touchscreen/goodix.c
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index c721042e7e45..738708f8b75f 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -4154,6 +4154,12 @@ L: linux-media@vger.kernel.org
- S: Maintained
- F: drivers/media/usb/go7007/
-
-+GOODIX TOUCHSCREEN
-+M: Bastien Nocera <hadess@hadess.net>
-+L: linux-input@vger.kernel.org
-+S: Maintained
-+F: drivers/input/touchscreen/goodix.c
-+
- GPIO SUBSYSTEM
- M: Linus Walleij <linus.walleij@linaro.org>
- M: Alexandre Courbot <gnurou@gmail.com>
-diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
-index e1d8003d01f8..568a0200fbc2 100644
---- a/drivers/input/touchscreen/Kconfig
-+++ b/drivers/input/touchscreen/Kconfig
-@@ -295,6 +295,19 @@ config TOUCHSCREEN_FUJITSU
- To compile this driver as a module, choose M here: the
- module will be called fujitsu-ts.
-
-+config TOUCHSCREEN_GOODIX
-+ tristate "Goodix I2C touchscreen"
-+ depends on I2C && ACPI
-+ help
-+ Say Y here if you have the Goodix touchscreen (such as one
-+ installed in Onda v975w tablets) connected to your
-+ system.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called goodix.
-+
- config TOUCHSCREEN_ILI210X
- tristate "Ilitek ILI210X based touchscreen"
- depends on I2C
-diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
-index 090e61cc9171..dab4a56ac98e 100644
---- a/drivers/input/touchscreen/Makefile
-+++ b/drivers/input/touchscreen/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_TOUCHSCREEN_EETI) += eeti_ts.o
- obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o
- obj-$(CONFIG_TOUCHSCREEN_EGALAX) += egalax_ts.o
- obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o
-+obj-$(CONFIG_TOUCHSCREEN_GOODIX) += goodix.o
- obj-$(CONFIG_TOUCHSCREEN_ILI210X) += ili210x.o
- obj-$(CONFIG_TOUCHSCREEN_INEXIO) += inexio.o
- obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) += intel-mid-touch.o
-diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
-new file mode 100644
-index 000000000000..ca196689f025
---- /dev/null
-+++ b/drivers/input/touchscreen/goodix.c
-@@ -0,0 +1,395 @@
-+/*
-+ * Driver for Goodix Touchscreens
-+ *
-+ * Copyright (c) 2014 Red Hat Inc.
-+ *
-+ * This code is based on gt9xx.c authored by andrew@goodix.com:
-+ *
-+ * 2010 - 2012 Goodix Technology.
-+ */
-+
-+/*
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the Free
-+ * Software Foundation; version 2 of the License.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/i2c.h>
-+#include <linux/input.h>
-+#include <linux/input/mt.h>
-+#include <linux/module.h>
-+#include <linux/delay.h>
-+#include <linux/irq.h>
-+#include <linux/interrupt.h>
-+#include <linux/slab.h>
-+#include <asm/unaligned.h>
-+
-+struct goodix_ts_data {
-+ struct i2c_client *client;
-+ struct input_dev *input_dev;
-+ int abs_x_max;
-+ int abs_y_max;
-+ unsigned int max_touch_num;
-+ unsigned int int_trigger_type;
-+};
-+
-+#define GOODIX_MAX_HEIGHT 4096
-+#define GOODIX_MAX_WIDTH 4096
-+#define GOODIX_INT_TRIGGER 1
-+#define GOODIX_CONTACT_SIZE 8
-+#define GOODIX_MAX_CONTACTS 10
-+
-+#define GOODIX_CONFIG_MAX_LENGTH 240
-+
-+/* Register defines */
-+#define GOODIX_READ_COOR_ADDR 0x814E
-+#define GOODIX_REG_CONFIG_DATA 0x8047
-+#define GOODIX_REG_VERSION 0x8140
-+
-+#define RESOLUTION_LOC 1
-+#define TRIGGER_LOC 6
-+
-+static const unsigned long goodix_irq_flags[] = {
-+ IRQ_TYPE_EDGE_RISING,
-+ IRQ_TYPE_EDGE_FALLING,
-+ IRQ_TYPE_LEVEL_LOW,
-+ IRQ_TYPE_LEVEL_HIGH,
-+};
-+
-+/**
-+ * goodix_i2c_read - read data from a register of the i2c slave device.
-+ *
-+ * @client: i2c device.
-+ * @reg: the register to read from.
-+ * @buf: raw write data buffer.
-+ * @len: length of the buffer to write
-+ */
-+static int goodix_i2c_read(struct i2c_client *client,
-+ u16 reg, u8 *buf, int len)
-+{
-+ struct i2c_msg msgs[2];
-+ u16 wbuf = cpu_to_be16(reg);
-+ int ret;
-+
-+ msgs[0].flags = 0;
-+ msgs[0].addr = client->addr;
-+ msgs[0].len = 2;
-+ msgs[0].buf = (u8 *) &wbuf;
-+
-+ msgs[1].flags = I2C_M_RD;
-+ msgs[1].addr = client->addr;
-+ msgs[1].len = len;
-+ msgs[1].buf = buf;
-+
-+ ret = i2c_transfer(client->adapter, msgs, 2);
-+ return ret < 0 ? ret : (ret != ARRAY_SIZE(msgs) ? -EIO : 0);
-+}
-+
-+static int goodix_ts_read_input_report(struct goodix_ts_data *ts, u8 *data)
-+{
-+ int touch_num;
-+ int error;
-+
-+ error = goodix_i2c_read(ts->client, GOODIX_READ_COOR_ADDR, data,
-+ GOODIX_CONTACT_SIZE + 1);
-+ if (error) {
-+ dev_err(&ts->client->dev, "I2C transfer error: %d\n", error);
-+ return error;
-+ }
-+
-+ touch_num = data[0] & 0x0f;
-+ if (touch_num > GOODIX_MAX_CONTACTS)
-+ return -EPROTO;
-+
-+ if (touch_num > 1) {
-+ data += 1 + GOODIX_CONTACT_SIZE;
-+ error = goodix_i2c_read(ts->client,
-+ GOODIX_READ_COOR_ADDR +
-+ 1 + GOODIX_CONTACT_SIZE,
-+ data,
-+ GOODIX_CONTACT_SIZE * (touch_num - 1));
-+ if (error)
-+ return error;
-+ }
-+
-+ return touch_num;
-+}
-+
-+static void goodix_ts_report_touch(struct goodix_ts_data *ts, u8 *coor_data)
-+{
-+ int id = coor_data[0] & 0x0F;
-+ int input_x = get_unaligned_le16(&coor_data[1]);
-+ int input_y = get_unaligned_le16(&coor_data[3]);
-+ int input_w = get_unaligned_le16(&coor_data[5]);
-+
-+ input_mt_slot(ts->input_dev, id);
-+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true);
-+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x);
-+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y);
-+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w);
-+ input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, input_w);
-+}
-+
-+/**
-+ * goodix_process_events - Process incoming events
-+ *
-+ * @ts: our goodix_ts_data pointer
-+ *
-+ * Called when the IRQ is triggered. Read the current device state, and push
-+ * the input events to the user space.
-+ */
-+static void goodix_process_events(struct goodix_ts_data *ts)
-+{
-+ u8 point_data[1 + GOODIX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
-+ int touch_num;
-+ int i;
-+
-+ touch_num = goodix_ts_read_input_report(ts, point_data);
-+ if (touch_num < 0)
-+ return;
-+
-+ for (i = 0; i < touch_num; i++)
-+ goodix_ts_report_touch(ts,
-+ &point_data[1 + GOODIX_CONTACT_SIZE * i]);
-+
-+ input_mt_sync_frame(ts->input_dev);
-+ input_sync(ts->input_dev);
-+}
-+
-+/**
-+ * goodix_ts_irq_handler - The IRQ handler
-+ *
-+ * @irq: interrupt number.
-+ * @dev_id: private data pointer.
-+ */
-+static irqreturn_t goodix_ts_irq_handler(int irq, void *dev_id)
-+{
-+ static const u8 end_cmd[] = {
-+ GOODIX_READ_COOR_ADDR >> 8,
-+ GOODIX_READ_COOR_ADDR & 0xff,
-+ 0
-+ };
-+ struct goodix_ts_data *ts = dev_id;
-+
-+ goodix_process_events(ts);
-+
-+ if (i2c_master_send(ts->client, end_cmd, sizeof(end_cmd)) < 0)
-+ dev_err(&ts->client->dev, "I2C write end_cmd error\n");
-+
-+ return IRQ_HANDLED;
-+}
-+
-+/**
-+ * goodix_read_config - Read the embedded configuration of the panel
-+ *
-+ * @ts: our goodix_ts_data pointer
-+ *
-+ * Must be called during probe
-+ */
-+static void goodix_read_config(struct goodix_ts_data *ts)
-+{
-+ u8 config[GOODIX_CONFIG_MAX_LENGTH];
-+ int error;
-+
-+ error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA,
-+ config,
-+ GOODIX_CONFIG_MAX_LENGTH);
-+ if (error) {
-+ dev_warn(&ts->client->dev,
-+ "Error reading config (%d), using defaults\n",
-+ error);
-+ ts->abs_x_max = GOODIX_MAX_WIDTH;
-+ ts->abs_y_max = GOODIX_MAX_HEIGHT;
-+ ts->int_trigger_type = GOODIX_INT_TRIGGER;
-+ return;
-+ }
-+
-+ ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]);
-+ ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]);
-+ ts->int_trigger_type = (config[TRIGGER_LOC]) & 0x03;
-+ if (!ts->abs_x_max || !ts->abs_y_max) {
-+ dev_err(&ts->client->dev,
-+ "Invalid config, using defaults\n");
-+ ts->abs_x_max = GOODIX_MAX_WIDTH;
-+ ts->abs_y_max = GOODIX_MAX_HEIGHT;
-+ }
-+}
-+
-+
-+/**
-+ * goodix_read_version - Read goodix touchscreen version
-+ *
-+ * @client: the i2c client
-+ * @version: output buffer containing the version on success
-+ */
-+static int goodix_read_version(struct i2c_client *client, u16 *version)
-+{
-+ int error;
-+ u8 buf[6];
-+
-+ error = goodix_i2c_read(client, GOODIX_REG_VERSION, buf, sizeof(buf));
-+ if (error) {
-+ dev_err(&client->dev, "read version failed: %d\n", error);
-+ return error;
-+ }
-+
-+ if (version)
-+ *version = get_unaligned_le16(&buf[4]);
-+
-+ dev_info(&client->dev, "IC VERSION: %6ph\n", buf);
-+
-+ return 0;
-+}
-+
-+/**
-+ * goodix_i2c_test - I2C test function to check if the device answers.
-+ *
-+ * @client: the i2c client
-+ */
-+static int goodix_i2c_test(struct i2c_client *client)
-+{
-+ int retry = 0;
-+ int error;
-+ u8 test;
-+
-+ while (retry++ < 2) {
-+ error = goodix_i2c_read(client, GOODIX_REG_CONFIG_DATA,
-+ &test, 1);
-+ if (!error)
-+ return 0;
-+
-+ dev_err(&client->dev, "i2c test failed attempt %d: %d\n",
-+ retry, error);
-+ msleep(20);
-+ }
-+
-+ return error;
-+}
-+
-+/**
-+ * goodix_request_input_dev - Allocate, populate and register the input device
-+ *
-+ * @ts: our goodix_ts_data pointer
-+ *
-+ * Must be called during probe
-+ */
-+static int goodix_request_input_dev(struct goodix_ts_data *ts)
-+{
-+ int error;
-+
-+ ts->input_dev = devm_input_allocate_device(&ts->client->dev);
-+ if (!ts->input_dev) {
-+ dev_err(&ts->client->dev, "Failed to allocate input device.");
-+ return -ENOMEM;
-+ }
-+
-+ ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) |
-+ BIT_MASK(EV_KEY) |
-+ BIT_MASK(EV_ABS);
-+
-+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0,
-+ ts->abs_x_max, 0, 0);
-+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0,
-+ ts->abs_y_max, 0, 0);
-+ input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
-+ input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
-+
-+ input_mt_init_slots(ts->input_dev, GOODIX_MAX_CONTACTS,
-+ INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
-+
-+ ts->input_dev->name = "Goodix Capacitive TouchScreen";
-+ ts->input_dev->phys = "input/ts";
-+ ts->input_dev->id.bustype = BUS_I2C;
-+ ts->input_dev->id.vendor = 0x0416;
-+ ts->input_dev->id.product = 0x1001;
-+ ts->input_dev->id.version = 10427;
-+
-+ error = input_register_device(ts->input_dev);
-+ if (error) {
-+ dev_err(&ts->client->dev,
-+ "Failed to register input device: %d", error);
-+ return error;
-+ }
-+
-+ return 0;
-+}
-+
-+static int goodix_ts_probe(struct i2c_client *client,
-+ const struct i2c_device_id *id)
-+{
-+ struct goodix_ts_data *ts;
-+ unsigned long irq_flags;
-+ int error;
-+ u16 version_info;
-+
-+ dev_dbg(&client->dev, "I2C Address: 0x%02x\n", client->addr);
-+
-+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
-+ dev_err(&client->dev, "I2C check functionality failed.\n");
-+ return -ENXIO;
-+ }
-+
-+ ts = devm_kzalloc(&client->dev, sizeof(*ts), GFP_KERNEL);
-+ if (!ts)
-+ return -ENOMEM;
-+
-+ ts->client = client;
-+ i2c_set_clientdata(client, ts);
-+
-+ error = goodix_i2c_test(client);
-+ if (error) {
-+ dev_err(&client->dev, "I2C communication failure: %d\n", error);
-+ return error;
-+ }
-+
-+ error = goodix_read_version(client, &version_info);
-+ if (error) {
-+ dev_err(&client->dev, "Read version failed.\n");
-+ return error;
-+ }
-+
-+ goodix_read_config(ts);
-+
-+ error = goodix_request_input_dev(ts);
-+ if (error)
-+ return error;
-+
-+ irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT;
-+ error = devm_request_threaded_irq(&ts->client->dev, client->irq,
-+ NULL, goodix_ts_irq_handler,
-+ irq_flags, client->name, ts);
-+ if (error) {
-+ dev_err(&client->dev, "request IRQ failed: %d\n", error);
-+ return error;
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct i2c_device_id goodix_ts_id[] = {
-+ { "GDIX1001:00", 0 },
-+ { }
-+};
-+
-+static const struct acpi_device_id goodix_acpi_match[] = {
-+ { "GDIX1001", 0 },
-+ { }
-+};
-+MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
-+
-+static struct i2c_driver goodix_ts_driver = {
-+ .probe = goodix_ts_probe,
-+ .id_table = goodix_ts_id,
-+ .driver = {
-+ .name = "Goodix-TS",
-+ .owner = THIS_MODULE,
-+ .acpi_match_table = goodix_acpi_match,
-+ },
-+};
-+module_i2c_driver(goodix_ts_driver);
-+
-+MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
-+MODULE_AUTHOR("Bastien Nocera <hadess@hadess.net>");
-+MODULE_DESCRIPTION("Goodix touchscreen driver");
-+MODULE_LICENSE("GPL v2");
---
-2.1.0
-
diff --git a/freed-ora/current/master/KEYS-Add-a-system-blacklist-keyring.patch b/freed-ora/current/master/KEYS-Add-a-system-blacklist-keyring.patch
index 6e518e0cf..d1a77cfc8 100644
--- a/freed-ora/current/master/KEYS-Add-a-system-blacklist-keyring.patch
+++ b/freed-ora/current/master/KEYS-Add-a-system-blacklist-keyring.patch
@@ -29,10 +29,10 @@ index 72665eb80692..2c7b80d31366 100644
+
#endif /* _KEYS_SYSTEM_KEYRING_H */
diff --git a/init/Kconfig b/init/Kconfig
-index 2081a4d3d917..d99a519bb9ae 100644
+index 9afb971497f4..ea0dbdf29b75 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1747,6 +1747,15 @@ config SYSTEM_TRUSTED_KEYRING
+@@ -1742,6 +1742,15 @@ config SYSTEM_TRUSTED_KEYRING
Keys in this keyring are used by module signature checking.
diff --git a/freed-ora/current/master/Kbuild-Add-an-option-to-enable-GCC-VTA.patch b/freed-ora/current/master/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
index 7149ec3ac..c52277747 100644
--- a/freed-ora/current/master/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
+++ b/freed-ora/current/master/Kbuild-Add-an-option-to-enable-GCC-VTA.patch
@@ -43,10 +43,10 @@ Signed-off-by: Josh Stone <jistone@redhat.com>
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
-index 3f84029f2b31..46a182f02ac4 100644
+index 95a0e827ecd3..c4dd3b6b996d 100644
--- a/Makefile
+++ b/Makefile
-@@ -704,7 +704,11 @@ KBUILD_CFLAGS += -fomit-frame-pointer
+@@ -706,7 +706,11 @@ KBUILD_CFLAGS += -fomit-frame-pointer
endif
endif
@@ -59,7 +59,7 @@ index 3f84029f2b31..46a182f02ac4 100644
ifdef CONFIG_DEBUG_INFO
ifdef CONFIG_DEBUG_INFO_SPLIT
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 4e35a5d767ed..27410417de1d 100644
+index 5f2ce616c046..6525e2a5619a 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -165,7 +165,23 @@ config DEBUG_INFO_DWARF4
diff --git a/freed-ora/current/master/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch b/freed-ora/current/master/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
index 672e711f7..3789cd79c 100644
--- a/freed-ora/current/master/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
+++ b/freed-ora/current/master/MODSIGN-Import-certificates-from-UEFI-Secure-Boot.patch
@@ -25,10 +25,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
create mode 100644 kernel/modsign_uefi.c
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index b1d686e9175e..4d41f4532127 100644
+index fb972b96959a..581878071c85 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -592,6 +592,12 @@ void efi_native_runtime_setup(void);
+@@ -595,6 +595,12 @@ void efi_native_runtime_setup(void);
#define EFI_CERT_X509_GUID \
EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
@@ -42,10 +42,10 @@ index b1d686e9175e..4d41f4532127 100644
efi_guid_t guid;
u64 table;
diff --git a/init/Kconfig b/init/Kconfig
-index d99a519bb9ae..9ef459bb44b2 100644
+index ea0dbdf29b75..dac9ed0f01f7 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1901,6 +1901,15 @@ config MODULE_SIG_ALL
+@@ -1896,6 +1896,15 @@ config MODULE_SIG_ALL
comment "Do not forget to sign required modules with scripts/sign-file"
depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL
@@ -62,7 +62,7 @@ index d99a519bb9ae..9ef459bb44b2 100644
prompt "Which hash algorithm should modules be signed with?"
depends on MODULE_SIG
diff --git a/kernel/Makefile b/kernel/Makefile
-index 17ea6d4a9a24..381fe2d56ed1 100644
+index a59481a3fa6c..04b4ba9e0c9d 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -45,6 +45,7 @@ obj-$(CONFIG_UID16) += uid16.o
@@ -73,7 +73,7 @@ index 17ea6d4a9a24..381fe2d56ed1 100644
obj-$(CONFIG_KALLSYMS) += kallsyms.o
obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
obj-$(CONFIG_KEXEC) += kexec.o
-@@ -99,6 +100,8 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o
+@@ -98,6 +99,8 @@ obj-$(CONFIG_TORTURE_TEST) += torture.o
$(obj)/configs.o: $(obj)/config_data.h
diff --git a/freed-ora/current/master/Makefile b/freed-ora/current/master/Makefile
index 0cdc9beeb..4f11a034b 100644
--- a/freed-ora/current/master/Makefile
+++ b/freed-ora/current/master/Makefile
@@ -54,6 +54,7 @@ debug:
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/' config-nodebug
@perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_ARM64_PTDUMP is not set/CONFIG_ARM64_PTDUMP=y/' config-nodebug
@perl -pi -e 's/# CONFIG_EFI_PGT_DUMP is not set/CONFIG_EFI_PGT_DUMP=y/' config-nodebug
@perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
@perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
diff --git a/freed-ora/current/master/Makefile.release b/freed-ora/current/master/Makefile.release
index 6343073f9..f7b704237 100644
--- a/freed-ora/current/master/Makefile.release
+++ b/freed-ora/current/master/Makefile.release
@@ -33,7 +33,7 @@ config-release:
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_RCU_HEAD=y/# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set/' config-nodebug
- @perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_ARM64_PTDUMP=y/# CONFIG_ARM64_PTDUMP is not set/' config-nodebug
@perl -pi -e 's/CONFIG_EFI_PGT_DUMP=y/# CONFIG_EFI_PGT_DUMP is not set/' config-nodebug
@perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
@perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
diff --git a/freed-ora/current/master/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch b/freed-ora/current/master/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
index a337a4a4c..9a234bcfc 100644
--- a/freed-ora/current/master/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
+++ b/freed-ora/current/master/PCI-Lock-down-BAR-access-when-module-security-is-ena.patch
@@ -16,7 +16,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index 2c6643fdc0cf..56333630ab77 100644
+index aa012fb3834b..35cb5e9ff9a1 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -30,6 +30,7 @@
@@ -27,7 +27,7 @@ index 2c6643fdc0cf..56333630ab77 100644
#include "pci.h"
static int sysfs_initialized; /* = 0 */
-@@ -703,6 +704,9 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj,
+@@ -709,6 +710,9 @@ static ssize_t pci_write_config(struct file *filp, struct kobject *kobj,
loff_t init_off = off;
u8 *data = (u8 *) buf;
@@ -37,7 +37,7 @@ index 2c6643fdc0cf..56333630ab77 100644
if (off > dev->cfg_size)
return 0;
if (off + count > dev->cfg_size) {
-@@ -997,6 +1001,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
+@@ -1003,6 +1007,9 @@ static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
resource_size_t start, end;
int i;
@@ -47,7 +47,7 @@ index 2c6643fdc0cf..56333630ab77 100644
for (i = 0; i < PCI_ROM_RESOURCE; i++)
if (res == &pdev->resource[i])
break;
-@@ -1098,6 +1105,9 @@ static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj,
+@@ -1104,6 +1111,9 @@ static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj,
struct bin_attribute *attr, char *buf,
loff_t off, size_t count)
{
diff --git a/freed-ora/current/master/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch b/freed-ora/current/master/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
index 0b8b5cc4c..dd42dbdf2 100644
--- a/freed-ora/current/master/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
+++ b/freed-ora/current/master/Restrict-dev-mem-and-dev-kmem-when-module-loading-is.patch
@@ -13,10 +13,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
1 file changed, 6 insertions(+)
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index c268e2581ed6..fb9ea1172ba8 100644
+index fc9637812d78..dde50e5bf527 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
-@@ -164,6 +164,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
+@@ -167,6 +167,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
if (p != *ppos)
return -EFBIG;
@@ -26,7 +26,7 @@ index c268e2581ed6..fb9ea1172ba8 100644
if (!valid_phys_addr_range(p, count))
return -EFAULT;
-@@ -502,6 +505,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
+@@ -505,6 +508,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
int err = 0;
diff --git a/freed-ora/current/master/Revert-Revert-ACPI-video-change-acpi-video-brightnes.patch b/freed-ora/current/master/Revert-Revert-ACPI-video-change-acpi-video-brightnes.patch
index 94c8e9d63..69971a3ae 100644
--- a/freed-ora/current/master/Revert-Revert-ACPI-video-change-acpi-video-brightnes.patch
+++ b/freed-ora/current/master/Revert-Revert-ACPI-video-change-acpi-video-brightnes.patch
@@ -15,10 +15,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 479f33204a37..e362ef82dcc1 100644
+index 176d4fe4f076..bd374bd2490b 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -3719,7 +3719,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -3793,7 +3793,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
the allocated input device; If set to 0, video driver
will only send out the event without touching backlight
brightness level.
@@ -28,7 +28,7 @@ index 479f33204a37..e362ef82dcc1 100644
virtio_mmio.device=
[VMMIO] Memory mapped virtio (platform) device.
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
-index 9d75ead2a1f9..d7a0142cae8d 100644
+index 032db459370f..5b9c0bae4503 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -68,7 +68,7 @@ MODULE_AUTHOR("Bruno Ducrot");
diff --git a/freed-ora/current/master/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch b/freed-ora/current/master/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
index 077582bb2..7afe23d42 100644
--- a/freed-ora/current/master/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
+++ b/freed-ora/current/master/acpi-Ignore-acpi_rsdp-kernel-parameter-when-module-l.patch
@@ -13,7 +13,7 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
-index 9964f70be98d..d95d258f606c 100644
+index f9eeae871593..aa1dcf3d0216 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -44,6 +44,7 @@
diff --git a/freed-ora/current/master/acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch b/freed-ora/current/master/acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
new file mode 100644
index 000000000..daba28bfa
--- /dev/null
+++ b/freed-ora/current/master/acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
@@ -0,0 +1,37 @@
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Fri, 9 Jan 2015 15:28:29 +0100
+Subject: [PATCH] acpi-video: Add disable_native_backlight quirk for Samsung
+ 730U3E/740U3E
+
+The Samsung 730U3E/740U3E has integrated ATI Radeon graphics, and backlight
+control does not work properly when using the native interfaces.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1094948
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/acpi/video.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
+index 5b9c0bae4503..998c47f6d42b 100644
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -522,6 +522,15 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "370R4E/370R4V/370R5E/3570RE/370R5V"),
+ },
+ },
++ {
++ /* https://bugzilla.redhat.com/show_bug.cgi?id=1094948 */
++ .callback = video_disable_native_backlight,
++ .ident = "SAMSUNG 730U3E/740U3E",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
++ DMI_MATCH(DMI_PRODUCT_NAME, "730U3E/740U3E"),
++ },
++ },
+
+ {
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */
+--
+2.1.0
+
diff --git a/freed-ora/current/master/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch b/freed-ora/current/master/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
index feaa82e3c..f212c3efb 100644
--- a/freed-ora/current/master/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
+++ b/freed-ora/current/master/arm-dts-am335x-boneblack-add-cpu0-opp-points.patch
@@ -8,7 +8,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
1 file changed, 18 insertions(+)
diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
-index 5dcdcd173572..38439e097b26 100644
+index 0fd89c38cf02..20660917a06f 100644
--- a/arch/arm/boot/dts/am335x-boneblack.dts
+++ b/arch/arm/boot/dts/am335x-boneblack.dts
@@ -71,6 +71,24 @@
diff --git a/freed-ora/current/master/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch b/freed-ora/current/master/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
index 55450814b..46a151a9f 100644
--- a/freed-ora/current/master/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
+++ b/freed-ora/current/master/arm-dts-am335x-boneblack-lcdc-add-panel-info.patch
@@ -11,10 +11,10 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
1 file changed, 13 insertions(+)
diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts
-index 901739fcb85a..5dcdcd173572 100644
+index 5c42d259fa68..0fd89c38cf02 100644
--- a/arch/arm/boot/dts/am335x-boneblack.dts
+++ b/arch/arm/boot/dts/am335x-boneblack.dts
-@@ -78,5 +78,18 @@
+@@ -78,6 +78,19 @@
pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
status = "okay";
@@ -33,6 +33,7 @@ index 901739fcb85a..5dcdcd173572 100644
+ };
};
};
+
--
2.1.0
diff --git a/freed-ora/current/master/arm-dts-sun7i-bananapi.patch b/freed-ora/current/master/arm-dts-sun7i-bananapi.patch
deleted file mode 100644
index 52b019709..000000000
--- a/freed-ora/current/master/arm-dts-sun7i-bananapi.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Tue, 30 Sep 2014 14:29:26 +0100
-Subject: [PATCH] arm: dts sun7i bananapi
-
-The Banana Pi is an A20 based development board using Raspberry Pi compatible
-IO headers. It comes with 1 GB RAM, 1 Gb ethernet, 2x USB host, sata, hdmi
-and stereo audio out + various expenansion headers:
-
-Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
----
- arch/arm/boot/dts/Makefile | 1 +
- arch/arm/boot/dts/sun7i-a20-bananapi.dts | 177 +++++++++++++++++++++++++++++++
- 2 files changed, 178 insertions(+)
- create mode 100644 arch/arm/boot/dts/sun7i-a20-bananapi.dts
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index 38c89cafa1ab..63422bde3a46 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -435,6 +435,7 @@ dtb-$(CONFIG_MACH_SUN6I) += \
- sun6i-a31-hummingbird.dtb \
- sun6i-a31-m9.dtb
- dtb-$(CONFIG_MACH_SUN7I) += \
-+ sun7i-a20-bananapi.dtb \
- sun7i-a20-cubieboard2.dtb \
- sun7i-a20-cubietruck.dtb \
- sun7i-a20-hummingbird.dtb \
-diff --git a/arch/arm/boot/dts/sun7i-a20-bananapi.dts b/arch/arm/boot/dts/sun7i-a20-bananapi.dts
-new file mode 100644
-index 000000000000..7214475a3c36
---- /dev/null
-+++ b/arch/arm/boot/dts/sun7i-a20-bananapi.dts
-@@ -0,0 +1,177 @@
-+/*
-+ * Copyright 2014 Hans de Goede <hdegoede@xxxxxxxxxx>
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+/include/ "sun7i-a20.dtsi"
-+/include/ "sunxi-common-regulators.dtsi"
-+
-+/ {
-+ model = "LeMaker Banana Pi";
-+ compatible = "lemaker,bananapi", "allwinner,sun7i-a20";
-+
-+ soc@01c00000 {
-+ mmc0: mmc@01c0f000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bananapi>;
-+ vmmc-supply = <&reg_vcc3v3>;
-+ bus-width = <4>;
-+ cd-gpios = <&pio 7 10 0>; /* PH10 */
-+ cd-inverted;
-+ status = "okay";
-+ };
-+
-+ usbphy: phy@01c13400 {
-+ usb1_vbus-supply = <&reg_usb1_vbus>;
-+ usb2_vbus-supply = <&reg_usb2_vbus>;
-+ status = "okay";
-+ };
-+
-+ ehci0: usb@01c14000 {
-+ status = "okay";
-+ };
-+
-+ ohci0: usb@01c14400 {
-+ status = "okay";
-+ };
-+
-+ ahci: sata@01c18000 {
-+ status = "okay";
-+ };
-+
-+ ehci1: usb@01c1c000 {
-+ status = "okay";
-+ };
-+
-+ ohci1: usb@01c1c400 {
-+ status = "okay";
-+ };
-+
-+ pinctrl@01c20800 {
-+ uart3_pins_bananapi: uart3_pin@0 {
-+ allwinner,pins = "PH0", "PH1";
-+ allwinner,function = "uart3";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <0>;
-+ };
-+
-+ mmc0_cd_pin_bananapi: mmc0_cd_pin@0 {
-+ allwinner,pins = "PH10";
-+ allwinner,function = "gpio_in";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <1>;
-+ };
-+
-+ gmac_power_pin_bananapi: gmac_power_pin@0 {
-+ allwinner,pins = "PH23";
-+ allwinner,function = "gpio_out";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <0>;
-+ };
-+
-+ led_pins_bananapi: led_pins@0 {
-+ allwinner,pins = "PH24";
-+ allwinner,function = "gpio_out";
-+ allwinner,drive = <0>;
-+ allwinner,pull = <0>;
-+ };
-+ };
-+
-+ ir0: ir@01c21800 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&ir0_pins_a>;
-+ status = "okay";
-+ };
-+
-+ uart0: serial@01c28000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart0_pins_a>;
-+ status = "okay";
-+ };
-+
-+ uart3: serial@01c28c00 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart3_pins_bananapi>;
-+ status = "okay";
-+ };
-+
-+ uart7: serial@01c29c00 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&uart7_pins_a>;
-+ status = "okay";
-+ };
-+
-+ i2c0: i2c@01c2ac00 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&i2c0_pins_a>;
-+ status = "okay";
-+
-+ axp209: pmic@34 {
-+ compatible = "x-powers,axp209";
-+ reg = <0x34>;
-+ interrupt-parent = <&nmi_intc>;
-+ interrupts = <0 8>;
-+
-+ interrupt-controller;
-+ #interrupt-cells = <1>;
-+ };
-+ };
-+
-+ i2c2: i2c@01c2b400 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&i2c2_pins_a>;
-+ status = "okay";
-+ };
-+
-+ gmac: ethernet@01c50000 {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&gmac_pins_rgmii_a>;
-+ phy = <&phy1>;
-+ phy-mode = "rgmii";
-+ phy-supply = <&reg_gmac_3v3>;
-+ status = "okay";
-+
-+ phy1: ethernet-phy@1 {
-+ reg = <1>;
-+ };
-+ };
-+ };
-+
-+ leds {
-+ compatible = "gpio-leds";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&led_pins_bananapi>;
-+
-+ green {
-+ label = "bananapi:green:usr";
-+ gpios = <&pio 7 24 0>;
-+ };
-+ };
-+
-+ reg_usb1_vbus: usb1-vbus {
-+ status = "okay";
-+ };
-+
-+ reg_usb2_vbus: usb2-vbus {
-+ status = "okay";
-+ };
-+
-+ reg_gmac_3v3: gmac-3v3 {
-+ compatible = "regulator-fixed";
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&gmac_power_pin_bananapi>;
-+ regulator-name = "gmac-3v3";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ startup-delay-us = <50000>;
-+ enable-active-high;
-+ gpio = <&pio 7 23 0>;
-+ };
-+};
---
-2.1.0
-
diff --git a/freed-ora/current/master/asus-wmi-Restrict-debugfs-interface-when-module-load.patch b/freed-ora/current/master/asus-wmi-Restrict-debugfs-interface-when-module-load.patch
index 01d2c9386..6dd8b8342 100644
--- a/freed-ora/current/master/asus-wmi-Restrict-debugfs-interface-when-module-load.patch
+++ b/freed-ora/current/master/asus-wmi-Restrict-debugfs-interface-when-module-load.patch
@@ -15,10 +15,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
1 file changed, 9 insertions(+)
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index 21fc932da3a1..c6d42ad95c08 100644
+index 7543a56e0f45..93b5a6998371 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1590,6 +1590,9 @@ static int show_dsts(struct seq_file *m, void *data)
+@@ -1589,6 +1589,9 @@ static int show_dsts(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -28,7 +28,7 @@ index 21fc932da3a1..c6d42ad95c08 100644
err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
if (err < 0)
-@@ -1606,6 +1609,9 @@ static int show_devs(struct seq_file *m, void *data)
+@@ -1605,6 +1608,9 @@ static int show_devs(struct seq_file *m, void *data)
int err;
u32 retval = -1;
@@ -38,7 +38,7 @@ index 21fc932da3a1..c6d42ad95c08 100644
err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
&retval);
-@@ -1630,6 +1636,9 @@ static int show_call(struct seq_file *m, void *data)
+@@ -1629,6 +1635,9 @@ static int show_call(struct seq_file *m, void *data)
union acpi_object *obj;
acpi_status status;
diff --git a/freed-ora/current/master/ath9k-rx-dma-stop-check.patch b/freed-ora/current/master/ath9k-rx-dma-stop-check.patch
index c1034a057..7613691bb 100644
--- a/freed-ora/current/master/ath9k-rx-dma-stop-check.patch
+++ b/freed-ora/current/master/ath9k-rx-dma-stop-check.patch
@@ -7,10 +7,10 @@ Subject: [PATCH] ath9k: rx dma stop check
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
-index 275205ab5f15..bb842623bdf6 100644
+index 3e58bfa0c1fd..406eea47256e 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -700,7 +700,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
+@@ -693,7 +693,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
{
#define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */
struct ath_common *common = ath9k_hw_common(ah);
@@ -19,7 +19,7 @@ index 275205ab5f15..bb842623bdf6 100644
int i;
/* Enable access to the DMA observation bus */
-@@ -730,6 +730,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
+@@ -723,6 +723,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset)
}
if (i == 0) {
diff --git a/freed-ora/current/master/blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch b/freed-ora/current/master/blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch
deleted file mode 100644
index 9042e1bee..000000000
--- a/freed-ora/current/master/blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From: Takashi Iwai <tiwai@suse.de>
-Date: Wed, 10 Dec 2014 16:38:30 +0100
-Subject: [PATCH] blk-mq: Fix uninitialized kobject at CPU hotplugging
-
-When a CPU is hotplugged, the current blk-mq spews a warning like:
-
- kobject '(null)' (ffffe8ffffc8b5d8): tried to add an uninitialized object, something is seriously wrong.
- CPU: 1 PID: 1386 Comm: systemd-udevd Not tainted 3.18.0-rc7-2.g088d59b-default #1
- Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_171129-lamiak 04/01/2014
- 0000000000000000 0000000000000002 ffffffff81605f07 ffffe8ffffc8b5d8
- ffffffff8132c7a0 ffff88023341d370 0000000000000020 ffff8800bb05bd58
- ffff8800bb05bd08 000000000000a0a0 000000003f441940 0000000000000007
- Call Trace:
- [<ffffffff81005306>] dump_trace+0x86/0x330
- [<ffffffff81005644>] show_stack_log_lvl+0x94/0x170
- [<ffffffff81006d21>] show_stack+0x21/0x50
- [<ffffffff81605f07>] dump_stack+0x41/0x51
- [<ffffffff8132c7a0>] kobject_add+0xa0/0xb0
- [<ffffffff8130aee1>] blk_mq_register_hctx+0x91/0xb0
- [<ffffffff8130b82e>] blk_mq_sysfs_register+0x3e/0x60
- [<ffffffff81309298>] blk_mq_queue_reinit_notify+0xf8/0x190
- [<ffffffff8107cfdc>] notifier_call_chain+0x4c/0x70
- [<ffffffff8105fd23>] cpu_notify+0x23/0x50
- [<ffffffff81060037>] _cpu_up+0x157/0x170
- [<ffffffff810600d9>] cpu_up+0x89/0xb0
- [<ffffffff815fa5b5>] cpu_subsys_online+0x35/0x80
- [<ffffffff814323cd>] device_online+0x5d/0xa0
- [<ffffffff81432485>] online_store+0x75/0x80
- [<ffffffff81236a5a>] kernfs_fop_write+0xda/0x150
- [<ffffffff811c5532>] vfs_write+0xb2/0x1f0
- [<ffffffff811c5f42>] SyS_write+0x42/0xb0
- [<ffffffff8160c4ed>] system_call_fastpath+0x16/0x1b
- [<00007f0132fb24e0>] 0x7f0132fb24e0
-
-This is indeed because of an uninitialized kobject for blk_mq_ctx.
-The blk_mq_ctx kobjects are initialized in blk_mq_sysfs_init(), but it
-goes loop over hctx_for_each_ctx(), i.e. it initializes only for
-online CPUs. Thus, when a CPU is hotplugged, the ctx for the newly
-onlined CPU is registered without initialization.
-
-This patch fixes the issue by initializing the all ctx kobjects
-belonging to each queue.
-
-Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=908794
-Cc: <stable@vger.kernel.org>
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-Signed-off-by: Jens Axboe <axboe@fb.com>
----
- block/blk-mq-sysfs.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
-index 371d8800b48a..1630a20d5dcf 100644
---- a/block/blk-mq-sysfs.c
-+++ b/block/blk-mq-sysfs.c
-@@ -390,16 +390,15 @@ static void blk_mq_sysfs_init(struct request_queue *q)
- {
- struct blk_mq_hw_ctx *hctx;
- struct blk_mq_ctx *ctx;
-- int i, j;
-+ int i;
-
- kobject_init(&q->mq_kobj, &blk_mq_ktype);
-
-- queue_for_each_hw_ctx(q, hctx, i) {
-+ queue_for_each_hw_ctx(q, hctx, i)
- kobject_init(&hctx->kobj, &blk_mq_hw_ktype);
-
-- hctx_for_each_ctx(hctx, ctx, j)
-- kobject_init(&ctx->kobj, &blk_mq_ctx_ktype);
-- }
-+ queue_for_each_ctx(q, ctx, i)
-+ kobject_init(&ctx->kobj, &blk_mq_ctx_ktype);
- }
-
- /* see blk_register_queue() */
---
-2.1.0
-
diff --git a/freed-ora/current/master/cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch b/freed-ora/current/master/cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch
deleted file mode 100644
index 097be41cf..000000000
--- a/freed-ora/current/master/cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-Date: Tue, 2 Dec 2014 09:53:25 +0200
-Subject: [PATCH] cfg80211: don't WARN about two consecutive Country IE hint
-
-This can happen and there is no point in added more
-detection code lower in the stack. Catching these in one
-single point (cfg80211) is enough. Stop WARNING about this
-case.
-
-This fixes:
-https://bugzilla.kernel.org/show_bug.cgi?id=89001
-
-Cc: <stable@vger.kernel.org>
-Fixes: 2f1c6c572d7b ("cfg80211: process non country IE conflicting first")
-Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-Acked-by: Luis R. Rodriguez <mcgrof@suse.com>
----
- net/wireless/reg.c | 7 ++-----
- 1 file changed, 2 insertions(+), 5 deletions(-)
-
-diff --git a/net/wireless/reg.c b/net/wireless/reg.c
-index b725a31a4751..695f12b2c176 100644
---- a/net/wireless/reg.c
-+++ b/net/wireless/reg.c
-@@ -1839,11 +1839,8 @@ __reg_process_hint_country_ie(struct wiphy *wiphy,
- return REG_REQ_IGNORE;
- return REG_REQ_ALREADY_SET;
- }
-- /*
-- * Two consecutive Country IE hints on the same wiphy.
-- * This should be picked up early by the driver/stack
-- */
-- if (WARN_ON(regdom_changes(country_ie_request->alpha2)))
-+
-+ if (regdom_changes(country_ie_request->alpha2))
- return REG_REQ_OK;
- return REG_REQ_ALREADY_SET;
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/config-arm-generic b/freed-ora/current/master/config-arm-generic
index c0fa94ddd..fa7df0ecd 100644
--- a/freed-ora/current/master/config-arm-generic
+++ b/freed-ora/current/master/config-arm-generic
@@ -40,11 +40,15 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
# ARM AMBA generic HW
CONFIG_ARM_AMBA=y
+# CONFIG_TEGRA_AHB is not set
CONFIG_ARM_CCI=y
CONFIG_ARM_CCN=y
CONFIG_ARM_DMA_USE_IOMMU=y
CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
CONFIG_ARM_GIC=y
+CONFIG_ARM_GIC_V2M=y
+CONFIG_ARM_GIC_V3=y
+CONFIG_ARM_GIC_V3_ITS=y
CONFIG_KVM_ARM_VGIC=y
CONFIG_ARM_GLOBAL_TIMER=y
CONFIG_ARM_SMMU=y
@@ -79,6 +83,7 @@ CONFIG_POWER_RESET_VERSATILE=y
CONFIG_DTC=y
CONFIG_DMA_OF=y
CONFIG_OF=y
+# CONFIG_OF_UNITTEST is not set
CONFIG_OF_ADDRESS=y
CONFIG_OF_DYNAMIC=y
CONFIG_OF_EARLY_FLATTREE=y
@@ -88,10 +93,12 @@ CONFIG_OF_IOMMU=y
CONFIG_OF_IRQ=y
CONFIG_OF_MTD=y
CONFIG_OF_NET=y
+CONFIG_OF_OVERLAY=y
CONFIG_OF_PCI_IRQ=m
CONFIG_OF_PCI=m
CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
+CONFIG_PM_GENERIC_DOMAINS_OF=y
CONFIG_PATA_OF_PLATFORM=m
# CONFIG_OF_SELFTEST is not set
CONFIG_SERIAL_OF_PLATFORM=y
@@ -134,6 +141,7 @@ CONFIG_BACKLIGHT_GPIO=m
CONFIG_POWER_RESET_GPIO=y
CONFIG_POWER_RESET_GPIO_RESTART=y
CONFIG_POWER_RESET_RESTART=y
+# CONFIG_GPIO_74XX_MMIO is not set
#i2c
CONFIG_I2C_ARB_GPIO_CHALLENGE=m
@@ -200,6 +208,8 @@ CONFIG_CMA_AREAS=7
# CONFIG_PATA_PLATFORM is not set
# CONFIG_USB_ULPI is not set
+# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_PHY_SAMSUNG_USB2 is not set
### turn off things which make no sense on embedded SoC
@@ -260,6 +270,7 @@ CONFIG_CMA_AREAS=7
# CONFIG_IMX_IPUV3_CORE is not set
# CONFIG_DEBUG_SET_MODULE_RONX is not set
+# CONFIG_CORESIGHT is not set
# CONFIG_LATTICE_ECP3_CONFIG is not set
# CONFIG_BMP085_SPI is not set
diff --git a/freed-ora/current/master/config-arm64 b/freed-ora/current/master/config-arm64
index 9fd40b9fd..9d4181328 100644
--- a/freed-ora/current/master/config-arm64
+++ b/freed-ora/current/master/config-arm64
@@ -8,8 +8,16 @@ CONFIG_SCHED_SMT=y
# arm64 only SoCs
CONFIG_ARCH_XGENE=y
+CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_THUNDER is not set
+# Erratum
+CONFIG_ARM64_ERRATUM_826319=y
+CONFIG_ARM64_ERRATUM_827319=y
+CONFIG_ARM64_ERRATUM_824069=y
+CONFIG_ARM64_ERRATUM_819472=y
+CONFIG_ARM64_ERRATUM_832075=y
+
# CONFIG_AMBA_PL08X is not set
CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
CONFIG_ARCH_REQUIRE_GPIOLIB=y
@@ -78,6 +86,7 @@ CONFIG_CRYPTO_AES_ARM64_CE=m
CONFIG_CRYPTO_AES_ARM64_CE_CCM=m
CONFIG_CRYPTO_AES_ARM64_CE_BLK=m
CONFIG_CRYPTO_AES_ARM64_NEON_BLK=m
+CONFIG_CRYPTO_CRC32_ARM64=m
CONFIG_CRYPTO_DEV_CCP=y
CONFIG_CRYPTO_DEV_CCP_DD=m
CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
@@ -112,11 +121,10 @@ CONFIG_HOTPLUG_PCI=y
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
# CONFIG_PNP_DEBUG_MESSAGES is not set
-CONFIG_NET_SB1000=y
CONFIG_SBSAUART_TTY=y
CONFIG_I2C_SCMI=m
CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_PWM_LPSS=m
+
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS_POWER=y
CONFIG_ACPI_EC_DEBUGFS=y
@@ -128,17 +136,18 @@ CONFIG_ACPI_CONTAINER=y
CONFIG_ACPI_HED=m
CONFIG_ACPI_CUSTOM_METHOD=m
+CONFIG_NET_SB1000=y
CONFIG_AMD_XGBE=m
CONFIG_AMD_XGBE_PHY=m
# CONFIG_AMD_XGBE_DCB is not set
# CONFIG_IMX_THERMAL is not set
-
-# still? 2014-11-11
-# CONFIG_BPF_JIT is not set
+# CONFIG_MMC_DW is not set
CONFIG_DMI=y
CONFIG_DMIID=y
CONFIG_DMI_SYSFS=y
CONFIG_SATA_AHCI_PLATFORM=y
+
+# CONFIG_PMIC_OPREGION is not set
diff --git a/freed-ora/current/master/config-armv7 b/freed-ora/current/master/config-armv7
index 652d2248f..f071dd9a8 100644
--- a/freed-ora/current/master/config-armv7
+++ b/freed-ora/current/master/config-armv7
@@ -4,15 +4,12 @@
# CONFIG_ARCH_KEYSTONE is not set
CONFIG_ARCH_MVEBU=y
CONFIG_ARCH_MXC=y
-# CONFIG_ARCH_OMAP2 is not set
CONFIG_ARCH_OMAP3=y
CONFIG_ARCH_OMAP4=y
CONFIG_ARCH_PICOXCELL=y
CONFIG_ARCH_QCOM=y
-CONFIG_ARCH_ROCKCHIP=y
CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_U8500=y
-# CONFIG_ARCH_VIRT is not set
CONFIG_ARCH_ZYNQ=y
# These are supported in the LPAE kernel
@@ -80,7 +77,6 @@ CONFIG_SOC_TI81XX=y
# CONFIG_MACH_CRANEBOARD is not set
# CONFIG_MACH_DEVKIT8000 is not set
# CONFIG_MACH_NOKIA_RX51 is not set
-# CONFIG_MACH_OMAP_3430SDP is not set
# CONFIG_MACH_OMAP_LDP is not set
# CONFIG_MACH_OMAP3_BEAGLE is not set
# CONFIG_MACH_OMAP3517EVM is not set
@@ -89,8 +85,6 @@ CONFIG_SOC_TI81XX=y
# CONFIG_MACH_OMAP3_TORPEDO is not set
# CONFIG_MACH_OVERO is not set
# CONFIG_MACH_SBC3530 is not set
-# CONFIG_MACH_TI8168EVM is not set
-# CONFIG_MACH_TI8148EVM is not set
# CONFIG_MACH_TOUCHBOOK is not set
CONFIG_SOC_HAS_REALTIME_COUNTER=y
@@ -109,14 +103,15 @@ CONFIG_OMAP_PM_NOOP=y
CONFIG_DMA_OMAP=y
CONFIG_OMAP_IOMMU=y
CONFIG_HWSPINLOCK_OMAP=m
-CONFIG_OMAP3_EMU=y
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
CONFIG_SERIAL_OMAP=y
CONFIG_SERIAL_OMAP_CONSOLE=y
+CONFIG_SERIAL_8250_OMAP=m
CONFIG_GPIO_TWL4030=m
CONFIG_GPIO_TWL6040=m
+CONFIG_GPIO_PCF857X=m
CONFIG_I2C_OMAP=m
CONFIG_CHARGER_TWL4030=m
CONFIG_OMAP_WATCHDOG=m
@@ -143,6 +138,7 @@ CONFIG_USB_EHCI_HCD_OMAP=m
CONFIG_USB_OHCI_HCD_OMAP3=m
CONFIG_USB_MUSB_AM35X=m
CONFIG_USB_MUSB_OMAP2PLUS=m
+CONFIG_USB_DWC3_OMAP=m
CONFIG_MMC_OMAP=m
CONFIG_MMC_OMAP_HS=y
CONFIG_RTC_DRV_MAX8907=m
@@ -242,10 +238,10 @@ CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m
CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m
# Enable V4L2 drivers for OMAP2+
-CONFIG_MEDIA_CONTROLLER=y
CONFIG_V4L_PLATFORM_DRIVERS=y
# CONFIG_VIDEO_OMAP2_VOUT is not set
CONFIG_VIDEO_OMAP3=m
+CONFIG_VIDEO_ADP1653=m
# CONFIG_VIDEO_OMAP4 is not set
# The ones below are for TI Davinci
# CONFIG_VIDEO_DM6446_CCDC is not set
@@ -255,10 +251,9 @@ CONFIG_SND_OMAP_SOC=m
CONFIG_SND_SOC_I2C_AND_SPI=m
CONFIG_SND_OMAP_SOC_AM3517EVM=m
CONFIG_SND_OMAP_SOC_DMIC=m
-CONFIG_SND_OMAP_SOC_HDMI=m
+CONFIG_SND_OMAP_SOC_HDMI_AUDIO=m
CONFIG_SND_OMAP_SOC_MCBSP=m
CONFIG_SND_OMAP_SOC_MCPDM=m
-CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
@@ -326,6 +321,7 @@ CONFIG_PINCTRL_APQ8084=m
CONFIG_PINCTRL_IPQ8064=m
CONFIG_PINCTRL_MSM8960=m
CONFIG_PINCTRL_MSM8X74=m
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
CONFIG_COMMON_CLK_QCOM=m
CONFIG_MFD_QCOM_RPM=m
CONFIG_MFD_PM8921_CORE=m
@@ -363,6 +359,10 @@ CONFIG_INPUT_PMIC8XXX_PWRKEY=m
CONFIG_RTC_DRV_PM8XXX=m
# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
CONFIG_QCOM_WDT=m
+CONFIG_MFD_SPMI_PMIC=m
+CONFIG_SPMI=m
+CONFIG_SPMI_MSM_PMIC_ARB=m
+CONFIG_QCOM_SPMI_IADC=m
# i.MX
# CONFIG_MXC_DEBUG_BOARD is not set
@@ -372,8 +372,10 @@ CONFIG_SOC_IMX53=y
CONFIG_SOC_IMX6Q=y
CONFIG_SOC_IMX6SL=y
CONFIG_SOC_IMX6SX=y
+# CONFIG_SOC_LS1021A is not set
# CONFIG_SOC_VF610 is not set
CONFIG_ARM_IMX6Q_CPUFREQ=m
+CONFIG_POWER_RESET_IMX=y
CONFIG_PCI_IMX6=y
CONFIG_IMX_THERMAL=m
CONFIG_IMX_SDMA=m
@@ -411,6 +413,7 @@ CONFIG_CRYPTO_DEV_SAHARA=m
CONFIG_RTC_DRV_SNVS=m
# CONFIG_FB_MX3 is not set
# CONFIG_FB_IMX is not set
+# CONFIG_FB_MXS is not set
CONFIG_SND_IMX_SOC=m
CONFIG_SND_SOC_FSL_ASOC_CARD=m
@@ -459,8 +462,6 @@ CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
CONFIG_DRM_IMX_TVE=m
CONFIG_VIDEO_CODA=m
-CONFIG_MFD_SYSCON=y
-CONFIG_GPIO_SYSCON=m
CONFIG_SENSORS_MC13783_ADC=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_MC13783=m
@@ -501,27 +502,13 @@ CONFIG_REGULATOR_DA9055=m
CONFIG_ARCH_EXYNOS4=y
CONFIG_SOC_EXYNOS4212=y
CONFIG_SOC_EXYNOS4412=y
+CONFIG_SOC_EXYNOS4415=y
CONFIG_ARM_EXYNOS4210_CPUFREQ=y
CONFIG_ARM_EXYNOS4X12_CPUFREQ=y
CONFIG_AK8975=m
CONFIG_CM36651=m
CONFIG_KEYBOARD_SAMSUNG=m
-# Rockchips
-CONFIG_I2C_RK3X=m
-CONFIG_SPI_ROCKCHIP=m
-CONFIG_SND_SOC_ROCKCHIP=m
-CONFIG_PWM_ROCKCHIP=m
-CONFIG_ROCKCHIP_SARADC=m
-CONFIG_ROCKCHIP_IODOMAIN=m
-CONFIG_MMC_DW_ROCKCHIP=m
-CONFIG_EMAC_ROCKCHIP=m
-CONFIG_MFD_RK808=m
-CONFIG_COMMON_CLK_RK808=m
-CONFIG_REGULATOR_RK808=m
-CONFIG_RTC_DRV_HYM8563=m
-CONFIG_ROCKCHIP_SARADC=m
-
# ST Ericsson
CONFIG_MACH_HREFV60=y
CONFIG_MACH_SNOWBALL=y
@@ -615,6 +602,7 @@ CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
CONFIG_COMMON_CLK_AXI_CLKGEN=m
CONFIG_COMMON_CLK_SI570=m
+CONFIG_COMMON_CLK_XLNX_CLKWZRD=m
CONFIG_ARM_ZYNQ_CPUIDLE=y
CONFIG_LATTICE_ECP3_CONFIG=m
CONFIG_NET_VENDOR_XILINX=y
diff --git a/freed-ora/current/master/config-armv7-generic b/freed-ora/current/master/config-armv7-generic
index cd5f89b33..69d629826 100644
--- a/freed-ora/current/master/config-armv7-generic
+++ b/freed-ora/current/master/config-armv7-generic
@@ -2,8 +2,6 @@
# Generic ARM config options
CONFIG_ARM=y
-# CONFIG_ARCH_MULTI_V4 is not set
-# CONFIG_ARCH_MULTI_V4T is not set
# CONFIG_ARCH_MULTI_V6 is not set
CONFIG_ARCH_MULTI_V7=y
@@ -52,10 +50,11 @@ CONFIG_IRQ_CROSSBAR=y
# Platforms enabled/disabled globally on ARMv7
CONFIG_ARCH_EXYNOS=y
CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_ROCKCHIP=y
CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_TEGRA=y
-CONFIG_ARCH_VEXPRESS_CA9X4=y
CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
+CONFIG_ARCH_VIRT=y
# CONFIG_ARCH_BCM is not set
# CONFIG_ARCH_BERLIN is not set
# CONFIG_ARCH_HI3xxx is not set
@@ -113,6 +112,8 @@ CONFIG_SCHED_SMT=y
CONFIG_RCU_FANOUT=32
+CONFIG_CHECKPOINT_RESTORE=y
+
# Power management / thermal / cpu scaling
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
@@ -123,6 +124,7 @@ CONFIG_PM_OPP=y
CONFIG_ARM_CPU_SUSPEND=y
CONFIG_ARM_PSCI=y
CONFIG_THERMAL=y
+CONFIG_CLOCK_THERMAL=y
CONFIG_CPUFREQ_DT=y
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
@@ -134,6 +136,7 @@ CONFIG_XZ_DEC_ARM=y
CONFIG_UACCESS_WITH_MEMCPY=y
CONFIG_PCI_HOST_GENERIC=y
+# CONFIG_PCI_LAYERSCAPE is not set
CONFIG_LBDAF=y
@@ -174,11 +177,11 @@ CONFIG_ARM_HIGHBANK_CPUFREQ=m
CONFIG_MACH_SUN6I=y
CONFIG_MACH_SUN7I=y
# CONFIG_MACH_SUN8I is not set
+# CONFIG_MACH_SUN9I is not set
CONFIG_DMA_SUN6I=m
CONFIG_SUNXI_WATCHDOG=m
CONFIG_NET_VENDOR_ALLWINNER=y
-CONFIG_STMMAC_PLATFORM=y
-CONFIG_DWMAC_SUNXI=y
+CONFIG_STMMAC_PLATFORM=m
CONFIG_EEPROM_SUNXI_SID=m
CONFIG_RTC_DRV_SUNXI=m
CONFIG_PHY_SUN4I_USB=m
@@ -196,6 +199,8 @@ CONFIG_IR_SUNXI=m
CONFIG_MDIO_SUN4I=m
CONFIG_SUN4I_EMAC=m
CONFIG_RTC_DRV_SUN6I=m
+CONFIG_AXP288_ADC=m
+CONFIG_MTD_NAND_SUNXI=m
# Exynos
CONFIG_ARCH_EXYNOS3=y
@@ -308,6 +313,25 @@ CONFIG_RTC_DRV_MAX77802=m
CONFIG_RTC_DRV_RK808=m
CONFIG_EXTCON_MAX8997=m
+# Rockchips
+CONFIG_I2C_RK3X=m
+CONFIG_SPI_ROCKCHIP=m
+CONFIG_PWM_ROCKCHIP=m
+CONFIG_ROCKCHIP_SARADC=m
+CONFIG_ROCKCHIP_IODOMAIN=m
+CONFIG_MMC_DW_ROCKCHIP=m
+CONFIG_EMAC_ROCKCHIP=m
+CONFIG_MFD_RK808=m
+CONFIG_COMMON_CLK_RK808=m
+CONFIG_REGULATOR_RK808=m
+CONFIG_RTC_DRV_HYM8563=m
+CONFIG_ROCKCHIP_SARADC=m
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_SND_SOC_ROCKCHIP=m
+CONFIG_SND_SOC_ROCKCHIP_I2S=m
+CONFIG_ROCKCHIP_THERMAL=m
+CONFIG_DRM_ROCKCHIP=m
+
# Tegra
CONFIG_ARCH_TEGRA_114_SOC=y
CONFIG_ARCH_TEGRA_124_SOC=y
@@ -344,6 +368,8 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER=m
CONFIG_AD525X_DPOT=m
CONFIG_AD525X_DPOT_I2C=m
CONFIG_AD525X_DPOT_SPI=m
+CONFIG_TEGRA_SOCTHERM=m
+CONFIG_TEGRA_MC=y
# Jetson TK1
CONFIG_PINCTRL_AS3722=y
@@ -361,6 +387,7 @@ CONFIG_DRM_PANEL=y
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_LD9040=m
CONFIG_DRM_PANEL_S6E8AA0=m
+CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
# regmap
CONFIG_REGMAP=y
@@ -370,10 +397,6 @@ CONFIG_REGMAP_SPMI=m
CONFIG_REGMAP_MMIO=m
CONFIG_REGMAP_IRQ=y
-# Power management
-CONFIG_PM_OPP=y
-CONFIG_ARM_CPU_SUSPEND=y
-
# usb
CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
@@ -391,6 +414,8 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_MUSB_HDRC=m
CONFIG_USB_MUSB_DUAL_ROLE=y
CONFIG_USB_MUSB_DSPS=m
+# CONFIG_USB_MUSB_TUSB6010 is not set
+# CONFIG_USB_MUSB_UX500 is not set
CONFIG_USB_GPIO_VBUS=m
CONFIG_USB_CONFIGFS=m
CONFIG_USB_CONFIGFS_ACM=y
@@ -404,18 +429,22 @@ CONFIG_USB_CONFIGFS_OBEX=y
CONFIG_USB_CONFIGFS_SERIAL=y
# CONFIG_USB_CONFIGFS_F_LB_SS is not set
# CONFIG_USB_CONFIGFS_F_FS is not set
+# CONFIG_USB_CONFIGFS_F_UAC1 is not set
+# CONFIG_USB_CONFIGFS_F_UAC2 is not set
+# CONFIG_USB_CONFIGFS_F_MIDI is not set
+# CONFIG_USB_CONFIGFS_F_HID is not set
# CONFIG_MUSB_PIO_ONLY is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_FUSB300 is not set
-# CONFIG_USB_RENESAS_USBHS is not set
# CONFIG_USB_FOTG210_UDC is not set
# CONFIG_USB_R8A66597 is not set
# CONFIG_USB_PXA27X is not set
# CONFIG_USB_MV_UDC is not set
# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_BDC_UDC is not set
# CONFIG_USB_M66592 is not set
# CONFIG_USB_AMD5536UDC is not set
# CONFIG_USB_NET2272 is not set
@@ -570,20 +599,16 @@ CONFIG_SPI_DW_PCI=m
# CONFIG_MMC_DW_IDMAC is not set
# CONFIG_MMC_DW_K3 is not set
# CONFIG_MMC_QCOM_DML is not set
-# CONFIG_MMC_DW_ROCKCHIP is not set
-CONFIG_USB_DWC2=y
-CONFIG_USB_DWC2_HOST=m
-CONFIG_USB_DWC2_PLATFORM=y
-CONFIG_USB_DWC2_PCI=y
-# CONFIG_USB_DWC2_PERIPHERAL is not set
+CONFIG_USB_DWC2=m
+CONFIG_USB_DWC2_DUAL_ROLE=y
+CONFIG_USB_DWC2_PLATFORM=m
+CONFIG_USB_DWC2_PCI=m
# CONFIG_USB_DWC2_DEBUG is not set
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_OMAP=m
+CONFIG_USB_DWC3_DUAL_ROLE=y
CONFIG_USB_DWC3_PCI=m
# CONFIG_USB_DWC3_DEBUG is not set
-# CONFIG_USB_DWC3_KEYSTONE is not set
-# CONFIG_USB_DWC3_QCOM is not set
# CONFIG_DWC3_HOST_USB3_LPM_ENABLE is not set
CONFIG_DW_WATCHDOG=m
CONFIG_PCIE_DW=y
@@ -659,7 +684,14 @@ CONFIG_SND_SOC_SPDIF=m
# CONFIG_SND_SOC_IMX_ES8328 is not set
# CONFIG_SND_SOC_FSL_ASOC_CARD is not set
# CONFIG_SND_EDMA_SOC is not set
-# CONFIG_SND_SOC_ROCKCHIP is not set
+# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
+# CONFIG_SND_SOC_CS42L51_I2C is not set
+# CONFIG_SND_SOC_CS4271_I2C is not set
+# CONFIG_SND_SOC_CS4271_SPI is not set
+# CONFIG_SND_SOC_RT5631 is not set
+# CONFIG_SND_SOC_TFA9879 is not set
+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
# Displays
CONFIG_BACKLIGHT_TPS65217=m
@@ -721,6 +753,7 @@ CONFIG_REGULATOR_DA9211=m
CONFIG_REGULATOR_ISL9305=m
CONFIG_REGULATOR_MAX77802=m
CONFIG_REGULATOR_PWM=m
+CONFIG_SENSORS_LTC2978_REGULATOR=y
CONFIG_POWER_AVS=y
CONFIG_CHARGER_MANAGER=y
@@ -779,6 +812,10 @@ CONFIG_LEDS_PWM=m
CONFIG_LEDS_SYSCON=y
CONFIG_BMP085_SPI=m
+CONFIG_MFD_SYSCON=y
+CONFIG_GPIO_SYSCON=m
+CONFIG_POWER_RESET_SYSCON=y
+
CONFIG_SRAM=y
# Ethernet
@@ -823,6 +860,7 @@ CONFIG_MFD_CROS_EC_I2C=m
CONFIG_MFD_CROS_EC_SPI=m
CONFIG_KEYBOARD_CROS_EC=m
CONFIG_I2C_CROS_EC_TUNNEL=m
+CONFIG_SND_SOC_TS3A227E=m
# Needs work/investigation
# CONFIG_ARM_KPROBES_TEST is not set
@@ -844,7 +882,6 @@ CONFIG_I2C_CROS_EC_TUNNEL=m
# CONFIG_EZX_PCAP is not set
# CONFIG_CS89x0 is not set
# CONFIG_DM9000 is not set
-# CONFIG_HW_RANDOM_ATMEL is not set
# CONFIG_MTD_AFS_PARTS is not set
# CONFIG_SPI_PXA2XX is not set
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
@@ -853,6 +890,7 @@ CONFIG_I2C_CROS_EC_TUNNEL=m
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX310X is not set
# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_BCM63XX is not set
# CONFIG_FB_XILINX is not set
# CONFIG_BRCMSTB_GISB_ARB is not set
# CONFIG_SUNGEM is not set
@@ -888,3 +926,4 @@ CONFIG_I2C_CROS_EC_TUNNEL=m
# CONFIG_OMAP2_DSS_DEBUG is not set
# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set
# CONFIG_AB8500_DEBUG is not set
+# CONFIG_ARM_KERNMEM_PERMS is not set
diff --git a/freed-ora/current/master/config-armv7-lpae b/freed-ora/current/master/config-armv7-lpae
index b08f4daa1..9eb8d8a95 100644
--- a/freed-ora/current/master/config-armv7-lpae
+++ b/freed-ora/current/master/config-armv7-lpae
@@ -1,6 +1,5 @@
# ARM A15 lpae unified arch kernel
CONFIG_ARCH_KEYSTONE=y
-CONFIG_ARCH_VIRT=y
# CONFIG_ARCH_MVEBU is not set
# CONFIG_ARCH_MXC is not set
@@ -10,7 +9,6 @@ CONFIG_ARCH_VIRT=y
# CONFIG_SOC_AM33XX is not set
# CONFIG_SOC_AM43XX is not set
# CONFIG_SOC_DRA7XX is not set
-# CONFIG_ARCH_ROCKCHIP is not set
# CONFIG_ARCH_ZYNQ is not set
# CONFIG_ARCH_AXXIA is not set
diff --git a/freed-ora/current/master/config-debug b/freed-ora/current/master/config-debug
index 467f33a19..fcc5aac03 100644
--- a/freed-ora/current/master/config-debug
+++ b/freed-ora/current/master/config-debug
@@ -35,6 +35,8 @@ CONFIG_ACPI_DEBUG=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_PI_LIST=y
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_OWNER is not set
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_DEBUG_OBJECTS=y
@@ -45,6 +47,7 @@ CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_X86_PTDUMP=y
+CONFIG_ARM64_PTDUMP=y
CONFIG_EFI_PGT_DUMP=y
CONFIG_CAN_DEBUG_DEVICES=y
@@ -97,6 +100,7 @@ CONFIG_QUOTA_DEBUG=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_KEYBOARD=y
+CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
diff --git a/freed-ora/current/master/config-generic b/freed-ora/current/master/config-generic
index f4c2c5726..21de63225 100644
--- a/freed-ora/current/master/config-generic
+++ b/freed-ora/current/master/config-generic
@@ -21,7 +21,7 @@ CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_BUILD_DOCSRC is not set
+CONFIG_BUILD_DOCSRC=y
#
# General setup
@@ -145,6 +145,7 @@ CONFIG_MMC_USHC=m
CONFIG_MMC_REALTEK_PCI=m
CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_VUB300=m
+CONFIG_MMC_TOSHIBA_PCI=m
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_SDHCI_PXAV2 is not set
# CONFIG_MMC_SDHCI_PXAV3 is not set
@@ -166,6 +167,7 @@ CONFIG_INFINIBAND_SRP=m
CONFIG_INFINIBAND_SRPT=m
CONFIG_INFINIBAND_USER_MAD=m
CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_IPATH=m
CONFIG_INFINIBAND_ISER=m
CONFIG_INFINIBAND_ISERT=m
@@ -504,6 +506,7 @@ CONFIG_SCSI_BUSLOGIC=m
CONFIG_SCSI_INITIO=m
CONFIG_SCSI_FLASHPOINT=y
CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_AM53C974=m
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
@@ -524,6 +527,7 @@ CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_DC395x=m
# CONFIG_SCSI_NSP32 is not set
+CONFIG_SCSI_WD719X=m
CONFIG_SCSI_DEBUG=m
CONFIG_SCSI_DC390T=m
CONFIG_SCSI_QLA_FC=m
@@ -561,7 +565,6 @@ CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
CONFIG_SATA_PROMISE=m
CONFIG_SATA_QSTOR=m
-# CONFIG_SATA_RCAR is not set
CONFIG_SATA_SIL=m
CONFIG_SATA_SIL24=m
CONFIG_SATA_SIS=m
@@ -761,6 +764,7 @@ CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
CONFIG_NET_FOU=m
+CONFIG_NET_FOU_IP_TUNNELS=y
CONFIG_GENEVE=m
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
@@ -1027,6 +1031,9 @@ CONFIG_NFT_MASQ_IPV4=m
CONFIG_NFT_MASQ_IPV6=m
CONFIG_NFT_NAT=m
CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REDIR=m
+CONFIG_NFT_REDIR_IPV4=m
+CONFIG_NFT_REDIR_IPV6=m
CONFIG_NFT_REJECT=m
CONFIG_NFT_COMPAT=m
@@ -1204,6 +1211,7 @@ CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
+CONFIG_NET_ACT_VLAN=m
CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
@@ -1246,6 +1254,7 @@ CONFIG_DUMMY=m
CONFIG_BONDING=m
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
+CONFIG_IPVLAN=m
CONFIG_VXLAN=m
CONFIG_EQUALIZER=m
CONFIG_TUN=m
@@ -1413,8 +1422,9 @@ CONFIG_IXGBE_DCA=y
CONFIG_IXGBE_DCB=y
CONFIG_IXGBE_HWMON=y
CONFIG_I40E=m
-# CONFIG_I40E_VXLAN is not set
+CONFIG_I40E_VXLAN=y
# CONFIG_I40E_DCB is not set
+# CONFIG_I40E_FCOE is not set
CONFIG_I40EVF=m
CONFIG_FM10K=m
# CONFIG_FM10K_VXLAN is not set
@@ -1486,6 +1496,9 @@ CONFIG_SH_ETH=m
CONFIG_NET_VENDOR_RDC=y
CONFIG_R6040=m
+CONFIG_NET_VENDOR_ROCKER=y
+CONFIG_ROCKER=m
+
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
@@ -1558,8 +1571,6 @@ CONFIG_STE10XP=m
CONFIG_VITESSE_PHY=m
CONFIG_MICREL_PHY=m
# CONFIG_MICREL_KS8995MA is not set
-# CONFIG_OMAP_CONTROL_PHY is not set
-# CONFIG_PHY_SAMSUNG_USB2 is not set
CONFIG_MII=m
CONFIG_NET_CORE=y
@@ -1568,7 +1579,6 @@ CONFIG_VORTEX=m
CONFIG_TYPHOON=m
CONFIG_DNET=m
-
CONFIG_B44=m
CONFIG_B44_PCI=y
CONFIG_BCMGENET=m
@@ -1831,15 +1841,16 @@ CONFIG_MWIFIEX_USB=m
CONFIG_IEEE802154=m
CONFIG_IEEE802154_6LOWPAN=m
CONFIG_IEEE802154_DRIVERS=m
-CONFIG_IEEE802154_FAKEHARD=m
CONFIG_IEEE802154_FAKELB=m
+CONFIG_IEEE802154_CC2520=m
# CONFIG_IEEE802154_AT86RF230 is not set
# CONFIG_IEEE802154_MRF24J40 is not set
-# CONFIG_IEEE802154_CC2520 is not set
CONFIG_MAC802154=m
CONFIG_NET_MPLS_GSO=m
+CONFIG_NET_SWITCHDEV=y
+
CONFIG_6LOWPAN=m
#
@@ -1949,6 +1960,8 @@ CONFIG_WINBOND_FIR=m
# Bluetooth support
#
CONFIG_BT=m
+CONFIG_BT_BREDR=y
+CONFIG_BT_LE=y
CONFIG_BT_6LOWPAN=m
CONFIG_BT_SCO=y
CONFIG_BT_CMTP=m
@@ -2197,7 +2210,7 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_TCA8418 is not set
# CONFIG_KEYBOARD_OMAP4 is not set
-# CONFIG_KEYBOARD_CAP1106 is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
@@ -2210,6 +2223,9 @@ CONFIG_MOUSE_BCM5974=m
CONFIG_MOUSE_SYNAPTICS_I2C=m
CONFIG_MOUSE_SYNAPTICS_USB=m
CONFIG_MOUSE_CYAPA=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_MOUSE_ELAN_I2C_I2C=y
+CONFIG_MOUSE_ELAN_I2C_SMBUS=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_ANALOG=m
CONFIG_JOYSTICK_A3D=m
@@ -2252,6 +2268,7 @@ CONFIG_TOUCHSCREEN_DYNAPRO=m
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_EETI=m
CONFIG_TOUCHSCREEN_EGALAX=m
+CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GUNZE=m
@@ -2460,6 +2477,8 @@ CONFIG_I2C_PCA_PLATFORM=m
# CONFIG_I2C_SIS96X is not set
CONFIG_I2C_SIMTEC=m
CONFIG_I2C_STUB=m
+CONFIG_I2C_SLAVE=y
+CONFIG_I2C_SLAVE_EEPROM=m
CONFIG_I2C_TINY_USB=m
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_VIA is not set
@@ -2542,6 +2561,7 @@ CONFIG_SENSORS_MAX6697=m
CONFIG_SENSORS_MCP3021=m
CONFIG_SENSORS_NCT6775=m
CONFIG_SENSORS_NCT6683=m
+CONFIG_SENSORS_NCT7802=m
CONFIG_SENSORS_NTC_THERMISTOR=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_PC87427=m
@@ -2682,6 +2702,7 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
# CONFIG_MAG3110 is not set
# CONFIG_TMP006 is not set
# CONFIG_MLX90614 is not set
+# CONFIG_BMP280 is not set
# CONFIG_HID_SENSOR_PRESS is not set
# CONFIG_IIO_ST_PRESS is not set
# CONFIG_KXSD9 is not set
@@ -2720,6 +2741,7 @@ CONFIG_HID_SENSOR_DEVICE_ROTATION=m
# CONFIG_MPL3115 is not set
# CONFIG_MPL115 is not set
# CONFIG_SI7005 is not set
+# CONFIG_SI7020 is not set
# CONFIG_AS3935 is not set
CONFIG_KXCJK1013=m
# CONFIG_ISL29125 is not set
@@ -2815,6 +2837,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_SI=m
# CONFIG_IPMI_SI_PROBE_DEFAULTS is not set
+CONFIG_IPMI_SSIF=m
CONFIG_IPMI_POWEROFF=m
#
@@ -2864,8 +2887,6 @@ CONFIG_WM831X_WATCHDOG=m
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
-# CONFIG_HW_RANDOM_ATMEL is not set
-# CONFIG_HW_RANDOM_EXYNOS is not set
# CONFIG_NVRAM is not set
# CONFIG_RTC is not set
# CONFIG_RTC_DEBUG is not set
@@ -2885,6 +2906,7 @@ CONFIG_RTC_DRV_DS1553=m
CONFIG_RTC_DRV_DS1672=m
CONFIG_RTC_DRV_DS1742=m
CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1374_WDT=y
# CONFIG_RTC_DRV_EP93XX is not set
CONFIG_RTC_DRV_FM3130=m
# CONFIG_RTC_DRV_HYM8563 is not set
@@ -2987,6 +3009,7 @@ CONFIG_DRM_NOUVEAU=m
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_I2C_ADV7511=m
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -3109,7 +3132,6 @@ CONFIG_VIDEO_TLG2300=m
# CONFIG_VIDEO_M5MOLS is not set
# CONFIG_VIDEO_TW68 is not set
# CONFIG_VIDEO_VIVID is not set
-# CONFIG_EXYNOS_VIDEO is not set
CONFIG_VIDEO_USBTV=m
# CONFIG_VIDEO_AU0828_RC is not set
@@ -3169,6 +3191,7 @@ CONFIG_DVB_DM1105=m
CONFIG_DVB_FIREDTV=m
CONFIG_DVB_NGENE=m
CONFIG_DVB_DDBRIDGE=m
+CONFIG_DVB_SMIPCIE=m
CONFIG_DVB_USB_TECHNISAT_USB2=m
CONFIG_DVB_USB_V2=m
@@ -3259,6 +3282,7 @@ CONFIG_IR_REDRAT3=m
CONFIG_IR_ENE=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_WINBOND_CIR=m
+CONFIG_IR_IGORPLUGUSB=m
CONFIG_IR_IGUANA=m
CONFIG_IR_TTUSBIR=m
CONFIG_IR_GPIO_CIR=m
@@ -3535,6 +3559,7 @@ CONFIG_SND_FIREWIRE_SPEAKERS=m
CONFIG_SND_ISIGHT=m
CONFIG_SND_SCS1X=m
CONFIG_SND_DICE=m
+CONFIG_SND_OXFW=m
CONFIG_SND_FIREWORKS=m
# CONFIG_SND_BEBOB is not set
@@ -3632,6 +3657,7 @@ CONFIG_UHID=m
CONFIG_HID_PID=y
CONFIG_LOGITECH_FF=y
CONFIG_HID_LOGITECH_DJ=m
+CONFIG_HID_LOGITECH_HIDPP=m
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_PANTHERLORD_FF=y
CONFIG_THRUSTMASTER_FF=y
@@ -3647,6 +3673,7 @@ CONFIG_LOGIWHEELS_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MULTITOUCH=m
CONFIG_HID_NTRIG=y
+CONFIG_HID_PLANTRONICS=m
CONFIG_HID_PRIMAX=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_DRAGONRISE=m
@@ -4040,7 +4067,9 @@ CONFIG_MFD_VIPERBOARD=m
# CONFIG_MFD_TPS65912 is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_DLN2 is not set
# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_ATMEL_HLCDC is not set
# CONFIG_MFD_BCM590XX is not set
# CONFIG_MFD_TPS65218 is not set
# CONFIG_MFD_WM831X_SPI is not set
@@ -4170,6 +4199,7 @@ CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_XZ=y
CONFIG_SQUASHFS_ZLIB=y
# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
@@ -4190,7 +4220,12 @@ CONFIG_FUSE_FS=m
CONFIG_OVERLAY_FS=m
# CONFIG_OMFS_FS is not set
CONFIG_CUSE=m
-# CONFIG_F2FS_FS is not set
+CONFIG_F2FS_FS=m
+CONFIG_F2FS_STAT_FS=y
+CONFIG_F2FS_FS_XATTR=y
+CONFIG_F2FS_FS_POSIX_ACL=y
+CONFIG_F2FS_FS_SECURITY=y
+# CONFIG_F2FS_CHECK_FS is not set
#
# Network File Systems
@@ -4574,6 +4609,19 @@ CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
CONFIG_INITRAMFS_SOURCE=""
+
+# These were all enabled by default before 3.19 made them individually
+# selectable. Possibly look at enabling only the one(s) Fedora actually
+# uses.
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
+
+CONFIG_INIT_FALLBACK=y
+
CONFIG_KEYS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_BIG_KEYS=y
@@ -4762,6 +4810,7 @@ CONFIG_LEDS_DELL_NETBOOKS=m
# CONFIG_LEDS_OT200 is not set
# CONFIG_LEDS_PWM is not set
# CONFIG_LEDS_LP8501 is not set
+# CONFIG_LEDS_LP8860 is not set
# CONFIG_LEDS_PCA963X is not set
# CONFIG_LEDS_SYSCON is not set
CONFIG_LEDS_TRIGGERS=y
@@ -4959,17 +5008,18 @@ CONFIG_GPIOLIB=y
# CONFIG_PINCONF is not set
CONFIG_NET_DSA=m
+CONFIG_NET_DSA_HWMON=y
CONFIG_NET_DSA_MV88E6060=m
CONFIG_NET_DSA_MV88E6131=m
CONFIG_NET_DSA_MV88E6123_61_65=m
CONFIG_NET_DSA_MV88E6171=m
+CONFIG_NET_DSA_MV88E6352=m
CONFIG_NET_DSA_BCM_SF2=m
# Used by Maemo, we don't care.
# CONFIG_PHONET is not set
# CONFIG_ICS932S401 is not set
-# CONFIG_ATMEL_SSC is not set
# CONFIG_C2PORT is not set
@@ -5057,6 +5107,10 @@ CONFIG_USBIP_HOST=m
# CONFIG_GS_FPGABOOT is not set
# CONFIG_UNISYSSPAR is not set
# CONFIG_MEDIA_TUNER_MSI001 is not set
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
+# CONFIG_VIDEO_SAA7191 is not set
+# CONFIG_DVB_MN88472 is not set
+# CONFIG_DVB_MN88473 is not set
# END OF STAGING
#
@@ -5238,7 +5292,7 @@ CONFIG_FMC_CHARDEV=m
# CONFIG_GENWQE is not set
-# CONFIG_POWERCAP is not set
+CONFIG_POWERCAP=y
# CONFIG_THUNDERBOLT is not set
# CONFIG_HSI is not set
diff --git a/freed-ora/current/master/config-nodebug b/freed-ora/current/master/config-nodebug
index ed6913376..01008d646 100644
--- a/freed-ora/current/master/config-nodebug
+++ b/freed-ora/current/master/config-nodebug
@@ -35,6 +35,8 @@ CONFIG_CPUMASK_OFFSTACK=y
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_PI_LIST is not set
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_PAGE_OWNER is not set
# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_OBJECTS is not set
@@ -44,7 +46,8 @@ CONFIG_CPUMASK_OFFSTACK=y
# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
-# CONFIG_X86_PTDUMP is not set
+CONFIG_X86_PTDUMP=y
+# CONFIG_ARM64_PTDUMP is not set
# CONFIG_EFI_PGT_DUMP is not set
# CONFIG_CAN_DEBUG_DEVICES is not set
@@ -96,6 +99,7 @@ CONFIG_PM_ADVANCED_DEBUG=y
CONFIG_KGDB_KDB=y
+CONFIG_KDB_DEFAULT_ENABLE=0x0
CONFIG_KDB_KEYBOARD=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
diff --git a/freed-ora/current/master/config-powerpc-generic b/freed-ora/current/master/config-powerpc-generic
index ce4da577f..30b071898 100644
--- a/freed-ora/current/master/config-powerpc-generic
+++ b/freed-ora/current/master/config-powerpc-generic
@@ -306,6 +306,7 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_GPIO_SCH is not set
+# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_PPC_MPC512x is not set
# CONFIG_RTC_DRV_MPC5121 is not set
@@ -330,6 +331,7 @@ CONFIG_I2C_MPC=m
# CONFIG_NET_VENDOR_TOSHIBA is not set
# CONFIG_CPU_IDLE is not set
+# CONFIG_OF_UNITTEST is not set
# CONFIG_OF_SELFTEST is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_INPUT_GP2A is not set
diff --git a/freed-ora/current/master/config-powerpc64 b/freed-ora/current/master/config-powerpc64
index 49b4f2e70..5d9d29b22 100644
--- a/freed-ora/current/master/config-powerpc64
+++ b/freed-ora/current/master/config-powerpc64
@@ -15,6 +15,7 @@ CONFIG_PPC_POWERNV_RTAS=y
CONFIG_SENSORS_IBMPOWERNV=y
CONFIG_HW_RANDOM_POWERNV=m
CONFIG_POWERNV_CPUFREQ=m
+CONFIG_IPMI_POWERNV=m
CONFIG_SCOM_DEBUGFS=y
# CONFIG_PPC_PASEMI is not set
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
@@ -165,6 +166,9 @@ CONFIG_HW_RANDOM_AMD=m
CONFIG_UIO_PDRV=m
+CONFIG_I2C_OPAL=m
+CONFIG_RTC_DRV_OPAL=m
+
CONFIG_HW_RANDOM_PSERIES=m
CONFIG_CRYPTO_DEV_NX=y
CONFIG_CRYPTO_842=m
diff --git a/freed-ora/current/master/config-powerpc64p7 b/freed-ora/current/master/config-powerpc64p7
index 6a5e1c6d9..eabb28c6e 100644
--- a/freed-ora/current/master/config-powerpc64p7
+++ b/freed-ora/current/master/config-powerpc64p7
@@ -10,6 +10,7 @@ CONFIG_PPC_POWERNV_RTAS=y
CONFIG_HW_RANDOM_POWERNV=m
CONFIG_SENSORS_IBMPOWERNV=y
CONFIG_POWERNV_CPUFREQ=m
+CONFIG_IPMI_POWERNV=m
CONFIG_SCOM_DEBUGFS=y
# CONFIG_PPC_PASEMI is not set
# CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set
@@ -155,6 +156,9 @@ CONFIG_HW_RANDOM_AMD=m
CONFIG_UIO_PDRV=m
+CONFIG_I2C_OPAL=m
+CONFIG_RTC_DRV_OPAL=m
+
CONFIG_HW_RANDOM_PSERIES=m
CONFIG_CRYPTO_DEV_NX=y
CONFIG_CRYPTO_842=m
diff --git a/freed-ora/current/master/config-s390x b/freed-ora/current/master/config-s390x
index 9534f51be..5f35e494c 100644
--- a/freed-ora/current/master/config-s390x
+++ b/freed-ora/current/master/config-s390x
@@ -63,6 +63,7 @@ CONFIG_SCLP_VT220_TTY=y
CONFIG_SCLP_VT220_CONSOLE=y
CONFIG_SCLP_CPI=m
CONFIG_SCLP_ASYNC=m
+CONFIG_SCLP_ASYNC_ID="000000000"
CONFIG_S390_TAPE=m
CONFIG_S390_TAPE_3590=m
@@ -150,8 +151,6 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
# CONFIG_CLAW is not set
-# CONFIG_ATMEL is not set
-
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MII is not set
diff --git a/freed-ora/current/master/config-x86-32-generic b/freed-ora/current/master/config-x86-32-generic
index 5daa9b8a3..bdf1b753a 100644
--- a/freed-ora/current/master/config-x86-32-generic
+++ b/freed-ora/current/master/config-x86-32-generic
@@ -197,6 +197,7 @@ CONFIG_BACKLIGHT_PWM=m
# CONFIG_EDAC_SBRIDGE is not set
+# CONFIG_OF_UNITTEST is not set
# CONFIG_OF_SELFTEST is not set
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
# CONFIG_INPUT_GP2A is not set
@@ -206,6 +207,7 @@ CONFIG_BACKLIGHT_PWM=m
# CONFIG_MDIO_BUS_MUX_GPIO is not set
# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
# CONFIG_GPIO_SODAVILLE is not set
+# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_BACKLIGHT_OT200 is not set
# CONFIG_MLX5_INFINIBAND is not set
diff --git a/freed-ora/current/master/config-x86-generic b/freed-ora/current/master/config-x86-generic
index 88347fede..c1c611e7b 100644
--- a/freed-ora/current/master/config-x86-generic
+++ b/freed-ora/current/master/config-x86-generic
@@ -34,6 +34,10 @@ CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_X86_PM_TIMER=y
+# This requires changes to binutils and the compiler. Plus you can't actually
+# buy hardware with MPX yet. So... leave it off until all of that seems set.
+# CONFIG_X86_INTEL_MPX is not set
+
CONFIG_EFI=y
CONFIG_EFI_STUB=y
# CONFIG_EFI_MIXED is not set
@@ -99,6 +103,8 @@ CONFIG_ACPI_CUSTOM_METHOD=m
CONFIG_ACPI_BGRT=y
# CONFIG_ACPI_EXTLOG is not set
+# CONFIG_PMIC_OPREGION is not set
+
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_ACPI_CPUFREQ=m
CONFIG_X86_ACPI_CPUFREQ_CPB=y
@@ -166,6 +172,8 @@ CONFIG_DCDBAS=m
CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=m
+# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+CONFIG_EDAC_AMD64=m
CONFIG_EDAC_AMD76X=m
CONFIG_EDAC_AMD8111=m
CONFIG_EDAC_AMD8131=m
@@ -327,6 +335,7 @@ CONFIG_INTEL_IOATDMA=m
CONFIG_SENSORS_I5K_AMB=m
CONFIG_SENSORS_FAM15H_POWER=m
CONFIG_SENSORS_ACPI_POWER=m
+CONFIG_SENSORS_I5500=m
# CONFIG_CPA_DEBUG is not set
@@ -488,11 +497,13 @@ CONFIG_PWM_LPSS_PCI=m
CONFIG_PWM_LPSS_PLATFORM=m
CONFIG_PINCTRL=y
CONFIG_PINCTRL_BAYTRAIL=y
+CONFIG_PINCTRL_CHERRYVIEW=m
# CONFIG_INTEL_POWERCLAMP is not set
CONFIG_X86_PKG_TEMP_THERMAL=m
CONFIG_INTEL_SOC_DTS_THERMAL=m
CONFIG_INT340X_THERMAL=m
+CONFIG_INTEL_RAPL=m
CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
diff --git a/freed-ora/current/master/config-x86_64-generic b/freed-ora/current/master/config-x86_64-generic
index 89b7070ef..3a2ef08b2 100644
--- a/freed-ora/current/master/config-x86_64-generic
+++ b/freed-ora/current/master/config-x86_64-generic
@@ -177,6 +177,8 @@ CONFIG_SFC_MTD=y
# Override MTD stuff because SFC_MTD needs it
CONFIG_MTD_BLOCK=m
+CONFIG_HSA_AMD=m
+
CONFIG_NO_HZ_FULL=y
# CONFIG_NO_HZ_IDLE is not set
# CONFIG_NO_HZ_FULL_ALL is not set
diff --git a/freed-ora/current/master/crash-driver.patch b/freed-ora/current/master/crash-driver.patch
index 5a8fa876f..c9a99b8e2 100644
--- a/freed-ora/current/master/crash-driver.patch
+++ b/freed-ora/current/master/crash-driver.patch
@@ -240,10 +240,10 @@ index 000000000000..552be5e2c571
+
+#endif /* _S390_CRASH_H */
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
-index 2a2e35416d2f..a529181429bb 100644
+index 2eb34bdfc613..11ce5c98462c 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
-@@ -193,6 +193,7 @@ void *xlate_dev_mem_ptr(unsigned long addr)
+@@ -193,6 +193,7 @@ void *xlate_dev_mem_ptr(phys_addr_t addr)
put_online_cpus();
return bounce;
}
@@ -251,7 +251,7 @@ index 2a2e35416d2f..a529181429bb 100644
/*
* Free converted buffer for /dev/mem access (if necessary)
-@@ -202,3 +203,4 @@ void unxlate_dev_mem_ptr(unsigned long addr, void *buf)
+@@ -202,3 +203,4 @@ void unxlate_dev_mem_ptr(phys_addr_t addr, void *buf)
if ((void *) addr != buf)
free_page((unsigned long) buf);
}
diff --git a/freed-ora/current/master/criu-no-expert.patch b/freed-ora/current/master/criu-no-expert.patch
index 11d3c87d5..2e7ca9138 100644
--- a/freed-ora/current/master/criu-no-expert.patch
+++ b/freed-ora/current/master/criu-no-expert.patch
@@ -9,10 +9,10 @@ Upstream-status: Fedora mustard
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/init/Kconfig b/init/Kconfig
-index 9ef459bb44b2..cc096e258a4a 100644
+index dac9ed0f01f7..31a29fe7c555 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1149,7 +1149,7 @@ config DEBUG_BLK_CGROUP
+@@ -1128,7 +1128,7 @@ config DEBUG_BLK_CGROUP
endif # CGROUPS
config CHECKPOINT_RESTORE
@@ -21,7 +21,7 @@ index 9ef459bb44b2..cc096e258a4a 100644
default n
help
Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1160,7 +1160,7 @@ config CHECKPOINT_RESTORE
+@@ -1139,7 +1139,7 @@ config CHECKPOINT_RESTORE
If unsure, say N here.
menuconfig NAMESPACES
diff --git a/freed-ora/current/master/deblob-3.19 b/freed-ora/current/master/deblob-3.19
new file mode 100755
index 000000000..faf2825aa
--- /dev/null
+++ b/freed-ora/current/master/deblob-3.19
@@ -0,0 +1,3004 @@
+#! /bin/sh
+
+# Copyright (C) 2008-2015 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright (C) 2008 Jeff Moe
+# Copyright (C) 2009 Rubén Rodríguez <ruben@gnu.org>
+#
+# This program is part of GNU Linux-libre, a GNU project that
+# publishes scripts to clean up Linux so as to make it suitable for
+# use in the GNU Project and in Free System Distributions.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# deblob - remove non-free blobs from the vanilla linux kernel
+
+# http://www.fsfla.org/svn/fsfla/software/linux-libre
+
+
+# This script, suited for the kernel version named below, in kver,
+# attempts to remove only non-Free Software bits, without removing
+# Free Software that happens to be in the same file.
+
+# Drivers that currently require non-Free firmware are retained, but
+# firmware included in GPLed sources is replaced with /*(DEBLOBBED)*/
+# if the deblob-check script, that knows how to do this, is present.
+# -lxoliva
+
+
+# See also:
+# http://wiki.debian.org/KernelFirmwareLicensing
+# svn://svn.debian.org/kernel/dists/trunk/linux-2.6/debian/patches/debian/dfsg/files-1
+# http://wiki.gnewsense.org/Builder gen-kernel
+
+# Thanks to Brian Brazil @ gnewsense
+
+
+# For each kver release, start extra with an empty string, then count
+# from 1 if changes are needed that require rebuilding the tarball.
+kver=3.19 extra=
+
+set -e
+
+case $1 in
+--force)
+ echo "WARNING: Using the force, ignored errors will be" >&2
+ die () {
+ echo ERROR: "$@" >&2
+ errors=:
+ }
+ forced=: errors=false
+ shift
+ ;;
+*)
+ die () {
+ echo ERROR: "$@" >&2
+ echo Use --force to ignore
+ exit 1
+ }
+ forced=false errors=false
+ ;;
+esac
+
+check=`echo "$0" | sed 's,[^/]*$,,;s,^$,.,;s,/*$,,'`/deblob-check
+if [ ! -f $check ] ; then
+ if $forced; then
+ die deblob-check script missing, will remove entire files
+ else
+ die deblob-check script missing
+ fi
+ have_check=false
+else
+ have_check=:
+ [ -x $check ] || check="/bin/sh $check"
+fi
+
+filetest () {
+ if [ ! -f $1 ]; then
+ die $1 does not exist, something is wrong && return 1
+ fi
+}
+
+announce () {
+ echo
+ echo "$@"
+}
+
+clean_file () {
+ #$1 = filename
+ filetest $1 || return
+ rm $1
+ echo $1: removed
+}
+
+check_changed () {
+ #$1 = filename
+ if cmp $1.deblob $1 > /dev/null; then
+ rm $1.deblob
+ die $1 did not change, something is wrong && return 1
+ fi
+ mv $1.deblob $1
+}
+
+clean_blob () {
+ #$1 = filename
+ filetest $1 || return
+ if $have_check; then
+ name=$1
+ set fnord "$@" -d
+ shift 2
+ if $check "$@" -i linux-$kver $name > $name.deblob; then
+ if [ ! -s $name.deblob ]; then
+ die got an empty file after removing blobs from $name
+ fi
+ else
+ die failed removing blobs from $name
+ fi
+ check_changed $name && echo $name: removed blobs
+ else
+ clean_file $1
+ fi
+}
+
+dummy_blob () {
+ #$1 = filename
+ if test -f $1; then
+ die $1 exists, something is wrong && return
+ elif test ! -f firmware/Makefile; then
+ die firmware/Makefile does not exist, something is wrong && return
+ fi
+
+ clean_sed "s,`echo $1 | sed s,^firmware/,,`,\$(DEBLOBBED),g" \
+ firmware/Makefile "dropped $1"
+}
+
+clean_fw () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_blob $1 -s 4
+ dummy_blob $2
+}
+
+drop_fw_file () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_file $1
+ dummy_blob $2
+}
+
+clean_kconfig () {
+ #$1 = filename $2 = things to remove
+ case $1 in
+ -f)
+ shift
+ ;;
+ *)
+ if $have_check; then
+ filetest $1 || return
+ if sed -n "/^\(menu\)\?config $2$/p" $1 | grep . > /dev/null; then
+ :
+ else
+ die $1 does not contain matches for $2
+ fi
+ return
+ fi
+ ;;
+ esac
+ filetest $1 || return
+ sed "/^config \\($2\\)\$/{p;i\
+ depends on NONFREE
+d;}" $1 > $1.deblob
+ check_changed $1 && echo $1: marked config $2 as depending on NONFREE
+}
+
+clean_mk () {
+ #$1 = config $2 = Makefile name
+ # We don't clean up Makefiles any more --lxoliva
+ # sed -i "/\\($1\\)/d" $2
+ # echo $2: removed $1 support
+ # check_changed $2
+ filetest $2 || return
+ if sed -n "/\\($1\\)/p" $2 | grep . > /dev/null; then
+ :
+ else
+ die $2 does not contain matches for $1
+ fi
+}
+
+clean_sed () {
+ #$1 = sed-script $2 = file $3 = comment
+ filetest $2 || return
+ sed -e "$1" "$2" > "$2".deblob || {
+ die $2: failed: ${3-applied sed script $1} && return 1; }
+ check_changed $2 && echo $2: ${3-applied sed script $1}
+}
+
+reject_firmware () {
+ #$1 = file $2 = pre sed pattern
+ filetest $1 || return
+ clean_sed "$2"'
+s,\(^\|[^>.0-9a-zA-Z_$]\)request\(_ihex\)\?_firmware\(_nowait\|_direct\)\?\($\|[^-.0-9a-zA-Z_$),; ]\),\1reject_firmware\3\4,g
+' "$1" 'disabled non-Free firmware-loading machinery'
+}
+
+maybe_reject_firmware () {
+ #$1 = file $2 = pre sed pattern
+ filetest $1 || return
+ clean_sed "$2"'
+s,\(^\|[^>.0-9a-zA-Z_$]\)request_\(ihex_\)\?firmware\(_nowait\|_direct\)\?\($\|[^-.0-9a-zA-Z_$),; ]\),\1maybe_reject_\2firmware\3\4,g
+' "$1" 'retain Free firmware-loading machinery, disabling non-Free one'
+}
+
+undefine_macro () {
+ #$1 - macro name
+ #$2 - substitution
+ #$3 - message
+ #rest - file names
+ macro=$1 repl=$2 msg=$3; shift 3
+ for f in "$@"; do
+ clean_sed "
+s,^#define $macro .*\$,/*(DEBLOBBED)*/,;
+s,$macro,$repl,g;
+" "$f" "$msg"
+ done
+}
+
+undefault_firmware () {
+ #$1 - pattern such that $1_DEFAULT_FIRMWARE is #defined to non-Free firmware
+ #$@ other than $1 - file names
+ macro="$1"_DEFAULT_FIRMWARE; shift
+ undefine_macro "$macro" "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" "$@"
+}
+
+# First, check that files that contain firmwares and their
+# corresponding sources are present.
+
+for f in \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc \
+ drivers/gpu/drm/nouveau/core/engine/crypt/fuc/nv98.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/crypt/fuc/nv98.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/com.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpc.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvf0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvf0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcgm107.fuc5.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcgm107.fuc5 \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnv108.fuc5.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnv108.fuc5 \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvf0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubgm107.fuc5.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubgm107.fuc5 \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnv108.fuc5 \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc.h \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nv108.fuc \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc.h \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nva3.fuc \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvc0.fuc \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc.h \
+ drivers/gpu/drm/nouveau/core/subdev/pwr/fuc/nvd0.fuc \
+ drivers/net/wan/wanxlfw.inc_shipped \
+ drivers/net/wan/wanxlfw.S \
+ drivers/net/wireless/atmel.c \
+ drivers/net/wireless/atmel.c \
+ drivers/scsi/aic7xxx/aic79xx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic79xx.seq \
+ drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic7xxx.seq \
+ drivers/scsi/53c700_d.h_shipped \
+ drivers/scsi/53c700.scr \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ firmware/dsp56k/bootstrap.bin.ihex \
+ firmware/dsp56k/bootstrap.asm \
+ firmware/keyspan_pda/keyspan_pda.HEX \
+ firmware/keyspan_pda/keyspan_pda.S \
+ firmware/keyspan_pda/xircom_pgs.HEX \
+ firmware/keyspan_pda/xircom_pgs.S \
+; do
+ filetest $f
+done
+
+# Identify the tarball.
+grep -q 'EXTRAVERSION.*-gnu' Makefile ||
+clean_sed "/^EXTRAVERSION *=/ { s,=$,& ,; s,$,&-gnu$extra,; }
+" Makefile 'added -gnu to EXTRAVERSION'
+
+grep -q Linux-libre README ||
+clean_sed '
+1,3 s,Linux kernel release.*kernel\.org.*,GNU Linux-libre <http://linux-libre.fsfla.org>,
+2,5 s,Linux version [0-9.]*,GNU Linux-libre,
+1,20 s,\(operating system \)\?Unix,Unix kernel,
+/WHAT IS LINUX/i\
+WHAT IS GNU Linux-libre?\
+\
+ GNU Linux-libre is a Free version of the kernel Linux (see below),\
+ suitable for use with the GNU Operating System in 100% Free\
+ GNU/Linux-libre System Distributions.\
+ http://www.gnu.org/distros/\
+\
+ It removes non-Free components from Linux, that are disguised as\
+ source code or distributed in separate files. It also disables\
+ run-time requests for non-Free components, shipped separately or as\
+ part of Linux, and documentation pointing to them, so as to avoid\
+ (Free-)baiting users into the trap of non-Free Software.\
+ http://www.fsfla.org/anuncio/2010-11-Linux-2.6.36-libre-debait\
+\
+ Linux-libre started within the gNewSense GNU/Linux distribution.\
+ It was later adopted by Jeff Moe, who coined its name, and in 2008\
+ it became a project maintained by FSF Latin America. In 2012, it\
+ became part of the GNU Project.\
+\
+ The GNU Linux-libre project takes a minimal-changes approach to\
+ cleaning up Linux, making no effort to substitute components that\
+ need to be removed with functionally equivalent Free ones.\
+ Nevertheless, we encourage and support efforts towards doing so.\
+ http://libreplanet.org/wiki/LinuxLibre:Devices_that_require_non-free_firmware\
+\
+ Our mascot is Freedo, a light-blue penguin that has just come out\
+ of the shower. Although we like penguins, GNU is a much greater\
+ contribution to the entire system, so its mascot deserves more\
+ promotion. See our web page for their images.\
+ http://linux-libre.fsfla.org/\
+
+' README 'added blurb about GNU Linux-libre'
+
+# Add reject_firmware and maybe_reject_firmware
+grep -q _LINUX_LIBRE_FIRMWARE_H include/linux/firmware.h ||
+clean_sed '$i\
+#ifndef _LINUX_LIBRE_FIRMWARE_H\
+#define _LINUX_LIBRE_FIRMWARE_H\
+\
+#include <linux/device.h>\
+\
+#define NONFREE_FIRMWARE "/*(DEBLOBBED)*/"\
+\
+static inline int\
+is_nonfree_firmware(const char *name)\
+{\
+ return strstr(name, NONFREE_FIRMWARE) != 0;\
+}\
+\
+static inline int\
+report_missing_free_firmware(const char *name, const char *what)\
+{\
+ printk(KERN_ERR "%s: Missing Free %s (non-Free firmware loading is disabled)\\n", name,\
+ what ? what : "firmware");\
+ return -EINVAL;\
+}\
+static inline int\
+reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ const struct firmware *xfw = NULL;\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware(&xfw, NONFREE_FIRMWARE, device);\
+ if (!retval)\
+ release_firmware(xfw);\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ if (is_nonfree_firmware(name))\
+ return reject_firmware(fw, name, device);\
+ else\
+ return request_firmware(fw, name, device);\
+}\
+static inline int\
+reject_firmware_direct(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ const struct firmware *xfw = NULL;\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware_direct(&xfw, NONFREE_FIRMWARE, device);\
+ if (!retval)\
+ release_firmware(xfw);\
+ return -EINVAL;\
+}\
+static inline void\
+discard_rejected_firmware(const struct firmware *fw, void *context)\
+{\
+ release_firmware(fw);\
+}\
+static inline int\
+reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware_nowait(module, uevent, NONFREE_FIRMWARE,\
+ device, gfp, NULL,\
+ discard_rejected_firmware);\
+ if (retval)\
+ return retval;\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ if (is_nonfree_firmware(name))\
+ return reject_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+ else\
+ return request_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+}\
+\
+#endif /* _LINUX_LIBRE_FIRMWARE_H */\
+' include/linux/firmware.h 'added non-Free firmware notification support'
+
+grep -q _LINUX_LIBRE_IHEX_FIRMWARE_H include/linux/ihex.h ||
+clean_sed '$i\
+#ifndef _LINUX_LIBRE_IHEX_H\
+#define _LINUX_LIBRE_IHEX_H\
+\
+static inline int\
+maybe_reject_ihex_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware(fw, name, device);\
+ else\
+ return request_ihex_firmware(fw, name, device);\
+}\
+\
+#endif /* _LINUX_LIBRE_IHEX_H */\
+' include/linux/ihex.h 'added non-Free ihex firmware notification support'
+
+clean_sed '
+s,\(timeout = \)\(firmware_loading_timeout()\),\1is_nonfree_firmware(name) ? 1 : \2,
+' drivers/base/firmware_class.c 'shorten non-Free firmware fail-to-load timeout'
+
+
+########
+# Arch #
+########
+
+# x86
+
+announce MICROCODE_AMD - "AMD microcode patch loading support"
+reject_firmware arch/x86/kernel/cpu/microcode/amd.c
+clean_blob arch/x86/kernel/cpu/microcode/amd.c
+clean_kconfig arch/x86/Kconfig MICROCODE_AMD
+clean_mk CONFIG_MICROCODE_AMD arch/x86/kernel/cpu/microcode/Makefile
+
+announce MICROCODE_AMD_EARLY - "Early load AMD microcode"
+clean_blob arch/x86/kernel/cpu/microcode/amd_early.c
+clean_kconfig arch/x86/Kconfig MICROCODE_AMD_EARLY
+clean_mk CONFIG_MICROCODE_AMD_EARLY arch/x86/kernel/cpu/microcode/Makefile
+
+announce MICROCODE_INTEL - "Intel microcode patch loading support"
+reject_firmware arch/x86/kernel/cpu/microcode/intel.c
+clean_blob arch/x86/kernel/cpu/microcode/intel.c
+clean_kconfig arch/x86/Kconfig MICROCODE_INTEL
+clean_mk CONFIG_MICROCODE_INTEL arch/x86/kernel/cpu/microcode/Makefile
+
+announce MICROCODE_INTEL_EARLY - "Early load Intel microcode"
+clean_blob arch/x86/kernel/cpu/microcode/intel_early.c
+clean_kconfig arch/x86/Kconfig MICROCODE_INTEL_EARLY
+clean_mk CONFIG_MICROCODE_INTEL_EARLY arch/x86/kernel/cpu/microcode/Makefile
+
+announce MICROCODE_EARLY - "Early load microcode"
+clean_blob Documentation/x86/early-microcode.txt
+clean_kconfig arch/x86/Kconfig MICROCODE_EARLY
+clean_mk CONFIG_MICROCODE_EARLY arch/x86/kernel/cpu/microcode/Makefile
+
+# arm
+
+announce IXP4XX_NPE - "IXP4xx Network Processor Engine support"
+reject_firmware arch/arm/mach-ixp4xx/ixp4xx_npe.c
+clean_blob arch/arm/mach-ixp4xx/ixp4xx_npe.c
+clean_blob Documentation/arm/IXP4xx
+clean_kconfig arch/arm/mach-ixp4xx/Kconfig IXP4XX_NPE
+clean_mk CONFIG_IXP4XX_NPE arch/arm/mach-ixp4xx/Makefile
+
+announce ARCH_NETX - "Hilscher NetX based"
+clean_sed '
+s,\([" ]\)request_firmware(,\1reject_firmware(,
+' arch/arm/mach-netx/xc.c 'disabled non-Free firmware-loading machinery'
+clean_blob arch/arm/mach-netx/xc.c
+clean_blob drivers/net/ethernet/netx-eth.c
+clean_kconfig arch/arm/Kconfig ARCH_NETX
+clean_mk CONFIG_ARCH_NETX arch/arm/Makefile
+
+# mips
+
+# I couldn't figure out where the firmware name actually comes from.
+# If it's from some user-set property, we could reenable it. -lxo
+announce XRX200_PHY_FW - "XRX200 PHY firmware loader"
+reject_firmware arch/mips/lantiq/xway/xrx200_phy_fw.c
+clean_kconfig arch/mips/lantiq/Kconfig XRX200_PHY_FW
+clean_mk CONFIG_XRX200_PHY_FW arch/mips/lantiq/xway/Makefile
+
+#######
+# ATM #
+#######
+
+announce ATM_AMBASSADOR - "Madge Ambassador, Collage PCI 155 Server"
+reject_firmware drivers/atm/ambassador.c
+clean_blob drivers/atm/ambassador.c
+clean_fw firmware/atmsar11.HEX firmware/atmsar11.fw
+clean_kconfig drivers/atm/Kconfig ATM_AMBASSADOR
+clean_mk CONFIG_ATM_AMBASSADOR drivers/atm/Makefile
+
+announce ATM_FORE200E - "FORE Systems 200E-series"
+reject_firmware drivers/atm/fore200e.c
+clean_blob drivers/atm/fore200e.c
+clean_blob Documentation/networking/fore200e.txt
+clean_blob drivers/atm/.gitignore
+clean_blob Documentation/dontdiff
+clean_kconfig drivers/atm/Kconfig ATM_FORE200E
+clean_mk CONFIG_ATM_FORE200E drivers/atm/Makefile
+
+announce ATM_SOLOS - "Solos ADSL2+ PCI Multiport card driver"
+reject_firmware drivers/atm/solos-pci.c
+clean_blob drivers/atm/solos-pci.c
+clean_kconfig drivers/atm/Kconfig ATM_SOLOS
+clean_mk CONFIG_ATM_SOLOS drivers/atm/Makefile
+
+##########
+# Crypto #
+##########
+
+announce CRYPTO_DEV_QAT_DH895xCC - "Support for Intel(R) DH895xCC"
+clean_blob drivers/crypto/qat/qat_dh895xcc/adf_dh895xcc_hw_data.h
+clean_blob drivers/crypto/qat/qat_dh895xcc/adf_drv.c
+clean_kconfig drivers/crypto/qat/Kconfig CRYPTO_DEV_QAT_DH895xCC
+clean_mk CONFIG_CRYPTO_DEV_QAT_DH895xCC drivers/crypto/qat/Makefile
+
+announce CRYPTO_DEV_QAT - "Common bits for Intel(R) QuickAssist Technology"
+reject_firmware drivers/crypto/qat/qat_common/adf_accel_engine.c
+clean_kconfig drivers/crypto/qat/Kconfig CRYPTO_DEV_QAT
+clean_mk CONFIG_CRYPTO_DEV_QAT drivers/crypto/qat/Makefile
+
+########
+# tty #
+########
+
+announce CYCLADES - "Cyclades async mux support"
+reject_firmware drivers/tty/cyclades.c
+clean_blob drivers/tty/cyclades.c
+clean_kconfig drivers/tty/Kconfig CYCLADES
+clean_mk CONFIG_CYCLADES drivers/tty/Makefile
+
+announce ISI - "Multi-Tech multiport card support"
+reject_firmware drivers/tty/isicom.c
+clean_blob drivers/tty/isicom.c
+clean_kconfig drivers/tty/Kconfig ISI
+clean_mk CONFIG_ISI drivers/tty/Makefile
+
+announce MOXA_INTELLIO - "Moxa Intellio support"
+reject_firmware drivers/tty/moxa.c
+clean_blob drivers/tty/moxa.c
+clean_kconfig drivers/tty/Kconfig MOXA_INTELLIO
+clean_mk CONFIG_MOXA_INTELLIO drivers/tty/Makefile
+
+# gpu drm
+
+announce DRM_AST - "AST server chips"
+reject_firmware drivers/gpu/drm/ast/ast_dp501.c
+clean_blob drivers/gpu/drm/ast/ast_dp501.c
+clean_kconfig drivers/gpu/drm/ast/Kconfig DRM_AST
+clean_mk CONFIG_DRM_AST drivers/gpu/drm/ast/Makefile
+
+announce DRM_NOUVEAU - "Nouveau (nVidia) cards"
+reject_firmware drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+clean_blob drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+reject_firmware drivers/gpu/drm/nouveau/core/engine/falcon.c
+clean_blob drivers/gpu/drm/nouveau/core/engine/falcon.c
+reject_firmware drivers/gpu/drm/nouveau/core/engine/xtensa.c
+clean_blob drivers/gpu/drm/nouveau/core/engine/xtensa.c
+clean_kconfig drivers/gpu/drm/nouveau/Kconfig DRM_NOUVEAU
+clean_mk CONFIG_DRM_NOUVEAU drivers/gpu/drm/nouveau/Makefile
+
+announce DRM_MGA - "Matrox g200/g400"
+drop_fw_file firmware/matrox/g200_warp.H16 firmware/matrox/g200_warp.fw
+drop_fw_file firmware/matrox/g400_warp.H16 firmware/matrox/g400_warp.fw
+reject_firmware drivers/gpu/drm/mga/mga_warp.c
+clean_blob drivers/gpu/drm/mga/mga_warp.c
+clean_kconfig drivers/gpu/drm/Kconfig DRM_MGA
+clean_mk CONFIG_DRM_MGA drivers/gpu/drm/Makefile
+
+announce DRM_MSM - "MSM DRM"
+reject_firmware drivers/gpu/drm/msm/adreno/adreno_gpu.c
+clean_blob drivers/gpu/drm/msm/adreno/adreno_device.c
+clean_kconfig drivers/gpu/drm/msm/Kconfig DRM_MSM
+clean_mk CONFIG_DRM_MSM drivers/gpu/drm/msm/Makefile
+
+announce DRM_R128 - "ATI Rage 128"
+drop_fw_file firmware/r128/r128_cce.bin.ihex firmware/r128/r128_cce.bin
+reject_firmware drivers/gpu/drm/r128/r128_cce.c
+clean_blob drivers/gpu/drm/r128/r128_cce.c
+clean_kconfig drivers/gpu/drm/Kconfig DRM_R128
+clean_mk CONFIG_DRM_R128 drivers/gpu/drm/Makefile
+
+announce DRM_RADEON - "ATI Radeon"
+drop_fw_file firmware/radeon/R100_cp.bin.ihex firmware/radeon/R100_cp.bin
+drop_fw_file firmware/radeon/R200_cp.bin.ihex firmware/radeon/R200_cp.bin
+drop_fw_file firmware/radeon/R300_cp.bin.ihex firmware/radeon/R300_cp.bin
+drop_fw_file firmware/radeon/R420_cp.bin.ihex firmware/radeon/R420_cp.bin
+drop_fw_file firmware/radeon/R520_cp.bin.ihex firmware/radeon/R520_cp.bin
+drop_fw_file firmware/radeon/R600_me.bin.ihex firmware/radeon/R600_me.bin
+drop_fw_file firmware/radeon/R600_pfp.bin.ihex firmware/radeon/R600_pfp.bin
+drop_fw_file firmware/radeon/RS600_cp.bin.ihex firmware/radeon/RS600_cp.bin
+drop_fw_file firmware/radeon/RS690_cp.bin.ihex firmware/radeon/RS690_cp.bin
+drop_fw_file firmware/radeon/RS780_me.bin.ihex firmware/radeon/RS780_me.bin
+drop_fw_file firmware/radeon/RS780_pfp.bin.ihex firmware/radeon/RS780_pfp.bin
+drop_fw_file firmware/radeon/RV610_me.bin.ihex firmware/radeon/RV610_me.bin
+drop_fw_file firmware/radeon/RV610_pfp.bin.ihex firmware/radeon/RV610_pfp.bin
+drop_fw_file firmware/radeon/RV620_me.bin.ihex firmware/radeon/RV620_me.bin
+drop_fw_file firmware/radeon/RV620_pfp.bin.ihex firmware/radeon/RV620_pfp.bin
+drop_fw_file firmware/radeon/RV630_me.bin.ihex firmware/radeon/RV630_me.bin
+drop_fw_file firmware/radeon/RV630_pfp.bin.ihex firmware/radeon/RV630_pfp.bin
+drop_fw_file firmware/radeon/RV635_me.bin.ihex firmware/radeon/RV635_me.bin
+drop_fw_file firmware/radeon/RV635_pfp.bin.ihex firmware/radeon/RV635_pfp.bin
+drop_fw_file firmware/radeon/RV670_me.bin.ihex firmware/radeon/RV670_me.bin
+drop_fw_file firmware/radeon/RV670_pfp.bin.ihex firmware/radeon/RV670_pfp.bin
+drop_fw_file firmware/radeon/RV710_me.bin.ihex firmware/radeon/RV710_me.bin
+drop_fw_file firmware/radeon/RV710_pfp.bin.ihex firmware/radeon/RV710_pfp.bin
+drop_fw_file firmware/radeon/RV730_me.bin.ihex firmware/radeon/RV730_me.bin
+drop_fw_file firmware/radeon/RV730_pfp.bin.ihex firmware/radeon/RV730_pfp.bin
+drop_fw_file firmware/radeon/RV770_me.bin.ihex firmware/radeon/RV770_me.bin
+drop_fw_file firmware/radeon/RV770_pfp.bin.ihex firmware/radeon/RV770_pfp.bin
+reject_firmware drivers/gpu/drm/radeon/radeon_cp.c
+clean_blob drivers/gpu/drm/radeon/radeon_cp.c
+reject_firmware drivers/gpu/drm/radeon/r100.c
+clean_blob drivers/gpu/drm/radeon/r100.c
+reject_firmware drivers/gpu/drm/radeon/r600.c
+clean_blob drivers/gpu/drm/radeon/r600.c
+reject_firmware drivers/gpu/drm/radeon/r600_cp.c
+clean_blob drivers/gpu/drm/radeon/r600_cp.c
+reject_firmware drivers/gpu/drm/radeon/ni.c
+clean_blob drivers/gpu/drm/radeon/ni.c
+reject_firmware drivers/gpu/drm/radeon/si.c
+clean_blob drivers/gpu/drm/radeon/si.c
+reject_firmware drivers/gpu/drm/radeon/cik.c
+clean_blob drivers/gpu/drm/radeon/cik.c
+reject_firmware drivers/gpu/drm/radeon/radeon_uvd.c
+clean_blob drivers/gpu/drm/radeon/radeon_uvd.c
+reject_firmware drivers/gpu/drm/radeon/radeon_vce.c
+clean_blob drivers/gpu/drm/radeon/radeon_vce.c
+clean_kconfig drivers/gpu/drm/Kconfig DRM_RADEON
+clean_mk CONFIG_DRM_RADEON drivers/gpu/drm/Makefile
+
+announce DRM_STI - "DRM Support for STMicroelectronics SoC stiH41x Series"
+reject_firmware drivers/gpu/drm/sti/sti_hqvdp.c
+clean_blob drivers/gpu/drm/sti/sti_hqvdp.c
+clean_kconfig drivers/gpu/drm/sti/Kconfig DRM_STI
+clean_mk CONFIG_DRM_STI drivers/gpu/drm/sti/Makefile
+
+#######
+# dma #
+#######
+
+announce IMX_SDMA - "i.MX SDMA support"
+reject_firmware drivers/dma/imx-sdma.c
+clean_blob arch/arm/mach-imx/mm-imx25.c
+clean_blob arch/arm/mach-imx/mm-imx3.c
+clean_blob arch/arm/boot/dts/imx25.dtsi
+clean_blob arch/arm/boot/dts/imx35.dtsi
+clean_blob arch/arm/boot/dts/imx50.dtsi
+clean_blob arch/arm/boot/dts/imx51.dtsi
+clean_blob arch/arm/boot/dts/imx53.dtsi
+clean_blob arch/arm/boot/dts/imx53-tx53.dtsi
+clean_blob arch/arm/boot/dts/imx6qdl.dtsi
+clean_blob arch/arm/boot/dts/imx6sl.dtsi
+clean_blob arch/arm/boot/dts/imx6sx.dtsi
+clean_blob Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt
+clean_kconfig drivers/dma/Kconfig IMX_SDMA
+clean_mk CONFIG_IMX_SDMA drivers/dma/Makefile
+
+#########
+# Media #
+#########
+
+# media/tuner
+
+announce MEDIA_TUNER_SI2157 - "Silicon Labs Si2157 silicon tuner"
+reject_firmware drivers/media/tuners/si2157.c
+clean_blob drivers/media/tuners/si2157.c
+clean_blob drivers/media/tuners/si2157_priv.h
+clean_kconfig drivers/media/tuners/Kconfig MEDIA_TUNER_SI2157
+clean_mk CONFIG_MEDIA_TUNER_SI2157 drivers/media/tuners/Makefile
+
+announce MEDIA_TUNER_XC2028 - "XCeive xc2028/xc3028 tuners"
+undefault_firmware 'XC\(2028\|3028L\)' \
+ drivers/media/tuners/tuner-xc2028.h \
+ drivers/media/pci/saa7134/saa7134-cards.c \
+ drivers/media/pci/ivtv/ivtv-driver.c \
+ drivers/media/pci/cx18/cx18-driver.c \
+ drivers/media/pci/cx18/cx18-dvb.c \
+ drivers/media/pci/cx23885/cx23885-dvb.c \
+ drivers/media/pci/cx23885/cx23885-video.c \
+ drivers/media/pci/cx88/cx88-dvb.c \
+ drivers/media/pci/cx88/cx88-cards.c \
+ drivers/media/usb/em28xx/em28xx-cards.c \
+ drivers/media/usb/dvb-usb/dib0700_devices.c \
+ drivers/media/usb/dvb-usb/cxusb.c
+reject_firmware drivers/media/tuners/tuner-xc2028.c
+clean_blob drivers/media/tuners/tuner-xc2028.c
+clean_kconfig drivers/media/tuners/Kconfig MEDIA_TUNER_XC2028
+clean_mk CONFIG_MEDIA_TUNER_XC2028 drivers/media/tuners/Makefile
+
+announce VIDEO_TM6000_DVB - "DVB Support for tm6000 based TV cards"
+clean_blob drivers/media/usb/tm6000/tm6000-cards.c
+clean_kconfig drivers/media/usb/tm6000/Kconfig VIDEO_TM6000_DVB
+clean_mk CONFIG_VIDEO_TM6000_DVB drivers/media/usb/tm6000/Makefile
+
+announce MEDIA_TUNER_XC4000 - "Xceive XC4000 silicon tuner"
+undefine_macro "XC4000_DEFAULT_FIRMWARE\(\|_NEW\)" "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" drivers/media/tuners/xc4000.c
+maybe_reject_firmware drivers/media/tuners/xc4000.c
+clean_blob drivers/media/tuners/xc4000.c
+clean_kconfig drivers/media/tuners/Kconfig MEDIA_TUNER_XC4000
+clean_mk CONFIG_MEDIA_TUNER_XC4000 drivers/media/tuners/Makefile
+
+announce MEDIA_TUNER_XC5000 - "Xceive XC5000 silicon tuner"
+undefault_firmware 'XC5000' \
+ drivers/media/usb/cx231xx/cx231xx-cards.c
+reject_firmware drivers/media/tuners/xc5000.c
+clean_blob drivers/media/tuners/xc5000.c
+clean_kconfig drivers/media/tuners/Kconfig MEDIA_TUNER_XC5000
+clean_mk CONFIG_MEDIA_TUNER_XC5000 drivers/media/tuners/Makefile
+
+announce DVB_USB - "Support for various USB DVB devices"
+reject_firmware drivers/media/usb/dvb-usb/dvb-usb-firmware.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB
+clean_mk CONFIG_DVB_USB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_V2 - "Support for various USB DVB devices v2"
+reject_firmware drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_V2
+clean_mk CONFIG_DVB_USB_V2 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_B2C2_FLEXCOP - "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
+reject_firmware drivers/media/common/b2c2/flexcop-fe-tuner.c
+
+announce DVB_BT8XX - "BT8xx based PCI cards"
+reject_firmware drivers/media/pci/bt8xx/dvb-bt8xx.c
+
+announce DVB_USB_A800 - "AVerMedia AverTV DVB-T USB 2.0 (A800)"
+clean_blob drivers/media/usb/dvb-usb/a800.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_A800
+clean_mk CONFIG_DVB_USB_A800 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1 support"
+clean_file drivers/media/usb/dvb-usb/af9005-script.h
+clean_sed '
+s,^ deb_info("load init script\\n");$, {\n err("Missing Free init script\\n");\n return scriptlen = ret = -EINVAL;\n ,;
+' drivers/media/usb/dvb-usb/af9005-fe.c 'report missing Free init script'
+clean_blob drivers/media/usb/dvb-usb/af9005-fe.c
+clean_blob drivers/media/usb/dvb-usb/af9005.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_AF9005
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_AF9015 - "Afatech AF9015 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/af9015.h
+clean_blob drivers/media/usb/dvb-usb-v2/af9015.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_AF9015
+clean_mk CONFIG_DVB_USB_AF9015 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AF9035 - "Afatech AF9035 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/af9035.h
+clean_blob drivers/media/usb/dvb-usb-v2/af9035.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_AF9035
+clean_mk CONFIG_DVB_USB_AF9035 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AZ6007 - "Azurewave 6007 and clones DVB-T/C USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/az6007.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_AZ6007
+clean_mk CONFIG_DVB_USB_AZ6007 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AZ6027 - "Azurewave DVB-S/S2 USB2.0 AZ6027 support"
+clean_blob drivers/media/usb/dvb-usb/az6027.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_AZ6027
+clean_mk CONFIG_DVB_USB_AZ6027 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_CXUSB - "Conexant USB2.0 hybrid reference design support"
+clean_blob drivers/media/usb/dvb-usb/cxusb.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_CXUSB
+clean_mk CONFIG_DVB_USB_CXUSB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIB0700 - "DiBcom DiB0700 USB DVB devices"
+reject_firmware drivers/media/usb/dvb-usb/dib0700_devices.c
+clean_blob drivers/media/usb/dvb-usb/dib0700_devices.c
+clean_blob drivers/media/usb/dvb-usb/dib0700_core.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DIB0700
+clean_mk CONFIG_DVB_USB_DIB0700 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MB - "DiBcom USB DVB-T devices (based on the DiB3000M-B)"
+clean_blob drivers/media/usb/dvb-usb/dibusb-mb.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DIBUSB_MB
+clean_mk CONFIG_DVB_USB_DIBUSB_MB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MC - "DiBcom USB DVB-T devices (based on the DiB3000M-C/P)"
+clean_blob drivers/media/usb/dvb-usb/dibusb-mc.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DIBUSB_MC
+clean_mk CONFIG_DVB_USB_DIBUSB_MC drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIGITV - "Nebula Electronics uDigiTV DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/digitv.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DIGITV
+clean_mk CONFIG_DVB_USB_DIGITV drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DTT200U - "WideView WT-200U and WT-220U (pen) DVB-T USB2.0 support (Yakumo/Hama/Typhoon/Yuan)"
+clean_blob drivers/media/usb/dvb-usb/dtt200u.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DTT200U
+clean_mk CONFIG_DVB_USB_DTT200U drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DW2102 - "DvbWorld DVB-S/S2 USB2.0 support"
+reject_firmware drivers/media/usb/dvb-usb/dw2102.c
+clean_blob drivers/media/usb/dvb-usb/dw2102.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_DW2102
+clean_mk CONFIG_DVB_USB_DW2102 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_EC168 - "E3C EC168 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/ec168.h
+clean_blob drivers/media/usb/dvb-usb-v2/ec168.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_EC168
+clean_mk CONFIG_DVB_USB_EC168 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_GP8PSK - "GENPIX 8PSK->USB module support"
+reject_firmware drivers/media/usb/dvb-usb/gp8psk.c
+clean_blob drivers/media/usb/dvb-usb/gp8psk.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_GP8PSK
+clean_mk CONFIG_DVB_USB_GP8PSK drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_LME2510 - "LME DM04/QQBOX DVB-S USB2.0 support"
+reject_firmware drivers/media/usb/dvb-usb-v2/lmedm04.c
+clean_blob drivers/media/usb/dvb-usb-v2/lmedm04.c
+clean_file Documentation/dvb/lmedm04.txt
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig DVB_USB_LME2510
+clean_mk CONFIG_DVB_USB_LME2510 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_M920X - "Uli m920x DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/m920x.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_M920X
+clean_mk CONFIG_DVB_USB_M920X drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_NOVA_T_USB2 - "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/nova-t-usb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_NOVA_T_USB2
+clean_mk CONFIG_DVB_USB_NOVA_T_USB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_OPERA1 - "Opera1 DVB-S USB2.0 receiver"
+reject_firmware drivers/media/usb/dvb-usb/opera1.c
+clean_blob drivers/media/usb/dvb-usb/opera1.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_OPERA1
+clean_mk CONFIG_DVB_USB_OPERA1 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_TECHNISAT_USB2 - "Technisat DVB-S/S2 USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/technisat-usb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_TECHNISAT_USB2
+clean_mk CONFIG_DVB_USB_TECHNISAT_USB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_TTUSB2 - "Pinnacle 400e DVB-S USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/ttusb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_TTUSB2
+clean_mk CONFIG_DVB_USB_TTUSB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_UMT_010 - "HanfTek UMT-010 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/umt-010.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_UMT_010
+clean_mk CONFIG_DVB_USB_UMT_010 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_VP702X - "TwinhanDTV StarBox and clones DVB-S USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/vp702x.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_VP702X
+clean_mk CONFIG_DVB_USB_VP702X drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_VP7045 - "TwinhanDTV Alpha/MagicBoxII, DNTV tinyUSB2, Beetle USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/vp7045.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig DVB_USB_VP7045
+clean_mk CONFIG_DVB_USB_VP7045 drivers/media/usb/dvb-usb/Makefile
+
+# dvb/frontends
+
+announce DVB_AF9013 - "Afatech AF9013 demodulator"
+reject_firmware drivers/media/dvb-frontends/af9013.c
+clean_blob drivers/media/dvb-frontends/af9013.c
+clean_blob drivers/media/dvb-frontends/af9013_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_AF9013
+clean_mk CONFIG_DVB_AF9013 drivers/media/dvb-frontends/Makefile
+
+announce DVB_BCM3510 - "Broadcom BCM3510"
+undefault_firmware 'BCM3510' drivers/media/dvb-frontends/bcm3510.c
+clean_sed '
+/You.ll need a firmware/,/dvb-fe-bcm/d;
+' drivers/media/dvb-frontends/bcm3510.c \
+ "removed non-Free firmware notes"
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_BCM3510
+clean_mk CONFIG_DVB_BCM3510 drivers/media/dvb-frontends/Makefile
+
+announce DVB_CX24116 - "Conexant CX24116 based"
+undefault_firmware CX24116 drivers/media/dvb-frontends/cx24116.c
+reject_firmware drivers/media/dvb-frontends/cx24116.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_CX24116
+clean_mk CONFIG_DVB_CX24116 drivers/media/dvb-frontends/Makefile
+
+announce DVB_CX24117 - "Conexant CX24117 based"
+undefault_firmware CX24117 drivers/media/dvb-frontends/cx24117.c
+reject_firmware drivers/media/dvb-frontends/cx24117.c
+clean_blob drivers/media/dvb-frontends/cx24117.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_CX24117
+clean_mk CONFIG_DVB_CX24117 drivers/media/dvb-frontends/Makefile
+
+announce DVB_DS3000 - "Montage Tehnology DS3000 based"
+undefault_firmware 'DS3000' \
+ drivers/media/dvb-frontends/ds3000.c
+reject_firmware drivers/media/dvb-frontends/ds3000.c
+clean_blob drivers/media/dvb-frontends/ds3000.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_DS3000
+clean_mk CONFIG_DVB_DS3000 drivers/media/dvb-frontends/Makefile
+
+announce DVB_DRX39XYJ - "Micronas DRX-J demodulator"
+reject_firmware drivers/media/dvb-frontends/drx39xyj/drxj.c
+clean_blob drivers/media/dvb-frontends/drx39xyj/drxj.c
+clean_kconfig drivers/media/dvb-frontends/drx39xyj/Kconfig DVB_DRX39XYJ
+clean_mk CONFIG_DVB_DRX39XYJ drivers/media/dvb-frontends/drx39xyj/Makefile
+
+announce DVB_LGS8GXX - "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
+reject_firmware drivers/media/dvb-frontends/lgs8gxx.c
+clean_blob drivers/media/dvb-frontends/lgs8gxx.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_LGS8GXX
+clean_mk CONFIG_DVB_LGS8GXX drivers/media/dvb-frontends/Makefile
+
+announce DVB_M88DS3103 - "Montage M88DS3103"
+reject_firmware drivers/media/dvb-frontends/m88ds3103.c
+clean_blob drivers/media/dvb-frontends/m88ds3103.c
+clean_blob drivers/media/dvb-frontends/m88ds3103_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_M88DS3103
+clean_mk CONFIG_DVB_M88DS3103 drivers/media/dvb-frontends/Makefile
+
+announce DVB_NXT200X - "NxtWave Communications NXT2002/NXT2004 based"
+undefault_firmware 'NXT200[24]' drivers/media/dvb-frontends/nxt200x.c
+reject_firmware drivers/media/dvb-frontends/nxt200x.c
+clean_blob drivers/media/dvb-frontends/nxt200x.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_NXT200X
+clean_mk CONFIG_DVB_NXT200X drivers/media/dvb-frontends/Makefile
+
+announce DVB_OR51132 - "Oren OR51132 based"
+reject_firmware drivers/media/dvb-frontends/or51132.c
+clean_blob drivers/media/dvb-frontends/or51132.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_OR51132
+clean_mk CONFIG_DVB_OR51132 drivers/media/dvb-frontends/Makefile
+
+announce DVB_OR51211 - "Oren OR51211 based"
+undefault_firmware 'OR51211' drivers/media/dvb-frontends/or51211.c
+clean_blob drivers/media/dvb-frontends/or51211.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_OR51211
+clean_mk CONFIG_DVB_OR51211 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SI2165 - "Silicon Labs si2165 based"
+reject_firmware drivers/media/dvb-frontends/si2165.c
+clean_blob drivers/media/dvb-frontends/si2165.c
+clean_blob drivers/media/dvb-frontends/si2165_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_SI2165
+clean_mk CONFIG_DVB_SI2165 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SI2168 - "Silicon Labs Si2168"
+reject_firmware drivers/media/dvb-frontends/si2168.c
+clean_blob drivers/media/dvb-frontends/si2168.c
+clean_blob drivers/media/dvb-frontends/si2168_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_SI2168
+clean_mk CONFIG_DVB_SI2168 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SP8870 - "Spase sp8870"
+undefault_firmware 'SP8870' drivers/media/dvb-frontends/sp8870.c
+clean_blob drivers/media/dvb-frontends/sp8870.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_SP8870
+clean_mk CONFIG_DVB_SP8870 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SP887X - "Spase sp887x based"
+undefault_firmware 'SP887X' drivers/media/dvb-frontends/sp887x.c
+clean_blob drivers/media/dvb-frontends/sp887x.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_SP887X
+clean_mk CONFIG_DVB_SP887X drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA10048 - "Philips TDA10048HN based"
+undefine_macro 'TDA10048_DEFAULT_FIRMWARE_SIZE' 0 \
+ 'removed non-Free firmware size' drivers/media/dvb-frontends/tda10048.c
+undefault_firmware 'TDA10048' drivers/media/dvb-frontends/tda10048.c
+reject_firmware drivers/media/dvb-frontends/tda10048.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_TDA10048
+clean_mk CONFIG_DVB_TDA10048 drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA1004X - "Philips TDA10045H/TDA10046H"
+undefault_firmware 'TDA1004[56]' drivers/media/dvb-frontends/tda1004x.c
+clean_blob drivers/media/dvb-frontends/tda1004x.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_TDA1004X
+clean_mk CONFIG_DVB_TDA1004X drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA10071 - "NXP TDA10071"
+reject_firmware drivers/media/dvb-frontends/tda10071.c
+clean_blob drivers/media/dvb-frontends/tda10071.c
+clean_blob drivers/media/dvb-frontends/tda10071_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_TDA10071
+clean_mk CONFIG_DVB_TDA10071 drivers/media/dvb-frontends/Makefile
+
+# dvb
+
+announce DVB_AS102 - "Abilis AS102 DVB receiver"
+reject_firmware drivers/media/usb/as102/as102_fw.c
+clean_blob drivers/media/usb/as102/as102_fw.c
+clean_kconfig drivers/media/usb/as102/Kconfig DVB_AS102
+clean_mk CONFIG_DVB_AS102 drivers/media/usb/as102/Makefile
+
+announce DVB_AV7110 - "AV7110 cards"
+reject_firmware drivers/media/pci/ttpci/av7110.c
+clean_blob drivers/media/pci/ttpci/av7110.c
+clean_kconfig drivers/media/pci/ttpci/Kconfig DVB_AV7110
+clean_mk CONFIG_DVB_AV7110 drivers/media/pci/ttpci/Makefile
+
+announce DVB_BUDGET - "Budget cards"
+reject_firmware drivers/media/pci/ttpci/budget.c
+
+announce DVB_BUDGET_AV - "Budget cards with analog video inputs"
+reject_firmware drivers/media/pci/ttpci/budget-av.c
+
+announce DVB_BUDGET_CI - "Budget cards with onboard CI connector"
+reject_firmware drivers/media/pci/ttpci/budget-ci.c
+
+announce DVB_DRXD - "Micronas DRXD driver"
+reject_firmware drivers/media/dvb-frontends/drxd_hard.c
+clean_blob drivers/media/dvb-frontends/drxd_hard.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_DRXD
+clean_mk CONFIG_DVB_DRXD drivers/media/dvb-frontends/Makefile
+
+announce DVB_DRXK - "Micronas DRXK based"
+reject_firmware drivers/media/dvb-frontends/drxk_hard.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig DVB_DRXK
+clean_mk CONFIG_DVB_DRXK drivers/media/dvb-frontends/Makefile
+
+announce DVB_MN88472 - "Panasonic MN88472"
+reject_firmware drivers/staging/media/mn88472/mn88472.c
+clean_blob drivers/staging/media/mn88472/mn88472.c
+clean_blob drivers/staging/media/mn88472/mn88472_priv.h
+clean_kconfig drivers/staging/media/mn88472/Kconfig DVB_MN88472
+clean_mk CONFIG_DVB_MN88472 drivers/staging/media/mn88472/Makefile
+
+announce DVB_MN88473 - "Panasonic MN88472"
+reject_firmware drivers/staging/media/mn88473/mn88473.c
+clean_blob drivers/staging/media/mn88473/mn88473.c
+clean_blob drivers/staging/media/mn88473/mn88473_priv.h
+clean_kconfig drivers/staging/media/mn88473/Kconfig DVB_MN88473
+clean_mk CONFIG_DVB_MN88473 drivers/staging/media/mn88473/Makefile
+
+announce DVB_NGENE - "Micronas nGene support"
+reject_firmware drivers/media/pci/ngene/ngene-core.c
+clean_blob drivers/media/pci/ngene/ngene-core.c
+clean_kconfig drivers/media/pci/ngene/Kconfig DVB_NGENE
+clean_mk CONFIG_DVB_NGENE drivers/media/pci/ngene/Makefile
+
+announce DVB_PLUTO2 - "Pluto2 cards"
+reject_firmware drivers/media/pci/pluto2/pluto2.c
+
+announce SMS_SIANO_MDTV - "Siano SMS1xxx based MDTV receiver"
+reject_firmware drivers/media/common/siano/smscoreapi.c
+clean_blob drivers/media/common/siano/smscoreapi.c
+clean_blob drivers/media/common/siano/smscoreapi.h
+clean_kconfig drivers/media/common/siano/Kconfig SMS_SIANO_MDTV
+clean_mk CONFIG_SMS_SIANO_MDTV drivers/media/common/siano/Makefile
+
+announce SMS_USB_DRV - "Siano's USB interface support"
+reject_firmware drivers/media/usb/siano/smsusb.c
+clean_blob drivers/media/usb/siano/smsusb.c
+clean_kconfig drivers/media/usb/siano/Kconfig SMS_USB_DRV
+clean_mk CONFIG_SMS_USB_DRV drivers/media/usb/siano/Makefile
+
+announce DVB_TTUSB_BUDGET - "Technotrend/Hauppauge Nova-USB devices"
+drop_fw_file firmware/ttusb-budget/dspbootcode.bin.ihex firmware/ttusb-budget/dspbootcode.bin
+reject_firmware drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+clean_blob drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+clean_kconfig drivers/media/usb/ttusb-budget/Kconfig DVB_TTUSB_BUDGET
+clean_mk CONFIG_DVB_TTUSB_BUDGET drivers/media/usb/ttusb-budget/Makefile
+
+announce DVB_TTUSB_DEC - "Technotrend/Hauppauge USB DEC devices"
+reject_firmware drivers/media/usb/ttusb-dec/ttusb_dec.c
+clean_blob drivers/media/usb/ttusb-dec/ttusb_dec.c
+clean_blob Documentation/dvb/ttusb-dec.txt
+clean_kconfig drivers/media/usb/ttusb-dec/Kconfig DVB_TTUSB_DEC
+clean_mk CONFIG_DVB_TTUSB_DEC drivers/media/usb/ttusb-dec/Makefile
+
+# video
+
+announce VIDEO_BT848 - "BT848 Video For Linux"
+reject_firmware drivers/media/pci/bt8xx/bttv-cards.c
+clean_blob drivers/media/pci/bt8xx/bttv-cards.c
+clean_blob Documentation/video4linux/bttv/README
+clean_kconfig drivers/media/pci/bt8xx/Kconfig VIDEO_BT848
+clean_mk CONFIG_VIDEO_BT848 drivers/media/pci/bt8xx/Makefile
+
+announce VIDEO_CODA - "Chips&Media Coda multi-standard codec IP"
+reject_firmware drivers/media/platform/coda/coda-common.c
+clean_blob drivers/media/platform/coda/coda-common.c
+clean_kconfig drivers/media/platform/Kconfig VIDEO_CODA
+clean_mk CONFIG_VIDEO_CODA drivers/media/platform/coda/Makefile
+
+announce VIDEO_CPIA2 - "CPiA2 Video For Linux"
+clean_fw firmware/cpia2/stv0672_vp4.bin.ihex firmware/cpia2/stv0672_vp4.bin
+reject_firmware drivers/media/usb/cpia2/cpia2_core.c
+clean_blob drivers/media/usb/cpia2/cpia2_core.c
+clean_kconfig drivers/media/usb/cpia2/Kconfig VIDEO_CPIA2
+clean_mk CONFIG_VIDEO_CPIA2 drivers/media/usb/cpia2/Makefile
+
+announce VIDEO_CX18 - "Conexant cx23418 MPEG encoder support"
+reject_firmware drivers/media/pci/cx18/cx18-av-firmware.c
+reject_firmware drivers/media/pci/cx18/cx18-dvb.c
+reject_firmware drivers/media/pci/cx18/cx18-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-av-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-dvb.c
+clean_blob drivers/media/pci/cx18/cx18-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-driver.c
+clean_kconfig drivers/media/pci/cx18/Kconfig VIDEO_CX18
+clean_mk CONFIG_VIDEO_CX18 drivers/media/pci/cx18/Makefile
+
+announce VIDEO_CX231XX - "Conexant cx231xx USB video capture support"
+reject_firmware drivers/media/usb/cx231xx/cx231xx-417.c
+clean_blob drivers/media/usb/cx231xx/cx231xx-417.c
+clean_kconfig drivers/media/usb/cx231xx/Kconfig VIDEO_CX231XX
+clean_mk CONFIG_VIDEO_CX231XX drivers/media/usb/cx231xx/Makefile
+
+announce VIDEO_CX23885 - "Conexant cx23885 (2388x successor) support"
+reject_firmware drivers/media/pci/cx23885/cx23885-417.c
+clean_blob drivers/media/pci/cx23885/cx23885-417.c
+reject_firmware drivers/media/pci/cx23885/cx23885-cards.c
+clean_blob drivers/media/pci/cx23885/cx23885-cards.c
+clean_blob drivers/media/pci/cx23885/cx23885-video.c
+clean_kconfig drivers/media/pci/cx23885/Kconfig VIDEO_CX23885
+clean_mk CONFIG_VIDEO_CX23885 drivers/media/pci/cx23885/Makefile
+
+announce VIDEO_CX25840 - "Conexant CX2584x audio/video decoders"
+reject_firmware drivers/media/i2c/cx25840/cx25840-firmware.c
+clean_blob drivers/media/i2c/cx25840/cx25840-firmware.c
+clean_kconfig drivers/media/i2c/cx25840/Kconfig VIDEO_CX25840
+clean_mk CONFIG_VIDEO_CX25840 drivers/media/i2c/cx25840/Makefile
+
+announce VIDEO_CX88_BLACKBIRD - "Blackbird MPEG encoder support (cx2388x + cx23416)"
+reject_firmware drivers/media/pci/cx88/cx88-blackbird.c
+clean_kconfig drivers/media/pci/cx88/Kconfig VIDEO_CX88_BLACKBIRD
+clean_mk CONFIG_VIDEO_CX88_BLACKBIRD drivers/media/pci/cx88/Makefile
+
+announce VIDEO_EM28XX_DVB - "DVB/ATSC Support for em28xx based TV cards"
+clean_blob drivers/media/usb/em28xx/em28xx-dvb.c
+clean_kconfig drivers/media/usb/em28xx/Kconfig VIDEO_EM28XX_DVB
+clean_mk CONFIG_VIDEO_EM28XX_DVB drivers/media/usb/em28xx/Makefile
+
+announce VIDEO_EXYNOS4_FIMC_IS - "EXYNOS4x12 FIMC-IS (Imaging Subsystem) driver"
+reject_firmware drivers/media/platform/exynos4-is/fimc-is.c
+clean_blob drivers/media/platform/exynos4-is/fimc-is.h
+clean_kconfig drivers/media/platform/exynos4-is/Kconfig VIDEO_EXYNOS4_FIMC_IS
+clean_mk CONFIG_VIDEO_EXYNOS4_FIMC_IS drivers/media/platform/exynos4-is/Makefile
+
+announce VIDEO_IVTV - "Conexant cx23416/cx23415 MPEG encoder/decoder support"
+reject_firmware drivers/media/pci/ivtv/ivtv-firmware.c
+clean_blob drivers/media/pci/ivtv/ivtv-firmware.c
+clean_kconfig drivers/media/pci/ivtv/Kconfig VIDEO_IVTV
+clean_mk CONFIG_VIDEO_IVTV drivers/media/pci/ivtv/Makefile
+
+announce VIDEO_PVRUSB2 - "Hauppauge WinTV-PVR USB2 support"
+reject_firmware drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+clean_blob drivers/media/usb/pvrusb2/pvrusb2-devattr.c
+clean_kconfig drivers/media/usb/pvrusb2/Kconfig VIDEO_PVRUSB2
+clean_mk CONFIG_VIDEO_PVRUSB2 drivers/media/usb/pvrusb2/Makefile
+
+announce "VIDEO_CX23885, VIDEO_CX88_BLACKBIRD, VIDEO_IVTV, VIDEO_PVRUSB2" - "See above"
+clean_blob include/media/cx2341x.h
+
+announce VIDEO_GO7007 - "Go 7007 support"
+reject_firmware drivers/media/usb/go7007/go7007-driver.c
+clean_blob drivers/media/usb/go7007/go7007-driver.c
+reject_firmware drivers/media/usb/go7007/go7007-fw.c
+clean_blob drivers/media/usb/go7007/go7007-fw.c
+clean_kconfig drivers/media/usb/go7007/Kconfig VIDEO_GO7007
+clean_mk CONFIG_VIDEO_GO7007 drivers/media/usb/go7007/Makefile
+
+announce VIDEO_GO7007_USB_S2250_BOARD - "Sensoray 2250/2251 support"
+reject_firmware drivers/media/usb/go7007/go7007-loader.c
+clean_blob drivers/media/usb/go7007/go7007-loader.c
+clean_kconfig drivers/media/usb/go7007/Kconfig VIDEO_GO7007_USB_S2250_BOARD
+clean_mk CONFIG_VIDEO_GO7007_USB_S2250_BOARD drivers/media/usb/go7007/Makefile
+
+announce VIDEO_SAA7134_DVB - "DVB/ATSC Support for saa7134 based TV cards"
+reject_firmware drivers/media/pci/saa7134/saa7134-dvb.c
+clean_kconfig drivers/media/pci/saa7134/Kconfig VIDEO_SAA7134_DVB
+clean_mk CONFIG_VIDEO_SAA7134_DVB drivers/media/pci/saa7134/Makefile
+
+announce VIDEO_SAA7134_GO7007 - "go7007 support for saa7134 based TV cards"
+clean_blob drivers/media/pci/saa7134/saa7134-go7007.c
+clean_kconfig drivers/media/pci/saa7134/Kconfig VIDEO_SAA7134_GO7007
+clean_mk CONFIG_VIDEO_SAA7134_GO7007 drivers/media/pci/saa7134/Makefile
+
+announce VIDEO_SAA7164 - "NXP SAA7164 support"
+reject_firmware drivers/media/pci/saa7164/saa7164-fw.c
+clean_blob drivers/media/pci/saa7164/saa7164-fw.c
+clean_kconfig drivers/media/pci/saa7164/Kconfig VIDEO_SAA7164
+clean_mk CONFIG_VIDEO_SAA7164 drivers/media/pci/saa7164/Makefile
+
+announce VIDEO_S5C73M3 - "Samsung S5C73M3 sensor support"
+reject_firmware drivers/media/i2c/s5c73m3/s5c73m3-core.c
+clean_blob drivers/media/i2c/s5c73m3/s5c73m3-core.c
+clean_kconfig drivers/media/i2c/Kconfig VIDEO_S5C73M3
+clean_mk CONFIG_VIDEO_S5C73M3 drivers/media/i2c/s5c73m3/Makefile
+
+announce VIDEO_S5K4ECGX - "Samsung S5K4ECGX sensor support"
+reject_firmware drivers/media/i2c/s5k4ecgx.c
+clean_blob drivers/media/i2c/s5k4ecgx.c
+clean_kconfig drivers/media/i2c/Kconfig VIDEO_S5K4ECGX
+clean_mk CONFIG_VIDEO_S5K4ECGX drivers/media/i2c/Makefile
+
+announce VIDEO_S5K5BAF - "Samsung S5K5BAF sensor support"
+reject_firmware drivers/media/i2c/s5k5baf.c
+clean_blob drivers/media/i2c/s5k5baf.c
+clean_kconfig drivers/media/i2c/Kconfig VIDEO_S5K5BAF
+clean_mk CONFIG_VIDEO_S5K5BAF drivers/media/i2c/Makefile
+
+announce VIDEO_SAMSUNG_S5P_MFC - "Samsung S5P MFC 5.1 Video Codec"
+reject_firmware drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
+clean_blob drivers/media/platform/s5p-mfc/s5p_mfc.c
+clean_kconfig drivers/media/platform/Kconfig VIDEO_SAMSUNG_S5P_MFC
+clean_mk CONFIG_VIDEO_SAMSUNG_S5P_MFC drivers/media/platform/s5p-mfc/Makefile
+
+announce VIDEO_TLG2300 - "Telegent TLG2300 USB video capture support"
+reject_firmware drivers/staging/media/tlg2300/pd-main.c
+clean_blob drivers/staging/media/tlg2300/pd-main.c
+clean_kconfig drivers/staging/media/tlg2300/Kconfig VIDEO_TLG2300
+clean_mk CONFIG_VIDEO_TLG2300 drivers/staging/media/tlg2300/Makefile
+
+announce USB_S2255 - "USB Sensoray 2255 video capture device"
+reject_firmware drivers/media/usb/s2255/s2255drv.c
+clean_blob drivers/media/usb/s2255/s2255drv.c
+clean_kconfig drivers/media/usb/s2255/Kconfig USB_S2255
+clean_mk CONFIG_USB_S2255 drivers/media/usb/s2255/Makefile
+
+announce USB_GSPCA_VICAM - "USB 3com HomeConnect, AKA vicam"
+drop_fw_file firmware/vicam/firmware.H16 firmware/vicam/firmware.fw
+reject_firmware drivers/media/usb/gspca/vicam.c
+clean_blob drivers/media/usb/gspca/vicam.c
+clean_kconfig drivers/media/usb/gspca/Kconfig USB_GSPCA_VICAM
+clean_mk CONFIG_USB_GSPCA_VICAM drivers/media/usb/gspca/Makefile
+
+announce VIDEO_TI_VPE - "TI VPE (Video Processing Engine) driver"
+reject_firmware drivers/media/platform/ti-vpe/vpdma.c
+clean_blob drivers/media/platform/ti-vpe/vpdma.c
+clean_kconfig drivers/media/platform/Kconfig VIDEO_TI_VPE
+clean_mk CONFIG_VIDEO_TI_VPE drivers/media/platform/ti-vpe/Makefile
+
+# radio
+
+announce RADIO_WL1273 - "Texas Instruments WL1273 I2C FM Radio"
+reject_firmware drivers/media/radio/radio-wl1273.c
+clean_blob drivers/media/radio/radio-wl1273.c
+clean_kconfig drivers/media/radio/Kconfig RADIO_WL1273
+clean_mk CONFIG_RADIO_WL1273 drivers/media/radio/Makefile
+
+announce RADIO_WL128X - "Texas Instruments WL128x FM Radio"
+clean_blob drivers/media/radio/wl128x/fmdrv_common.h
+reject_firmware drivers/media/radio/wl128x/fmdrv_common.c
+clean_blob drivers/media/radio/wl128x/fmdrv_common.c
+clean_kconfig drivers/media/radio/wl128x/Kconfig RADIO_WL128X
+clean_mk CONFIG_RADIO_WL128X drivers/media/radio/Makefile
+
+#######
+# net #
+#######
+
+announce ACENIC - "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit"
+drop_fw_file firmware/acenic/tg1.bin.ihex firmware/acenic/tg1.bin
+drop_fw_file firmware/acenic/tg2.bin.ihex firmware/acenic/tg2.bin
+reject_firmware drivers/net/ethernet/alteon/acenic.c
+clean_blob drivers/net/ethernet/alteon/acenic.c
+clean_kconfig drivers/net/ethernet/alteon/Kconfig ACENIC
+clean_mk CONFIG_ACENIC drivers/net/ethernet/alteon/Makefile
+
+announce ADAPTEC_STARFIRE - "Adaptec Starfire/DuraLAN support"
+clean_fw firmware/adaptec/starfire_rx.bin.ihex firmware/adaptec/starfire_rx.bin
+clean_fw firmware/adaptec/starfire_tx.bin.ihex firmware/adaptec/starfire_tx.bin
+reject_firmware drivers/net/ethernet/adaptec/starfire.c
+clean_blob drivers/net/ethernet/adaptec/starfire.c
+clean_kconfig drivers/net/ethernet/adaptec/Kconfig ADAPTEC_STARFIRE
+clean_mk CONFIG_ADAPTEC_STARFIRE drivers/net/ethernet/adaptec/Makefile
+
+announce BNA - "Brocade 1010/1020 10Gb Ethernet Driver support"
+clean_blob drivers/net/ethernet/brocade/bna/bnad.c
+clean_blob drivers/net/ethernet/brocade/bna/cna.h
+reject_firmware drivers/net/ethernet/brocade/bna/bnad_ethtool.c
+reject_firmware drivers/net/ethernet/brocade/bna/cna_fwimg.c
+clean_kconfig drivers/net/ethernet/brocade/bna/Kconfig BNA
+clean_mk CONFIG_BNA drivers/net/ethernet/brocade/bna/Makefile
+
+announce BNX2 - "Broadcom NetXtremeII"
+drop_fw_file firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex firmware/bnx2/bnx2-mips-09-6.2.1a.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex firmware/bnx2/bnx2-rv2p-09-6.0.17.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw
+drop_fw_file firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex firmware/bnx2/bnx2-mips-06-6.2.1.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex firmware/bnx2/bnx2-rv2p-06-6.0.15.fw
+reject_firmware drivers/net/ethernet/broadcom/bnx2.c
+clean_blob drivers/net/ethernet/broadcom/bnx2.c
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig BNX2
+clean_mk CONFIG_BNX2 drivers/net/ethernet/broadcom/Makefile
+
+announce BNX2X - "Broadcom NetXtremeII 10Gb support"
+drop_fw_file firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e1-6.2.9.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e2-6.2.9.0.fw
+reject_firmware drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+clean_sed '
+/^#include "bnx2x_init\.h"/,/^$/{
+ /^$/i\
+#define bnx2x_init_block(bp, start, end) \\\
+ return (printk(KERN_ERR "%s: Missing Free firmware\\n", bp->dev->name),\\\
+ -EINVAL)
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c 'report missing Free firmware'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+clean_sed '
+/^int bnx2x_compare_fw_ver/,/^}$/{
+ /^ u32 my_fw = /i\
+ /*(DEBLOBBED)*/
+ /^ u32 my_fw = /,/<< 24);/d;
+ /^ u32 loaded_fw = /,/^$/{
+ /^$/i\
+\
+ u32 my_fw = ~loaded_fw;
+ }
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 'fail already-loaded test'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
+clean_sed '
+/static void bnx2x_init_wr_wb/{
+ i\
+extern void bnx2x_init_wr_wb(struct bnx2x *, u32, const u32 *, u32);
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h 'declare removed function'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig BNX2X
+clean_mk CONFIG_BNX2X drivers/net/ethernet/broadcom/bnx2x/Makefile
+
+announce CASSINI - "Sun Cassini"
+drop_fw_file firmware/sun/cassini.bin.ihex firmware/sun/cassini.bin
+reject_firmware drivers/net/ethernet/sun/cassini.c
+clean_blob drivers/net/ethernet/sun/cassini.c
+clean_kconfig drivers/net/ethernet/sun/Kconfig CASSINI
+clean_mk CONFIG_CASSINI drivers/net/ethernet/sun/Makefile
+
+announce CHELSIO_T3 - "Chelsio AEL 2005 support"
+drop_fw_file firmware/cxgb3/t3b_psram-1.1.0.bin.ihex firmware/cxgb3/t3b_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/t3c_psram-1.1.0.bin.ihex firmware/cxgb3/t3c_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/ael2005_opt_edc.bin.ihex firmware/cxgb3/ael2005_opt_edc.bin
+drop_fw_file firmware/cxgb3/ael2005_twx_edc.bin.ihex firmware/cxgb3/ael2005_twx_edc.bin
+drop_fw_file firmware/cxgb3/ael2020_twx_edc.bin.ihex firmware/cxgb3/ael2020_twx_edc.bin
+reject_firmware drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+clean_blob drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+clean_kconfig drivers/net/ethernet/chelsio/Kconfig CHELSIO_T3
+clean_mk CONFIG_CHELSIO_T3 drivers/net/ethernet/chelsio/cxgb3/Makefile
+
+announce CHELSIO_T4 - "Chelsio Communications T4 Ethernet support"
+reject_firmware drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+clean_blob drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+clean_kconfig drivers/net/ethernet/chelsio/Kconfig CHELSIO_T4
+clean_mk CONFIG_CHELSIO_T4 drivers/net/ethernet/chelsio/cxgb4/Makefile
+
+announce E100 - "Intel PRO/100+"
+drop_fw_file firmware/e100/d101m_ucode.bin.ihex firmware/e100/d101m_ucode.bin
+drop_fw_file firmware/e100/d101s_ucode.bin.ihex firmware/e100/d101s_ucode.bin
+drop_fw_file firmware/e100/d102e_ucode.bin.ihex firmware/e100/d102e_ucode.bin
+reject_firmware drivers/net/ethernet/intel/e100.c
+clean_sed '
+/^static const struct firmware \*e100_\(reject\|request\)_firmware(/,/^}$/{
+ s:^\(.*\)return ERR_PTR(err);$:\1netif_err(nic, probe, nic->netdev, "Proceeding without firmware\\n");\n\1return NULL;:
+}' drivers/net/ethernet/intel/e100.c 'proceed without firmware'
+clean_blob drivers/net/ethernet/intel/e100.c
+clean_kconfig drivers/net/ethernet/intel/Kconfig E100
+clean_mk CONFIG_E100 drivers/net/ethernet/intel/Makefile
+
+announce FT1000_PCMCIA - "Driver for ft1000 pcmcia device."
+clean_file drivers/staging/ft1000/ft1000-pcmcia/ft1000.img
+clean_blob drivers/staging/ft1000/ft1000-pcmcia/boot.h
+clean_sed '
+/^static int ft1000_reset_card/,/^}$/ {
+ /card_bootload/i\
+ return /*(DEBLOBBED)*/ false;
+}
+' drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c \
+ 'disabled non-Free firmware-loading machinery'
+reject_firmware drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
+clean_blob drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
+clean_kconfig drivers/staging/ft1000/Kconfig FT1000_PCMCIA
+clean_mk CONFIG_FT1000_PCMCIA drivers/staging/ft1000/Makefile
+
+announce FT1000_USB - "Driver for ft1000 USB devices."
+clean_file drivers/staging/ft1000/ft1000-usb/ft3000.img
+reject_firmware drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
+clean_blob drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
+clean_kconfig drivers/staging/ft1000/Kconfig FT1000_USB
+clean_mk CONFIG_FT1000_USB drivers/staging/ft1000/Makefile
+
+announce MYRI_SBUS - "MyriCOM Gigabit Ethernet"
+drop_fw_file firmware/myricom/lanai.bin.ihex firmware/myricom/lanai.bin
+
+announce MYRI10GE - "Myricom Myri-10G Ethernet support"
+reject_firmware drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+clean_blob drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+clean_kconfig drivers/net/ethernet/myricom/Kconfig MYRI10GE
+clean_mk CONFIG_MYRI10GE drivers/net/ethernet/myricom/myri10ge/Makefile
+
+announce NETXEN_NIC - "NetXen Multi port (1/10) Gigabit Ethernet NIC"
+reject_firmware drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+clean_blob drivers/net/ethernet/qlogic/netxen/netxen_nic.h
+clean_blob drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+clean_kconfig drivers/net/ethernet/qlogic/Kconfig NETXEN_NIC
+clean_mk CONFIG_NETXEN_NIC drivers/net/ethernet/qlogic/Makefile
+
+announce QLCNIC - "QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support"
+reject_firmware drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
+reject_firmware drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+clean_blob drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+clean_blob drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
+clean_blob drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+clean_kconfig drivers/net/ethernet/qlogic/Kconfig QLCNIC
+clean_mk CONFIG_QLCNIC drivers/net/ethernet/qlogic/qlcnic/Makefile
+
+announce R8169 - "Realtek 8169 gigabit ethernet support"
+reject_firmware drivers/net/ethernet/realtek/r8169.c
+clean_blob drivers/net/ethernet/realtek/r8169.c
+clean_kconfig drivers/net/ethernet/realtek/Kconfig R8169
+clean_mk CONFIG_R8169 drivers/net/ethernet/realtek/Makefile
+
+announce SLICOSS - "Alacritech Gigabit IS-NIC cards"
+reject_firmware drivers/staging/slicoss/slicoss.c
+clean_blob drivers/staging/slicoss/slicoss.c
+clean_kconfig drivers/staging/slicoss/Kconfig SLICOSS
+clean_mk CONFIG_SLICOSS drivers/staging/slicoss/Makefile
+
+announce SPIDER_NET - "Spider Gigabit Ethernet driver"
+reject_firmware drivers/net/ethernet/toshiba/spider_net.c
+clean_sed 's,spider_fw\.bin,DEBLOBBED.bin,g' \
+ drivers/net/ethernet/toshiba/spider_net.c 'removed non-Free firmware notes'
+clean_blob drivers/net/ethernet/toshiba/spider_net.c
+clean_blob drivers/net/ethernet/toshiba/spider_net.h
+clean_kconfig drivers/net/ethernet/toshiba/Kconfig SPIDER_NET
+clean_mk CONFIG_SPIDER_NET drivers/net/ethernet/toshiba/Makefile
+
+announce TEHUTI - "Tehuti Networks 10G Ethernet"
+drop_fw_file firmware/tehuti/bdx.bin.ihex firmware/tehuti/bdx.bin
+reject_firmware drivers/net/ethernet/tehuti/tehuti.c
+clean_blob drivers/net/ethernet/tehuti/tehuti.c
+clean_kconfig drivers/net/ethernet/tehuti/Kconfig TEHUTI
+clean_mk CONFIG_TEHUTI drivers/net/ethernet/tehuti/Makefile
+
+announce TIGON3 - "Broadcom Tigon3"
+drop_fw_file firmware/tigon/tg3.bin.ihex firmware/tigon/tg3.bin
+drop_fw_file firmware/tigon/tg3_tso.bin.ihex firmware/tigon/tg3_tso.bin
+drop_fw_file firmware/tigon/tg3_tso5.bin.ihex firmware/tigon/tg3_tso5.bin
+reject_firmware drivers/net/ethernet/broadcom/tg3.c
+clean_blob drivers/net/ethernet/broadcom/tg3.c
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig TIGON3
+clean_mk CONFIG_TIGON3 drivers/net/ethernet/broadcom/Makefile
+
+announce TYPHOON - "3cr990 series Typhoon"
+drop_fw_file firmware/3com/typhoon.bin.ihex firmware/3com/typhoon.bin
+reject_firmware drivers/net/ethernet/3com/typhoon.c
+clean_blob drivers/net/ethernet/3com/typhoon.c
+clean_kconfig drivers/net/ethernet/3com/Kconfig TYPHOON
+clean_mk CONFIG_TYPHOON drivers/net/ethernet/3com/Makefile
+
+announce VXGE - "Exar X3100 Series 10GbE PCIe Server Adapter"
+reject_firmware drivers/net/ethernet/neterion/vxge/vxge-main.c
+clean_blob drivers/net/ethernet/neterion/vxge/vxge-main.c
+clean_kconfig drivers/net/ethernet/neterion/Kconfig VXGE
+clean_mk CONFIG_VXGE drivers/net/ethernet/neterion/vxge/Makefile
+
+# appletalk
+
+announce COPS - "COPS LocalTalk PC"
+clean_sed '
+/sizeof(\(ff\|lt\)drv_code)/{
+ i\
+ printk(KERN_INFO "%s: Missing Free firmware.\\n", dev->name);\
+ return;
+}
+/\(ff\|lt\)drv_code/d;
+' drivers/net/appletalk/cops.c 'report missing Free firmware'
+clean_blob drivers/net/appletalk/cops.c
+clean_file drivers/net/appletalk/cops_ffdrv.h
+clean_file drivers/net/appletalk/cops_ltdrv.h
+clean_kconfig drivers/net/appletalk/Kconfig COPS
+clean_mk CONFIG_COPS drivers/net/appletalk/Makefile
+
+# hamradio
+
+announce YAM - "YAM driver for AX.25"
+drop_fw_file firmware/yam/1200.bin.ihex firmware/yam/1200.bin
+drop_fw_file firmware/yam/9600.bin.ihex firmware/yam/9600.bin
+reject_firmware drivers/net/hamradio/yam.c
+clean_blob drivers/net/hamradio/yam.c
+clean_kconfig drivers/net/hamradio/Kconfig YAM
+clean_mk CONFIG_YAM drivers/net/hamradio/Makefile
+
+# irda
+
+announce USB_IRDA - "IrDA USB dongles"
+reject_firmware drivers/net/irda/irda-usb.c
+clean_blob drivers/net/irda/irda-usb.c
+clean_sed '
+s,\(char stir421x_fw_name\)\[12\];,\1[16];,
+' drivers/net/irda/irda-usb.c "avoid buffer overflow with deblobbed filename"
+clean_kconfig drivers/net/irda/Kconfig USB_IRDA
+clean_mk CONFIG_USB_IRDA drivers/net/irda/Makefile
+
+# smsc
+
+announce PCMCIA_SMC91C92 - "SMC 91Cxx PCMCIA"
+drop_fw_file firmware/ositech/Xilinx7OD.bin.ihex firmware/ositech/Xilinx7OD.bin
+reject_firmware drivers/net/ethernet/smsc/smc91c92_cs.c
+clean_blob drivers/net/ethernet/smsc/smc91c92_cs.c
+clean_kconfig drivers/net/ethernet/smsc/Kconfig PCMCIA_SMC91C92
+clean_mk CONFIG_PCMCIA_SMC91C92 drivers/net/ethernet/smsc/Makefile
+
+# near-field communication
+
+announce NFC_WILINK - "Texas Instruments NFC WiLink driver"
+reject_firmware drivers/nfc/nfcwilink.c
+clean_blob drivers/nfc/nfcwilink.c
+clean_kconfig drivers/nfc/Kconfig NFC_WILINK
+clean_mk CONFIG_NFC_WILINK drivers/nfc/Makefile
+
+announce NFC_PN544_I2C - "NFC PN544 i2c support"
+reject_firmware drivers/nfc/pn544/i2c.c
+clean_kconfig drivers/nfc/pn544/Kconfig NFC_PN544_I2C
+clean_mk NFC_PN544_I2C drivers/nfc/pn544/Kconfig
+
+# pcmcia
+
+# CIS files are not software.
+# announce PCCARD - "PCCard (PCMCIA/CardBus) support"
+# reject_firmware drivers/pcmcia/ds.c
+# clean_kconfig drivers/pcmcia/Kconfig 'PCCARD'
+# clean_mk CONFIG_PCCARD drivers/pcmcia/Makefile
+
+announce PCMCIA_3C574 - "3Com 3c574 PCMCIA support"
+# This is not software; it's Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/3CCFEM556.cis.ihex firmware/cis/3CCFEM556.cis
+# clean_blob drivers/net/pcmcia/3c574_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C574'
+# clean_mk CONFIG_PCMCIA_3C574 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_3C589 - "3Com 3c589 PCMCIA support"
+# This is not software; it's Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/3CXEM556.cis.ihex firmware/cis/3CXEM556.cis
+# clean_blob drivers/net/pcmcia/3c589_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C589'
+# clean_mk CONFIG_PCMCIA_3C589 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_PCNET - "NE2000 compatible PCMCIA support"
+# These are not software; they're Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/LA-PCM.cis.ihex firmware/cis/LA-PCM.cis
+drop_fw_file firmware/cis/PCMLM28.cis.ihex firmware/cis/PCMLM28.cis
+drop_fw_file firmware/cis/DP83903.cis.ihex firmware/cis/DP83903.cis
+drop_fw_file firmware/cis/NE2K.cis.ihex firmware/cis/NE2K.cis
+drop_fw_file firmware/cis/tamarack.cis.ihex firmware/cis/tamarack.cis
+drop_fw_file firmware/cis/PE-200.cis.ihex firmware/cis/PE-200.cis
+drop_fw_file firmware/cis/PE520.cis.ihex firmware/cis/PE520.cis
+# clean_blob drivers/net/pcmcia/pcnet_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_PCNET'
+# clean_mk CONFIG_PCMCIA_PCNET drivers/net/pcmcia/Makefile
+
+# usb
+
+announce USB_KAWETH - "USB KLSI KL5USB101-based ethernet device support"
+drop_fw_file firmware/kaweth/new_code.bin.ihex firmware/kaweth/new_code.bin
+drop_fw_file firmware/kaweth/new_code_fix.bin.ihex firmware/kaweth/new_code_fix.bin
+drop_fw_file firmware/kaweth/trigger_code.bin.ihex firmware/kaweth/trigger_code.bin
+drop_fw_file firmware/kaweth/trigger_code_fix.bin.ihex firmware/kaweth/trigger_code_fix.bin
+reject_firmware drivers/net/usb/kaweth.c
+clean_blob drivers/net/usb/kaweth.c
+clean_kconfig drivers/net/usb/Kconfig USB_KAWETH
+clean_mk CONFIG_USB_KAWETH drivers/net/usb/Makefile
+
+# wireless
+
+announce ATMEL "Atmel at76c50x chipset 802.11b support"
+reject_firmware drivers/net/wireless/atmel.c
+clean_blob drivers/net/wireless/atmel.c
+clean_kconfig drivers/net/wireless/Kconfig ATMEL
+clean_mk CONFIG_ATMEL drivers/net/wireless/Makefile
+
+announce AT76C50X_USB - "Atmel at76c503/at76c505/at76c505a USB cards"
+reject_firmware drivers/net/wireless/at76c50x-usb.c
+clean_blob drivers/net/wireless/at76c50x-usb.c
+clean_kconfig drivers/net/wireless/Kconfig AT76C50X_USB
+clean_mk CONFIG_AT76C50X_USB drivers/net/wireless/Makefile
+
+announce B43 - "Broadcom 43xx wireless support (mac80211 stack)"
+maybe_reject_firmware drivers/net/wireless/b43/main.c
+clean_sed '
+/^static int b43_upload_microcode(/,/^}$/{
+ / if (dev->fw\.opensource) {$/i\
+ if (!dev->fw.opensource) {\
+ b43err(dev->wl, "Rejected non-Free firmware\\n");\
+ err = -EOPNOTSUPP;\
+ goto error;\
+ }
+}' drivers/net/wireless/b43/main.c 'double-check and reject non-Free firmware'
+# Major portions of firmware filenames not deblobbed.
+clean_blob drivers/net/wireless/b43/main.c
+clean_kconfig drivers/net/wireless/b43/Kconfig B43
+clean_mk CONFIG_B43 drivers/net/wireless/b43/Makefile
+
+announce B43LEGACY - "Broadcom 43xx-legacy wireless support (mac80211 stack)"
+reject_firmware drivers/net/wireless/b43legacy/main.c
+# Major portions of firwmare filenames not deblobbed.
+clean_blob drivers/net/wireless/b43legacy/main.c
+clean_kconfig drivers/net/wireless/b43legacy/Kconfig B43LEGACY
+clean_mk CONFIG_B43LEGACY drivers/net/wireless/b43legacy/Makefile
+
+announce BRCMSMAC - "Broadcom IEEE802.11n PCIe SoftMAC WLAN driver"
+reject_firmware drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+clean_blob drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig BRCMSMAC
+clean_mk CONFIG_BRCMSMAC drivers/net/wireless/brcm80211/Makefile
+
+announce BRCMFMAC - "Broadcom IEEE802.11n embedded FullMAC WLAN driver"
+reject_firmware drivers/net/wireless/brcm80211/brcmfmac/firmware.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig BRCMFMAC
+clean_mk CONFIG_BRCMFMAC drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce BRCMFMAC_SDIO - "Broadcom IEEE802.11n SDIO FullMAC WLAN driver"
+clean_blob drivers/net/wireless/brcm80211/brcmfmac/sdio.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig BRCMFMAC_SDIO
+clean_mk CONFIG_BRCMFMAC_SDIO drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce BRCMFMAC_USB - "Broadcom IEEE802.11n USB FullMAC WLAN driver"
+clean_blob drivers/net/wireless/brcm80211/brcmfmac/usb.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig BRCMFMAC_USB
+clean_mk CONFIG_BRCMFMAC_USB drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce BRCMFMAC_PCIE - "Broadcom IEEE802.11n PCIE FullMAC WLAN driver"
+clean_blob drivers/net/wireless/brcm80211/brcmfmac/pcie.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig BRCMFMAC_PCIE
+clean_mk CONFIG_BRCMFMAC_PCIE drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce HERMES - "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
+reject_firmware drivers/net/wireless/orinoco/fw.c
+clean_blob drivers/net/wireless/orinoco/fw.c
+clean_kconfig drivers/net/wireless/orinoco/Kconfig HERMES
+clean_mk CONFIG_HERMES drivers/net/wireless/orinoco/Makefile
+
+announce ORINOCO_USB - "Agere Orinoco USB support"
+reject_firmware drivers/net/wireless/orinoco/orinoco_usb.c
+clean_blob drivers/net/wireless/orinoco/orinoco_usb.c
+clean_kconfig drivers/net/wireless/orinoco/Kconfig ORINOCO_USB
+clean_mk CONFIG_ORINOCO_USB drivers/net/wireless/orinoco/Makefile
+
+announce IPW2100 - "Intel PRO/Wireless 2100 Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2100.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2100.c
+clean_kconfig drivers/net/wireless/ipw2x00/Kconfig IPW2100
+clean_mk CONFIG_IPW2100 drivers/net/wireless/ipw2x00/Makefile
+
+announce IPW2200 - "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2200.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2200.c
+clean_kconfig drivers/net/wireless/ipw2x00/Kconfig IPW2200
+clean_mk CONFIG_IPW2200 drivers/net/wireless/ipw2x00/Makefile
+
+announce IWL3945 - "Intel PRO/Wireless 3945ABG/BG Network Connection"
+reject_firmware drivers/net/wireless/iwlegacy/3945-mac.c
+clean_blob drivers/net/wireless/iwlegacy/3945-mac.c
+clean_blob drivers/net/wireless/iwlegacy/3945.h
+clean_kconfig drivers/net/wireless/iwlegacy/Kconfig IWL3945
+clean_mk CONFIG_IWL3945 drivers/net/wireless/iwlegacy/Makefile
+
+announce IWL4965 - "Intel Wireless WiFi 4965AGN"
+reject_firmware drivers/net/wireless/iwlegacy/4965-mac.c
+clean_blob drivers/net/wireless/iwlegacy/4965-mac.c
+clean_blob drivers/net/wireless/iwlegacy/4965.c
+clean_kconfig drivers/net/wireless/iwlegacy/Kconfig IWL4965
+clean_mk CONFIG_IWL4965 drivers/net/wireless/iwlegacy/Makefile
+
+announce IWLWIFI - "Intel Wireless WiFi Next Gen AGN"
+reject_firmware drivers/net/wireless/iwlwifi/iwl-drv.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-drv.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig IWLWIFI
+clean_mk CONFIG_IWLWIFI drivers/net/wireless/iwlwifi/Makefile
+
+announce IWLDVM - "Intel Wireless WiFi DVM Firmware support"
+clean_blob drivers/net/wireless/iwlwifi/iwl-1000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-2000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-5000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-6000.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig IWLDVM
+clean_mk CONFIG_IWLMVM drivers/net/wireless/iwlwifi/Makefile
+
+announce IWLMVM - "Intel Wireless WiFi MVM Firmware support"
+reject_firmware drivers/net/wireless/iwlwifi/mvm/nvm.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-7000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-8000.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig IWLMVM
+clean_mk CONFIG_IWLMVM drivers/net/wireless/iwlwifi/Makefile
+
+announce LIBERTAS - "Marvell 8xxx Libertas WLAN driver support"
+reject_firmware drivers/net/wireless/libertas/firmware.c
+clean_kconfig drivers/net/wireless/libertas/Kconfig LIBERTAS
+clean_mk CONFIG_LIBERTAS drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_CS - "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_cs.c
+clean_kconfig drivers/net/wireless/libertas/Kconfig LIBERTAS_CS
+clean_mk CONFIG_LIBERTAS_CS drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SDIO - "Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_sdio.c
+clean_kconfig drivers/net/wireless/libertas/Kconfig LIBERTAS_SDIO
+clean_mk CONFIG_LIBERTAS_SDIO drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SPI - "Marvell Libertas 8686 SPI 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_spi.c
+clean_kconfig drivers/net/wireless/libertas/Kconfig LIBERTAS_SPI
+clean_mk CONFIG_LIBERTAS_SPI drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_USB - "Marvell Libertas 8388 USB 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_usb.c
+clean_blob drivers/net/wireless/libertas/README
+clean_kconfig drivers/net/wireless/libertas/Kconfig LIBERTAS_USB
+clean_mk CONFIG_LIBERTAS_USB drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_THINFIRM_USB - "Marvell Libertas 8388 USB 802.11b/g cards with thin firmware"
+reject_firmware drivers/net/wireless/libertas_tf/if_usb.c
+clean_blob drivers/net/wireless/libertas_tf/if_usb.c
+clean_kconfig drivers/net/wireless/Kconfig LIBERTAS_THINFIRM_USB
+clean_mk CONFIG_LIBERTAS_THINFIRM_USB drivers/net/wireless/libertas_tf/Makefile
+
+announce MWIFIEX - "Marvell WiFi-Ex Driver"
+clean_blob drivers/net/wireless/mwifiex/README
+reject_firmware drivers/net/wireless/mwifiex/main.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig MWIFIEX
+clean_mk CONFIG_MWIFIEX drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_SDIO - "Marvell WiFi-Ex Driver for SD8787"
+clean_blob drivers/net/wireless/mwifiex/sdio.h
+clean_blob drivers/net/wireless/mwifiex/sdio.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig MWIFIEX_SDIO
+clean_mk CONFIG_MWIFIEX_SDIO drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_PCIE - "Marvell WiFi-Ex Driver for PCI 8766"
+clean_blob drivers/net/wireless/mwifiex/pcie.h
+clean_blob drivers/net/wireless/mwifiex/pcie.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig MWIFIEX_PCIE
+clean_mk CONFIG_MWIFIEX_PCIE drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_USB - "Marvell WiFi-Ex Driver for USB8797"
+clean_blob drivers/net/wireless/mwifiex/usb.h
+clean_blob drivers/net/wireless/mwifiex/usb.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig MWIFIEX_USB
+clean_mk CONFIG_MWIFIEX_USB drivers/net/wireless/mwifiex/Makefile
+
+announce MWL8K - "Marvell 88W8xxx PCI/PCIe Wireless support"
+reject_firmware drivers/net/wireless/mwl8k.c
+clean_blob drivers/net/wireless/mwl8k.c
+clean_kconfig drivers/net/wireless/Kconfig MWL8K
+clean_mk CONFIG_MWL8K drivers/net/wireless/Makefile
+
+announce AR5523 - "Atheros AR5523 wireless driver support"
+reject_firmware drivers/net/wireless/ath/ar5523/ar5523.c
+clean_blob drivers/net/wireless/ath/ar5523/ar5523.c
+clean_blob drivers/net/wireless/ath/ar5523/ar5523.h
+clean_kconfig drivers/net/wireless/ath/ar5523/Kconfig AR5523
+clean_mk CONFIG_AR5523 drivers/net/wireless/ath/ar5523/Makefile
+
+announce ATH6KL - "Atheros ath6kl support"
+reject_firmware drivers/net/wireless/ath/ath6kl/init.c
+clean_blob drivers/net/wireless/ath/ath6kl/init.c
+clean_blob drivers/net/wireless/ath/ath6kl/core.h
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig ATH6KL
+clean_mk CONFIG_ATH6KL drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH6KL_SDIO - "Atheros ath6kl SDIO support"
+clean_blob drivers/net/wireless/ath/ath6kl/sdio.c
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig ATH6KL_SDIO
+clean_mk CONFIG_ATH6KL_SDIO drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH6KL_USB - "Atheros ath6kl USB support"
+clean_blob drivers/net/wireless/ath/ath6kl/usb.c
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig ATH6KL_USB
+clean_mk CONFIG_ATH6KL_USB drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH10K - "Atheros 802.11ac wireless cards support"
+reject_firmware drivers/net/wireless/ath/ath10k/core.c
+clean_blob drivers/net/wireless/ath/ath10k/core.c
+clean_blob drivers/net/wireless/ath/ath10k/hw.h
+clean_kconfig drivers/net/wireless/ath/ath10k/Kconfig ATH10K
+clean_mk CONFIG_ATH10K drivers/net/wireless/ath/ath10k/Makefile
+
+announce ATH10K NL80211_TESTMODE - "nl80211 testmode command"
+reject_firmware drivers/net/wireless/ath/ath10k/testmode.c
+clean_sed '
+/^[\t ]*\/\* utf\.bin firmware image/ s,/\* utf\.bin,/*(DEBLOBBED)*//*,
+' drivers/net/wireless/ath/ath10k/testmode.c 'removed blob name in comment'
+clean_kconfig net/wireless/Kconfig NL80211_TESTMODE
+clean_mk CONFIG_NL80211_TESTMODE drivers/net/wireless/ath/ath10k/Makefile
+
+announce ATH10K_PCI - "Atheros ath10k PCI support"
+clean_blob drivers/net/wireless/ath/ath10k/pci.c
+clean_kconfig drivers/net/wireless/ath/ath10k/Kconfig ATH10K_PCI
+clean_mk CONFIG_ATH10K_PCI drivers/net/wireless/ath/ath10k/Makefile
+
+announce WIL6210 - "Wilocity 60g WiFi card wil6210 support"
+reject_firmware drivers/net/wireless/ath/wil6210/fw_inc.c
+clean_blob drivers/net/wireless/ath/wil6210/fw.c
+clean_blob drivers/net/wireless/ath/wil6210/wil6210.h
+clean_kconfig drivers/net/wireless/ath/wil6210/Kconfig WIL6210
+clean_mk CONFIG_WIL6210 drivers/net/wireless/ath/wil6210/Makefile
+
+announce CW1200 - "CW1200 WLAN support"
+reject_firmware drivers/net/wireless/cw1200/fwio.c
+clean_blob drivers/net/wireless/cw1200/fwio.h
+reject_firmware drivers/net/wireless/cw1200/sta.c
+clean_kconfig drivers/net/wireless/cw1200/Kconfig CW1200
+clean_mk CONFIG_CW1200 drivers/net/wireless/cw1200/Makefile
+
+announce CW1200_WLAN_SDIO - "Support SDIO platforms"
+clean_blob drivers/net/wireless/cw1200/cw1200_sdio.c
+clean_kconfig drivers/net/wireless/cw1200/Kconfig CW1200_WLAN_SDIO
+clean_mk CONFIG_CW1200_WLAN_SDIO drivers/net/wireless/cw1200/Makefile
+
+announce PRISM2_USB - "Prism2.5/3 USB driver"
+reject_firmware drivers/staging/wlan-ng/prism2fw.c
+clean_blob drivers/staging/wlan-ng/prism2fw.c
+clean_kconfig drivers/staging/wlan-ng/Kconfig PRISM2_USB
+clean_mk CONFIG_PRISM2_USB drivers/staging/wlan-ng/Makefile
+
+announce P54_PCI - "Prism54 PCI support"
+reject_firmware drivers/net/wireless/p54/p54pci.c
+clean_blob drivers/net/wireless/p54/p54pci.c
+clean_sed 's,3826\.eeprom,DEBLOBBED,g' drivers/net/wireless/p54/Kconfig 'removed blob name'
+clean_kconfig drivers/net/wireless/p54/Kconfig P54_PCI
+clean_mk CONFIG_P54_PCI drivers/net/wireless/p54/Makefile
+
+announce P54_SPI - "Prism54 SPI (stlc45xx) support"
+# There's support for loading custom 3826.eeprom here, with a default
+# eeprom that is clearly pure data. Without Free 3826.arm, there's
+# little point in trying to retain the ability to load 3826.eeprom, so
+# we drop it altogether.
+reject_firmware drivers/net/wireless/p54/p54spi.c
+clean_blob drivers/net/wireless/p54/p54spi.c
+clean_kconfig drivers/net/wireless/p54/Kconfig P54_SPI
+clean_mk CONFIG_P54_SPI drivers/net/wireless/p54/Makefile
+
+announce P54_USB - "Prism54 USB support"
+reject_firmware drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.h
+clean_kconfig drivers/net/wireless/p54/Kconfig P54_USB
+clean_mk CONFIG_P54_USB drivers/net/wireless/p54/Makefile
+
+announce PRISM54 - "Intersil Prism GT/Duette/Indigo PCI/Cardbus"
+reject_firmware drivers/net/wireless/prism54/islpci_dev.c
+clean_blob drivers/net/wireless/prism54/islpci_dev.c
+clean_kconfig drivers/net/wireless/Kconfig PRISM54
+clean_mk CONFIG_PRISM54 drivers/net/wireless/prism54/Makefile
+
+announce RSI_91X - "Redpine Signals Inc 91x WLAN driver support"
+clean_blob drivers/net/wireless/rsi/rsi_common.h
+clean_kconfig drivers/net/wireless/rsi/Kconfig RSI_91X
+clean_mk CONFIG_RSI_91X drivers/net/wireless/rsi/Makefile
+
+announce RSI_SDIO - "Redpine Signals SDIO bus support"
+reject_firmware drivers/net/wireless/rsi/rsi_91x_sdio_ops.c
+clean_blob drivers/net/wireless/rsi/rsi_91x_sdio.c
+clean_kconfig drivers/net/wireless/rsi/Kconfig RSI_SDIO
+clean_mk CONFIG_RSI_SDIO drivers/net/wireless/rsi/Makefile
+
+announce RSI_USB - "Redpine Signals USB bus support"
+reject_firmware drivers/net/wireless/rsi/rsi_91x_usb_ops.c
+clean_blob drivers/net/wireless/rsi/rsi_91x_usb.c
+clean_kconfig drivers/net/wireless/rsi/Kconfig RSI_USB
+clean_mk CONFIG_RSI_USB drivers/net/wireless/rsi/Makefile
+
+announce RT2X00_LIB_FIRMWARE - "Ralink driver firmware support"
+reject_firmware drivers/net/wireless/rt2x00/rt2x00firmware.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2X00_LIB_FIRMWARE
+clean_mk CONFIG_RT2X00_LIB_FIRMWARE drivers/net/wireless/rt2x00/Makefile
+
+announce RT61PCI - "Ralink rt2501/rt61 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt61pci.h
+clean_blob drivers/net/wireless/rt2x00/rt61pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT61PCI
+clean_mk CONFIG_RT61PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT73USB - "Ralink rt2501/rt73 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt73usb.h
+clean_blob drivers/net/wireless/rt2x00/rt73usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT73USB
+clean_mk CONFIG_RT73USB drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800PCI - "Ralink rt2800 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.h
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800PCI
+clean_mk CONFIG_RT2800PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800USB - "Ralink rt2800 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.h
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800USB
+clean_mk CONFIG_RT2800USB drivers/net/wireless/rt2x00/Makefile
+
+announce RTLWIFI - "Realtek Wireless Network Adapters"
+reject_firmware drivers/net/wireless/rtlwifi/core.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTLWIFI
+clean_mk CONFIG_RTLWIFI drivers/net/wireless/rtlwifi/Makefile
+
+announce RTL8188EE - "Realtek RTL8188EE Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8188ee/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8188ee/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8188EE
+clean_mk CONFIG_RTL8188EE drivers/net/wireless/rtlwifi/rtl8188ee/Makefile
+
+announce R8188EU - "Realtek RTL8188EU Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8188eu/hal/fw.c
+clean_blob drivers/staging/rtl8188eu/hal/fw.c
+clean_blob drivers/staging/rtl8188eu/include/rtl8188e_hal.h
+clean_kconfig drivers/staging/rtl8188eu/Kconfig R8188EU
+clean_mk CONFIG_R8188EU drivers/staging/rtl8188eu/Makefile
+
+announce RTL8192CE - "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192CE
+clean_mk CONFIG_RTL8192CE drivers/net/wireless/rtlwifi/rtl8192ce/Makefile
+
+announce RTL8192CU - "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192CU
+clean_mk CONFIG_RTL8192CU drivers/net/wireless/rtlwifi/rtl8192cu/Makefile
+
+announce RTL8192DE - "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192de/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192de/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192DE
+clean_mk CONFIG_RTL8192DE drivers/net/wireless/rtlwifi/rtl8192de/Makefile
+
+announce RTL8192SE - "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192se/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192se/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192SE
+clean_mk CONFIG_RTL8192SE drivers/net/wireless/rtlwifi/rtl8192se/Makefile
+
+announce RTL8192E - "RealTek RTL8192E Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
+clean_blob drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.h
+clean_blob drivers/staging/rtl8192e/rtl8192e/rtl_core.c
+clean_kconfig drivers/staging/rtl8192e/rtl8192e/Kconfig RTL8192E
+clean_mk CONFIG_RTL8192E drivers/staging/rtl8192e/Makefile
+
+announce RTL8192EE - "RealTek RTL8192EE Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192ee/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192ee/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192EE
+clean_mk CONFIG_RTL8192EE drivers/net/wireless/rtlwifi/Makefile
+
+announce RTL8192U - "RealTek RTL8192U Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192u/r819xU_firmware.c
+clean_blob drivers/staging/rtl8192u/r819xU_firmware.c
+clean_kconfig drivers/staging/rtl8192u/Kconfig RTL8192U
+clean_mk CONFIG_RTL8192U drivers/staging/rtl8192u/Makefile
+
+announce R8712U - "RealTek RTL8712U (RTL8192SU) Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8712/hal_init.c
+clean_blob drivers/staging/rtl8712/hal_init.c
+clean_kconfig drivers/staging/rtl8712/Kconfig R8712U
+clean_mk CONFIG_R8712U drivers/staging/rtl8712/Makefile
+
+announce RTL8723AE - "Realtek RTL8723AE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8723AE
+clean_mk CONFIG_RTL8723AE drivers/net/wireless/rtlwifi/rtl8723ae/Makefile
+
+announce R8723AU - "RealTek RTL8723AU Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
+clean_blob drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
+clean_blob drivers/staging/rtl8723au/os_dep/os_intfs.c
+clean_kconfig drivers/staging/rtl8723au/Kconfig R8723AU
+clean_mk CONFIG_R8723AU drivers/staging/rtl8723au/Makefile
+
+announce RTL8723BE - "Realtek RTL8723BE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8723be/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8723be/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8723BE
+clean_mk CONFIG_RTL8723BE drivers/net/wireless/rtlwifi/rtl8723be/Makefile
+
+announce RTL8821AE - "Realtek RTL8821AE/RTL8812AE Wireless LAN NIC driver"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8821ae/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8821ae/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8821AE
+clean_mk CONFIG_RTL8821AE drivers/net/wireless/rtlwifi/rtl8821ae/Makefile
+
+announce VT6656 - "VIA Technologies VT6656 support"
+reject_firmware drivers/staging/vt6656/firmware.c
+clean_blob drivers/staging/vt6656/firmware.c
+clean_kconfig drivers/staging/vt6656/Kconfig VT6656
+clean_mk CONFIG_VT6656 drivers/staging/vt6656/Makefile
+
+announce WL1251 - "TI wl1251 support"
+reject_firmware drivers/net/wireless/ti/wl1251/main.c
+clean_blob drivers/net/wireless/ti/wl1251/main.c
+clean_blob drivers/net/wireless/ti/wl1251/wl1251.h
+clean_kconfig drivers/net/wireless/ti/wl1251/Kconfig WL1251
+clean_mk CONFIG_WL1251 drivers/net/wireless/ti/wl1251/Makefile
+
+announce WL12XX - "TI wl12xx support"
+clean_blob drivers/net/wireless/ti/wl12xx/main.c
+clean_kconfig drivers/net/wireless/ti/wl12xx/Kconfig WL12XX
+clean_mk CONFIG_WL12XX drivers/net/wireless/ti/wl12xx/Makefile
+
+announce WL18XX - "TI wl18xx support"
+reject_firmware drivers/net/wireless/ti/wl18xx/main.c
+clean_blob drivers/net/wireless/ti/wl18xx/main.c
+clean_kconfig drivers/net/wireless/ti/wl18xx/Kconfig WL18XX
+clean_mk CONFIG_WL18XX drivers/net/wireless/ti/wl18xx/Makefile
+
+announce WLCORE - "TI wlcore support"
+reject_firmware drivers/net/wireless/ti/wlcore/main.c
+clean_blob drivers/net/wireless/ti/wlcore/main.c
+clean_blob drivers/net/wireless/ti/wlcore/wlcore_i.h
+clean_kconfig drivers/net/wireless/ti/wlcore/Kconfig WLCORE
+clean_mk CONFIG_WLCORE drivers/net/wireless/ti/wlcore/Makefile
+
+announce USB_ZD1201 - "USB ZD1201 based Wireless device support"
+reject_firmware drivers/net/wireless/zd1201.c
+clean_blob drivers/net/wireless/zd1201.c
+clean_kconfig drivers/net/wireless/Kconfig USB_ZD1201
+clean_mk CONFIG_USB_ZD1201 drivers/net/wireless/Makefile
+
+announce WCN36XX - "Qualcomm Atheros WCN3660/3680 support"
+reject_firmware drivers/net/wireless/ath/wcn36xx/smd.c
+clean_blob drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+clean_blob drivers/net/wireless/ath/wcn36xx/main.c
+clean_kconfig drivers/net/wireless/ath/wcn36xx/Kconfig WCN36XX
+clean_mk CONFIG_WCN36XX drivers/net/wireless/ath/wcn36xx/Makefile
+
+announce ZD1211RW - "ZyDAS ZD1211/ZD1211B USB-wireless support"
+reject_firmware drivers/net/wireless/zd1211rw/zd_usb.c
+clean_blob drivers/net/wireless/zd1211rw/zd_usb.c
+clean_kconfig drivers/net/wireless/zd1211rw/Kconfig ZD1211RW
+clean_mk CONFIG_ZD1211RW drivers/net/wireless/zd1211rw/Makefile
+
+# bluetooth
+
+announce BT_ATH3K - "Atheros firmware download driver"
+reject_firmware drivers/bluetooth/ath3k.c
+clean_blob drivers/bluetooth/ath3k.c
+clean_kconfig drivers/bluetooth/Kconfig BT_ATH3K
+clean_mk CONFIG_BT_ATH3K drivers/bluetooth/Makefile
+
+announce BT_HCIBCM203X - "HCI BCM203x USB driver"
+reject_firmware drivers/bluetooth/bcm203x.c
+clean_blob drivers/bluetooth/bcm203x.c
+clean_kconfig drivers/bluetooth/Kconfig BT_HCIBCM203X
+clean_mk CONFIG_BT_HCIBCM203X drivers/bluetooth/Makefile
+
+announce BT_HCIBFUSB - "HCI BlueFRITZ! USB driver"
+reject_firmware drivers/bluetooth/bfusb.c
+clean_blob drivers/bluetooth/bfusb.c
+clean_kconfig drivers/bluetooth/Kconfig BT_HCIBFUSB
+clean_mk CONFIG_BT_HCIBFUSB drivers/bluetooth/Makefile
+
+announce BT_HCIBT3C - "HCI BT3C (PC Card) driver"
+reject_firmware drivers/bluetooth/bt3c_cs.c
+clean_blob drivers/bluetooth/bt3c_cs.c
+clean_kconfig drivers/bluetooth/Kconfig BT_HCIBT3C
+clean_mk CONFIG_BT_HCIBT3C drivers/bluetooth/Makefile
+
+announce BT_HCIBTUSB - "HCI USB driver"
+reject_firmware drivers/bluetooth/btusb.c
+clean_blob drivers/bluetooth/btusb.c
+clean_kconfig drivers/bluetooth/Kconfig BT_HCIBTUSB
+clean_mk CONFIG_BT_HCIBTUSB drivers/bluetooth/Makefile
+
+announce BT_MRVL_SDIO - "Marvell BT-over-SDIO driver"
+reject_firmware drivers/bluetooth/btmrvl_sdio.c
+clean_blob drivers/bluetooth/btmrvl_sdio.c
+clean_blob Documentation/btmrvl.txt
+clean_kconfig drivers/bluetooth/Kconfig BT_MRVL_SDIO
+clean_mk CONFIG_BT_MRVL_SDIO drivers/bluetooth/Makefile
+
+announce TI_ST - "Texas Instruments shared transport line discipline"
+reject_firmware drivers/misc/ti-st/st_kim.c
+clean_blob drivers/misc/ti-st/st_kim.c
+clean_kconfig drivers/misc/ti-st/Kconfig TI_ST
+clean_mk CONFIG_TI_ST drivers/misc/ti-st/Makefile
+
+# wimax
+
+announce WIMAX_I2400M - "Intel Wireless WiMAX Connection 2400"
+reject_firmware drivers/net/wimax/i2400m/fw.c
+clean_blob drivers/net/wimax/i2400m/usb.c
+clean_blob Documentation/wimax/README.i2400m
+clean_kconfig drivers/net/wimax/i2400m/Kconfig WIMAX_I2400M
+clean_mk CONFIG_WIMAX_I2400M drivers/net/wimax/i2400m/Makefile
+
+announce WIMAX_GDM72XX_SDIO - "GCT GDM72xx WiMAX support: SDIO interface"
+reject_firmware drivers/staging/gdm72xx/sdio_boot.c
+clean_blob drivers/staging/gdm72xx/sdio_boot.c
+clean_kconfig drivers/staging/gdm72xx/Kconfig WIMAX_GDM72XX_SDIO
+clean_mk CONFIG_WIMAX_GDM72XX_SDIO drivers/staging/gdm72xx/Makefile
+
+announce WIMAX_GDM72XX_USB - "GCT GDM72xx WiMAX support: USB interface"
+reject_firmware drivers/staging/gdm72xx/usb_boot.c
+clean_blob drivers/staging/gdm72xx/usb_boot.c
+clean_kconfig drivers/staging/gdm72xx/Kconfig WIMAX_GDM72XX_USB
+clean_mk CONFIG_WIMAX_GDM72XX_USB drivers/staging/gdm72xx/Makefile
+
+# infiniband
+
+announce INFINIBAND_QIB - "QLogic PCIe HCA support"
+drop_fw_file firmware/qlogic/sd7220.fw.ihex firmware/qlogic/sd7220.fw
+reject_firmware drivers/infiniband/hw/qib/qib_sd7220.c
+clean_blob drivers/infiniband/hw/qib/qib_sd7220.c
+clean_kconfig drivers/infiniband/hw/qib/Kconfig INFINIBAND_QIB
+clean_mk CONFIG_INFINIBAND_QIB drivers/infiniband/hw/qib/Makefile
+
+# CAN
+
+announce CAN_SOFTING - "Softing Gmbh CAN generic support"
+reject_firmware drivers/net/can/softing/softing_fw.c
+clean_kconfig drivers/net/can/softing/Kconfig CAN_SOFTING
+clean_mk CONFIG_CAN_SOFTING drivers/net/can/softing/Makefile
+
+announce CAN_SOFTING_CS - "Softing Gmbh CAN pcmcia cards"
+clean_blob drivers/net/can/softing/softing_cs.c
+clean_blob drivers/net/can/softing/softing_platform.h
+clean_sed '
+/^config CAN_SOFTING_CS$/,${
+ /You need firmware/i\
+ /*(DEBLOBBED)*/
+ /You need firmware/,/softing-fw.*tar\.gz/d
+}' drivers/net/can/softing/Kconfig 'removed firmware notes'
+clean_kconfig drivers/net/can/softing/Kconfig CAN_SOFTING_CS
+clean_mk CONFIG_CAN_SOFTING_CS drivers/net/can/softing/Makefile
+
+########
+# ISDN #
+########
+
+announce ISDN_DIVAS - "Support Eicon DIVA Server cards"
+clean_blob drivers/isdn/hardware/eicon/cardtype.h
+clean_blob drivers/isdn/hardware/eicon/dsp_defs.h
+clean_kconfig drivers/isdn/hardware/eicon/Kconfig ISDN_DIVAS
+clean_mk CONFIG_ISDN_DIVAS drivers/isdn/hardware/eicon/Makefile
+
+announce MISDN_SPEEDFAX - "Support for Sedlbauer Speedfax+"
+reject_firmware drivers/isdn/hardware/mISDN/speedfax.c
+clean_blob drivers/isdn/hardware/mISDN/speedfax.c
+clean_kconfig drivers/isdn/hardware/mISDN/Kconfig MISDN_SPEEDFAX
+clean_mk CONFIG_MISDN_SPEEDFAX drivers/isdn/hardware/mISDN/Makefile
+
+##########
+# Serial #
+##########
+
+announce DGAP - "Digi EPCA PCI products"
+reject_firmware drivers/staging/dgap/dgap.c
+clean_blob drivers/staging/dgap/dgap.c
+clean_kconfig drivers/staging/dgap/Kconfig DGAP
+clean_mk CONFIG_DGAP drivers/staging/dgap/Makefile
+
+announce SERIAL_8250_CS - "8250/16550 PCMCIA device support"
+# These are not software; they're Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/MT5634ZLX.cis.ihex firmware/cis/MT5634ZLX.cis
+drop_fw_file firmware/cis/RS-COM-2P.cis.ihex firmware/cis/RS-COM-2P.cis
+drop_fw_file firmware/cis/COMpad2.cis.ihex firmware/cis/COMpad2.cis
+drop_fw_file firmware/cis/COMpad4.cis.ihex firmware/cis/COMpad4.cis
+# These are not software; they're Free, but GPLed without textual sources.
+# It could be assumed that these binaries *are* sources, since they
+# can be trivially converted back to a textual form, without loss,
+# but we're better off safe than sorry, so remove them from our tree.
+drop_fw_file firmware/cis/SW_555_SER.cis.ihex firmware/cis/SW_555_SER.cis
+drop_fw_file firmware/cis/SW_7xx_SER.cis.ihex firmware/cis/SW_7xx_SER.cis
+drop_fw_file firmware/cis/SW_8xx_SER.cis.ihex firmware/cis/SW_8xx_SER.cis
+# clean_blob drivers/tty/serial/serial_cs.c
+# clean_kconfig drivers/tty/serial/Kconfig 'SERIAL_8250_CS'
+# clean_mk CONFIG_SERIAL_8250_CS drivers/tty/serial/Makefile
+
+announce SERIAL_ICOM - "IBM Multiport Serial Adapter"
+reject_firmware drivers/tty/serial/icom.c
+clean_blob drivers/tty/serial/icom.c
+clean_kconfig drivers/tty/serial/Kconfig SERIAL_ICOM
+clean_mk CONFIG_SERIAL_ICOM drivers/tty/serial/Makefile
+
+announce SERIAL_QE - "Freescale QUICC Engine serial port support"
+reject_firmware drivers/tty/serial/ucc_uart.c
+clean_blob drivers/tty/serial/ucc_uart.c
+clean_kconfig drivers/tty/serial/Kconfig SERIAL_QE
+clean_mk CONFIG_SERIAL_QE drivers/tty/serial/Makefile
+
+announce SERIAL_RP2 - "Comtrol RocketPort EXPRESS/INFINITY support"
+reject_firmware drivers/tty/serial/rp2.c
+clean_blob drivers/tty/serial/rp2.c
+clean_kconfig drivers/tty/serial/Kconfig SERIAL_RP2
+clean_mk CONFIG_SERIAL_RP2 drivers/tty/serial/Makefile
+
+########
+# Leds #
+########
+
+announce LEDS_LP55XX_COMMON - "Common Driver for TI/National LP5521 and LP5523/55231"
+reject_firmware drivers/leds/leds-lp55xx-common.c
+clean_kconfig drivers/leds/Kconfig LEDS_LP55XX_COMMON
+clean_mk CONFIG_LEDS_LP55XX_COMMON drivers/leds/Makefile
+
+announce LEDS_LP5521 - "LED Support for N.S. LP5521 LED driver chip"
+# The blob name is the chip name; no point in deblobbing that.
+# clean_blob drivers/leds/leds-lp5521.c
+clean_kconfig drivers/leds/Kconfig LEDS_LP5521
+clean_mk CONFIG_LEDS_LP5521 drivers/leds/Makefile
+
+announce LEDS_LP5523 - "LED Support for TI/National LP5523/55231 LED driver chip"
+# The blob name is the chip name; no point in deblobbing that.
+# clean_blob drivers/leds/leds-lp5523.c
+clean_kconfig drivers/leds/Kconfig LEDS_LP5523
+clean_mk CONFIG_LEDS_LP5523 drivers/leds/Makefile
+
+#########
+# input #
+#########
+
+announce MOUSE_ELAN_I2C - "ELAN I2C Touchpad support"
+reject_firmware drivers/input/mouse/elan_i2c_core.c
+clean_blob drivers/input/mouse/elan_i2c.h
+clean_kconfig drivers/input/mouse/Kconfig MOUSE_ELAN_I2C
+clean_mk CONFIG_MOUSE_ELAN_I2C drivers/input/mouse/Makefile
+
+announce TOUCHSCREEN_ELAN
+reject_firmware drivers/input/touchscreen/elants_i2c.c
+clean_blob drivers/input/touchscreen/elants_i2c.c
+clean_kconfig drivers/input/touchscreen/Kconfig TOUCHSCREEN_ELAN
+clean_mk CONFIG_TOUCHSCREEN_ELAN drivers/input/touchscreen/Makefile
+
+announce TOUCHSCREEN_ATMEL_MXT - "Atmel mXT I2C Touchscreen"
+reject_firmware drivers/input/touchscreen/atmel_mxt_ts.c
+clean_blob drivers/input/touchscreen/atmel_mxt_ts.c
+clean_kconfig drivers/input/touchscreen/Kconfig TOUCHSCREEN_ATMEL_MXT
+clean_mk CONFIG_TOUCHSCREEN_ATMEL_MXT drivers/input/touchscreen/Makefile
+
+announce LIRC_ZILOG - "Zilog/Hauppauge IR Transmitter"
+reject_firmware drivers/staging/media/lirc/lirc_zilog.c
+clean_blob drivers/staging/media/lirc/lirc_zilog.c
+clean_kconfig drivers/staging/media/lirc/Kconfig LIRC_ZILOG
+clean_mk CONFIG_LIRC_ZILOG drivers/staging/media/lirc/Makefile
+
+announce INPUT_IMS_PCU - "IMS Passenger Control Unit driver"
+reject_firmware drivers/input/misc/ims-pcu.c
+clean_blob drivers/input/misc/ims-pcu.c
+clean_kconfig drivers/input/misc/Kconfig INPUT_IMS_PCU
+clean_mk CONFIG_INPUT_IMS_PCU drivers/input/misc/Makefile
+
+####################
+# Data acquisition #
+####################
+
+announce COMEDI - "Data acquisition support (comedi)"
+maybe_reject_firmware drivers/staging/comedi/drivers.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI
+clean_mk CONFIG_COMEDI drivers/staging/comedi/Makefile
+
+announce COMEDI_DAQBOARD2000 - "IOtech DAQboard/2000 support"
+clean_blob drivers/staging/comedi/drivers/daqboard2000.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI_DAQBOARD2000
+clean_mk CONFIG_COMEDI_DAQBOARD2000 drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_JR3_PCI - "JR3/PCI force sensor board support"
+clean_blob drivers/staging/comedi/drivers/jr3_pci.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI_JR3_PCI
+clean_mk CONFIG_COMEDI_JR3_PCI drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_ME_DAQ - "Meilhaus ME-2000i, ME-2600i, ME-3000vm1 support"
+clean_blob drivers/staging/comedi/drivers/me_daq.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI_ME_DAQ
+clean_mk CONFIG_COMEDI_ME_DAQ drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_ME4000 - "Meilhaus ME-4000 support"
+clean_blob drivers/staging/comedi/drivers/me4000.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI_ME4000
+clean_mk CONFIG_COMEDI_ME4000 drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_NI_PCIDIO - "NI PCI-DIO32HS, PCI-6533, PCI-6534 support"
+clean_blob drivers/staging/comedi/drivers/ni_pcidio.c
+clean_kconfig drivers/staging/comedi/Kconfig COMEDI_NI_PCIDIO
+clean_mk CONFIG_COMEDI_NI_PCIDIO drivers/staging/comedi/drivers/Makefile
+
+
+#######
+# MMC #
+#######
+
+announce MMC_VUB300 - "VUB300 USB to SDIO/SD/MMC Host Controller support"
+clean_sed '
+/^config MMC_VUB300/,/^config /{
+ /Some SDIO cards/i\
+ /*(DEBLOBBED)*/
+ /Some SDIO cards/,/obtainable data rate\.$/d
+}
+' drivers/mmc/host/Kconfig "removed firmware notes"
+reject_firmware drivers/mmc/host/vub300.c
+clean_blob drivers/mmc/host/vub300.c
+clean_kconfig drivers/mmc/host/Kconfig MMC_VUB300
+clean_mk CONFIG_MMC_VUB300 drivers/mmc/host/Makefile
+
+########
+# SCSI #
+########
+
+announce SCSI_QLOGICPTI - "PTI Qlogic, ISP Driver"
+drop_fw_file firmware/qlogic/isp1000.bin.ihex firmware/qlogic/isp1000.bin
+reject_firmware drivers/scsi/qlogicpti.c
+clean_blob drivers/scsi/qlogicpti.c
+clean_kconfig drivers/scsi/Kconfig SCSI_QLOGICPTI
+clean_mk CONFIG_SCSI_QLOGICPTI drivers/scsi/Makefile
+
+announce SCSI_ADVANSYS - "AdvanSys SCSI"
+drop_fw_file firmware/advansys/mcode.bin.ihex firmware/advansys/mcode.bin
+drop_fw_file firmware/advansys/3550.bin.ihex firmware/advansys/3550.bin
+drop_fw_file firmware/advansys/38C0800.bin.ihex firmware/advansys/38C0800.bin
+drop_fw_file firmware/advansys/38C1600.bin.ihex firmware/advansys/38C1600.bin
+reject_firmware drivers/scsi/advansys.c
+clean_blob drivers/scsi/advansys.c
+clean_kconfig drivers/scsi/Kconfig SCSI_ADVANSYS
+clean_mk CONFIG_SCSI_ADVANSYS drivers/scsi/Makefile
+
+announce SCSI_QLOGIC_1280 - "Qlogic QLA 1240/1x80/1x160 SCSI"
+drop_fw_file firmware/qlogic/1040.bin.ihex firmware/qlogic/1040.bin
+drop_fw_file firmware/qlogic/1280.bin.ihex firmware/qlogic/1280.bin
+drop_fw_file firmware/qlogic/12160.bin.ihex firmware/qlogic/12160.bin
+reject_firmware drivers/scsi/qla1280.c
+clean_blob drivers/scsi/qla1280.c
+clean_kconfig drivers/scsi/Kconfig SCSI_QLOGIC_1280
+clean_mk CONFIG_SCSI_QLOGIC_1280 drivers/scsi/Makefile
+
+announce SCSI_AIC94XX - "Adaptec AIC94xx SAS/SATA support"
+reject_firmware drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.h
+clean_kconfig drivers/scsi/aic94xx/Kconfig SCSI_AIC94XX
+clean_mk CONFIG_SCSI_AIC94XX drivers/scsi/aic94xx/Makefile
+
+announce SCSI_BFA_FC - "Brocade BFA Fibre Channel Support"
+reject_firmware drivers/scsi/bfa/bfad.c
+clean_blob drivers/scsi/bfa/bfad.c
+clean_kconfig drivers/scsi/Kconfig SCSI_BFA_FC
+clean_mk CONFIG_SCSI_BFA_FC drivers/scsi/bfa/Makefile
+
+announce SCSI_CHELSIO_FCOE - "Chelsio Communications FCoE support"
+reject_firmware drivers/scsi/csiostor/csio_hw.c
+clean_blob drivers/scsi/csiostor/csio_hw_chip.h
+clean_blob drivers/scsi/csiostor/csio_init.c
+clean_kconfig drivers/scsi/csiostor/Kconfig SCSI_CHELSIO_FCOE
+clean_mk CONFIG_SCSI_CHELSIO_FCOE drivers/scsi/csiostor/Makefile
+
+announce SCSI_LPFC - "Emulex LightPulse Fibre Channel Support"
+# The firmware name is built out of Vital Product Data read from the
+# adapter. The firmware is definitely code, and I couldn't find
+# evidence it is Free, so I'm disabling it. It's not clear whether
+# this is the hardware or the software inducing to the installation of
+# non-Free firmware.
+reject_firmware drivers/scsi/lpfc/lpfc_init.c
+clean_kconfig drivers/scsi/Kconfig SCSI_LPFC
+clean_mk CONFIG_SCSI_LPFC drivers/scsi/lpfc/Makefile
+
+announce SCSI_QLA_FC - "QLogic QLA2XXX Fibre Channel Support"
+reject_firmware drivers/scsi/qla2xxx/qla_os.c
+clean_sed '
+/^config SCSI_QLA_FC$/,/^config /{
+ /^ By default, firmware/i\
+ /*(DEBLOBBED)*/
+ /^ By default, firmware/,/ftp:[/][/].*firmware[/]/d
+}' drivers/scsi/qla2xxx/Kconfig 'removed firmware notes'
+clean_blob drivers/scsi/qla2xxx/qla_os.c
+clean_kconfig drivers/scsi/qla2xxx/Kconfig SCSI_QLA_FC
+clean_mk CONFIG_SCSI_QLA_FC drivers/scsi/qla2xxx/Makefile
+
+announce SCSI_WD719x - "Western Digital WD7193/7197/7296 support"
+reject_firmware drivers/scsi/wd719x.c
+clean_blob drivers/scsi/wd719x.c
+clean_blob Documentation/scsi/wd719x.txt
+clean_kconfig drivers/scsi/Kconfig SCSI_WD719X
+clean_mk CONFIG_SCSI_WD719X drivers/scsi/Makefile
+
+
+#######
+# USB #
+#######
+
+# atm
+
+announce USB_CXACRU - "Conexant AccessRunner USB support"
+reject_firmware drivers/usb/atm/cxacru.c
+clean_blob drivers/usb/atm/cxacru.c
+clean_kconfig drivers/usb/atm/Kconfig USB_CXACRU
+clean_mk CONFIG_USB_CXACRU drivers/usb/atm/Makefile
+
+announce USB_SPEEDTOUCH - "Speedtouch USB support"
+reject_firmware drivers/usb/atm/speedtch.c
+clean_blob drivers/usb/atm/speedtch.c
+clean_kconfig drivers/usb/atm/Kconfig USB_SPEEDTOUCH
+clean_mk CONFIG_USB_SPEEDTOUCH drivers/usb/atm/Makefile
+
+announce USB_UEAGLEATM - "ADI 930 and eagle USB DSL modem"
+reject_firmware drivers/usb/atm/ueagle-atm.c
+clean_blob drivers/usb/atm/ueagle-atm.c
+clean_kconfig drivers/usb/atm/Kconfig USB_UEAGLEATM
+clean_mk CONFIG_USB_UEAGLEATM drivers/usb/atm/Makefile
+
+# host
+
+announce USB_XHCI_RCAR - "xHCI support for Renesas R-Car SoCs"
+reject_firmware drivers/usb/host/xhci-rcar.c
+clean_blob drivers/usb/host/xhci-rcar.c
+clean_kconfig drivers/usb/host/Kconfig USB_XHCI_RCAR
+clean_mk CONFIG_USB_XHCI_RCAR drivers/usb/host/Makefile
+
+# misc
+
+announce USB_EMI26 - "EMI 2|6 USB Audio interface"
+# These files are not under the GPL, better remove them all.
+drop_fw_file firmware/emi26/bitstream.HEX firmware/emi26/bitstream.fw
+drop_fw_file firmware/emi26/firmware.HEX firmware/emi26/firmware.fw
+drop_fw_file firmware/emi26/loader.HEX firmware/emi26/loader.fw
+reject_firmware drivers/usb/misc/emi26.c
+clean_blob drivers/usb/misc/emi26.c
+clean_kconfig drivers/usb/misc/Kconfig USB_EMI26
+clean_mk CONFIG_USB_EMI26 drivers/usb/misc/Makefile
+
+announce USB_EMI62 - "EMI 6|2m USB Audio interface"
+# These files are probably not under the GPL, better remove them all.
+drop_fw_file firmware/emi62/bitstream.HEX firmware/emi62/bitstream.fw
+drop_fw_file firmware/emi62/loader.HEX firmware/emi62/loader.fw
+drop_fw_file firmware/emi62/midi.HEX firmware/emi62/midi.fw
+drop_fw_file firmware/emi62/spdif.HEX firmware/emi62/spdif.fw
+reject_firmware drivers/usb/misc/emi62.c
+clean_blob drivers/usb/misc/emi62.c
+clean_kconfig drivers/usb/misc/Kconfig USB_EMI62
+clean_mk CONFIG_USB_EMI62 drivers/usb/misc/Makefile
+
+announce USB_EZUSB_FX2 - "Functions for loading firmware on EZUSB chips"
+maybe_reject_firmware drivers/usb/misc/ezusb.c
+
+announce USB_ISIGHTFW - "iSight firmware loading support"
+reject_firmware drivers/usb/misc/isight_firmware.c
+clean_blob drivers/usb/misc/isight_firmware.c
+clean_kconfig drivers/usb/misc/Kconfig USB_ISIGHTFW
+clean_mk CONFIG_USB_ISIGHTFW drivers/usb/misc/Makefile
+
+# storage
+
+announce USB_STORAGE_ENE_UB6250 - "USB ENE card reader support"
+reject_firmware drivers/usb/storage/ene_ub6250.c
+clean_blob drivers/usb/storage/ene_ub6250.c
+clean_kconfig drivers/usb/storage/Kconfig USB_STORAGE_ENE_UB6250
+clean_mk CONFIG_USB_STORAGE_ENE_UB6250 drivers/usb/storage/Makefile
+
+# serial
+
+announce USB_SERIAL_KEYSPAN - "USB Keyspan USA-xxx Serial Driver"
+drop_fw_file firmware/keyspan/mpr.HEX firmware/keyspan/mpr.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_MPR
+drop_fw_file firmware/keyspan/usa18x.HEX firmware/keyspan/usa18x.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA18X
+drop_fw_file firmware/keyspan/usa19.HEX firmware/keyspan/usa19.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA19
+drop_fw_file firmware/keyspan/usa19qi.HEX firmware/keyspan/usa19qi.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA19QI
+drop_fw_file firmware/keyspan/usa19qw.HEX firmware/keyspan/usa19qw.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA19QW
+drop_fw_file firmware/keyspan/usa19w.HEX firmware/keyspan/usa19w.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA19W
+drop_fw_file firmware/keyspan/usa28.HEX firmware/keyspan/usa28.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA28
+drop_fw_file firmware/keyspan/usa28xa.HEX firmware/keyspan/usa28xa.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA28XA
+drop_fw_file firmware/keyspan/usa28xb.HEX firmware/keyspan/usa28xb.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA28XB
+drop_fw_file firmware/keyspan/usa28x.HEX firmware/keyspan/usa28x.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA28X
+drop_fw_file firmware/keyspan/usa49w.HEX firmware/keyspan/usa49w.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA49W
+drop_fw_file firmware/keyspan/usa49wlc.HEX firmware/keyspan/usa49wlc.fw
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN_USA49WLC
+clean_blob drivers/usb/serial/keyspan.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_KEYSPAN
+clean_mk CONFIG_USB_SERIAL_KEYSPAN drivers/usb/serial/Makefile
+
+announce USB_SERIAL_EDGEPORT - "USB Inside Out Edgeport Serial Driver"
+clean_fw firmware/edgeport/boot.H16 firmware/edgeport/boot.fw
+clean_fw firmware/edgeport/boot2.H16 firmware/edgeport/boot2.fw
+clean_fw firmware/edgeport/down.H16 firmware/edgeport/down.fw
+clean_fw firmware/edgeport/down2.H16 firmware/edgeport/down2.fw
+reject_firmware drivers/usb/serial/io_edgeport.c
+clean_blob drivers/usb/serial/io_edgeport.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_EDGEPORT
+clean_mk CONFIG_USB_SERIAL_EDGEPORT drivers/usb/serial/Makefile
+
+announce USB_SERIAL_EDGEPORT_TI - "USB Inside Out Edgeport Serial Driver (TI devices)"
+clean_fw firmware/edgeport/down3.bin.ihex firmware/edgeport/down3.bin
+reject_firmware drivers/usb/serial/io_ti.c
+clean_blob drivers/usb/serial/io_ti.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_EDGEPORT_TI
+clean_mk CONFIG_USB_SERIAL_EDGEPORT_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_MXUPORT - "USB Moxa UPORT Serial Driver"
+reject_firmware drivers/usb/serial/mxuport.c
+clean_blob drivers/usb/serial/mxuport.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_MXUPORT
+clean_mk CONFIG_USB_SERIAL_MXUPORT drivers/usb/serial/Makefile
+
+announce USB_SERIAL_TI - "USB TI 3410/5052 Serial Driver"
+drop_fw_file firmware/ti_3410.fw.ihex firmware/ti_3410.fw
+drop_fw_file firmware/ti_5052.fw.ihex firmware/ti_5052.fw
+drop_fw_file firmware/mts_cdma.fw.ihex firmware/mts_cdma.fw
+drop_fw_file firmware/mts_gsm.fw.ihex firmware/mts_gsm.fw
+drop_fw_file firmware/mts_edge.fw.ihex firmware/mts_edge.fw
+reject_firmware drivers/usb/serial/ti_usb_3410_5052.c
+clean_blob drivers/usb/serial/ti_usb_3410_5052.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_TI
+clean_mk CONFIG_USB_SERIAL_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_WHITEHEAT - "USB ConnectTech WhiteHEAT Serial Driver"
+clean_fw firmware/whiteheat.HEX firmware/whiteheat.fw
+clean_fw firmware/whiteheat_loader.HEX firmware/whiteheat_loader.fw
+clean_fw firmware/whiteheat_loader_debug.HEX firmware/whiteheat_loader_debug.fw
+clean_blob drivers/usb/serial/whiteheat.c
+clean_kconfig drivers/usb/serial/Kconfig USB_SERIAL_WHITEHEAT
+clean_mk CONFIG_USB_SERIAL_WHITEHEAT drivers/usb/serial/Makefile
+
+# uwb
+
+announce UWB_I1480U - Support for Intel Wireless UWB Link 1480 HWA
+reject_firmware drivers/uwb/i1480/dfu/i1480-dfu.h
+reject_firmware drivers/uwb/i1480/dfu/mac.c
+reject_firmware drivers/uwb/i1480/dfu/phy.c
+clean_blob drivers/uwb/i1480/dfu/usb.c
+clean_kconfig drivers/uwb/Kconfig UWB_I1480U
+clean_mk CONFIG_UWB_I1480U drivers/uwb/i1480/dfu/Makefile
+
+
+
+################
+# Programmable #
+################
+
+announce LATTICE_ECP3_CONFIG - "Lattice ECP3 FPGA bitstrap configuration via SPI"
+reject_firmware drivers/misc/lattice-ecp3-config.c
+clean_blob drivers/misc/lattice-ecp3-config.c
+clean_kconfig drivers/misc/Kconfig LATTICE_ECP3_CONFIG
+clean_mk CONFIG_LATTICE_ECP3_CONFIG drivers/misc/Makefile
+
+announce STE_MODEM_RPROC - "STE-Modem remoteproc support"
+maybe_reject_firmware drivers/remoteproc/remoteproc_core.c
+undefine_macro SPROC_MODEM_FIRMWARE "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" drivers/remoteproc/ste_modem_rproc.c
+clean_kconfig drivers/remoteproc/Kconfig STE_MODEM_RPROC
+clean_mk CONFIG_STE_MODEM_RPROC drivers/remoteproc/Makefile
+
+
+#########
+# Sound #
+#########
+
+announce SND_ASIHPI - "AudioScience ASIxxxx"
+reject_firmware sound/pci/asihpi/hpidspcd.c
+clean_blob sound/pci/asihpi/hpidspcd.c
+clean_blob sound/pci/asihpi/hpioctl.c
+clean_kconfig sound/pci/Kconfig SND_ASIHPI
+clean_mk CONFIG_SND_ASIHPI sound/pci/asihpi/Makefile
+
+announce SND_CS46XX - "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
+reject_firmware sound/pci/cs46xx/cs46xx_lib.c
+clean_blob sound/pci/cs46xx/cs46xx_lib.c
+clean_kconfig sound/pci/Kconfig SND_CS46XX
+clean_mk CONFIG_SND_CS46XX sound/pci/cs46xx/Makefile
+
+announce SND_KORG1212 - "Korg 1212 IO"
+drop_fw_file firmware/korg/k1212.dsp.ihex firmware/korg/k1212.dsp
+reject_firmware sound/pci/korg1212/korg1212.c
+clean_blob sound/pci/korg1212/korg1212.c
+clean_kconfig sound/pci/Kconfig SND_KORG1212
+clean_mk CONFIG_SND_KORG1212 sound/pci/korg1212/Makefile
+
+announce SND_MAESTRO3 - "ESS Allegro/Maestro3"
+drop_fw_file firmware/ess/maestro3_assp_kernel.fw.ihex firmware/ess/maestro3_assp_kernel.fw
+drop_fw_file firmware/ess/maestro3_assp_minisrc.fw.ihex firmware/ess/maestro3_assp_minisrc.fw
+reject_firmware sound/pci/maestro3.c
+clean_blob sound/pci/maestro3.c
+clean_kconfig sound/pci/Kconfig SND_MAESTRO3
+clean_mk CONFIG_SND_MAESTRO3 sound/pci/Makefile
+
+announce SND_YMFPCI - "Yamaha YMF724/740/744/754"
+drop_fw_file firmware/yamaha/ds1_ctrl.fw.ihex firmware/yamaha/ds1_ctrl.fw
+drop_fw_file firmware/yamaha/ds1_dsp.fw.ihex firmware/yamaha/ds1_dsp.fw
+drop_fw_file firmware/yamaha/ds1e_ctrl.fw.ihex firmware/yamaha/ds1e_ctrl.fw
+reject_firmware sound/pci/ymfpci/ymfpci_main.c
+clean_blob sound/pci/ymfpci/ymfpci_main.c
+clean_kconfig sound/pci/Kconfig SND_YMFPCI
+clean_mk CONFIG_SND_YMFPCI sound/pci/ymfpci/Makefile
+
+announce SND_SB16_CSP - "SB16 Advanced Signal Processor"
+drop_fw_file firmware/sb16/alaw_main.csp.ihex firmware/sb16/alaw_main.csp
+drop_fw_file firmware/sb16/mulaw_main.csp.ihex firmware/sb16/mulaw_main.csp
+drop_fw_file firmware/sb16/ima_adpcm_init.csp.ihex firmware/sb16/ima_adpcm_init.csp
+drop_fw_file firmware/sb16/ima_adpcm_capture.csp.ihex firmware/sb16/ima_adpcm_capture.csp
+drop_fw_file firmware/sb16/ima_adpcm_playback.csp.ihex firmware/sb16/ima_adpcm_playback.csp
+reject_firmware sound/isa/sb/sb16_csp.c
+clean_blob sound/isa/sb/sb16_csp.c
+clean_kconfig sound/isa/Kconfig SND_SB16_CSP
+clean_mk CONFIG_SND_SB16_CSP sound/isa/sb/Makefile
+
+announce SND_WAVEFRONT - "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
+drop_fw_file firmware/yamaha/yss225_registers.bin.ihex firmware/yamaha/yss225_registers.bin
+reject_firmware sound/isa/wavefront/wavefront_fx.c
+clean_blob sound/isa/wavefront/wavefront_fx.c
+reject_firmware sound/isa/wavefront/wavefront_synth.c
+clean_blob sound/isa/wavefront/wavefront_synth.c
+clean_kconfig sound/isa/Kconfig SND_WAVEFRONT
+clean_mk CONFIG_SND_WAVEFRONT sound/isa/wavefront/Makefile
+
+announce SND_VX_LIB - Digigram VX soundcards
+reject_firmware sound/drivers/vx/vx_hwdep.c
+clean_blob sound/drivers/vx/vx_hwdep.c
+clean_kconfig sound/drivers/Kconfig SND_VX_LIB
+clean_mk CONFIG_SND_VX_LIB sound/drivers/vx/Makefile
+
+announce SND_DARLA20 - "(Echoaudio) Darla20"
+clean_blob sound/pci/echoaudio/darla20.c
+clean_kconfig sound/pci/Kconfig SND_DARLA20
+clean_mk CONFIG_SND_DARLA20 sound/pci/echoaudio/Makefile
+
+announce SND_DARLA24 - "(Echoaudio) Darla24"
+clean_blob sound/pci/echoaudio/darla24.c
+clean_kconfig sound/pci/Kconfig SND_DARLA24
+clean_mk CONFIG_SND_DARLA24 sound/pci/echoaudio/Makefile
+
+announce SND_ECHO3G - "(Echoaudio) 3G cards"
+clean_blob sound/pci/echoaudio/echo3g.c
+clean_kconfig sound/pci/Kconfig SND_ECHO3G
+clean_mk CONFIG_SND_ECHO3G sound/pci/echoaudio/Makefile
+
+announce SND_GINA20 - "(Echoaudio) Gina20"
+clean_blob sound/pci/echoaudio/gina20.c
+clean_kconfig sound/pci/Kconfig SND_GINA20
+clean_mk CONFIG_SND_GINA20 sound/pci/echoaudio/Makefile
+
+announce SND_GINA24 - "(Echoaudio) Gina24"
+clean_blob sound/pci/echoaudio/gina24.c
+clean_kconfig sound/pci/Kconfig SND_GINA24
+clean_mk CONFIG_SND_GINA24 sound/pci/echoaudio/Makefile
+
+announce SND_INDIGO - "(Echoaudio) Indigo"
+clean_blob sound/pci/echoaudio/indigo.c
+clean_kconfig sound/pci/Kconfig SND_INDIGO
+clean_mk CONFIG_SND_INDIGO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJ - "(Echoaudio) Indigo DJ"
+clean_blob sound/pci/echoaudio/indigodj.c
+clean_kconfig sound/pci/Kconfig SND_INDIGODJ
+clean_mk CONFIG_SND_INDIGODJ sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJX - "(Echoaudio) Indigo DJx"
+clean_blob sound/pci/echoaudio/indigodjx.c
+clean_kconfig sound/pci/Kconfig SND_INDIGODJX
+clean_mk CONFIG_SND_INDIGODJX sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIO - "(Echoaudio) Indigo IO"
+clean_blob sound/pci/echoaudio/indigoio.c
+clean_kconfig sound/pci/Kconfig SND_INDIGOIO
+clean_mk CONFIG_SND_INDIGOIO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIOX - "(Echoaudio) Indigo IOx"
+clean_blob sound/pci/echoaudio/indigoiox.c
+clean_kconfig sound/pci/Kconfig SND_INDIGOIOX
+clean_mk CONFIG_SND_INDIGOIOX sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA20 - "(Echoaudio) Layla20"
+clean_blob sound/pci/echoaudio/layla20.c
+clean_kconfig sound/pci/Kconfig SND_LAYLA20
+clean_mk CONFIG_SND_LAYLA20 sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA24 - "(Echoaudio) Layla24"
+clean_blob sound/pci/echoaudio/layla24.c
+clean_kconfig sound/pci/Kconfig SND_LAYLA24
+clean_mk CONFIG_SND_LAYLA24 sound/pci/echoaudio/Makefile
+
+announce SND_MIA - "(Echoaudio) Mia"
+clean_blob sound/pci/echoaudio/mia.c
+clean_kconfig sound/pci/Kconfig SND_MIA
+clean_mk CONFIG_SND_MIA sound/pci/echoaudio/Makefile
+
+announce SND_MONA - "(Echoaudio) Mona"
+clean_blob sound/pci/echoaudio/mona.c
+clean_kconfig sound/pci/Kconfig SND_MONA
+clean_mk CONFIG_SND_MONA sound/pci/echoaudio/Makefile
+
+announce SND_'<(Echoaudio)>' - "(Echoaudio) all of the above "
+reject_firmware sound/pci/echoaudio/echoaudio.c
+clean_blob sound/pci/echoaudio/echoaudio.c
+
+announce SND_EMU10K1 - "Emu10k1 (SB Live!, Audigy, E-mu APS)"
+reject_firmware sound/pci/emu10k1/emu10k1_main.c
+clean_blob sound/pci/emu10k1/emu10k1_main.c
+clean_kconfig sound/pci/Kconfig SND_EMU10K1
+clean_mk CONFIG_SND_EMU10K1 sound/pci/emu10k1/Makefile
+
+announce SND_MIXART - "Digigram miXart"
+reject_firmware sound/pci/mixart/mixart_hwdep.c
+clean_blob sound/pci/mixart/mixart_hwdep.c
+clean_kconfig sound/pci/Kconfig SND_MIXART
+clean_mk CONFIG_SND_MIXART sound/pci/mixart/Makefile
+
+announce SND_PCXHR - "Digigram PCXHR"
+reject_firmware sound/pci/pcxhr/pcxhr_hwdep.c
+clean_blob sound/pci/pcxhr/pcxhr_hwdep.c
+clean_kconfig sound/pci/Kconfig SND_PCXHR
+clean_mk CONFIG_SND_PCXHR sound/pci/pcxhr/Makefile
+
+announce SND_RIPTIDE - "Conexant Riptide"
+reject_firmware sound/pci/riptide/riptide.c
+clean_blob sound/pci/riptide/riptide.c
+clean_kconfig sound/pci/Kconfig SND_RIPTIDE
+clean_mk CONFIG_SND_RIPTIDE sound/pci/riptide/Makefile
+
+# This is ok, patch filenames are supplied as module parameters, and
+# they are text files with patch instructions.
+#announce SND_HDA_PATCH_LOADER - "Support initialization patch loading for HD-audio"
+#reject_firmware sound/pci/hda/hda_hwdep.c
+#clean_kconfig sound/pci/hda/Kconfig 'SND_HDA_PATCH_LOADER'
+
+announce SND_HDA_CODEC_CA0132_DSP - "Support new DSP code for CA0132 codec"
+reject_firmware sound/pci/hda/patch_ca0132.c
+clean_blob sound/pci/hda/patch_ca0132.c
+clean_sed '
+/^config SND_HDA_CODEC_CA0132_DSP$/, /^config / {
+ s,(ctefx.bin),(/*(DEBLOBBED)*/),;
+}' sound/pci/hda/Kconfig 'removed blob name'
+clean_kconfig sound/pci/hda/Kconfig SND_HDA_CODEC_CA0132_DSP
+# There are no separate source files or Makefile entries for the _DSP option.
+clean_mk CONFIG_SND_HDA_CODEC_CA0132 sound/pci/hda/Makefile
+
+announce SND_HDSP - "RME Hammerfall DSP Audio"
+reject_firmware sound/pci/rme9652/hdsp.c
+clean_blob sound/pci/rme9652/hdsp.c
+clean_kconfig sound/pci/Kconfig SND_HDSP
+clean_mk CONFIG_SND_HDSP sound/pci/rme9652/Makefile
+
+announce SND_AICA - "Dreamcast Yamaha AICA sound"
+reject_firmware sound/sh/aica.c
+clean_blob sound/sh/aica.c
+clean_kconfig sound/sh/Kconfig SND_AICA
+clean_mk CONFIG_SND_AICA sound/sh/Makefile
+
+announce SND_MSND_PINNACLE - "Support for Turtle Beach MultiSound Pinnacle"
+clean_blob sound/isa/msnd/msnd_pinnacle.h
+reject_firmware sound/isa/msnd/msnd_pinnacle.c
+clean_blob sound/isa/msnd/msnd_pinnacle.c
+clean_kconfig sound/isa/Kconfig SND_MSND_PINNACLE
+clean_mk CONFIG_SND_MSND_PINNACLE sound/isa/msnd/Makefile
+
+announce SND_MSND_CLASSIC - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey"
+clean_blob sound/isa/msnd/msnd_classic.h
+clean_kconfig sound/isa/Kconfig SND_MSND_CLASSIC
+clean_mk CONFIG_SND_MSND_CLASSIC sound/isa/msnd/Makefile
+
+announce SOUND_MSNDCLAS - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey (oss)"
+clean_blob sound/oss/msnd_classic.h
+clean_kconfig sound/oss/Kconfig SOUND_MSNDCLAS
+clean_sed '
+/^config MSNDCLAS_INIT_FILE$/, /^config / {
+ /^ default.*msndinit\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDCLAS_PERM_FILE$/, /^config / {
+ /^ default.*msndperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDCLAS sound/oss/Makefile
+
+announce SOUND_MSNDPIN - "Support for Turtle Beach MultiSound Pinnacle (oss)"
+clean_blob sound/oss/msnd_pinnacle.h
+clean_kconfig sound/oss/Kconfig SOUND_MSNDPIN
+clean_sed '
+/^config MSNDPIN_INIT_FILE$/, /^config / {
+ /^ default.*pndspini\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDPIN_PERM_FILE$/, /^config / {
+ /^ default.*pndsperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDPIN sound/oss/Makefile
+
+announce SND_SSCAPE - "Ensoniq SoundScape driver"
+reject_firmware sound/isa/sscape.c
+clean_blob sound/isa/sscape.c
+clean_sed '
+/^config SND_SSCAPE$/, /^config / {
+ s,"\(scope\|sndscape\)\.co[d?]","/*(DEBLOBBED)*/",g;
+}' sound/isa/Kconfig 'removed firmware names'
+clean_kconfig sound/isa/Kconfig SND_SSCAPE
+clean_mk CONFIG_SND_SSCAPE sound/isa/Makefile
+
+announce SND_SOC_ADAU1701 - "ADAU1701 SigmaDSP processor"
+clean_blob sound/soc/codecs/adau1701.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_ADAU1701
+clean_mk CONFIG_SND_SOC_ADAU1701 sound/soc/codecs/Makefile
+
+announce SND_SOC_ADAU1761 - "ADAU1761 SigmaDSP processor"
+clean_blob sound/soc/codecs/adau1761.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_ADAU1761
+clean_mk CONFIG_SND_SOC_ADAU1761 sound/soc/codecs/Makefile
+
+announce SND_SOC_ADAU1781 - "ADAU1781 SigmaDSP processor"
+clean_blob sound/soc/codecs/adau1781.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_ADAU1781
+clean_mk CONFIG_SND_SOC_ADAU1781 sound/soc/codecs/Makefile
+
+announce SND_SOC_RT5677 - "RT5677 SoC"
+reject_firmware sound/soc/codecs/rt5677.c
+clean_blob sound/soc/codecs/rt5677.h
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_RT5677
+clean_mk CONFIG_SND_SOC_RT5677 sound/soc/codecs/Makefile
+
+announce SND_SOC_SIGMADSP - "SigmaStudio firmware loader"
+maybe_reject_firmware sound/soc/codecs/sigmadsp.c
+
+announce SND_SOC_INTEL_SST_ACPI - "Intel SST (LPE) Driver"
+reject_firmware sound/soc/intel/sst-acpi.c
+clean_blob sound/soc/intel/sst-acpi.c
+clean_kconfig sound/soc/intel/Kconfig SND_SOC_INTEL_SST_ACPI
+clean_mk CONFIG_SND_SOC_INTEL_SST_ACPI sound/soc/intel/Makefile
+
+announce SND_SST_IPC - undocumented
+reject_firmware sound/soc/intel/sst/sst.c
+reject_firmware sound/soc/intel/sst/sst_loader.c
+clean_kconfig sound/soc/intel/Kconfig SND_SST_IPC
+clean_mk CONFIG_SND_SST_IPC sound/soc/intel/sst/Makefile
+
+announce SND_SST_IPC_ACPI - undocumented
+clean_blob sound/soc/intel/sst/sst_acpi.c
+clean_kconfig sound/soc/intel/Kconfig SND_SST_IPC_ACPI
+clean_mk CONFIG_SND_SST_IPC_ACPI sound/soc/intel/sst/Makefile
+
+announce SND_SST_IPC_PCI - undocumented
+clean_blob sound/soc/intel/sst/sst_pci.c
+clean_kconfig sound/soc/intel/Kconfig SND_SST_IPC_PCI
+clean_mk CONFIG_SND_SST_IPC_PCI sound/soc/intel/sst/Makefile
+
+announce SND_SOC_WM0010 - "WM0010 DSP driver"
+reject_firmware sound/soc/codecs/wm0010.c
+clean_blob sound/soc/codecs/wm0010.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_WM0010
+clean_mk CONFIG_SND_SOC_WM0010 sound/soc/codecs/Makefile
+
+# It's not clear that wm2000_anc.bin is pure data.
+# Check with developer, clean up for now.
+announce SND_SOC_WM2000 - "WM2000 ALSA Soc Audio codecs"
+reject_firmware sound/soc/codecs/wm2000.c
+clean_blob sound/soc/codecs/wm2000.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_WM2000
+clean_mk CONFIG_SND_SOC_WM2000 sound/soc/codecs/Makefile
+
+announce SND_SOC_WM8994 - "WM8994 ALSA Soc Audio codecs"
+reject_firmware sound/soc/codecs/wm8958-dsp2.c
+clean_blob sound/soc/codecs/wm8958-dsp2.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_WM8994
+clean_mk CONFIG_SND_SOC_WM8994 sound/soc/codecs/Makefile
+
+# The coeff files might be pure data, but the wmfw surely aren't.
+announce SND_SOC_WM_ADSP - "Wolfson ADSP support"
+reject_firmware sound/soc/codecs/wm_adsp.c
+clean_blob sound/soc/codecs/wm_adsp.c
+clean_kconfig sound/soc/codecs/Kconfig SND_SOC_WM_ADSP
+clean_mk CONFIG_SND_SOC_WM_ADSP sound/soc/codecs/Makefile
+
+announce SND_SOC_SH4_SIU - "ALSA SoC driver for Renesas SH7343, SH7722 SIU peripheral"
+reject_firmware sound/soc/sh/siu_dai.c
+clean_blob sound/soc/sh/siu_dai.c
+clean_kconfig sound/soc/sh/Kconfig SND_SOC_SH4_SIU
+clean_mk CONFIG_SND_SOC_SH4_SIU sound/soc/sh/Makefile
+
+announce SOUND_TRIX - "MediaTrix AudioTrix Pro support"
+clean_blob sound/oss/trix.c
+clean_kconfig sound/oss/Kconfig SOUND_TRIX
+clean_sed '
+/^config TRIX_BOOT_FILE$/, /^config / {
+ /^ default.*trxpro\.hex/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_TRIX sound/oss/Makefile
+
+announce SOUND_TRIX - "See above,"
+announce SOUND_PAS - "ProAudioSpectrum 16 support,"
+announce SOUND_SB - "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
+clean_blob sound/oss/sb_common.c
+clean_kconfig sound/oss/Kconfig SOUND_PAS
+clean_kconfig sound/oss/Kconfig SOUND_SB
+clean_mk CONFIG_SOUND_PAS sound/oss/Makefile
+clean_mk CONFIG_SOUND_SB sound/oss/Makefile
+
+announce SOUND_PSS - "PSS (AD1848, ADSP-2115, ESC614) support"
+clean_sed 's,^\( [*] .*synth"\)\.$,\1/*.,' sound/oss/pss.c 'avoid nested comments'
+clean_blob sound/oss/pss.c
+clean_kconfig sound/oss/Kconfig SOUND_PSS
+clean_sed '
+/^config PSS_BOOT_FILE$/, /^config / {
+ /^ default.*dsp001\.ld/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_PSS sound/oss/Makefile
+
+announce SND_USB_6FIRE - "TerraTec DMX 6Fire USB"
+reject_firmware sound/usb/6fire/firmware.c
+clean_blob sound/usb/6fire/firmware.c
+clean_kconfig sound/usb/Kconfig SND_USB_6FIRE
+clean_mk CONFIG_SND_USB_6FIRE sound/usb/6fire/Makefile
+
+#######
+# SOC #
+#######
+
+announce KEYSTONE_NAVIGATOR_QMSS - "Keystone Queue Manager Sub System"
+reject_firmware drivers/soc/ti/knav_qmss_queue.c
+clean_blob Documentation/devicetree/bindings/soc/ti/keystone-navigator-qmss.txt
+clean_kconfig drivers/soc/ti/Kconfig KEYSTONE_NAVIGATOR_QMSS
+clean_mk CONFIG_KEYSTONE_NAVIGATOR_QMSS drivers/soc/ti/Makefile
+
+#################
+# Documentation #
+#################
+
+announce Documentation - "non-Free firmware scripts and documentation"
+clean_blob Documentation/dvb/avermedia.txt
+clean_blob Documentation/dvb/opera-firmware.txt
+clean_blob Documentation/sound/alsa/ALSA-Configuration.txt
+clean_blob Documentation/sound/oss/MultiSound
+clean_blob Documentation/sound/oss/PSS
+clean_blob Documentation/sound/oss/PSS-updates
+clean_blob Documentation/sound/oss/README.OSS
+clean_file Documentation/dvb/get_dvb_firmware
+clean_file Documentation/video4linux/extract_xc3028.pl
+clean_sed s,usb8388,whatever,g drivers/base/Kconfig 'removed blob name'
+clean_blob firmware/README.AddingFirmware
+clean_blob firmware/WHENCE
+
+if $errors; then
+ echo errors above were ignored because of --force >&2
+fi
+
+exit 0
diff --git a/freed-ora/current/master/deblob-check b/freed-ora/current/master/deblob-check
index bbe223e12..40828e254 100755
--- a/freed-ora/current/master/deblob-check
+++ b/freed-ora/current/master/deblob-check
@@ -1,13 +1,13 @@
#! /bin/sh
-# deblob-check version 2014-12-07
+# deblob-check version 2015-02-01
# Inspired in gNewSense's find-firmware script.
# Written by Alexandre Oliva <lxoliva@fsfla.org>
# Check http://www.fsfla.org/svn/fsfla/software/linux-libre for newer
# versions.
-# Copyright 2008-2014 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright 2008-2015 Alexandre Oliva <lxoliva@fsfla.org>
#
# This program is part of GNU Linux-libre, a GNU project that
# publishes scripts to clean up Linux so as to make it suitable for
@@ -3969,6 +3969,55 @@ set_except () {
accept '[\t][\t]dev_err[(][&]dev->dev[,][ ]["]%d[,][ ]request_firmware[ ]failed' sound/pci/asihpi/hpidspcd.c
accept 'static[ ]int[ ]snd_ymfpci_request_firmware[(]' sound/pci/ymfpci/ymfpci_main.c
accept '[\t]err[ ]=[ ]snd_ymfpci_request_firmware[(]' sound/pci/ymfpci/ymfpci_main.c
+ # New in 3.19
+ blobname 'a420_p\(m4\|fp\)\.fw' drivers/gpu/drm/msm/adreno/adreno_device.c
+ defsnc 'static[ ]const[ ]unsigned[ ]int[ ]a4xx_registers\[\][ ]=' drivers/gpu/drm/msm/adreno/a4xx_gpu.c
+ defsnc 'static[ ]const[ ]u32[ ]gen9_null_state_batch\[\][ ]=' drivers/gpu/drm/i915/intel_renderstate_gen9.c
+ defsnc 'nv50_disp_\(core_mthd_head\|base_mthd_base\)[ ]=[ ][{]\([\n][ \t]*\.\(mthd\|addr\)[ ]=[ ]0x00*\([04]0\|54\)0[,]\)*[\n][ \t]*\.data[ ]=' drivers/gpu/drm/nouveau/core/engine/disp/nv50.c
+ defsnc 'nv84_disp_\(core_mthd_head\|base_mthd_base\)[ ]=[ ][{]\([\n][ \t]*\.\(mthd\|addr\)[ ]=[ ]0x00*\([04]0\|54\)0[,]\)*[\n][ \t]*\.data[ ]=' drivers/gpu/drm/nouveau/core/engine/disp/nv84.c
+ defsnc 'nvd0_disp_\(core_mthd_head\|base_mthd_base\)[ ]=[ ][{]\([\n][ \t]*\.\(mthd\|addr\)[ ]=[ ]0x00*\(300\)\?[,]\)*[\n][ \t]*\.data[ ]=' drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
+ defsnc 'nve0_disp_\(core_mthd_head\|base_mthd_base\)[ ]=[ ][{]\([\n][ \t]*\.\(mthd\|addr\)[ ]=[ ]0x00*300[,]\)*[\n][ \t]*\.data[ ]=' drivers/gpu/drm/nouveau/core/engine/disp/nve0.c
+ # This reads from user-supplied filenames.
+ accept 'shadow_fw_init[(]struct[ ]nouveau_bios[ ][*]bios[,][ ]const[ ]char[ ][*]name[)][\n][{][\n]\(\([^}\n][^\n]*\)\?[\n]\)*[\t]int[ ]ret[ ]=[ ]request_firmware[(][&]fw[,][ ]name[,][ ]dev[)][;]' drivers/gpu/drm/nouveau/core/subdev/bios/shadow.c
+ defsnc 'static[ ]const[ ]u32[ ]coef_lut_\(a_legacy\|b\|[cdef]_[yc]_legacy\)\[NB_COEF\][ ]=' drivers/gpu/drm/sti/sti_hqvdp_lut.h
+ blobname 'hqvdp-stih407\.bin' drivers/gpu/drm/sti/sti_hqvdp.c
+ defsnc '[\t]static[ ]const[ ]union[ ]sixaxis_output_report_01[ ]default_report[ ]=' drivers/hid/hid-sony.c
+ blobname 'elan_i2c\.bin' drivers/input/mouse/elan_i2c_core.c
+ blobname 'elants_i2c\.bin' drivers/input/touchscreen/elants_i2c.c
+ defsnc '[}][ ]QAM256_mod_tab_zv_mode\[\][ ]=' drivers/media/dvb-frontends/au8522_dig.c
+ blobname 'dvb-demod-m88rs6000\.fw' drivers/media/dvb-frontends/m88ds3103_priv.h
+ defsnc 'static[ ]const[ ]struct[ ]m88ds3103_reg_val[ ]m88rs6000_dvbs2\?_init_reg_vals\[\][ ]=' drivers/media/dvb-frontends/m88ds3103_priv.h
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]\(luma\|chroma\)_ac_value\[162[ ][+][ ]2\][ ]=' drivers/media/platform/coda/coda-jpeg.c
+ defsnc 'static[ ]unsigned[ ]char[ ]\(luma\|chroma\)_q\[64\][ ]=' drivers/media/platform/coda/coda-jpeg.c
+ defsnc 'static[ ]const[ ]struct[ ]vin_coeff[ ]vin_coeff_set\[\][ ]=' drivers/media/platform/soc_camera/rcar_vin.c
+ defsnc 'const[ ]unsigned[ ]short[ ]tpg_\(rec709_to_linear\|linear_to_rec709\)\[255[ ][*][ ]16[ ][+][ ]1\][ ]=' drivers/media/platform/vivid/vivid-tpg-colors.c
+ defsnc '[\t]static[ ]const[ ]struct[ ]m88rs6000t_reg_val[ ]reg_vals\[\][ ]=' drivers/media/tuners/m88rs6000t.c
+ blobna '[/][*][ ]cal-<bus>-<id>\.bin[ ][*][/]' drivers/net/wireless/ath/ath10k/core.c
+ blobname 'cal-%s-%s\.bin' drivers/net/wireless/ath/ath10k/core.c
+ defsnc 'static[ ]const[ ]u32[ ]qca953x_2p0_\(common_wo_xlna_rx\|modes_\(no_\)\?xpa_tx\)_gain_table\[\]\[2\][ ]=' drivers/net/wireless/ath/ath9k/ar953x_initvals.h
+ blobname 'mrvl[/]usb8766_uapsta\.bin' drivers/net/wireless/mwifiex/usb.h
+ defsc 'static[ ]const[ ]unsigned[ ]char[ ]opcode_ind_arr\[256\][ ]=' drivers/scsi/scsi_debug.c
+ defsnc 'static[ ]const[ ]struct[ ]quark_spi_rate[ ]quark_spi_rate_table\[\][ ]=' drivers/spi/spi-pxa2xx.c
+ blobname 'me4000_firmware\.bin' drivers/staging/comedi/drivers/me4000.c
+ defsnc '[\t]u8[ ]ConnectionMsg\[\][ ]=' drivers/staging/ft1000/ft1000-usb/ft1000_debug.c
+ accept '[\t]pr_info[(]["]load[ ]fpgaimage[ ]%s[\\]n["][,][ ]fw_file[)][;][\n]*[\t]err[ ]=[ ]request_firmware[(][&]fimage->fw_entry[,]' drivers/staging/gs_fpgaboot/gs_fpgaboot.c
+ blobname 'dvb-demod-mn88472-02\.fw' drivers/staging/media/mn88472/mn88472_priv.h
+ blobname 'dvb-demod-mn88473-01\.fw' drivers/staging/media/mn88472/mn88472_priv.h
+ accept '[\t][\t]goto[ ]err_request_firmware[;]' drivers/staging/media/mn88473/mn88473.c
+ accept 'err_request_firmware[:]' drivers/staging/media/mn88473/mn88473.c
+ blob 'The[ ]card[ ]requires[ ]firmware.*[\n]rm[ ]wd7296a\.sys' Documentation/scsi/wd719x.txt
+ blobname 'wd719x-\(wcs\|risc\)\.bin' drivers/scsi/wd719x.c
+ defsnc 'static[ ]const[ ]struct[ ]tsadc_table[ ]v2_code_table\[\][ ]=' drivers/thermal/rockchip_thermal.c
+ defsnc 'static[ ]const[ ]u8[ ]debug_pk\[64\][ ]=' net/bluetooth/smp.c
+ defsnc 'static[ ]const[ ]u8[ ]debug_sk\[32\][ ]=' net/bluetooth/smp.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]ad1980_reg_defaults\[\][ ]=' sound/soc/codecs/ad1980.c
+ blobname 'rt5677_dsp_fw[12]\.bin' sound/soc/codecs/rt5677.c
+ accept 'int[ ]sst_request_firmware_async[(]' sound/soc/intel/sst/sst.h
+ blobname 'intel[/]fw_sst_0f28\.bin-48kHz_i2s_master' sound/soc/intel/sst-acpi.c
+ blobname '\(intel[/]\)\?fw_sst_\(0f28\|22a8\)\.bin' sound/soc/intel/sst/sst_acpi.c
+ blobname '%s%04x%s["][,][ ]["]fw_sst_["][,][\n][ \t]*sst_drv_ctx->dev_id[,][ ]["]\.bin' sound/soc/intel/sst/sst_pci.c
+ accept '[\t]\?\(evsel\|machine\|thread\|comm\(_thread\)\?\|dso\|symbol\|branch_type\|sample\|[\t]call\(_path\)\?\)_file[ \t]*=[ ]open_output_file[(]["]\(evsel\|machine\|thread\|comm\(_thread\)\?\|dso\|symbol\|branch_type\|sample\|call\(_path\)\?\)_table\.bin["][)]' tools/perf/scripts/python/export-to-postgresql.py
+ # accept '\([*]\.\(bin\|elf\|fw\)\|\(setup\|wakeup\)\.\(bin\|elf\)\|vmlinux\.bin\.all\|tftpboot\.img\)[\n]' Documentation/dontdiff
;;
*/*freedo*.patch | */*logo*.patch)
@@ -3979,6 +4028,8 @@ set_except () {
# False positives in patch-3.17.2, 3.16.7, 3.14.23 and newer.
accept '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]_request_firmware[(]const[ ]struct[ ]firmware' drivers/base/firmware_class.c
accept '[ ]ret[ ]=[ ]_request_firmware_prepare[(]' drivers/base/firmware_class.c
+ # False positive in patch-3.17.6 and newer.
+ initnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]struct[ ]reg_default[ ]rt5670_reg\[\][ ]=[ ][{][*][/][;]' sound/soc/codecs/rt5670.c
;;
*/patch-3.13*)
diff --git a/freed-ora/current/master/disable-i8042-check-on-apple-mac.patch b/freed-ora/current/master/disable-i8042-check-on-apple-mac.patch
index 8516532a8..793bada3d 100644
--- a/freed-ora/current/master/disable-i8042-check-on-apple-mac.patch
+++ b/freed-ora/current/master/disable-i8042-check-on-apple-mac.patch
@@ -17,10 +17,10 @@ Signed-off-by: Bastien Nocera <hadess@hadess.net>
1 file changed, 22 insertions(+)
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index 9bb95eab6926..4b5015f27f9e 100644
+index bfb0b2280df0..06b10fe7e65b 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
-@@ -1471,6 +1471,22 @@ static struct platform_driver i8042_driver = {
+@@ -1484,6 +1484,22 @@ static struct platform_driver i8042_driver = {
.shutdown = i8042_shutdown,
};
@@ -43,7 +43,7 @@ index 9bb95eab6926..4b5015f27f9e 100644
static int __init i8042_init(void)
{
struct platform_device *pdev;
-@@ -1478,6 +1494,12 @@ static int __init i8042_init(void)
+@@ -1491,6 +1507,12 @@ static int __init i8042_init(void)
dbg_init();
diff --git a/freed-ora/current/master/dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch b/freed-ora/current/master/dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch
deleted file mode 100644
index e64136a27..000000000
--- a/freed-ora/current/master/dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From: Joe Thornber <ejt@redhat.com>
-Date: Thu, 27 Nov 2014 12:26:46 +0000
-Subject: [PATCH] dm cache: dirty flag was mistakenly being cleared when
- promoting via overwrite
-
-If the incoming bio is a WRITE and completely covers a block then we
-don't bother to do any copying for a promotion operation. Once this is
-done the cache block and origin block will be different, so we need to
-set it to 'dirty'.
-
-Signed-off-by: Joe Thornber <ejt@redhat.com>
-Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-Cc: stable@vger.kernel.org
----
- drivers/md/dm-cache-target.c | 10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
-index 6f7086355691..387b93d81138 100644
---- a/drivers/md/dm-cache-target.c
-+++ b/drivers/md/dm-cache-target.c
-@@ -951,10 +951,14 @@ static void migration_success_post_commit(struct dm_cache_migration *mg)
- }
-
- } else {
-- clear_dirty(cache, mg->new_oblock, mg->cblock);
-- if (mg->requeue_holder)
-+ if (mg->requeue_holder) {
-+ clear_dirty(cache, mg->new_oblock, mg->cblock);
- cell_defer(cache, mg->new_ocell, true);
-- else {
-+ } else {
-+ /*
-+ * The block was promoted via an overwrite, so it's dirty.
-+ */
-+ set_dirty(cache, mg->new_oblock, mg->cblock);
- bio_endio(mg->new_ocell->holder, 0);
- cell_defer(cache, mg->new_ocell, false);
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch b/freed-ora/current/master/dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch
deleted file mode 100644
index 05a6ebdca..000000000
--- a/freed-ora/current/master/dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: Joe Thornber <ejt@redhat.com>
-Date: Fri, 28 Nov 2014 09:48:25 +0000
-Subject: [PATCH] dm cache: fix spurious cell_defer when dealing with partial
- block at end of device
-
-We never bother caching a partial block that is at the back end of the
-origin device. No cell ever gets locked, but the calling code was
-assuming it was and trying to release it.
-
-Now the code only releases if the cell has been set to a non NULL
-value.
-
-Signed-off-by: Joe Thornber <ejt@redhat.com>
-Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-Cc: stable@vger.kernel.org
----
- drivers/md/dm-cache-target.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
-index 387b93d81138..da496cfb458d 100644
---- a/drivers/md/dm-cache-target.c
-+++ b/drivers/md/dm-cache-target.c
-@@ -2554,11 +2554,11 @@ static int __cache_map(struct cache *cache, struct bio *bio, struct dm_bio_priso
- static int cache_map(struct dm_target *ti, struct bio *bio)
- {
- int r;
-- struct dm_bio_prison_cell *cell;
-+ struct dm_bio_prison_cell *cell = NULL;
- struct cache *cache = ti->private;
-
- r = __cache_map(cache, bio, &cell);
-- if (r == DM_MAPIO_REMAPPED) {
-+ if (r == DM_MAPIO_REMAPPED && cell) {
- inc_ds(cache, bio, cell);
- cell_defer(cache, cell, false);
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/dm-cache-only-use-overwrite-optimisation-for-promoti.patch b/freed-ora/current/master/dm-cache-only-use-overwrite-optimisation-for-promoti.patch
deleted file mode 100644
index 12a79113d..000000000
--- a/freed-ora/current/master/dm-cache-only-use-overwrite-optimisation-for-promoti.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From: Joe Thornber <ejt@redhat.com>
-Date: Thu, 27 Nov 2014 12:21:08 +0000
-Subject: [PATCH] dm cache: only use overwrite optimisation for promotion when
- in writeback mode
-
-Overwrite causes the cache block and origin blocks to diverge, which
-is only allowed in writeback mode.
-
-Signed-off-by: Joe Thornber <ejt@redhat.com>
-Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-Cc: stable@vger.kernel.org
----
- drivers/md/dm-cache-target.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
-index 7130505c2425..6f7086355691 100644
---- a/drivers/md/dm-cache-target.c
-+++ b/drivers/md/dm-cache-target.c
-@@ -1070,7 +1070,8 @@ static void issue_copy(struct dm_cache_migration *mg)
-
- avoid = is_discarded_oblock(cache, mg->new_oblock);
-
-- if (!avoid && bio_writes_complete_block(cache, bio)) {
-+ if (writeback_mode(&cache->features) &&
-+ !avoid && bio_writes_complete_block(cache, bio)) {
- issue_overwrite(mg, bio);
- return;
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/drm-i915-hush-check-crtc-state.patch b/freed-ora/current/master/drm-i915-hush-check-crtc-state.patch
index 0a76d10c1..7709e6b67 100644
--- a/freed-ora/current/master/drm-i915-hush-check-crtc-state.patch
+++ b/freed-ora/current/master/drm-i915-hush-check-crtc-state.patch
@@ -14,10 +14,10 @@ Upstream-status: http://lists.freedesktop.org/archives/intel-gfx/2013-November/0
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 9cb5c95d5898..edf0d4b78d68 100644
+index e7a16f119a29..e1489e6c0dc7 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -10965,7 +10965,7 @@ check_crtc_state(struct drm_device *dev)
+@@ -10869,7 +10869,7 @@ check_crtc_state(struct drm_device *dev)
if (active &&
!intel_pipe_config_compare(dev, &crtc->config, &pipe_config)) {
diff --git a/freed-ora/current/master/efi-Add-EFI_SECURE_BOOT-bit.patch b/freed-ora/current/master/efi-Add-EFI_SECURE_BOOT-bit.patch
index f6cc658f7..ef1733bb3 100644
--- a/freed-ora/current/master/efi-Add-EFI_SECURE_BOOT-bit.patch
+++ b/freed-ora/current/master/efi-Add-EFI_SECURE_BOOT-bit.patch
@@ -12,10 +12,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
2 files changed, 3 insertions(+)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index f4eb99432db1..bc31a43b31a0 100644
+index 5d52d67d5097..b40d6174242f 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
-@@ -1152,7 +1152,9 @@ void __init setup_arch(char **cmdline_p)
+@@ -1154,7 +1154,9 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
if (boot_params.secure_boot) {
@@ -26,10 +26,10 @@ index f4eb99432db1..bc31a43b31a0 100644
#endif
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 0949f9c7e872..130ba866a24a 100644
+index 0238d612750e..16ec1c00919d 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -936,6 +936,7 @@ extern int __init efi_setup_pcdp_console(char *);
+@@ -940,6 +940,7 @@ extern int __init efi_setup_pcdp_console(char *);
#define EFI_64BIT 5 /* Is the firmware 64-bit? */
#define EFI_PARAVIRT 6 /* Access is via a paravirt interface */
#define EFI_ARCH_1 7 /* First arch-specific bit */
diff --git a/freed-ora/current/master/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch b/freed-ora/current/master/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
index c9e629d62..2238eeda3 100644
--- a/freed-ora/current/master/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
+++ b/freed-ora/current/master/efi-Disable-secure-boot-if-shim-is-in-insecure-mode.patch
@@ -14,7 +14,7 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index 6da2da7ac9c3..ba3cf70c7d5a 100644
+index 2192da755e34..4b03911a502d 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -831,8 +831,9 @@ out:
diff --git a/freed-ora/current/master/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch b/freed-ora/current/master/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
index 4d61ce91d..89741c349 100644
--- a/freed-ora/current/master/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
+++ b/freed-ora/current/master/efi-Make-EFI_SECURE_BOOT_SIG_ENFORCE-depend-on-EFI.patch
@@ -11,10 +11,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 7b8969db8398..d1f4a3d88dfc 100644
+index 58273956750d..e17f88ceaeab 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
-@@ -1612,7 +1612,8 @@ config EFI_MIXED
+@@ -1661,7 +1661,8 @@ config EFI_MIXED
If unsure, say N.
config EFI_SECURE_BOOT_SIG_ENFORCE
diff --git a/freed-ora/current/master/groups-Consolidate-the-setgroups-permission-checks.patch b/freed-ora/current/master/groups-Consolidate-the-setgroups-permission-checks.patch
deleted file mode 100644
index e65ea2641..000000000
--- a/freed-ora/current/master/groups-Consolidate-the-setgroups-permission-checks.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 17:19:27 -0600
-Subject: [PATCH] groups: Consolidate the setgroups permission checks
-
-Today there are 3 instances of setgroups and due to an oversight their
-permission checking has diverged. Add a common function so that
-they may all share the same permission checking code.
-
-This corrects the current oversight in the current permission checks
-and adds a helper to avoid this in the future.
-
-A user namespace security fix will update this new helper, shortly.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- arch/s390/kernel/compat_linux.c | 2 +-
- include/linux/cred.h | 1 +
- kernel/groups.c | 9 ++++++++-
- kernel/uid16.c | 2 +-
- 4 files changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
-index ca38139423ae..437e61159279 100644
---- a/arch/s390/kernel/compat_linux.c
-+++ b/arch/s390/kernel/compat_linux.c
-@@ -249,7 +249,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setgroups16, int, gidsetsize, u16 __user *, grouplis
- struct group_info *group_info;
- int retval;
-
-- if (!capable(CAP_SETGID))
-+ if (!may_setgroups())
- return -EPERM;
- if ((unsigned)gidsetsize > NGROUPS_MAX)
- return -EINVAL;
-diff --git a/include/linux/cred.h b/include/linux/cred.h
-index b2d0820837c4..2fb2ca2127ed 100644
---- a/include/linux/cred.h
-+++ b/include/linux/cred.h
-@@ -68,6 +68,7 @@ extern void groups_free(struct group_info *);
- extern int set_current_groups(struct group_info *);
- extern void set_groups(struct cred *, struct group_info *);
- extern int groups_search(const struct group_info *, kgid_t);
-+extern bool may_setgroups(void);
-
- /* access the groups "array" with this macro */
- #define GROUP_AT(gi, i) \
-diff --git a/kernel/groups.c b/kernel/groups.c
-index 451698f86cfa..02d8a251c476 100644
---- a/kernel/groups.c
-+++ b/kernel/groups.c
-@@ -213,6 +213,13 @@ out:
- return i;
- }
-
-+bool may_setgroups(void)
-+{
-+ struct user_namespace *user_ns = current_user_ns();
-+
-+ return ns_capable(user_ns, CAP_SETGID);
-+}
-+
- /*
- * SMP: Our groups are copy-on-write. We can set them safely
- * without another task interfering.
-@@ -223,7 +230,7 @@ SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)
- struct group_info *group_info;
- int retval;
-
-- if (!ns_capable(current_user_ns(), CAP_SETGID))
-+ if (!may_setgroups())
- return -EPERM;
- if ((unsigned)gidsetsize > NGROUPS_MAX)
- return -EINVAL;
-diff --git a/kernel/uid16.c b/kernel/uid16.c
-index 602e5bbbceff..d58cc4d8f0d1 100644
---- a/kernel/uid16.c
-+++ b/kernel/uid16.c
-@@ -176,7 +176,7 @@ SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist)
- struct group_info *group_info;
- int retval;
-
-- if (!ns_capable(current_user_ns(), CAP_SETGID))
-+ if (!may_setgroups())
- return -EPERM;
- if ((unsigned)gidsetsize > NGROUPS_MAX)
- return -EINVAL;
---
-2.1.0
-
diff --git a/freed-ora/current/master/hibernate-Disable-in-a-signed-modules-environment.patch b/freed-ora/current/master/hibernate-Disable-in-a-signed-modules-environment.patch
index fa1d53a51..f1cc67935 100644
--- a/freed-ora/current/master/hibernate-Disable-in-a-signed-modules-environment.patch
+++ b/freed-ora/current/master/hibernate-Disable-in-a-signed-modules-environment.patch
@@ -13,18 +13,18 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
-index 1f35a3478f3c..5e2472fc3dda 100644
+index 2329daae5255..48a8e82c7e2e 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
-@@ -28,6 +28,7 @@
- #include <linux/syscore_ops.h>
+@@ -29,6 +29,7 @@
#include <linux/ctype.h>
#include <linux/genhd.h>
+ #include <linux/ktime.h>
+#include <linux/module.h>
#include <trace/events/power.h>
#include "power.h"
-@@ -65,7 +66,7 @@ static const struct platform_hibernation_ops *hibernation_ops;
+@@ -66,7 +67,7 @@ static const struct platform_hibernation_ops *hibernation_ops;
bool hibernation_available(void)
{
diff --git a/freed-ora/current/master/input-kill-stupid-messages.patch b/freed-ora/current/master/input-kill-stupid-messages.patch
index 5b9c3d923..fe01d3a75 100644
--- a/freed-ora/current/master/input-kill-stupid-messages.patch
+++ b/freed-ora/current/master/input-kill-stupid-messages.patch
@@ -9,7 +9,7 @@ Upstream-status: Fedora mustard
1 file changed, 4 insertions(+)
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
-index 6f5d79569136..95469f6ecfa5 100644
+index e27a25892db4..9ab0a86cc03d 100644
--- a/drivers/input/keyboard/atkbd.c
+++ b/drivers/input/keyboard/atkbd.c
@@ -436,11 +436,15 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
diff --git a/freed-ora/current/master/input-silence-i8042-noise.patch b/freed-ora/current/master/input-silence-i8042-noise.patch
index dcfee1e6d..7da6bc888 100644
--- a/freed-ora/current/master/input-silence-i8042-noise.patch
+++ b/freed-ora/current/master/input-silence-i8042-noise.patch
@@ -29,10 +29,10 @@ index 9717d5f20139..a3101d2fd936 100644
if (dev->parent && dev->parent->power.is_prepared)
dev_warn(dev, "parent %s should not be sleeping\n",
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index f5a98af3b325..9bb95eab6926 100644
+index 986a71c614b0..bfb0b2280df0 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
-@@ -857,7 +857,6 @@ static int __init i8042_check_aux(void)
+@@ -871,7 +871,6 @@ static int __init i8042_check_aux(void)
static int i8042_controller_check(void)
{
if (i8042_flush()) {
@@ -41,10 +41,10 @@ index f5a98af3b325..9bb95eab6926 100644
}
diff --git a/net/can/af_can.c b/net/can/af_can.c
-index ce82337521f6..a3fee4becc93 100644
+index 66e08040ced7..5268a601f406 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
-@@ -158,13 +158,9 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
+@@ -155,13 +155,9 @@ static int can_create(struct net *net, struct socket *sock, int protocol,
err = request_module("can-proto-%d", protocol);
/*
diff --git a/freed-ora/current/master/isofs-Fix-infinite-looping-over-CE-entries.patch b/freed-ora/current/master/isofs-Fix-infinite-looping-over-CE-entries.patch
deleted file mode 100644
index bff25ac27..000000000
--- a/freed-ora/current/master/isofs-Fix-infinite-looping-over-CE-entries.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From: Jan Kara <jack@suse.cz>
-Date: Mon, 15 Dec 2014 14:22:46 +0100
-Subject: [PATCH] isofs: Fix infinite looping over CE entries
-
-Rock Ridge extensions define so called Continuation Entries (CE) which
-define where is further space with Rock Ridge data. Corrupted isofs
-image can contain arbitrarily long chain of these, including a one
-containing loop and thus causing kernel to end in an infinite loop when
-traversing these entries.
-
-Limit the traversal to 32 entries which should be more than enough space
-to store all the Rock Ridge data.
-
-Reported-by: P J P <ppandit@redhat.com>
-CC: stable@vger.kernel.org
-Signed-off-by: Jan Kara <jack@suse.cz>
----
- fs/isofs/rock.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
-index f488bbae541a..bb63254ed848 100644
---- a/fs/isofs/rock.c
-+++ b/fs/isofs/rock.c
-@@ -30,6 +30,7 @@ struct rock_state {
- int cont_size;
- int cont_extent;
- int cont_offset;
-+ int cont_loops;
- struct inode *inode;
- };
-
-@@ -73,6 +74,9 @@ static void init_rock_state(struct rock_state *rs, struct inode *inode)
- rs->inode = inode;
- }
-
-+/* Maximum number of Rock Ridge continuation entries */
-+#define RR_MAX_CE_ENTRIES 32
-+
- /*
- * Returns 0 if the caller should continue scanning, 1 if the scan must end
- * and -ve on error.
-@@ -105,6 +109,8 @@ static int rock_continue(struct rock_state *rs)
- goto out;
- }
- ret = -EIO;
-+ if (++rs->cont_loops >= RR_MAX_CE_ENTRIES)
-+ goto out;
- bh = sb_bread(rs->inode->i_sb, rs->cont_extent);
- if (bh) {
- memcpy(rs->buffer, bh->b_data + rs->cont_offset,
---
-2.1.0
-
diff --git a/freed-ora/current/master/kernel-arm64.patch b/freed-ora/current/master/kernel-arm64.patch
index 4a125b938..9907c7054 100644
--- a/freed-ora/current/master/kernel-arm64.patch
+++ b/freed-ora/current/master/kernel-arm64.patch
@@ -1,1920 +1,59 @@
-commit 0335b5034b998e978bf9343da77246bcbad33981
-Author: Mark Salter <msalter@redhat.com>
-Date: Wed Nov 19 10:32:11 2014 -0500
-
- arm64: explicitly set noncoherent ops for _CCA handling
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 4a2d43442e20a24b78594d12914706deddc119de
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 17:09:29 2014 -0500
-
- DO NOT UPSTREAM - pci/xgene: Provide fixup for ACPI MCFG support
-
- Xgene doesn't decode bus bits of mmconfig region and only
- supports devfn 0 of bus 0. For other buses/devices, some
- internal registers need to be poked. This patch provides
- a fixup to support ACPI MCFG tables. This is a horrible
- hack allowing the hardware to be used for PCI testing, but
- it is not intended to be a long term patch.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit b93f804830d9ef6d572dd6be9734108199141b87
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 17:33:18 2014 -0500
-
- DO NOT UPSTREAM - provide hook for MCFG fixups
-
- This is a temprary mechanism needed by at least one early
- arm64 hardware platform with broken MCFG support. This is
- not intended for upstream and will go away as soon as newer
- hardware with fully compliant ECAM becomes available.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 2d76cb937a6c0010d1de181d0142f0822df5071d
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 17:30:25 2014 -0500
-
- arm64/pci/acpi: initial support for ACPI probing of PCI
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit a438ff7be0140738b1224d5ade6345a9febad279
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 17:23:57 2014 -0500
-
- arm64/acpi/pci: add support for parsing MCFG table
-
- Add support for parsing MCFG table and provide functions to read/write
- PCI configuration space based on the parsed info. This provides the
- low-level raw_pci_read/raw_pci_write functionality.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 814b22167d35b18fc3de745277a2190ff0841585
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 16:42:14 2014 -0500
-
- DO NOT UPSTREAM - pci/xgene: workaround CRS issue
-
- CRS is not behaving properly for some reason. Until this
- gets diagnosed properly, pretend not to support it in order
- to prevent hangs in 3.18 kernel.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit b90d000000801b473ed4c69757d3be9e433b6c5e
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 16:31:05 2014 -0500
-
- iommu/arm-smmu: fix NULL dereference with ACPI PCI devices
-
- Fix a NULL dereference in find_mmu_master which occurs when
- booting with ACPI. In that case, PCI bridges with not have
- an of_node. Add a check for NULL of_node and bail out if that
- is the case.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 243e5c1dc198958ce862e39d33efc798a47b339a
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Nov 10 21:35:11 2014 -0500
-
- DO NOT UPSTREAM - arm64: fix dma_ops for ACPI and PCI devices
-
- Commit 2189064795dc3fb4101e5:
-
- arm64: Implement set_arch_dma_coherent_ops() to replace bus notifiers
-
- removed the bus notifiers from dma-mapping.c. This patch
- adds the notifier back for ACPI and PCI devices until a
- better permanent solution is worked out.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 612eea3ae291b28f7ed50ccf50bd1685a2a7f753
-Author: Mark Salter <msalter@redhat.com>
-Date: Thu Aug 14 12:32:13 2014 -0400
-
- acpi: add utility to test for device dma coherency
-
- ACPI 5.1 adds a _CCA object to indicate memory coherency
- of a bus master device. It is an integer with zero meaning
- non-coherent and one meaning coherent. This attribute may
- be inherited from a parent device. It may also be missing
- entirely, in which case, an architecture-specific default
- is assumed.
-
- This patch adds a utility function to parse a device handle
- (and its parents) for a _CCA object and return the coherency
- attribute if found.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 3d509a508c6fd70eb0fb2f0e82d08d92cc96568c
-Author: Mark Salter <msalter@redhat.com>
-Date: Sat Nov 22 12:08:53 2014 -0500
-
- DO NOT UPSTREAM - arm64: kvm: Change vgic resource size error to info
-
- From: Donald Dutile <ddutile@redhat.com>
-
- A new check was added to upstream to ensure a full
- kernel page was allocated to the vgic. The check failed
- kvm configuration if the condition wasn't met. An arm64
- kernel with 64K pagesize and certain early firmware will
- fail this test. Change error to info & continue configuration
- for now.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 2b5dd4609e947b418afbbeae95da7f34594bc048
-Author: Wei Huang <wei@redhat.com>
-Date: Sat Nov 22 10:38:45 2014 -0500
-
- KVM/ACPI: Enable ACPI support for KVM virt GIC
-
- This patches enables ACPI support for KVM virtual GIC. KVM parses
- ACPI table for virt GIC related information when DT table is not
- present. This is done by retrieving the information defined in
- generic_interrupt entry of MADT table.
-
- Note: Alexander Spyridakis from Virtual Open System posts a
- _very_ similar patch to enable acpi-kvm. This patch borrows some
- ideas from his patch.
-
- Signed-off-by: Wei Huang <wei@redhat.com>
- [combined with subsequent patch to use acpi_disabled]
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 756fc31666a4a3094727da5274fc0705a05f13a3
-Author: Wei Huang <wei@redhat.com>
-Date: Sat Nov 22 10:18:57 2014 -0500
-
- KVM/ACPI: Enable ACPI support for virt arch timer
-
- This patches enables ACPI support for KVM virtual arch_timer. It
- allows KVM to parse ACPI table for virt arch_timer PPI when DT table
- is not present. This is done by retrieving the information from
- arch_timer_ppi array in arm_arch_timer driver.
-
- Signed-off-by: Wei Huang <wei@redhat.com>
- [combined with subsequent patch to use acpi_disabled]
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit b189108603f6db4a11e0c30050e840e8bb36f098
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Tue Nov 18 21:52:34 2014 +0100
-
- arm, arm64: KVM: handle potential incoherency of readonly memslots
-
- Upstream posting:
- http://thread.gmane.org/gmane.comp.emulators.kvm.devel/129475/focus=129477
-
- Readonly memslots are often used to implement emulation of ROMs and
- NOR flashes, in which case the guest may legally map these regions as
- uncached.
- To deal with the incoherency associated with uncached guest mappings,
- treat all readonly memslots as incoherent, and ensure that pages that
- belong to regions tagged as such are flushed to DRAM before being passed
- to the guest.
-
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
- Acadia backport notes:
-
- - we have a few more conflicts here. The main thing is that our
- kvm_arch_prepare_memory_region() is "empty" at the moment; in upstream
- Ard introduced performance related, host device related code there, in
- commit 8eef91239.
-
- What we certainly need to grab from commit 8eef91239 is the acquiring of
- "kvm->mmu_lock" (which is visible in the upstream patch context too),
- and the filtering against
-
- (change != KVM_MR_CREATE && change != KVM_MR_MOVE)
-
- near the top of the function (which is not visible in the upstream patch
- context). (If (change == KVM_MR_DELETE), then the caller has set up
- "memslot" in such a way that calling stage2_flush_memslot() on it is
- invalid, and it would actually crash the host -- speaking from
- experience. :))
-
- - The hunk that seems to matter in practice, in my testing on Mustang, is
- the "fault_ipa_uncached" assignment one (which affects the the
- demand-paged case, ie. the coherent_cache_guest_page() function,
- modified in the previous patch).
-
- The kvm_arch_prepare_memory_region() hunk exists for completeness of
- implementation, and while it could certainly make a difference, I've
- never seen it make one, in my testing. We should pick it up nonetheless.
-
- Signed-off-by: Laszlo Ersek <lersek@redhat.com>
-
-commit 8ab19d68b49c2f6a9f0e6226c51bf9b2fe553022
-Author: Laszlo Ersek <lersek@redhat.com>
-Date: Tue Nov 18 21:52:33 2014 +0100
-
- arm, arm64: KVM: allow forced dcache flush on page faults
-
- Upstream posting:
- http://thread.gmane.org/gmane.comp.emulators.kvm.devel/129475/focus=129476
-
- From: Laszlo Ersek <lersek@redhat.com>
-
- To allow handling of incoherent memslots in a subsequent patch, this
- patch adds a paramater 'ipa_uncached' to cache_coherent_guest_page()
- so that we can instruct it to flush the page's contents to DRAM even
- if the guest has caching globally enabled.
-
- Signed-off-by: Laszlo Ersek <lersek@redhat.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
- Acadia backport notes:
- - minimal context conflict in user_mem_abort(): upstream passes
-
- pgprot_val(mem_type) == pgprot_val(PAGE_S2_DEVICE)
-
- as last parameter of stage2_set_pte(), while we do a direct comparison.
-
- (See upstream commit 3d08c629, "arm: kvm: STRICT_MM_TYPECHECKS fix for
- user_mem_abort".)
-
- Signed-off-by: Laszlo Ersek <lersek@redhat.com>
-
-commit 1ac87393dff5d6fb10edfba84dfff89f57a7224a
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Tue Nov 18 21:52:32 2014 +0100
-
- kvm: add a memslot flag for incoherent memory regions
-
- Upstream posting:
- http://thread.gmane.org/gmane.comp.emulators.kvm.devel/129475
-
- Memory regions may be incoherent with the caches, typically when the
- guest has mapped a host system RAM backed memory region as uncached.
- Add a flag KVM_MEMSLOT_INCOHERENT so that we can tag these memslots
- and handle them appropriately when mapping them.
-
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Signed-off-by: Laszlo Ersek <lersek@redhat.com>
-
-commit 2a0a5cbf98c94e2906d9a357a63fbbb153488e1c
-Author: Tom Lendacky <thomas.lendacky@amd.com>
-Date: Mon Sep 15 17:02:52 2014 -0600
-
- amd-xgbe: AMD 10GbE driver APCI support for A0
-
- This patch provides ACPI support for the AMD 10GbE device driver
- and AMD 10GbE phy driver.
-
- Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
-
-commit 807e95abb96e7868e1c8e863a92298937a69d437
-Author: Mark Salter <msalter@redhat.com>
-Date: Tue Oct 7 12:54:08 2014 -0400
-
- xgene acpi network - first cut
-
-commit bdecd2af5d4234ed50042ab28a21736edcec6d41
-Author: Geert Uytterhoeven <geert+renesas@glider.be>
-Date: Thu Nov 6 12:23:23 2014 +0100
-
- leds: leds-gpio: Fix legacy GPIO number case
-
- In the legacy case, led_dat->gpiod is initialized correctly, but
- overwritten later by template->gpiod, which is NULL, causing leds-gpio
- to fail with:
-
- gpiod_direction_output: invalid GPIO
- leds-gpio: probe of leds-gpio failed with error -22
-
- Move the initialization of led_dat->gpiod from template->gpiod up, and
- always use led_dat->gpiod later, to fix this.
-
- Fixes: 5c51277a9ababfa4 (leds: leds-gpio: Add support for GPIO descriptors)
- Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
- Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 42b0d1b64cdf1c8d37e69ff7cff45852f7a16f65
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Wed Nov 5 00:29:07 2014 +0100
-
- ACPI / property: Drop size_prop from acpi_dev_get_property_reference()
-
- The size_prop argument of the recently added function
- acpi_dev_get_property_reference() is not used by the only current
- caller of that function and is very unlikely to be used at any time
- going forward.
-
- Namely, for a property whose value is a list of items each containing
- a references to a device object possibly accompanied by some integers,
- the number of items in the list can always be computed as the number
- of elements of type ACPI_TYPE_LOCAL_REFERENCE in the property package.
- Thus it should never be necessary to provide an additional "cells"
- property with a value equal to the number of items in that list. It
- also should never be necessary to provide a "cells" property specifying
- how many integers are supposed to be following each reference.
-
- For this reason, drop the size_prop argument from
- acpi_dev_get_property_reference() and update its caller accordingly.
-
- Link: http://marc.info/?l=linux-kernel&m=141511255610556&w=2
- Suggested-by: Grant Likely <grant.likely@linaro.org>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit c3f29cda7420da6a721d40d116f369cfc1533d38
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Fri Oct 31 13:40:58 2014 +0200
-
- leds: leds-gpio: Convert gpio_blink_set() to use GPIO descriptors
-
- Commit 21f2aae91e902aad ("leds: leds-gpio: Add support for GPIO
- descriptors") already converted most of the driver to use GPIO descriptors.
- What is still missing is the platform specific hook gpio_blink_set() and
- board files which pass legacy GPIO numbers to this driver in platform data.
-
- In this patch we handle the former and convert gpio_blink_set() to take
- GPIO descriptor instead. In order to do this we convert the existing four
- users to accept GPIO descriptor and translate it to legacy GPIO number in
- the platform code. This effectively "pushes" legacy GPIO number usage from
- the driver to platforms.
-
- Also add comment to the remaining block describing that it is legacy code
- path and we are getting rid of it eventually.
-
- Suggested-by: Linus Walleij <linus.walleij@linaro.org>
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Andrew Lunn <andrew@lunn.ch>
- Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
- Acked-by: Alexandre Courbot <acourbot@nvidia.com>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 4117b39d39f59d2497ceac1091ec54aa3056cb4f
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Mon Nov 3 23:39:57 2014 +0100
-
- ACPI / GPIO: Document ACPI GPIO mappings API
-
- Document the previously introduced method that can be used by device
- drivers to provide the GPIO subsystem with mappings between GPIO names
- (connection IDs) and GpioIo()/GpioInt() resources in _CRS.
-
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
- Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
-
-commit d9345c86ad290bb4ca98b37520f94fc8075b2b94
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Mon Oct 27 12:15:14 2014 +0200
-
- net: rfkill: gpio: Add default GPIO driver mappings for ACPI
-
- The driver uses devm_gpiod_get_index(..., index) so that the index refers
- directly to the GpioIo resource under the ACPI device. The problem with
- this is that if the ordering changes we get wrong GPIOs.
-
- With ACPI 5.1 _DSD we can now use names instead to reference GPIOs
- analogous to Device Tree. However, we still have systems out there that do
- not provide _DSD at all. These systems must be supported as well.
-
- Luckily we now have acpi_dev_add_driver_gpios() that can be used to provide
- mappings for systems where _DSD is not provided and still take advantage of
- _DSD if it exists.
-
- This patch changes the driver to create default GPIO mappings if we are
- running on ACPI system.
-
- While there we can drop the indices completely and use devm_gpiod_get()
- with name instead.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
- Acked-by: John W. Linville <linville@tuxdriver.com>
- Acked-by: Linus Walleij <linus.walleij@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 22cb8c44e198b7e3f3299324edbcaa1389016d52
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Mon Nov 3 23:39:41 2014 +0100
-
- ACPI / GPIO: Driver GPIO mappings for ACPI GPIOs
-
- Provide a way for device drivers using GPIOs described by ACPI
- GpioIo resources in _CRS to tell the GPIO subsystem what names
- (connection IDs) to associate with specific GPIO pins defined
- in there.
-
- To do that, a driver needs to define a mapping table as a
- NULL-terminated array of struct acpi_gpio_mapping objects
- that each contain a name, a pointer to an array of line data
- (struct acpi_gpio_params) objects and the size of that array.
-
- Each struct acpi_gpio_params object consists of three fields,
- crs_entry_index, line_index, active_low, representing the index of
- the target GpioIo()/GpioInt() resource in _CRS starting from zero,
- the index of the target line in that resource starting from zero,
- and the active-low flag for that line, respectively.
-
- Next, the mapping table needs to be passed as the second
- argument to acpi_dev_add_driver_gpios() that will register it with
- the ACPI device object pointed to by its first argument. That
- should be done in the driver's .probe() routine.
-
- On removal, the driver should unregister its GPIO mapping table
- by calling acpi_dev_remove_driver_gpios() on the ACPI device
- object where that table was previously registered.
-
- Included are fixes from Mika Westerberg.
-
- Acked-by: Alexandre Courbot <acourbot@nvidia.com>
- Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit c70e2807a8bacbdfed992b58ca24eb152a778a01
-Author: Aaron Lu <aaron.lu@intel.com>
-Date: Tue Oct 21 13:34:00 2014 +0200
-
- input: gpio_keys_polled: Make use of device property API
-
- Make use of device property API in this driver so that both OF based
- system and ACPI based system can use this driver.
-
- Signed-off-by: Aaron Lu <aaron.lu@intel.com>
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 29257e751014d0d43f78bcfecd9a56a603096c95
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Mon Oct 27 23:30:10 2014 +0100
-
- leds: leds-gpio: Make use of device property API
-
- Make use of device property API in this driver so that both OF and ACPI
- based system can use the same driver.
-
- This change contains material from Max Eliaser and Mika Westerberg.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Bryan Wu <cooloney@gmail.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 08ddbc9678ce8465f17acc8e1b1b67442593d1b5
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue Oct 21 13:33:59 2014 +0200
-
- gpio: Support for unified device properties interface
-
- Some drivers need to deal with only firmware representation of its
- GPIOs. An example would be a GPIO button array driver where each button
- is described as a separate firmware node in device tree. Typically these
- child nodes do not have physical representation in the Linux device
- model.
-
- In order to help device drivers to handle such firmware child nodes we
- add dev[m]_get_named_gpiod_from_child() that takes a child firmware
- node pointer as its second argument (the first one is the parent device
- itself), finds the GPIO using whatever is the underlying firmware
- method, and requests the GPIO properly.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Alexandre Courbot <acourbot@nvidia.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 880614f83402ae8b408f33cb252505da0760f3e5
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Tue Nov 4 14:03:59 2014 +0100
-
- Driver core: Unified interface for firmware node properties
-
- Add new generic routines are provided for retrieving properties from
- device description objects in the platform firmware in case there are
- no struct device objects for them (either those objects have not been
- created yet or they do not exist at all).
-
- The following functions are provided:
-
- fwnode_property_present()
- fwnode_property_read_u8()
- fwnode_property_read_u16()
- fwnode_property_read_u32()
- fwnode_property_read_u64()
- fwnode_property_read_string()
- fwnode_property_read_u8_array()
- fwnode_property_read_u16_array()
- fwnode_property_read_u32_array()
- fwnode_property_read_u64_array()
- fwnode_property_read_string_array()
-
- in analogy with the corresponding functions for struct device added
- previously. For all of them, the first argument is a pointer to struct
- fwnode_handle (new type) that allows a device description object
- (depending on what platform firmware interface is in use) to be
- obtained.
-
- Add a new macro device_for_each_child_node() for iterating over the
- children of the device description object associated with a given
- device and a new function device_get_child_node_count() returning the
- number of a given device's child nodes.
-
- The interface covers both ACPI and Device Trees.
-
- Suggested-by: Grant Likely <grant.likely@linaro.org>
- Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit b5923f9dc379c1861a70d8836c7d9976d9521390
-Author: Aaron Lu <aaron.lu@intel.com>
-Date: Tue Oct 21 23:30:25 2014 +0200
-
- input: gpio_keys_polled: Add support for GPIO descriptors
-
- GPIO descriptors are the preferred way over legacy GPIO numbers
- nowadays. Convert the driver to use GPIO descriptors internally but
- still allow passing legacy GPIO numbers from platform data to support
- existing platforms.
-
- Signed-off-by: Aaron Lu <aaron.lu@intel.com>
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Alexandre Courbot <acourbot@nvidia.com>
- Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
- Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 5c3c4fe36a05672113646f8fb839e4c91256ef5d
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Mon Oct 27 23:29:32 2014 +0100
-
- leds: leds-gpio: Add support for GPIO descriptors
-
- GPIO descriptors are the preferred way over legacy GPIO numbers
- nowadays. Convert the driver to use GPIO descriptors internally but
- still allow passing legacy GPIO numbers from platform data to support
- existing platforms.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Alexandre Courbot <acourbot@nvidia.com>
- Acked-by: Bryan Wu <cooloney@gmail.com>
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit 8105c03352f32060c765837cbb7d619e075289d9
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue Oct 21 13:33:56 2014 +0200
-
- gpio: sch: Consolidate core and resume banks
-
- This is actually a single device with two sets of identical registers,
- which just happen to start from a different offset. Instead of having
- separate GPIO chips created we consolidate them to be single GPIO chip.
-
- In addition having a single GPIO chip allows us to handle ACPI GPIO
- translation in the core in a more generic way, since the two GPIO chips
- share the same parent ACPI device.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Linus Walleij <linus.walleij@linaro.org>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit ce0e2672808ce2805d0aadfd12d94e2dd6be5ab9
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Wed Oct 29 15:41:01 2014 +0100
-
- gpio / ACPI: Add support for _DSD device properties
-
- With release of ACPI 5.1 and _DSD method we can finally name GPIOs (and
- other things as well) returned by _CRS. Previously we were only able to
- use integer index to find the corresponding GPIO, which is pretty error
- prone if the order changes.
-
- With _DSD we can now query GPIOs using name instead of an integer index,
- like the below example shows:
-
- // Bluetooth device with reset and shutdown GPIOs
- Device (BTH)
- {
- Name (_HID, ...)
-
- Name (_CRS, ResourceTemplate ()
- {
- GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
- "\\_SB.GPO0", 0, ResourceConsumer) {15}
- GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
- "\\_SB.GPO0", 0, ResourceConsumer) {27, 31}
- })
-
- Name (_DSD, Package ()
- {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package ()
- {
- Package () {"reset-gpio", Package() {^BTH, 1, 1, 0 }},
- Package () {"shutdown-gpio", Package() {^BTH, 0, 0, 0 }},
- }
- })
- }
-
- The format of the supported GPIO property is:
-
- Package () { "name", Package () { ref, index, pin, active_low }}
-
- ref - The device that has _CRS containing GpioIo()/GpioInt() resources,
- typically this is the device itself (BTH in our case).
- index - Index of the GpioIo()/GpioInt() resource in _CRS starting from zero.
- pin - Pin in the GpioIo()/GpioInt() resource. Typically this is zero.
- active_low - If 1 the GPIO is marked as active_low.
-
- Since ACPI GpioIo() resource does not have field saying whether it is
- active low or high, the "active_low" argument can be used here. Setting
- it to 1 marks the GPIO as active low.
-
- In our Bluetooth example the "reset-gpio" refers to the second GpioIo()
- resource, second pin in that resource with the GPIO number of 31.
-
- This patch implements necessary support to gpiolib for extracting GPIOs
- using _DSD device properties.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Linus Walleij <linus.walleij@linaro.org>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit e072a051ef3a5d612949dc22ca71e40dbe978ed1
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue Oct 21 13:33:56 2014 +0200
-
- misc: at25: Make use of device property API
-
- Make use of device property API in this driver so that both DT and ACPI
- based systems can use this driver.
-
- In addition we hard-code the name of the chip to be "at25" for the
- reason that there is no common mechanism to fetch name of the firmware
- node. The only existing user (arch/arm/boot/dts/phy3250.dts) uses the
- same name so it should continue to work.
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit e176d66bf1a8e613e501dae1fc6798e1a42b7062
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue Oct 21 13:33:56 2014 +0200
-
- ACPI: Allow drivers to match using Device Tree compatible property
-
- We have lots of existing Device Tree enabled drivers and allocating
- separate _HID for each is not feasible. Instead we allocate special _HID
- "PRP0001" that means that the match should be done using Device Tree
- compatible property using driver's .of_match_table instead if the driver
- is missing .acpi_match_table.
-
- If there is a need to distinguish from where the device is enumerated
- (DT/ACPI) driver can check dev->of_node or ACPI_COMPATION(dev).
-
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit e30b98eab5645fa42d372cc1be44e22db5f5e9b8
-Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-Date: Tue Nov 4 01:28:56 2014 +0100
-
- Driver core: Unified device properties interface for platform firmware
-
- Add a uniform interface by which device drivers can request device
- properties from the platform firmware by providing a property name
- and the corresponding data type. The purpose of it is to help to
- write portable code that won't depend on any particular platform
- firmware interface.
-
- The following general helper functions are added:
-
- device_property_present()
- device_property_read_u8()
- device_property_read_u16()
- device_property_read_u32()
- device_property_read_u64()
- device_property_read_string()
- device_property_read_u8_array()
- device_property_read_u16_array()
- device_property_read_u32_array()
- device_property_read_u64_array()
- device_property_read_string_array()
-
- The first one allows the caller to check if the given property is
- present. The next 5 of them allow single-valued properties of
- various types to be retrieved in a uniform way. The remaining 5 are
- for reading properties with multiple values (arrays of either numbers
- or strings).
-
- The interface covers both ACPI and Device Trees.
-
- This change set includes material from Mika Westerberg and Aaron Lu.
-
- Signed-off-by: Aaron Lu <aaron.lu@intel.com>
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit a8762c178234b62dce5e55df8de8528857a47bb7
-Author: Mika Westerberg <mika.westerberg@linux.intel.com>
-Date: Tue Oct 21 13:33:55 2014 +0200
-
- ACPI: Add support for device specific properties
-
- Device Tree is used in many embedded systems to describe the system
- configuration to the OS. It supports attaching properties or name-value
- pairs to the devices it describe. With these properties one can pass
- additional information to the drivers that would not be available
- otherwise.
-
- ACPI is another configuration mechanism (among other things) typically
- seen, but not limited to, x86 machines. ACPI allows passing arbitrary
- data from methods but there has not been mechanism equivalent to Device
- Tree until the introduction of _DSD in the recent publication of the
- ACPI 5.1 specification.
-
- In order to facilitate ACPI usage in systems where Device Tree is
- typically used, it would be beneficial to standardize a way to retrieve
- Device Tree style properties from ACPI devices, which is what we do in
- this patch.
-
- If a given device described in ACPI namespace wants to export properties it
- must implement _DSD method (Device Specific Data, introduced with ACPI 5.1)
- that returns the properties in a package of packages. For example:
-
- Name (_DSD, Package () {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package () {
- Package () {"name1", <VALUE1>},
- Package () {"name2", <VALUE2>},
- ...
- }
- })
-
- The UUID reserved for properties is daffd814-6eba-4d8c-8a91-bc9bbf4aa301
- and is documented in the ACPI 5.1 companion document called "_DSD
- Implementation Guide" [1], [2].
-
- We add several helper functions that can be used to extract these
- properties and convert them to different Linux data types.
-
- The ultimate goal is that we only have one device property API that
- retrieves the requested properties from Device Tree or from ACPI
- transparent to the caller.
-
- [1] http://www.uefi.org/sites/default/files/resources/_DSD-implementation-guide-toplevel.htm
- [2] http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf
-
- Reviewed-by: Hanjun Guo <hanjun.guo@linaro.org>
- Reviewed-by: Josh Triplett <josh@joshtriplett.org>
- Reviewed-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Darren Hart <dvhart@linux.intel.com>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
- Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
- Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-
-commit a9240791b83abd372e4efb77f20444c27a56ebae
-Author: Mark Salter <msalter@redhat.com>
-Date: Tue Sep 30 17:19:24 2014 -0400
-
- arm64: avoid need for console= to enable serial console
-
- Tell kernel to prefer one of the serial ports on platforms
- pl011, 8250, or sbsa uarts. console= on command line will
- override these assumed preferences. This is just a hack to
- get the behavior we want from SPCR table support. Once SPCR
- is supported, we can drop this.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 6fee3b2bd2ad6349e7bb3082393bf6355e01ce6f
-Author: Tom Lendacky <thomas.lendacky@amd.com>
-Date: Tue Sep 9 23:33:17 2014 -0400
-
- drivers: net: AMD Seattle XGBE PHY support for A0 silicon
-
- This patch modifies the upstream AMD XGBE PHY driver to support
- A0 Seattle silicon in currently shipping systems. The upstream
- Linux driver is targetted for Seattle B0 silicon.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 0a0eea6d358d51ab381e2945c0e9db2f6cc06157
-Author: Tom Lendacky <thomas.lendacky@amd.com>
-Date: Tue Sep 9 23:34:07 2014 -0400
-
- drivers: net: AMD Seattle XGBE 10GbE support for A0 silicon
-
- This patch modifies the upstream AMD 10GbE XGBE Ethernet driver to
- support A0 Seattle silicon in currently shipping systems. The
- upstream Linux driver is targetted for Seattle B0 silicon.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit ff93b53f3ca8748529855d421bf79329086544cd
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Fri Jul 26 17:55:02 2013 +0100
-
- virtio-mmio: add ACPI probing
-
- Added the match table and pointers for ACPI probing to the driver.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
-
-commit 5315cb5a532e900612ac1202507551761e8bd13c
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Wed Jul 24 11:29:48 2013 +0100
-
- net: smc91x: add ACPI probing support.
-
- Add device ID LINA0003 for this device and add the match table.
-
- As its a platform device it needs no other code and will be probed in by
- acpi_platform once device ID is added.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
-
-commit 640f607f1fa10c7c0cd6025dde8883d02fc9b411
-Author: Mark Salter <msalter@redhat.com>
-Date: Sun Sep 14 09:44:44 2014 -0400
-
- Revert "ahci_xgene: Skip the PHY and clock initialization if already configured by the firmware."
-
- This reverts commit 0bed13bebd6c99d097796d2ca6c4f10fb5b2eabc.
-
- Temporarily revert for backwards compatibility with rh-0.12-1 firmware
-
-commit e8afbea7e3e11f37c234770d72725894f92de415
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Aug 11 13:46:43 2014 -0400
-
- xgene: add support for ACPI-probed serial port
-
-commit 3d0ad3e452a81a32842d85dbb88078b74582efb5
-Author: Mark Salter <msalter@redhat.com>
-Date: Sat Aug 9 12:01:20 2014 -0400
-
- sata/xgene: support acpi probing
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit a42353df5a2f741e8d2e356c3f053aac8d3eff0e
-Author: Mark Salter <msalter@redhat.com>
-Date: Thu Sep 18 15:05:23 2014 -0400
-
- arm64: add sev to parking protocol
-
- Parking protocol wakes secondary cores with an interrupt.
- This patch adds an additional sev() to send an event. This
- is a temporary hack for APM Mustang board and not intended
- for upstream.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit d81f088880b9d763a7006e40dff6bb526c534255
-Author: Mark Salter <msalter@redhat.com>
-Date: Tue Sep 9 22:59:48 2014 -0400
-
- arm64: add parking protocol support
-
- This is a first-cut effort at parking protocol support. It is
- very much a work in progress (as is the spec it is based on).
- This code deviates from the current spec in a number of ways
- to work around current firmware issues and issues with kernels
- using 64K page sizes.
-
- caveat utilitor
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 475b6ce1555e1146761b53c550f2ac019311739f
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Thu Aug 28 14:26:16 2014 -0400
-
- ARM64 / ACPI: Introduce some PCI functions when PCI is enabled
-
- Introduce some PCI functions to make ACPI can be compiled when
- CONFIG_PCI is enabled, these functions should be revisited when
- implemented on ARM64.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
- [fixed up for 3.17-rc]
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit cb6ebe40936adc5c3154abbec6f89ccb8a0536b7
-Author: Al Stone <ahs3@redhat.com>
-Date: Thu Aug 28 13:14:16 2014 -0400
-
- Fix arm64 compilation error in PNP code
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit b7fc0378e13207a53a3e8466ba6329cfbcaa0526
-Author: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
-Date: Tue Sep 9 15:37:15 2014 -0500
-
- ata: ahci_platform: Add ACPI support for AMD Seattle SATA controller
-
- This patch adds ACPI support for non-PCI SATA contoller in ahci_platform driver.
- It adds ACPI matching table in ahci_platform to support AMD Seattle SATA controller
- with following ASL structure in DSDT:
-
- Device (SATA0)
- {
- Name(_HID, "AMDI0600") // Seattle AHSATA
- Name (_CCA, 1) // Cache-coherent controller
- Name (_CRS, ResourceTemplate ()
- {
- Memory32Fixed (ReadWrite, 0xE0300000, 0x00010000)
- Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive,,,) { 387 }
- })
- }
-
- Since ATA driver should not require PCI support for ATA_ACPI,
- this patch also removes dependency in the driver/ata/Kconfig.
-
- Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
-
-commit c5b655e6af273a61e7ec3653deb3550ae4f7abf1
-Author: Mark Salter <msalter@redhat.com>
-Date: Wed Nov 19 10:08:29 2014 -0500
-
- tty/sbsauart: make ttySBSA the active console device
-
- The sbsauart driver doesn't register itself as a console
- until module_initcall time. This allows the virtual console
- driver to register the active console if no console= is
- given on the cmdline. This patch allows ttySBSA to take
- over the active console device role from any existing
- console device if no console= is given on the cmdline.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 6bee52af3d281d91b871f6876138fa51a41f0472
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Wed Aug 13 13:47:18 2014 +0100
-
- tty: SBSA compatible UART
-
- This is a subset of pl011 UART which does not supprt DMA or baud rate
- changing. It does, however, provide earlycon support (i.e., using
- "earlycon=ttySBSA" on the kernel command line).
-
- It is specified in the Server Base System Architecture document from
- ARM.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
-
-commit a66f13e7c17cf7283b9987da2349c0a5c204fa4b
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Sep 8 11:58:46 2014 -0400
-
- acpi: fix acpi_os_ioremap for arm64
-
- The acpi_os_ioremap() function may be used to map normal RAM or IO
- regions. The current implementation simply uses ioremap_cache(). This
- will work for some architectures, but arm64 ioremap_cache() cannot be
- used to map IO regions which don't support caching. So for arm64, use
- ioremap() for non-RAM regions.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit b00f36975b651c0afbddee49e84109694e610f43
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Mon Sep 8 10:36:44 2014 -0400
-
- acpi: add arm to the platforms that use ioremap
-
- Now with the base changes to the arm memory mapping it is safe
- to convert to using ioremap to map in the tables.
-
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
-
-commit 4f6ca522fc13d8c13c844a2c2f9eafe091a336a9
-Author: Mark Salter <msalter@redhat.com>
-Date: Mon Sep 8 17:04:28 2014 -0400
-
- acpi/arm64: NOT FOR UPSTREAM - remove EXPERT dependency
-
- For convenience to keep existing configs working, remove
- CONFIG_EXPERT dependency from ACPI for ARM64. This shouldn't
- go upstream just yet.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 91eaa3c5387ebcf698b070a4c21e39e5240699ba
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Fri Oct 17 21:37:14 2014 +0800
-
- Documentation: ACPI for ARM64
-
- Add documentation for the guidelines of how to use ACPI
- on ARM64.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit ef17919599275fd58edb255ecf69807653cdd763
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Fri Oct 17 21:37:13 2014 +0800
-
- ARM64 / ACPI: Enable ARM64 in Kconfig
-
- Add Kconfigs to build ACPI on ARM64, and make ACPI available on ARM64.
-
- acpi_idle driver is x86/IA64 dependent now, so make CONFIG_ACPI_PROCESSOR
- depend on X86 || IA64, and implement it on ARM64 in the future.
-
- Reviewed-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 7d78ff059af78cc5a80576314c38584834557fc1
-Author: Al Stone <al.stone@linaro.org>
-Date: Fri Oct 17 21:37:12 2014 +0800
-
- ARM64 / ACPI: Select ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on ARM64
-
- ACPI reduced hardware mode is disabled by default, but ARM64
- can only run properly in ACPI hardware reduced mode, so select
- ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on ARM64.
-
- Reviewed-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 8a387ea5071c9d8bdaf5305320130022ec1d4f7d
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:11 2014 +0800
-
- ARM64 / ACPI: Parse GTDT to initialize arch timer
-
- Using the information presented by GTDT to initialize the arch
- timer (not memory-mapped).
-
- Originally-by: Amit Daniel Kachhap <amit.daniel@samsung.com>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 7523c8b3b0d23629781c4581272c0647fa543af5
-Author: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-Date: Fri Oct 17 21:37:10 2014 +0800
-
- ARM64 / ACPI: Add GICv2 specific ACPI boot support
-
- ACPI kernel uses MADT table for proper GIC initialization. It needs to
- parse GIC related subtables, collect CPU interface and distributor
- addresses and call driver initialization function (which is hardware
- abstraction agnostic). In a similar way, FDT initialize GICv1/2.
-
- NOTE: This commit allow to initialize GICv1/2 basic functionality.
- GICv2 vitalization extension, GICv3/4 and ITS are considered as next
- steps.
-
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 743691994f2fb03bc05f539a42ba6ccccb5d18b8
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:09 2014 +0800
-
- ARM64 / ACPI: Introduce ACPI_IRQ_MODEL_GIC and register device's gsi
-
- Introduce ACPI_IRQ_MODEL_GIC which is needed for ARM64 as GIC is
- used, and then register device's gsi with the core IRQ subsystem.
-
- acpi_register_gsi() is similar to DT based irq_of_parse_and_map(),
- since gsi is unique in the system, so use hwirq number directly
- for the mapping.
-
- Originally-by: Amit Daniel Kachhap <amit.daniel@samsung.com>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 0c4d9983cb7b50351aad0aa32e8b6134adaabb0d
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:08 2014 +0800
-
- ACPI / processor: Make it possible to get CPU hardware ID via GICC
-
- Introduce a new function map_gicc_mpidr() to allow MPIDRs to be obtained
- from the GICC Structure introduced by ACPI 5.1.
-
- MPIDR is the CPU hardware ID as local APIC ID on x86 platform, so we use
- MPIDR not the GIC CPU interface ID to identify CPUs.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit cb6b980abe388e25e357f73c5780aa1cf1b2e337
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:07 2014 +0800
-
- ARM64 / ACPI: Parse MADT for SMP initialization
-
- MADT contains the information for MPIDR which is essential for
- SMP initialization, parse the GIC cpu interface structures to
- get the MPIDR value and map it to cpu_logical_map(), and add
- enabled cpu with valid MPIDR into cpu_possible_map.
-
- ACPI 5.1 only has two explicit methods to boot up SMP, PSCI and
- Parking protocol, but the Parking protocol is only specified for
- ARMv7 now, so make PSCI as the only way for the SMP boot protocol
- before some updates for the ACPI spec or the Parking protocol spec.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-
-commit 74a72e003ae388f460294a0910a536aced8ce93c
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:06 2014 +0800
-
- ACPI / table: Print GIC information when MADT is parsed
-
- When MADT is parsed, print GIC information to make the boot
- log look pretty:
-
- ACPI: GICC (acpi_id[0x0000] address[00000000e112f000] MPDIR[0x0] enabled)
- ACPI: GICC (acpi_id[0x0001] address[00000000e112f000] MPDIR[0x1] enabled)
- ...
- ACPI: GICC (acpi_id[0x0201] address[00000000e112f000] MPDIR[0x201] enabled)
-
- These information will be very helpful to bring up early systems to
- see if acpi_id and MPIDR are matched or not as spec defined.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-
-commit 059facbd0f0664aaaf6d732ce02b2f56ea6ad98f
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:05 2014 +0800
-
- ARM64 / ACPI: Parse FADT table to get PSCI flags for PSCI init
-
- There are two flags: PSCI_COMPLIANT and PSCI_USE_HVC. When set,
- the former signals to the OS that the firmware is PSCI compliant.
- The latter selects the appropriate conduit for PSCI calls by
- toggling between Hypervisor Calls (HVC) and Secure Monitor Calls
- (SMC).
-
- FADT table contains such information, parse FADT to get the flags
- for PSCI init. Since ACPI 5.1 doesn't support self defined PSCI
- function IDs, which means that only PSCI 0.2+ is supported in ACPI.
-
- At the same time, only ACPI 5.1 or higher verison supports PSCI,
- and FADT Major.Minor version was introduced in ACPI 5.1, so we
- will check the version and only parse FADT table with version >= 5.1.
-
- If firmware provides ACPI tables with ACPI version less than 5.1,
- OS will be messed up with those information and have no way to init
- smp and GIC, so disable ACPI if we get an FADT table with version
- less that 5.1.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-
-commit 7ec63267bb1630c62e5f7fd2eb75a9a31131c89a
-Author: Hanjun Guo <hanjun.guo@linaro.org>
-Date: Fri Oct 17 21:37:04 2014 +0800
-
- ARM64 / ACPI: Make PCI optional for ACPI on ARM64
-
- As PCI for ARM64 is not ready, so introduce some stub functions
- to make PCI optional for ACPI, and make ACPI core run without
- CONFIG_PCI on ARM64.
-
- Since ACPI on X86 and IA64 depends on PCI and this patch only makes
- PCI optional for ARM64, it will not break anything on X86 and IA64.
-
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 2f1dd91e7866f2b617af29e9973b88b2cc2e00d6
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Fri Oct 17 21:37:03 2014 +0800
-
- ARM64 / ACPI: If we chose to boot from acpi then disable FDT
-
- If the early boot methods of acpi are happy that we have valid ACPI
- tables and acpi=force has been passed, then do not unflat devicetree
- effectively disabling further hardware probing from DT.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 6941a3cced9ca3d29e6e9c8b0f43917526b74789
-Author: Al Stone <al.stone@linaro.org>
-Date: Fri Oct 17 21:37:02 2014 +0800
-
- ARM64 / ACPI: Introduce early_param for "acpi" and pass acpi=force to enable ACPI
-
- Introduce one early parameters "off" and "force" for "acpi", acpi=off
- will be the default behavior for ARM64, so introduce acpi=force to
- enable ACPI on ARM64.
-
- Disable ACPI before early parameters parsed, and enable it to pass
- "acpi=force" if people want use ACPI on ARM64. This ensures DT be
- the prefer one if ACPI table and DT both are provided at this moment.
-
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 8764d6bd07827a2a29eaaa382fc397527ad1ba19
-Author: Graeme Gregory <graeme.gregory@linaro.org>
-Date: Fri Oct 17 21:37:01 2014 +0800
-
- ARM64 / ACPI: Introduce sleep-arm.c
-
- ACPI 5.1 does not currently support S states for ARM64 hardware but
- ACPI code will call acpi_target_system_state() for device power
- managment, so introduce sleep-arm.c to allow other drivers to function
- until S states are defined.
-
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit 37144fd61ca68e9d542e875187739c982c8d3662
-Author: Al Stone <al.stone@linaro.org>
-Date: Fri Oct 17 21:37:00 2014 +0800
-
- ARM64 / ACPI: Get RSDP and ACPI boot-time tables
-
- As we want to get ACPI tables to parse and then use the information
- for system initialization, we should get the RSDP (Root System
- Description Pointer) first, it then locates Extended Root Description
- Table (XSDT) which contains all the 64-bit physical address that
- pointer to other boot-time tables.
-
- Introduce acpi.c and its related head file in this patch to provide
- fundamental needs of extern variables and functions for ACPI core,
- and then get boot-time tables as needed.
- - asm/acenv.h for arch specific ACPICA environments and
- implementation, It is needed unconditionally by ACPI core;
- - asm/acpi.h for arch specific variables and functions needed by
- ACPI driver core;
- - acpi.c for ARM64 related ACPI implementation for ACPI driver
- core;
-
- acpi_boot_table_init() is introduced to get RSDP and boot-time tables,
- it will be called in setup_arch() before paging_init(), so we should
- use eary_memremap() mechanism here to get the RSDP and all the table
- pointers.
-
- Signed-off-by: Al Stone <al.stone@linaro.org>
- Signed-off-by: Graeme Gregory <graeme.gregory@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit a4f035d2876b41b6f224321da6b6278de577d4c5
-Author: Tomasz Nowicki <tomasz.nowicki@linaro.org>
-Date: Fri Oct 17 21:36:59 2014 +0800
-
- ACPI / table: Count matched and successfully parsed entries without specifying max entries
-
- It is very useful to traverse all available table entries without max
- number of expected entries type. Current acpi_parse_entries()
- implementation gives that feature but it does not count those entries,
- it returns 0 instead, so fix it to count matched and successfully
- entries and return it.
-
- NOTE: This change has no impact to x86 and ia64 archs since existing code
- checks for error occurrence only (acpi_parse_entries(...,0) < 0).
-
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit b3055f38d52f5be0103b436a1b04fbf3947aaa39
-Author: Ashwin Chaugule <ashwin.chaugule@linaro.org>
-Date: Fri Oct 17 21:36:58 2014 +0800
-
- ACPI / table: Add new function to get table entries
-
- The acpi_table_parse() function has a callback that
- passes a pointer to a table_header. Add a new function
- which takes this pointer and parses its entries. This
- eliminates the need to re-traverse all the tables for
- each call. e.g. as in acpi_table_parse_madt() which is
- normally called after acpi_table_parse().
-
- Acked-by: Grant Likely <grant.likely@linaro.org>
- Signed-off-by: Ashwin Chaugule <ashwin.chaugule@linaro.org>
- Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
- Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
-
-commit fff62dfc1d7ab6ad3d528b008413fd116d208150
-Author: Mark Salter <msalter@redhat.com>
-Date: Sat Nov 8 22:25:48 2014 -0500
-
- arm64: use UEFI for reboot
-
- Wire in support for UEFI reboot. We want UEFI reboot to have
- highest priority for capsule support.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 997a0488adb3f525aedb678b584f2733f43e248e
-Author: Mark Salter <msalter@redhat.com>
-Date: Sat Nov 8 15:25:41 2014 -0500
-
- arm64: use UEFI as last resort for poweroff
-
- Wire in support for poweroff via UEFI.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit 5b823d4bf52286f97dc76683b533ae5c08763897
-Author: Mark Salter <msalter@redhat.com>
-Date: Thu Jul 17 13:34:50 2014 -0400
-
- ahci_xgene: add errata workaround for ATA_CMD_SMART
-
- commit 2a0bdff6b958d1b2:
-
- ahci_xgene: fix the dma state machine lockup for the IDENTIFY DEVICE PIO mode command.
-
- added a workaround for X-Gene AHCI controller errata. This was done
- for all ATA_CMD_ID_ATA commands. The errata also appears to affect
- ATA_CMD_SMART commands as well. This was discovered when running
- smartd or just smartctl -x. This patch adds a dma engine restart for
- ATA_CMD_SMART commands which clears up the issues seen with smartd.
-
- Signed-off-by: Mark Salter <msalter@redhat.com>
-
-commit f866806e1ca75a0efc62cda59559286faa7c9926
-Author: Kyle McMartin <kmcmarti@redhat.com>
-Date: Tue May 13 22:25:26 2014 -0400
-
- arm64: don't set READ_IMPLIES_EXEC for EM_AARCH64 ELF objects
-
- Message-id: <20140513222526.GC26038@redacted.bos.redhat.com>
- Patchwork-id: 79789
- O-Subject: [ACADIA PATCH] arm64: don't set READ_IMPLIES_EXEC for EM_AARCH64 ELF objects
- Bugzilla: 1085528
-
- BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1085528
- Upstream: submitted soon
-
- [Sadly this isn't (yet) sufficient... but it fixes at least one issue
- here... cat /proc/$$/personality shows READ_IMPLIES_EXEC before. I'll
- try to figure the rest out tomorrow.]
-
- Currently, we're accidentally ending up with executable stacks on
- AArch64 when the ABI says we shouldn't be, and relying on glibc to fix
- things up for us when we're loaded. However, SELinux will deny us
- mucking with the stack, and hit us with execmem AVCs.
-
- The reason this is happening is somewhat complex:
-
- fs/binfmt_elf.c:load_elf_binary()
- - initializes executable_stack = EXSTACK_DEFAULT implying the
- architecture should make up its mind.
- - does a pile of loading goo
- - runs through the program headers, looking for PT_GNU_STACK
- and setting (or unsetting) executable_stack if it finds it.
-
- This is our first problem, we won't generate these unless an
- executable stack is explicitly requested.
-
- - more ELF loading goo
- - sets whether we're a compat task or not (TIF_32BIT) based on compat.h
- - for compat reasons (pre-GNU_STACK) checks if the READ_IMPLIES_EXEC
- flag should be set for ancient toolchains
-
- Here's our second problem, we test if read_implies_exec based on
- stk != EXSTACK_DISABLE_X, which is true since stk == EXSTACK_DEFAULT.
-
- So we set current->personality |= READ_IMPLIES_EXEC like a broken
- legacy toolchain would want.
-
- - Now we call setup_arg_pages to set up the stack...
-
- fs/exec.c:setup_arg_pages()
- - lots of magic happens here
- - vm_flags gets initialized to VM_STACK_FLAGS
-
- Here's our third problem, VM_STACK_FLAGS on arm64 is
- VM_DEFAULT_DATA_FLAG which tests READ_IMPLIES_EXEC and sets VM_EXEC
- if it's true. So we end up with an executable stack mapping, since we
- don't have executable_stack set (it's still EXSTACK_DEFAULT at this
- point) to unset it anywhere.
-
- Bang. execstack AVC when the program starts running.
-
- The easiest way I can see to fix this is to test if we're a legacy task
- and fix it up there. But that's not as simple as it sounds, because
- the 32-bit ABI depends on what revision of the CPU we've enabled (not
- that it matters since we're ARMv8...) Regardless, in the compat case,
- set READ_IMPLIES_EXEC if we've found a GNU_STACK header which explicitly
- requested it as in arch/arm/kernel/elf.c:arm_elf_read_implies_exec().
-
- Signed-off-by: Kyle McMartin <kmcmarti@redhat.com>
- Signed-off-by: Donald Dutile <ddutile@redhat.com>
-
-commit a68d368ceb495cabafe82cdd0b83ec1e271a7f9d
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Fri Nov 7 14:12:34 2014 +0000
-
- arm64: kvm: eliminate literal pool entries
-
- Replace two instances of 'ldr xN, =(constant)' in the world switch
- hot path with 'mov' instructions.
-
- Acked-by: Marc Zyngier <marc.zyngier@arm.com>
- Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 246a31b3a8f065e831a6d8d9fd96f3a8e17dbdb9
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Fri Nov 7 14:12:33 2014 +0000
-
- arm64: ftrace: eliminate literal pool entries
-
- Replace ldr xN, =<symbol> with adrp/add or adrp/ldr [as appropriate]
- in the implementation of _mcount(), which may be called very often.
-
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit ecd0f8e21514e8ac758ed16a188faaa4c5ef75c7
-Author: Mark Rutland <mark.rutland@arm.com>
-Date: Tue Nov 4 10:50:16 2014 +0000
-
- arm64: log physical ID of boot CPU
-
- In certain debugging scenarios it's useful to know the physical ID (i.e.
- the MPIDR_EL1.Aff* fields) of the boot CPU, but we don't currently log
- this as we do for 32-bit ARM kernels.
-
- This patch makes the kernel log the physical ID of the boot CPU early in
- the boot process. The CPU logical map initialisation is folded in to
- smp_setup_processor_id (which contrary to its name is also called by UP
- kernels). This is called before setup_arch, so should not adversely
- affect existing cpu_logical_map users.
-
- Acked-by: Sudeep Holla <sudeep.holla@arm.com>
- Acked-by: Catalin Marinas <catalin.marinas@arm.com>
- Acked-by: Lorenzo Pieralisis <lorenzo.pieralisi@arm.com>
- Signed-off-by: Mark Rutland <mark.rutland@arm.com>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 2899d6ea451eb0037427bbf430069f73cb76becc
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Mon Nov 3 16:50:01 2014 +0000
-
- arm64/crypto: use crypto instructions to generate AES key schedule
-
- This patch implements the AES key schedule generation using ARMv8
- Crypto Instructions. It replaces the table based C implementation
- in aes_generic.ko, which means we can drop the dependency on that
- module.
-
- Tested-by: Steve Capper <steve.capper@linaro.org>
- Acked-by: Steve Capper <steve.capper@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 67b1122c25f0c7a9a126ebabcd2085ef99640c13
-Author: Geoff Levand <geoff@infradead.org>
-Date: Fri Oct 31 23:06:47 2014 +0000
-
- arm64/kvm: Fix assembler compatibility of macros
-
- Some of the macros defined in kvm_arm.h are useful in assembly files, but are
- not compatible with the assembler. Change any C language integer constant
- definitions using appended U, UL, or ULL to the UL() preprocessor macro. Also,
- add a preprocessor include of the asm/memory.h file which defines the UL()
- macro.
-
- Fixes build errors like these when using kvm_arm.h in assembly
- source files:
-
- Error: unexpected characters following instruction at operand 3 -- `and x0,x1,#((1U<<25)-1)'
-
- Acked-by: Mark Rutland <mark.rutland@arm.com>
- Signed-off-by: Geoff Levand <geoff@infradead.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 6a3c07e9aa03b7fbec14ab8bc21fce8590f12d83
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Tue Oct 28 12:24:20 2014 +0000
-
- arm64/dt: add machine name to kernel call stack dump output
-
- This installs the machine name as recorded by setup_machine_fdt()
- as dump stack arch description. This results in the string to be
- included in call stack dumps, as is shown here:
-
- ...
- Bad mode in Synchronous Abort handler detected, code 0x84000005
- CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0-rc2+ #548
- > Hardware name: linux,dummy-virt (DT)
- task: ffffffc07c870000 ti: ffffffc07c878000 task.ti: ffffffc07c878000
- PC is at 0x0
- ...
-
- Note that systems that support DMI/SMBIOS may override this later.
-
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 7c0569a739d0f1dd8ffd709cf37c53bb42143687
-Author: Steve Capper <steve.capper@linaro.org>
-Date: Fri Oct 24 13:22:20 2014 +0100
-
- arm64: xchg: Implement cmpxchg_double
-
- The arm64 architecture has the ability to exclusively load and store
- a pair of registers from an address (ldxp/stxp). Also the SLUB can take
- advantage of a cmpxchg_double implementation to avoid taking some
- locks.
-
- This patch provides an implementation of cmpxchg_double for 64-bit
- pairs, and activates the logic required for the SLUB to use these
- functions (HAVE_ALIGNED_STRUCT_PAGE and HAVE_CMPXCHG_DOUBLE).
-
- Also definitions of this_cpu_cmpxchg_8 and this_cpu_cmpxchg_double_8
- are wired up to cmpxchg_local and cmpxchg_double_local (rather than the
- stock implementations that perform non-atomic operations with
- interrupts disabled) as they are used by the SLUB.
-
- On a Juno platform running on only the A57s I get quite a noticeable
- performance improvement with 5 runs of hackbench on v3.17:
-
- Baseline | With Patch
- -----------------+-----------
- Mean 119.2312 | 106.1782
- StdDev 0.4919 | 0.4494
-
- (times taken to complete `./hackbench 100 process 1000', in seconds)
-
- Signed-off-by: Steve Capper <steve.capper@linaro.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 7acf53bfb80c2823d233c14d33cfd2d119713b89
-Author: Joonwoo Park <joonwoop@codeaurora.org>
-Date: Tue Oct 21 01:59:03 2014 +0100
-
- arm64: optimize memcpy_{from,to}io() and memset_io()
-
- Optimize memcpy_{from,to}io() and memset_io() by transferring in 64 bit
- as much as possible with minimized barrier usage. This simplest
- optimization brings faster throughput compare to current byte-by-byte read
- and write with barrier in the loop. Code's skeleton is taken from the
- powerpc.
-
- Link: http://lkml.kernel.org/p/20141020133304.GH23751@e104818-lin.cambridge.arm.com
- Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
- Reviewed-by: Trilok Soni <tsoni@codeaurora.org>
- Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
- Signed-off-by: Will Deacon <will.deacon@arm.com>
-
-commit 1971c19fb2a38a1d94cedada404760a917c36cd4
-Author: Mark Rutland <mark.rutland@arm.com>
-Date: Thu Oct 23 16:33:33 2014 +0100
-
- efi: efi-stub: notify on DTB absence
-
- In the absence of a DTB configuration table, the EFI stub will happily
- continue attempting to boot a kernel, despite the fact that this kernel
- may not function without a description of the hardware. In this case, as
- with a typo'd "dtb=" option (e.g. "dbt=") or many other possible
- failures, the only output seen by the user will be the rather terse
- output from the EFI stub:
-
- EFI stub: Booting Linux Kernel...
-
- To aid those attempting to debug such failures, this patch adds a notice
- when no DTB is found, making the output more helpful:
-
- EFI stub: Booting Linux Kernel...
- EFI stub: Generating empty DTB
-
- Additionally, a positive acknowledgement is added when a user-specified
- DTB is in use:
-
- EFI stub: Booting Linux Kernel...
- EFI stub: Using DTB from command line
-
- Similarly, a positive acknowledgement is added when a DTB from a
- configuration table is in use:
-
- EFI stub: Booting Linux Kernel...
- EFI stub: Using DTB from configuration table
-
- Signed-off-by: Mark Rutland <mark.rutland@arm.com>
- Acked-by: Leif Lindholm <leif.lindholm@linaro.org>
- Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
- Acked-by: Roy Franz <roy.franz@linaro.org>
- Acked-by: Matt Fleming <matt.fleming@intel.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 7652016ff98e614ed2e3abac19b996af02434293
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Wed Oct 15 09:36:50 2014 +0200
-
- arm64: dmi: set DMI string as dump stack arch description
-
- This sets the DMI string, containing system type, serial number,
- firmware version etc. as dump stack arch description, so that oopses
- and other kernel stack dumps automatically have this information
- included, if available.
-
- Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
- Acked-by: Leif Lindholm <leif.lindholm@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 2586f232bd388d2223f3c7bcba446b2bd25d8e3d
-Author: Yi Li <yi.li@linaro.org>
-Date: Sat Oct 4 23:46:43 2014 +0800
-
- arm64: dmi: Add SMBIOS/DMI support
-
- SMBIOS is important for server hardware vendors. It implements a spec for
- providing descriptive information about the platform. Things like serial
- numbers, physical layout of the ports, build configuration data, and the like.
-
- Signed-off-by: Yi Li <yi.li@linaro.org>
- Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
- Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 16b52b24f3d7a4f1555e4233398172b32306c1e4
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Tue Oct 14 16:41:27 2014 +0200
-
- dmi: add support for SMBIOS 3.0 64-bit entry point
-
- The DMTF SMBIOS reference spec v3.0.0 defines a new 64-bit entry point,
- which enables support for SMBIOS structure tables residing at a physical
- offset over 4 GB. This is especially important for upcoming arm64
- platforms whose system RAM resides entirely above the 4 GB boundary.
-
- For the UEFI case, this code attempts to detect the new SMBIOS 3.0
- header magic at the offset passed in the SMBIOS3_TABLE_GUID UEFI
- configuration table. If this configuration table is not provided, or
- if we fail to parse the header, we fall back to using the legacy
- SMBIOS_TABLE_GUID configuration table. This is in line with the spec,
- that allows both configuration tables to be provided, but mandates that
- they must point to the same structure table, unless the version pointed
- to by the 64-bit entry point is a superset of the 32-bit one.
-
- For the non-UEFI case, the detection logic is modified to look for the
- SMBIOS 3.0 header magic before it looks for the legacy header magic.
-
- Note that this patch is based on version 3.0.0d [draft] of the
- specification, which is expected not to deviate from the final version
- in ways that would affect the correctness of this implementation.
-
- Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
- Acked-by: Leif Lindholm <leif.lindholm@linaro.org>
- Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
- Cc: Andrew Morton <akpm@linux-foundation.org>
- Cc: Tony Luck <tony.luck@intel.com>
- Acked-by: Matt Fleming <matt.fleming@intel.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 016f4b4f5cee9ddd8c243a36c220a65bdfb82dc8
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Tue Oct 14 16:34:47 2014 +0200
-
- efi: dmi: add support for SMBIOS 3.0 UEFI configuration table
-
- This adds support to the UEFI side for detecting the presence of
- a SMBIOS 3.0 64-bit entry point. This allows the actual SMBIOS
- structure table to reside at a physical offset over 4 GB, which
- cannot be supported by the legacy SMBIOS 32-bit entry point.
-
- Since the firmware can legally provide both entry points, store
- the SMBIOS 3.0 entry point in a separate variable, and let the
- DMI decoding layer decide which one will be used.
-
- Tested-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
- Acked-by: Leif Lindholm <leif.lindholm@linaro.org>
- Acked-by: Matt Fleming <matt.fleming@intel.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit ac627ea950e853f0a3f91607fb16cb9477f434d7
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Fri Oct 17 12:44:11 2014 +0200
-
- arm64/efi: drop redundant set_bit(EFI_CONFIG_TABLES)
-
- The EFI_CONFIG_TABLES bit already gets set by efi_config_init(),
- so there is no reason to set it again after this function returns
- successfully.
-
- Acked-by: Will Deacon <will.deacon@arm.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 850ba08a3f4756a8340edadd4fdeccd881813ba5
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Mon Oct 20 15:31:57 2014 +0200
-
- arm64/efi: invert UEFI memory region reservation logic
-
- Instead of reserving the memory regions based on which types we know
- need to be reserved, consider only regions of the following types as
- free for general use by the OS:
-
- EFI_LOADER_CODE
- EFI_LOADER_DATA
- EFI_BOOT_SERVICES_CODE
- EFI_BOOT_SERVICES_DATA
- EFI_CONVENTIONAL_MEMORY
-
- Note that this also fixes a problem with the original code, which would
- misidentify a EFI_RUNTIME_SERVICES_DATA region as not reserved if it
- does not have the EFI_MEMORY_RUNTIME attribute set. However, it is
- perfectly legal for the firmware not to request a virtual mapping for
- EFI_RUNTIME_SERVICES_DATA regions that contain configuration tables, in
- which case the EFI_MEMORY_RUNTIME attribute would not be set.
-
- Acked-by: Roy Franz <roy.franz@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 2787807ca4f5f7df82a5c54312753b157e8c052e
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Fri Oct 10 18:42:55 2014 +0200
-
- arm64/efi: set PE/COFF file alignment to 512 bytes
-
- Change our PE/COFF header to use the minimum file alignment of
- 512 bytes (0x200), as mandated by the PE/COFF spec v8.3
-
- Also update the linker script so that the Image file itself is also a
- round multiple of FileAlignment.
-
- Acked-by: Catalin Marinas <catalin.marinas@arm.com>
- Acked-by: Roy Franz <roy.franz@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 7bd0585d9ab62d9787c389d3b62141b76319e5f7
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Fri Oct 10 11:25:24 2014 +0200
-
- arm64/efi: set PE/COFF section alignment to 4 KB
-
- Position independent AArch64 code needs to be linked and loaded at the
- same relative offset from a 4 KB boundary, or adrp/add and adrp/ldr
- pairs will not work correctly. (This is how PC relative symbol
- references with a 4 GB reach are emitted)
-
- We need to declare this in the PE/COFF header, otherwise the PE/COFF
- loader may load the Image and invoke the stub at an offset which
- violates this rule.
-
- Reviewed-by: Roy Franz <roy.franz@linaro.org>
- Acked-by: Mark Rutland <mark.rutland@arm.com>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
-commit 5a0edb2dbdf9327322ae57e8e16d162c2a371318
-Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-Date: Wed Oct 8 16:11:27 2014 +0200
-
- arm64/efi: efistub: jump to 'stext' directly, not through the header
-
- After the EFI stub has done its business, it jumps into the kernel by
- branching to offset #0 of the loaded Image, which is where it expects
- to find the header containing a 'branch to stext' instruction.
-
- However, the UEFI spec 2.1.1 states the following regarding PE/COFF
- image loading:
- "A UEFI image is loaded into memory through the LoadImage() Boot
- Service. This service loads an image with a PE32+ format into memory.
- This PE32+ loader is required to load all sections of the PE32+ image
- into memory."
-
- In other words, it is /not/ required to load parts of the image that are
- not covered by a PE/COFF section, so it may not have loaded the header
- at the expected offset, as it is not covered by any PE/COFF section.
-
- So instead, jump to 'stext' directly, which is at the base of the
- PE/COFF .text section, by supplying a symbol 'stext_offset' to
- efi-entry.o which contains the relative offset of stext into the Image.
- Also replace other open coded calculations of the same value with a
- reference to 'stext_offset'
-
- Acked-by: Mark Rutland <mark.rutland@arm.com>
- Acked-by: Roy Franz <roy.franz@linaro.org>
- Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-
- Documentation/acpi/gpio-properties.txt | 96 +++
Documentation/arm64/arm-acpi.txt | 323 ++++++++++
- Documentation/gpio/consumer.txt | 18 +
Documentation/kernel-parameters.txt | 3 +-
- arch/arm/include/asm/kvm_mmu.h | 5 +-
- arch/arm/kvm/mmu.c | 22 +-
- arch/arm/mach-s3c24xx/h1940-bluetooth.c | 4 +-
- arch/arm/mach-s3c24xx/h1940.h | 4 +-
- arch/arm/mach-s3c24xx/mach-h1940.c | 3 +-
- arch/arm/mach-s3c24xx/mach-rx1950.c | 3 +-
- arch/arm/plat-orion/gpio.c | 3 +-
- arch/arm/plat-orion/include/plat/orion-gpio.h | 5 +-
- arch/arm64/Kconfig | 22 +
+ arch/arm/kvm/mmu.c | 4 +
+ arch/arm64/Kconfig | 9 +
arch/arm64/Makefile | 1 +
- arch/arm64/crypto/Kconfig | 5 +-
- arch/arm64/crypto/aes-ce-ccm-glue.c | 4 +-
- arch/arm64/crypto/aes-ce-cipher.c | 112 +++-
- arch/arm64/crypto/aes-ce-setkey.h | 5 +
- arch/arm64/crypto/aes-glue.c | 18 +-
arch/arm64/include/asm/acenv.h | 18 +
arch/arm64/include/asm/acpi.h | 102 +++
- arch/arm64/include/asm/cmpxchg.h | 71 +++
arch/arm64/include/asm/cpu_ops.h | 1 +
- arch/arm64/include/asm/dmi.h | 31 +
arch/arm64/include/asm/elf.h | 3 +-
- arch/arm64/include/asm/kvm_arm.h | 21 +-
- arch/arm64/include/asm/kvm_mmu.h | 5 +-
arch/arm64/include/asm/pci.h | 51 ++
arch/arm64/include/asm/psci.h | 3 +-
arch/arm64/include/asm/smp.h | 10 +-
arch/arm64/kernel/Makefile | 4 +-
arch/arm64/kernel/acpi.c | 398 ++++++++++++
arch/arm64/kernel/cpu_ops.c | 8 +-
- arch/arm64/kernel/efi-entry.S | 3 +-
- arch/arm64/kernel/efi.c | 74 ++-
- arch/arm64/kernel/entry-ftrace.S | 21 +-
- arch/arm64/kernel/head.S | 24 +-
- arch/arm64/kernel/io.c | 66 +-
+ arch/arm64/kernel/efi.c | 37 ++
arch/arm64/kernel/pci.c | 97 ++-
arch/arm64/kernel/psci.c | 78 ++-
- arch/arm64/kernel/setup.c | 51 +-
+ arch/arm64/kernel/setup.c | 44 +-
arch/arm64/kernel/smp.c | 2 +-
arch/arm64/kernel/smp_parking_protocol.c | 110 ++++
arch/arm64/kernel/time.c | 7 +
- arch/arm64/kernel/vmlinux.lds.S | 17 +
- arch/arm64/kvm/hyp.S | 4 +-
arch/arm64/mm/dma-mapping.c | 112 ++++
arch/arm64/pci/Makefile | 2 +
arch/arm64/pci/mmconfig.c | 292 +++++++++
arch/arm64/pci/pci.c | 461 ++++++++++++++
drivers/acpi/Kconfig | 6 +-
- drivers/acpi/Makefile | 7 +-
+ drivers/acpi/Makefile | 6 +-
drivers/acpi/bus.c | 3 +
- drivers/acpi/internal.h | 11 +
+ drivers/acpi/internal.h | 5 +
drivers/acpi/osl.c | 6 +-
drivers/acpi/processor_core.c | 37 ++
- drivers/acpi/property.c | 551 ++++++++++++++++
- drivers/acpi/scan.c | 129 +++-
drivers/acpi/sleep-arm.c | 28 +
- drivers/acpi/tables.c | 115 +++-
+ drivers/acpi/tables.c | 48 +-
drivers/acpi/utils.c | 26 +
drivers/ata/Kconfig | 2 +-
drivers/ata/ahci_platform.c | 13 +
drivers/ata/ahci_xgene.c | 30 +-
- drivers/base/Makefile | 2 +-
- drivers/base/property.c | 431 +++++++++++++
- drivers/clocksource/arm_arch_timer.c | 120 +++-
- drivers/firmware/dmi_scan.c | 79 ++-
- drivers/firmware/efi/efi.c | 4 +
- drivers/firmware/efi/libstub/arm-stub.c | 11 +-
- drivers/gpio/devres.c | 32 +
- drivers/gpio/gpio-sch.c | 293 ++++-----
- drivers/gpio/gpiolib-acpi.c | 117 +++-
- drivers/gpio/gpiolib.c | 85 ++-
- drivers/gpio/gpiolib.h | 7 +-
- drivers/input/keyboard/gpio_keys_polled.c | 112 ++--
+ drivers/clocksource/arm_arch_timer.c | 136 +++-
+ drivers/input/keyboard/gpio_keys_polled.c | 1 +
drivers/iommu/arm-smmu.c | 8 +-
drivers/irqchip/irq-gic-v3.c | 10 +
- drivers/irqchip/irq-gic.c | 116 ++++
+ drivers/irqchip/irq-gic.c | 118 ++++
drivers/irqchip/irqchip.c | 3 +
- drivers/leds/leds-gpio.c | 140 ++--
- drivers/misc/eeprom/at25.c | 34 +-
- drivers/net/ethernet/amd/Kconfig | 2 +-
+ drivers/leds/leds-gpio.c | 1 +
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 16 +-
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 3 +
- drivers/net/ethernet/amd/xgbe/xgbe-main.c | 289 +++++++--
+ drivers/net/ethernet/amd/xgbe/xgbe-main.c | 276 ++++++--
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 20 +-
drivers/net/ethernet/amd/xgbe/xgbe-ptp.c | 4 +-
drivers/net/ethernet/amd/xgbe/xgbe.h | 13 +
drivers/net/ethernet/apm/xgene/xgene_enet_hw.c | 69 +-
- drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 68 +-
+ drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 80 ++-
drivers/net/ethernet/apm/xgene/xgene_enet_main.h | 1 +
drivers/net/ethernet/smsc/smc91x.c | 10 +
- drivers/net/phy/Kconfig | 2 +-
drivers/net/phy/amd-xgbe-phy.c | 777 ++++++++++++-----------
- drivers/of/base.c | 33 +
drivers/pci/host/pci-xgene.c | 167 +++++
drivers/pnp/resource.c | 2 +
drivers/tty/Kconfig | 6 +
@@ -1922,132 +61,21 @@ Date: Wed Oct 8 16:11:27 2014 +0200
drivers/tty/sbsauart.c | 358 +++++++++++
drivers/tty/serial/8250/8250_dw.c | 9 +
drivers/virtio/virtio_mmio.c | 12 +-
- drivers/xen/efi.c | 1 +
- include/acpi/acpi_bus.h | 30 +
+ include/acpi/acpi_bus.h | 2 +
include/acpi/acpi_io.h | 6 +
include/asm-generic/vmlinux.lds.h | 7 +
include/kvm/arm_vgic.h | 20 +-
- include/linux/acpi.h | 141 +++-
+ include/linux/acpi.h | 1 +
include/linux/clocksource.h | 6 +
- include/linux/efi.h | 6 +-
- include/linux/gpio/consumer.h | 7 +
- include/linux/gpio_keys.h | 3 +
include/linux/irqchip/arm-gic-acpi.h | 31 +
include/linux/irqchip/arm-gic.h | 2 +
- include/linux/kvm_host.h | 1 +
- include/linux/leds.h | 3 +-
- include/linux/of.h | 34 +
include/linux/pci.h | 37 +-
- include/linux/property.h | 143 +++++
- net/rfkill/rfkill-gpio.c | 18 +-
virt/kvm/arm/arch_timer.c | 107 ++--
virt/kvm/arm/vgic-v2.c | 86 ++-
virt/kvm/arm/vgic-v3.c | 8 +-
virt/kvm/arm/vgic.c | 30 +-
- 125 files changed, 6843 insertions(+), 1117 deletions(-)
+ 76 files changed, 4208 insertions(+), 626 deletions(-)
-diff --git a/Documentation/acpi/gpio-properties.txt b/Documentation/acpi/gpio-properties.txt
-new file mode 100644
-index 0000000..ae36fcf
---- /dev/null
-+++ b/Documentation/acpi/gpio-properties.txt
-@@ -0,0 +1,96 @@
-+_DSD Device Properties Related to GPIO
-+--------------------------------------
-+
-+With the release of ACPI 5.1 and the _DSD configuration objecte names
-+can finally be given to GPIOs (and other things as well) returned by
-+_CRS. Previously, we were only able to use an integer index to find
-+the corresponding GPIO, which is pretty error prone (it depends on
-+the _CRS output ordering, for example).
-+
-+With _DSD we can now query GPIOs using a name instead of an integer
-+index, like the ASL example below shows:
-+
-+ // Bluetooth device with reset and shutdown GPIOs
-+ Device (BTH)
-+ {
-+ Name (_HID, ...)
-+
-+ Name (_CRS, ResourceTemplate ()
-+ {
-+ GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
-+ "\\_SB.GPO0", 0, ResourceConsumer) {15}
-+ GpioIo (Exclusive, PullUp, 0, 0, IoRestrictionInputOnly,
-+ "\\_SB.GPO0", 0, ResourceConsumer) {27, 31}
-+ })
-+
-+ Name (_DSD, Package ()
-+ {
-+ ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
-+ Package ()
-+ {
-+ Package () {"reset-gpio", Package() {^BTH, 1, 1, 0 }},
-+ Package () {"shutdown-gpio", Package() {^BTH, 0, 0, 0 }},
-+ }
-+ })
-+ }
-+
-+The format of the supported GPIO property is:
-+
-+ Package () { "name", Package () { ref, index, pin, active_low }}
-+
-+ ref - The device that has _CRS containing GpioIo()/GpioInt() resources,
-+ typically this is the device itself (BTH in our case).
-+ index - Index of the GpioIo()/GpioInt() resource in _CRS starting from zero.
-+ pin - Pin in the GpioIo()/GpioInt() resource. Typically this is zero.
-+ active_low - If 1 the GPIO is marked as active_low.
-+
-+Since ACPI GpioIo() resource does not have a field saying whether it is
-+active low or high, the "active_low" argument can be used here. Setting
-+it to 1 marks the GPIO as active low.
-+
-+In our Bluetooth example the "reset-gpio" refers to the second GpioIo()
-+resource, second pin in that resource with the GPIO number of 31.
-+
-+ACPI GPIO Mappings Provided by Drivers
-+--------------------------------------
-+
-+There are systems in which the ACPI tables do not contain _DSD but provide _CRS
-+with GpioIo()/GpioInt() resources and device drivers still need to work with
-+them.
-+
-+In those cases ACPI device identification objects, _HID, _CID, _CLS, _SUB, _HRV,
-+available to the driver can be used to identify the device and that is supposed
-+to be sufficient to determine the meaning and purpose of all of the GPIO lines
-+listed by the GpioIo()/GpioInt() resources returned by _CRS. In other words,
-+the driver is supposed to know what to use the GpioIo()/GpioInt() resources for
-+once it has identified the device. Having done that, it can simply assign names
-+to the GPIO lines it is going to use and provide the GPIO subsystem with a
-+mapping between those names and the ACPI GPIO resources corresponding to them.
-+
-+To do that, the driver needs to define a mapping table as a NULL-terminated
-+array of struct acpi_gpio_mapping objects that each contain a name, a pointer
-+to an array of line data (struct acpi_gpio_params) objects and the size of that
-+array. Each struct acpi_gpio_params object consists of three fields,
-+crs_entry_index, line_index, active_low, representing the index of the target
-+GpioIo()/GpioInt() resource in _CRS starting from zero, the index of the target
-+line in that resource starting from zero, and the active-low flag for that line,
-+respectively, in analogy with the _DSD GPIO property format specified above.
-+
-+For the example Bluetooth device discussed previously the data structures in
-+question would look like this:
-+
-+static const struct acpi_gpio_params reset_gpio = { 1, 1, false };
-+static const struct acpi_gpio_params shutdown_gpio = { 0, 0, false };
-+
-+static const struct acpi_gpio_mapping bluetooth_acpi_gpios[] = {
-+ { "reset-gpio", &reset_gpio, 1 },
-+ { "shutdown-gpio", &shutdown_gpio, 1 },
-+ { },
-+};
-+
-+Next, the mapping table needs to be passed as the second argument to
-+acpi_dev_add_driver_gpios() that will register it with the ACPI device object
-+pointed to by its first argument. That should be done in the driver's .probe()
-+routine. On removal, the driver should unregister its GPIO mapping table by
-+calling acpi_dev_remove_driver_gpios() on the ACPI device object where that
-+table was previously registered.
diff --git a/Documentation/arm64/arm-acpi.txt b/Documentation/arm64/arm-acpi.txt
new file mode 100644
index 0000000..17cf96d
@@ -2377,37 +405,8 @@ index 0000000..17cf96d
+submitted to ASWG and go through the normal approval process; for those that
+are not UEFI members, many other members of the Linux community are and would
+likely be willing to assist in submitting ECRs.
-diff --git a/Documentation/gpio/consumer.txt b/Documentation/gpio/consumer.txt
-index 6ce5441..859918d 100644
---- a/Documentation/gpio/consumer.txt
-+++ b/Documentation/gpio/consumer.txt
-@@ -219,6 +219,24 @@ part of the IRQ interface, e.g. IRQF_TRIGGER_FALLING, as are system wakeup
- capabilities.
-
-
-+GPIOs and ACPI
-+==============
-+
-+On ACPI systems, GPIOs are described by GpioIo()/GpioInt() resources listed by
-+the _CRS configuration objects of devices. Those resources do not provide
-+connection IDs (names) for GPIOs, so it is necessary to use an additional
-+mechanism for this purpose.
-+
-+Systems compliant with ACPI 5.1 or newer may provide a _DSD configuration object
-+which, among other things, may be used to provide connection IDs for specific
-+GPIOs described by the GpioIo()/GpioInt() resources in _CRS. If that is the
-+case, it will be handled by the GPIO subsystem automatically. However, if the
-+_DSD is not present, the mappings between GpioIo()/GpioInt() resources and GPIO
-+connection IDs need to be provided by device drivers.
-+
-+For details refer to Documentation/acpi/gpio-properties.txt
-+
-+
- Interacting With the Legacy GPIO Subsystem
- ==========================================
- Many kernel subsystems still handle GPIOs using the legacy integer-based
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 479f332..6187d9b 100644
+index 4df73da..4adfd50 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -165,7 +165,7 @@ multipliers 'Kilo', 'Mega', and 'Giga', equalling 2^10, 2^20, and 2^30
@@ -2427,65 +426,11 @@ index 479f332..6187d9b 100644
See also Documentation/power/runtime_pm.txt, pci=noacpi
-diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h
-index acb0d57..f867060 100644
---- a/arch/arm/include/asm/kvm_mmu.h
-+++ b/arch/arm/include/asm/kvm_mmu.h
-@@ -161,9 +161,10 @@ static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
- }
-
- static inline void coherent_cache_guest_page(struct kvm_vcpu *vcpu, hva_t hva,
-- unsigned long size)
-+ unsigned long size,
-+ bool ipa_uncached)
- {
-- if (!vcpu_has_cache_enabled(vcpu))
-+ if (!vcpu_has_cache_enabled(vcpu) || ipa_uncached)
- kvm_flush_dcache_to_poc((void *)hva, size);
-
- /*
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
-index 8664ff1..8fa2060 100644
+index 1dc9778..0b88d36 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
-@@ -853,6 +853,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
- struct vm_area_struct *vma;
- pfn_t pfn;
- pgprot_t mem_type = PAGE_S2;
-+ bool fault_ipa_uncached;
-
- write_fault = kvm_is_write_fault(vcpu);
- if (fault_status == FSC_PERM && !write_fault) {
-@@ -919,6 +920,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
- if (!hugetlb && !force_pte)
- hugetlb = transparent_hugepage_adjust(&pfn, &fault_ipa);
-
-+ fault_ipa_uncached = memslot->flags & KVM_MEMSLOT_INCOHERENT;
-+
- if (hugetlb) {
- pmd_t new_pmd = pfn_pmd(pfn, mem_type);
- new_pmd = pmd_mkhuge(new_pmd);
-@@ -926,7 +929,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
- kvm_set_s2pmd_writable(&new_pmd);
- kvm_set_pfn_dirty(pfn);
- }
-- coherent_cache_guest_page(vcpu, hva & PMD_MASK, PMD_SIZE);
-+ coherent_cache_guest_page(vcpu, hva & PMD_MASK, PMD_SIZE,
-+ fault_ipa_uncached);
- ret = stage2_set_pmd_huge(kvm, memcache, fault_ipa, &new_pmd);
- } else {
- pte_t new_pte = pfn_pte(pfn, mem_type);
-@@ -934,7 +938,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
- kvm_set_s2pte_writable(&new_pte);
- kvm_set_pfn_dirty(pfn);
- }
-- coherent_cache_guest_page(vcpu, hva, PAGE_SIZE);
-+ coherent_cache_guest_page(vcpu, hva, PAGE_SIZE,
-+ fault_ipa_uncached);
- ret = stage2_set_pte(kvm, memcache, fault_ipa, &new_pte,
- pgprot_val(mem_type) == pgprot_val(PAGE_S2_DEVICE));
- }
-@@ -1245,6 +1250,10 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
+@@ -1315,6 +1315,10 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
(KVM_PHYS_SIZE >> PAGE_SHIFT))
return -EFAULT;
@@ -2496,159 +441,19 @@ index 8664ff1..8fa2060 100644
/*
* A memory region could potentially cover multiple VMAs, and any holes
* between them, so iterate over all of them to find out if we can map
-@@ -1310,6 +1319,15 @@ void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
- int kvm_arch_create_memslot(struct kvm *kvm, struct kvm_memory_slot *slot,
- unsigned long npages)
- {
-+ /*
-+ * Readonly memslots are not incoherent with the caches by definition,
-+ * but in practice, they are used mostly to emulate ROMs or NOR flashes
-+ * that the guest may consider devices and hence map as uncached.
-+ * To prevent incoherency issues in these cases, tag all readonly
-+ * regions as incoherent.
-+ */
-+ if (slot->flags & KVM_MEM_READONLY)
-+ slot->flags |= KVM_MEMSLOT_INCOHERENT;
- return 0;
- }
-
-diff --git a/arch/arm/mach-s3c24xx/h1940-bluetooth.c b/arch/arm/mach-s3c24xx/h1940-bluetooth.c
-index b4d14b8..9c8b127 100644
---- a/arch/arm/mach-s3c24xx/h1940-bluetooth.c
-+++ b/arch/arm/mach-s3c24xx/h1940-bluetooth.c
-@@ -41,7 +41,7 @@ static void h1940bt_enable(int on)
- mdelay(10);
- gpio_set_value(S3C2410_GPH(1), 0);
-
-- h1940_led_blink_set(-EINVAL, GPIO_LED_BLINK, NULL, NULL);
-+ h1940_led_blink_set(NULL, GPIO_LED_BLINK, NULL, NULL);
- }
- else {
- gpio_set_value(S3C2410_GPH(1), 1);
-@@ -50,7 +50,7 @@ static void h1940bt_enable(int on)
- mdelay(10);
- gpio_set_value(H1940_LATCH_BLUETOOTH_POWER, 0);
-
-- h1940_led_blink_set(-EINVAL, GPIO_LED_NO_BLINK_LOW, NULL, NULL);
-+ h1940_led_blink_set(NULL, GPIO_LED_NO_BLINK_LOW, NULL, NULL);
- }
- }
-
-diff --git a/arch/arm/mach-s3c24xx/h1940.h b/arch/arm/mach-s3c24xx/h1940.h
-index 2950cc4..596d9f6 100644
---- a/arch/arm/mach-s3c24xx/h1940.h
-+++ b/arch/arm/mach-s3c24xx/h1940.h
-@@ -19,8 +19,10 @@
- #define H1940_SUSPEND_RESUMEAT (0x30081000)
- #define H1940_SUSPEND_CHECK (0x30080000)
-
-+struct gpio_desc;
-+
- extern void h1940_pm_return(void);
--extern int h1940_led_blink_set(unsigned gpio, int state,
-+extern int h1940_led_blink_set(struct gpio_desc *desc, int state,
- unsigned long *delay_on,
- unsigned long *delay_off);
-
-diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
-index d35ddc1..d40d4f5 100644
---- a/arch/arm/mach-s3c24xx/mach-h1940.c
-+++ b/arch/arm/mach-s3c24xx/mach-h1940.c
-@@ -359,10 +359,11 @@ static struct platform_device h1940_battery = {
-
- static DEFINE_SPINLOCK(h1940_blink_spin);
-
--int h1940_led_blink_set(unsigned gpio, int state,
-+int h1940_led_blink_set(struct gpio_desc *desc, int state,
- unsigned long *delay_on, unsigned long *delay_off)
- {
- int blink_gpio, check_gpio1, check_gpio2;
-+ int gpio = desc ? desc_to_gpio(desc) : -EINVAL;
-
- switch (gpio) {
- case H1940_LATCH_LED_GREEN:
-diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c
-index c3f2682..1d35ff3 100644
---- a/arch/arm/mach-s3c24xx/mach-rx1950.c
-+++ b/arch/arm/mach-s3c24xx/mach-rx1950.c
-@@ -250,9 +250,10 @@ static void rx1950_disable_charger(void)
-
- static DEFINE_SPINLOCK(rx1950_blink_spin);
-
--static int rx1950_led_blink_set(unsigned gpio, int state,
-+static int rx1950_led_blink_set(struct gpio_desc *desc, int state,
- unsigned long *delay_on, unsigned long *delay_off)
- {
-+ int gpio = desc_to_gpio(desc);
- int blink_gpio, check_gpio;
-
- switch (gpio) {
-diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c
-index e048f61..e53fc8d 100644
---- a/arch/arm/plat-orion/gpio.c
-+++ b/arch/arm/plat-orion/gpio.c
-@@ -306,9 +306,10 @@ EXPORT_SYMBOL(orion_gpio_set_blink);
-
- #define ORION_BLINK_HALF_PERIOD 100 /* ms */
-
--int orion_gpio_led_blink_set(unsigned gpio, int state,
-+int orion_gpio_led_blink_set(struct gpio_desc *desc, int state,
- unsigned long *delay_on, unsigned long *delay_off)
- {
-+ unsigned gpio = desc_to_gpio(desc);
-
- if (delay_on && delay_off && !*delay_on && !*delay_off)
- *delay_on = *delay_off = ORION_BLINK_HALF_PERIOD;
-diff --git a/arch/arm/plat-orion/include/plat/orion-gpio.h b/arch/arm/plat-orion/include/plat/orion-gpio.h
-index e763988..e856b07 100644
---- a/arch/arm/plat-orion/include/plat/orion-gpio.h
-+++ b/arch/arm/plat-orion/include/plat/orion-gpio.h
-@@ -14,12 +14,15 @@
- #include <linux/init.h>
- #include <linux/types.h>
- #include <linux/irqdomain.h>
-+
-+struct gpio_desc;
-+
- /*
- * Orion-specific GPIO API extensions.
- */
- void orion_gpio_set_unused(unsigned pin);
- void orion_gpio_set_blink(unsigned pin, int blink);
--int orion_gpio_led_blink_set(unsigned gpio, int state,
-+int orion_gpio_led_blink_set(struct gpio_desc *desc, int state,
- unsigned long *delay_on, unsigned long *delay_off);
-
- #define GPIO_INPUT_OK (1 << 0)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
-index 9532f8d..80a82ac 100644
+index b1f9a20..d60e537 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
-@@ -4,6 +4,7 @@ config ARM64
- select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
+@@ -5,6 +5,7 @@ config ARM64
+ select ARCH_HAS_GCOV_PROFILE_ALL
select ARCH_HAS_SG_CHAIN
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
+ select ACPI_REDUCED_HARDWARE_ONLY if ACPI
select ARCH_USE_CMPXCHG_LOCKREF
select ARCH_SUPPORTS_ATOMIC_RMW
select ARCH_WANT_OPTIONAL_GPIOLIB
-@@ -34,6 +35,7 @@ config ARM64
- select GENERIC_TIME_VSYSCALL
- select HANDLE_DOMAIN_IRQ
- select HARDIRQS_SW_RESEND
-+ select HAVE_ALIGNED_STRUCT_PAGE if SLUB
- select HAVE_ARCH_AUDITSYSCALL
- select HAVE_ARCH_JUMP_LABEL
- select HAVE_ARCH_KGDB
-@@ -41,6 +43,7 @@ config ARM64
- select HAVE_BPF_JIT
- select HAVE_C_RECORDMCOUNT
- select HAVE_CC_STACKPROTECTOR
-+ select HAVE_CMPXCHG_DOUBLE
- select HAVE_DEBUG_BUGVERBOSE
- select HAVE_DEBUG_KMEMLEAK
- select HAVE_DMA_API_DEBUG
-@@ -185,6 +188,9 @@ config PCI_DOMAINS_GENERIC
+@@ -193,6 +194,9 @@ config PCI_DOMAINS_GENERIC
config PCI_SYSCALL
def_bool PCI
@@ -2658,7 +463,7 @@ index 9532f8d..80a82ac 100644
source "drivers/pci/Kconfig"
source "drivers/pci/pcie/Kconfig"
source "drivers/pci/hotplug/Kconfig"
-@@ -268,6 +274,9 @@ config SMP
+@@ -384,6 +388,9 @@ config SMP
If you don't know what to do here, say N.
@@ -2668,25 +473,7 @@ index 9532f8d..80a82ac 100644
config SCHED_MC
bool "Multi-core scheduler support"
depends on SMP
-@@ -401,6 +410,17 @@ config EFI
- allow the kernel to be booted as an EFI application. This
- is only useful on systems that have UEFI firmware.
-
-+config DMI
-+ bool "Enable support for SMBIOS (DMI) tables"
-+ depends on EFI
-+ default y
-+ help
-+ This enables SMBIOS/DMI feature for systems.
-+
-+ This option is only useful on systems that have UEFI firmware.
-+ However, even with this option, the resultant kernel should
-+ continue to boot on existing non-UEFI platforms.
-+
- endmenu
-
- menu "Userspace binary formats"
-@@ -454,6 +474,8 @@ source "drivers/Kconfig"
+@@ -646,6 +653,8 @@ source "drivers/Kconfig"
source "drivers/firmware/Kconfig"
@@ -2696,7 +483,7 @@ index 9532f8d..80a82ac 100644
source "arch/arm64/kvm/Kconfig"
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
-index 20901ff..983d72a 100644
+index 1c43cec..ab3b0b1 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -49,6 +49,7 @@ core-$(CONFIG_NET) += arch/arm64/net/
@@ -2707,271 +494,6 @@ index 20901ff..983d72a 100644
libs-y := arch/arm64/lib/ $(libs-y)
libs-y += $(LIBGCC)
libs-$(CONFIG_EFI_STUB) += drivers/firmware/efi/libstub/
-diff --git a/arch/arm64/crypto/Kconfig b/arch/arm64/crypto/Kconfig
-index 5562652..a38b02c 100644
---- a/arch/arm64/crypto/Kconfig
-+++ b/arch/arm64/crypto/Kconfig
-@@ -27,20 +27,19 @@ config CRYPTO_AES_ARM64_CE
- tristate "AES core cipher using ARMv8 Crypto Extensions"
- depends on ARM64 && KERNEL_MODE_NEON
- select CRYPTO_ALGAPI
-- select CRYPTO_AES
-
- config CRYPTO_AES_ARM64_CE_CCM
- tristate "AES in CCM mode using ARMv8 Crypto Extensions"
- depends on ARM64 && KERNEL_MODE_NEON
- select CRYPTO_ALGAPI
-- select CRYPTO_AES
-+ select CRYPTO_AES_ARM64_CE
- select CRYPTO_AEAD
-
- config CRYPTO_AES_ARM64_CE_BLK
- tristate "AES in ECB/CBC/CTR/XTS modes using ARMv8 Crypto Extensions"
- depends on ARM64 && KERNEL_MODE_NEON
- select CRYPTO_BLKCIPHER
-- select CRYPTO_AES
-+ select CRYPTO_AES_ARM64_CE
- select CRYPTO_ABLK_HELPER
-
- config CRYPTO_AES_ARM64_NEON_BLK
-diff --git a/arch/arm64/crypto/aes-ce-ccm-glue.c b/arch/arm64/crypto/aes-ce-ccm-glue.c
-index 9e6cdde..0ac73b8 100644
---- a/arch/arm64/crypto/aes-ce-ccm-glue.c
-+++ b/arch/arm64/crypto/aes-ce-ccm-glue.c
-@@ -16,6 +16,8 @@
- #include <linux/crypto.h>
- #include <linux/module.h>
-
-+#include "aes-ce-setkey.h"
-+
- static int num_rounds(struct crypto_aes_ctx *ctx)
- {
- /*
-@@ -48,7 +50,7 @@ static int ccm_setkey(struct crypto_aead *tfm, const u8 *in_key,
- struct crypto_aes_ctx *ctx = crypto_aead_ctx(tfm);
- int ret;
-
-- ret = crypto_aes_expand_key(ctx, in_key, key_len);
-+ ret = ce_aes_expandkey(ctx, in_key, key_len);
- if (!ret)
- return 0;
-
-diff --git a/arch/arm64/crypto/aes-ce-cipher.c b/arch/arm64/crypto/aes-ce-cipher.c
-index 2075e1a..ce47792 100644
---- a/arch/arm64/crypto/aes-ce-cipher.c
-+++ b/arch/arm64/crypto/aes-ce-cipher.c
-@@ -14,6 +14,8 @@
- #include <linux/crypto.h>
- #include <linux/module.h>
-
-+#include "aes-ce-setkey.h"
-+
- MODULE_DESCRIPTION("Synchronous AES cipher using ARMv8 Crypto Extensions");
- MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
- MODULE_LICENSE("GPL v2");
-@@ -124,6 +126,114 @@ static void aes_cipher_decrypt(struct crypto_tfm *tfm, u8 dst[], u8 const src[])
- kernel_neon_end();
- }
-
-+/*
-+ * aes_sub() - use the aese instruction to perform the AES sbox substitution
-+ * on each byte in 'input'
-+ */
-+static u32 aes_sub(u32 input)
-+{
-+ u32 ret;
-+
-+ __asm__("dup v1.4s, %w[in] ;"
-+ "movi v0.16b, #0 ;"
-+ "aese v0.16b, v1.16b ;"
-+ "umov %w[out], v0.4s[0] ;"
-+
-+ : [out] "=r"(ret)
-+ : [in] "r"(input)
-+ : "v0","v1");
-+
-+ return ret;
-+}
-+
-+int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
-+ unsigned int key_len)
-+{
-+ /*
-+ * The AES key schedule round constants
-+ */
-+ static u8 const rcon[] = {
-+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36,
-+ };
-+
-+ u32 kwords = key_len / sizeof(u32);
-+ struct aes_block *key_enc, *key_dec;
-+ int i, j;
-+
-+ if (key_len != AES_KEYSIZE_128 &&
-+ key_len != AES_KEYSIZE_192 &&
-+ key_len != AES_KEYSIZE_256)
-+ return -EINVAL;
-+
-+ memcpy(ctx->key_enc, in_key, key_len);
-+ ctx->key_length = key_len;
-+
-+ kernel_neon_begin_partial(2);
-+ for (i = 0; i < sizeof(rcon); i++) {
-+ u32 *rki = ctx->key_enc + (i * kwords);
-+ u32 *rko = rki + kwords;
-+
-+ rko[0] = ror32(aes_sub(rki[kwords - 1]), 8) ^ rcon[i] ^ rki[0];
-+ rko[1] = rko[0] ^ rki[1];
-+ rko[2] = rko[1] ^ rki[2];
-+ rko[3] = rko[2] ^ rki[3];
-+
-+ if (key_len == AES_KEYSIZE_192) {
-+ if (i >= 7)
-+ break;
-+ rko[4] = rko[3] ^ rki[4];
-+ rko[5] = rko[4] ^ rki[5];
-+ } else if (key_len == AES_KEYSIZE_256) {
-+ if (i >= 6)
-+ break;
-+ rko[4] = aes_sub(rko[3]) ^ rki[4];
-+ rko[5] = rko[4] ^ rki[5];
-+ rko[6] = rko[5] ^ rki[6];
-+ rko[7] = rko[6] ^ rki[7];
-+ }
-+ }
-+
-+ /*
-+ * Generate the decryption keys for the Equivalent Inverse Cipher.
-+ * This involves reversing the order of the round keys, and applying
-+ * the Inverse Mix Columns transformation on all but the first and
-+ * the last one.
-+ */
-+ key_enc = (struct aes_block *)ctx->key_enc;
-+ key_dec = (struct aes_block *)ctx->key_dec;
-+ j = num_rounds(ctx);
-+
-+ key_dec[0] = key_enc[j];
-+ for (i = 1, j--; j > 0; i++, j--)
-+ __asm__("ld1 {v0.16b}, %[in] ;"
-+ "aesimc v1.16b, v0.16b ;"
-+ "st1 {v1.16b}, %[out] ;"
-+
-+ : [out] "=Q"(key_dec[i])
-+ : [in] "Q"(key_enc[j])
-+ : "v0","v1");
-+ key_dec[i] = key_enc[0];
-+
-+ kernel_neon_end();
-+ return 0;
-+}
-+EXPORT_SYMBOL(ce_aes_expandkey);
-+
-+int ce_aes_setkey(struct crypto_tfm *tfm, const u8 *in_key,
-+ unsigned int key_len)
-+{
-+ struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
-+ int ret;
-+
-+ ret = ce_aes_expandkey(ctx, in_key, key_len);
-+ if (!ret)
-+ return 0;
-+
-+ tfm->crt_flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL(ce_aes_setkey);
-+
- static struct crypto_alg aes_alg = {
- .cra_name = "aes",
- .cra_driver_name = "aes-ce",
-@@ -135,7 +245,7 @@ static struct crypto_alg aes_alg = {
- .cra_cipher = {
- .cia_min_keysize = AES_MIN_KEY_SIZE,
- .cia_max_keysize = AES_MAX_KEY_SIZE,
-- .cia_setkey = crypto_aes_set_key,
-+ .cia_setkey = ce_aes_setkey,
- .cia_encrypt = aes_cipher_encrypt,
- .cia_decrypt = aes_cipher_decrypt
- }
-diff --git a/arch/arm64/crypto/aes-ce-setkey.h b/arch/arm64/crypto/aes-ce-setkey.h
-new file mode 100644
-index 0000000..f08a647
---- /dev/null
-+++ b/arch/arm64/crypto/aes-ce-setkey.h
-@@ -0,0 +1,5 @@
-+
-+int ce_aes_setkey(struct crypto_tfm *tfm, const u8 *in_key,
-+ unsigned int key_len);
-+int ce_aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
-+ unsigned int key_len);
-diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
-index 79cd911..801aae3 100644
---- a/arch/arm64/crypto/aes-glue.c
-+++ b/arch/arm64/crypto/aes-glue.c
-@@ -16,9 +16,13 @@
- #include <linux/module.h>
- #include <linux/cpufeature.h>
-
-+#include "aes-ce-setkey.h"
-+
- #ifdef USE_V8_CRYPTO_EXTENSIONS
- #define MODE "ce"
- #define PRIO 300
-+#define aes_setkey ce_aes_setkey
-+#define aes_expandkey ce_aes_expandkey
- #define aes_ecb_encrypt ce_aes_ecb_encrypt
- #define aes_ecb_decrypt ce_aes_ecb_decrypt
- #define aes_cbc_encrypt ce_aes_cbc_encrypt
-@@ -30,6 +34,8 @@ MODULE_DESCRIPTION("AES-ECB/CBC/CTR/XTS using ARMv8 Crypto Extensions");
- #else
- #define MODE "neon"
- #define PRIO 200
-+#define aes_setkey crypto_aes_set_key
-+#define aes_expandkey crypto_aes_expand_key
- #define aes_ecb_encrypt neon_aes_ecb_encrypt
- #define aes_ecb_decrypt neon_aes_ecb_decrypt
- #define aes_cbc_encrypt neon_aes_cbc_encrypt
-@@ -79,10 +85,10 @@ static int xts_set_key(struct crypto_tfm *tfm, const u8 *in_key,
- struct crypto_aes_xts_ctx *ctx = crypto_tfm_ctx(tfm);
- int ret;
-
-- ret = crypto_aes_expand_key(&ctx->key1, in_key, key_len / 2);
-+ ret = aes_expandkey(&ctx->key1, in_key, key_len / 2);
- if (!ret)
-- ret = crypto_aes_expand_key(&ctx->key2, &in_key[key_len / 2],
-- key_len / 2);
-+ ret = aes_expandkey(&ctx->key2, &in_key[key_len / 2],
-+ key_len / 2);
- if (!ret)
- return 0;
-
-@@ -288,7 +294,7 @@ static struct crypto_alg aes_algs[] = { {
- .min_keysize = AES_MIN_KEY_SIZE,
- .max_keysize = AES_MAX_KEY_SIZE,
- .ivsize = AES_BLOCK_SIZE,
-- .setkey = crypto_aes_set_key,
-+ .setkey = aes_setkey,
- .encrypt = ecb_encrypt,
- .decrypt = ecb_decrypt,
- },
-@@ -306,7 +312,7 @@ static struct crypto_alg aes_algs[] = { {
- .min_keysize = AES_MIN_KEY_SIZE,
- .max_keysize = AES_MAX_KEY_SIZE,
- .ivsize = AES_BLOCK_SIZE,
-- .setkey = crypto_aes_set_key,
-+ .setkey = aes_setkey,
- .encrypt = cbc_encrypt,
- .decrypt = cbc_decrypt,
- },
-@@ -324,7 +330,7 @@ static struct crypto_alg aes_algs[] = { {
- .min_keysize = AES_MIN_KEY_SIZE,
- .max_keysize = AES_MAX_KEY_SIZE,
- .ivsize = AES_BLOCK_SIZE,
-- .setkey = crypto_aes_set_key,
-+ .setkey = aes_setkey,
- .encrypt = ctr_encrypt,
- .decrypt = ctr_encrypt,
- },
diff --git a/arch/arm64/include/asm/acenv.h b/arch/arm64/include/asm/acenv.h
new file mode 100644
index 0000000..b49166f
@@ -3104,102 +626,6 @@ index 0000000..6e692f4
+#endif /* CONFIG_ACPI */
+
+#endif /*_ASM_ACPI_H*/
-diff --git a/arch/arm64/include/asm/cmpxchg.h b/arch/arm64/include/asm/cmpxchg.h
-index ddb9d78..89e397b 100644
---- a/arch/arm64/include/asm/cmpxchg.h
-+++ b/arch/arm64/include/asm/cmpxchg.h
-@@ -19,6 +19,7 @@
- #define __ASM_CMPXCHG_H
-
- #include <linux/bug.h>
-+#include <linux/mmdebug.h>
-
- #include <asm/barrier.h>
-
-@@ -152,6 +153,51 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
- return oldval;
- }
-
-+#define system_has_cmpxchg_double() 1
-+
-+static inline int __cmpxchg_double(volatile void *ptr1, volatile void *ptr2,
-+ unsigned long old1, unsigned long old2,
-+ unsigned long new1, unsigned long new2, int size)
-+{
-+ unsigned long loop, lost;
-+
-+ switch (size) {
-+ case 8:
-+ VM_BUG_ON((unsigned long *)ptr2 - (unsigned long *)ptr1 != 1);
-+ do {
-+ asm volatile("// __cmpxchg_double8\n"
-+ " ldxp %0, %1, %2\n"
-+ " eor %0, %0, %3\n"
-+ " eor %1, %1, %4\n"
-+ " orr %1, %0, %1\n"
-+ " mov %w0, #0\n"
-+ " cbnz %1, 1f\n"
-+ " stxp %w0, %5, %6, %2\n"
-+ "1:\n"
-+ : "=&r"(loop), "=&r"(lost), "+Q" (*(u64 *)ptr1)
-+ : "r" (old1), "r"(old2), "r"(new1), "r"(new2));
-+ } while (loop);
-+ break;
-+ default:
-+ BUILD_BUG();
-+ }
-+
-+ return !lost;
-+}
-+
-+static inline int __cmpxchg_double_mb(volatile void *ptr1, volatile void *ptr2,
-+ unsigned long old1, unsigned long old2,
-+ unsigned long new1, unsigned long new2, int size)
-+{
-+ int ret;
-+
-+ smp_mb();
-+ ret = __cmpxchg_double(ptr1, ptr2, old1, old2, new1, new2, size);
-+ smp_mb();
-+
-+ return ret;
-+}
-+
- static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old,
- unsigned long new, int size)
- {
-@@ -182,6 +228,31 @@ static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old,
- __ret; \
- })
-
-+#define cmpxchg_double(ptr1, ptr2, o1, o2, n1, n2) \
-+({\
-+ int __ret;\
-+ __ret = __cmpxchg_double_mb((ptr1), (ptr2), (unsigned long)(o1), \
-+ (unsigned long)(o2), (unsigned long)(n1), \
-+ (unsigned long)(n2), sizeof(*(ptr1)));\
-+ __ret; \
-+})
-+
-+#define cmpxchg_double_local(ptr1, ptr2, o1, o2, n1, n2) \
-+({\
-+ int __ret;\
-+ __ret = __cmpxchg_double((ptr1), (ptr2), (unsigned long)(o1), \
-+ (unsigned long)(o2), (unsigned long)(n1), \
-+ (unsigned long)(n2), sizeof(*(ptr1)));\
-+ __ret; \
-+})
-+
-+#define this_cpu_cmpxchg_8(ptr, o, n) \
-+ cmpxchg_local(raw_cpu_ptr(&(ptr)), o, n)
-+
-+#define this_cpu_cmpxchg_double_8(ptr1, ptr2, o1, o2, n1, n2) \
-+ cmpxchg_double_local(raw_cpu_ptr(&(ptr1)), raw_cpu_ptr(&(ptr2)), \
-+ o1, o2, n1, n2)
-+
- #define cmpxchg64(ptr,o,n) cmpxchg((ptr),(o),(n))
- #define cmpxchg64_local(ptr,o,n) cmpxchg_local((ptr),(o),(n))
-
diff --git a/arch/arm64/include/asm/cpu_ops.h b/arch/arm64/include/asm/cpu_ops.h
index 6f8e2ef..978f567 100644
--- a/arch/arm64/include/asm/cpu_ops.h
@@ -3212,43 +638,6 @@ index 6f8e2ef..978f567 100644
int __init cpu_read_ops(struct device_node *dn, int cpu);
void __init cpu_read_bootcpu_ops(void);
-diff --git a/arch/arm64/include/asm/dmi.h b/arch/arm64/include/asm/dmi.h
-new file mode 100644
-index 0000000..69d37d8
---- /dev/null
-+++ b/arch/arm64/include/asm/dmi.h
-@@ -0,0 +1,31 @@
-+/*
-+ * arch/arm64/include/asm/dmi.h
-+ *
-+ * Copyright (C) 2013 Linaro Limited.
-+ * Written by: Yi Li (yi.li@linaro.org)
-+ *
-+ * based on arch/ia64/include/asm/dmi.h
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ */
-+
-+#ifndef __ASM_DMI_H
-+#define __ASM_DMI_H
-+
-+#include <linux/io.h>
-+#include <linux/slab.h>
-+
-+/*
-+ * According to section 2.3.6 of the UEFI spec, the firmware should not
-+ * request a virtual mapping for configuration tables such as SMBIOS.
-+ * This means we have to map them before use.
-+ */
-+#define dmi_early_remap(x, l) ioremap_cache(x, l)
-+#define dmi_early_unmap(x, l) iounmap(x)
-+#define dmi_remap(x, l) ioremap_cache(x, l)
-+#define dmi_unmap(x) iounmap(x)
-+#define dmi_alloc(l) kzalloc(l, GFP_KERNEL)
-+
-+#endif
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index 1f65be3..c0f89a0 100644
--- a/arch/arm64/include/asm/elf.h
@@ -3263,86 +652,6 @@ index 1f65be3..c0f89a0 100644
#define CORE_DUMP_USE_REGSET
#define ELF_EXEC_PAGESIZE PAGE_SIZE
-diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
-index 7fd3e27..8afb863 100644
---- a/arch/arm64/include/asm/kvm_arm.h
-+++ b/arch/arm64/include/asm/kvm_arm.h
-@@ -18,6 +18,7 @@
- #ifndef __ARM64_KVM_ARM_H__
- #define __ARM64_KVM_ARM_H__
-
-+#include <asm/memory.h>
- #include <asm/types.h>
-
- /* Hyp Configuration Register (HCR) bits */
-@@ -160,9 +161,9 @@
- #endif
-
- #define VTTBR_BADDR_SHIFT (VTTBR_X - 1)
--#define VTTBR_BADDR_MASK (((1LLU << (PHYS_MASK_SHIFT - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT)
--#define VTTBR_VMID_SHIFT (48LLU)
--#define VTTBR_VMID_MASK (0xffLLU << VTTBR_VMID_SHIFT)
-+#define VTTBR_BADDR_MASK (((UL(1) << (PHYS_MASK_SHIFT - VTTBR_X)) - 1) << VTTBR_BADDR_SHIFT)
-+#define VTTBR_VMID_SHIFT (UL(48))
-+#define VTTBR_VMID_MASK (UL(0xFF) << VTTBR_VMID_SHIFT)
-
- /* Hyp System Trap Register */
- #define HSTR_EL2_TTEE (1 << 16)
-@@ -185,13 +186,13 @@
-
- /* Exception Syndrome Register (ESR) bits */
- #define ESR_EL2_EC_SHIFT (26)
--#define ESR_EL2_EC (0x3fU << ESR_EL2_EC_SHIFT)
--#define ESR_EL2_IL (1U << 25)
-+#define ESR_EL2_EC (UL(0x3f) << ESR_EL2_EC_SHIFT)
-+#define ESR_EL2_IL (UL(1) << 25)
- #define ESR_EL2_ISS (ESR_EL2_IL - 1)
- #define ESR_EL2_ISV_SHIFT (24)
--#define ESR_EL2_ISV (1U << ESR_EL2_ISV_SHIFT)
-+#define ESR_EL2_ISV (UL(1) << ESR_EL2_ISV_SHIFT)
- #define ESR_EL2_SAS_SHIFT (22)
--#define ESR_EL2_SAS (3U << ESR_EL2_SAS_SHIFT)
-+#define ESR_EL2_SAS (UL(3) << ESR_EL2_SAS_SHIFT)
- #define ESR_EL2_SSE (1 << 21)
- #define ESR_EL2_SRT_SHIFT (16)
- #define ESR_EL2_SRT_MASK (0x1f << ESR_EL2_SRT_SHIFT)
-@@ -205,16 +206,16 @@
- #define ESR_EL2_FSC_TYPE (0x3c)
-
- #define ESR_EL2_CV_SHIFT (24)
--#define ESR_EL2_CV (1U << ESR_EL2_CV_SHIFT)
-+#define ESR_EL2_CV (UL(1) << ESR_EL2_CV_SHIFT)
- #define ESR_EL2_COND_SHIFT (20)
--#define ESR_EL2_COND (0xfU << ESR_EL2_COND_SHIFT)
-+#define ESR_EL2_COND (UL(0xf) << ESR_EL2_COND_SHIFT)
-
-
- #define FSC_FAULT (0x04)
- #define FSC_PERM (0x0c)
-
- /* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */
--#define HPFAR_MASK (~0xFUL)
-+#define HPFAR_MASK (~UL(0xf))
-
- #define ESR_EL2_EC_UNKNOWN (0x00)
- #define ESR_EL2_EC_WFI (0x01)
-diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
-index 0caf7a5..123b521 100644
---- a/arch/arm64/include/asm/kvm_mmu.h
-+++ b/arch/arm64/include/asm/kvm_mmu.h
-@@ -243,9 +243,10 @@ static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
- }
-
- static inline void coherent_cache_guest_page(struct kvm_vcpu *vcpu, hva_t hva,
-- unsigned long size)
-+ unsigned long size,
-+ bool ipa_uncached)
- {
-- if (!vcpu_has_cache_enabled(vcpu))
-+ if (!vcpu_has_cache_enabled(vcpu) || ipa_uncached)
- kvm_flush_dcache_to_poc((void *)hva, size);
-
- if (!icache_is_aliasing()) { /* PIPT */
diff --git a/arch/arm64/include/asm/pci.h b/arch/arm64/include/asm/pci.h
index 872ba93..2f287a6 100644
--- a/arch/arm64/include/asm/pci.h
@@ -3447,11 +756,11 @@ index 780f82c..3411561 100644
*/
asmlinkage void secondary_start_kernel(void);
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
-index 5bd029b..f4ba4fe 100644
+index eaa77ed..63ffe3c 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
-@@ -21,7 +21,8 @@ arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
- sys_compat.o
+@@ -23,7 +23,8 @@ arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
+ ../../arm/kernel/opcodes.o
arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o
arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o
-arm64-obj-$(CONFIG_SMP) += smp.o smp_spin_table.o topology.o
@@ -3460,14 +769,14 @@ index 5bd029b..f4ba4fe 100644
arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o
arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o
arm64-obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
-@@ -31,6 +32,7 @@ arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o
+@@ -33,6 +34,7 @@ arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o
arm64-obj-$(CONFIG_KGDB) += kgdb.o
arm64-obj-$(CONFIG_EFI) += efi.o efi-stub.o efi-entry.o
arm64-obj-$(CONFIG_PCI) += pci.o
+arm64-obj-$(CONFIG_ACPI) += acpi.o
+ arm64-obj-$(CONFIG_ARMV8_DEPRECATED) += armv8_deprecated.o
obj-y += $(arm64-obj-y) vdso/
- obj-m += $(arm64-obj-m)
diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
new file mode 100644
index 0000000..06a96be
@@ -3902,87 +1211,14 @@ index cce9524..1d90f31 100644
{
const struct cpu_operations **ops = supported_cpu_ops;
-diff --git a/arch/arm64/kernel/efi-entry.S b/arch/arm64/kernel/efi-entry.S
-index d18a449..8ce9b05 100644
---- a/arch/arm64/kernel/efi-entry.S
-+++ b/arch/arm64/kernel/efi-entry.S
-@@ -61,7 +61,8 @@ ENTRY(efi_stub_entry)
- */
- mov x20, x0 // DTB address
- ldr x0, [sp, #16] // relocated _text address
-- mov x21, x0
-+ ldr x21, =stext_offset
-+ add x21, x0, x21
-
- /*
- * Calculate size of the kernel Image (same for original and copy).
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
-index 95c49eb..f9de195 100644
+index 6fac253..f9de195 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
-@@ -11,6 +11,7 @@
- *
- */
-
-+#include <linux/dmi.h>
- #include <linux/efi.h>
- #include <linux/export.h>
- #include <linux/memblock.h>
-@@ -112,8 +113,6 @@ static int __init uefi_init(void)
- efi.systab->hdr.revision & 0xffff, vendor);
-
- retval = efi_config_init(NULL);
-- if (retval == 0)
-- set_bit(EFI_CONFIG_TABLES, &efi.flags);
-
- out:
- early_memunmap(efi.systab, sizeof(efi_system_table_t));
-@@ -125,17 +124,17 @@ out:
- */
- static __init int is_reserve_region(efi_memory_desc_t *md)
- {
-- if (!is_normal_ram(md))
-+ switch (md->type) {
-+ case EFI_LOADER_CODE:
-+ case EFI_LOADER_DATA:
-+ case EFI_BOOT_SERVICES_CODE:
-+ case EFI_BOOT_SERVICES_DATA:
-+ case EFI_CONVENTIONAL_MEMORY:
- return 0;
--
-- if (md->attribute & EFI_MEMORY_RUNTIME)
-- return 1;
--
-- if (md->type == EFI_ACPI_RECLAIM_MEMORY ||
-- md->type == EFI_RESERVED_TYPE)
-- return 1;
--
-- return 0;
-+ default:
-+ break;
-+ }
-+ return is_normal_ram(md);
- }
-
- static __init void reserve_regions(void)
-@@ -471,3 +470,54 @@ err_unmap:
- return -1;
+@@ -484,3 +484,40 @@ static int __init arm64_dmi_init(void)
+ return 0;
}
- early_initcall(arm64_enter_virtual_mode);
-+
-+static int __init arm64_dmi_init(void)
-+{
-+ /*
-+ * On arm64, DMI depends on UEFI, and dmi_scan_machine() needs to
-+ * be called early because dmi_id_init(), which is an arch_initcall
-+ * itself, depends on dmi_scan_machine() having been called already.
-+ */
-+ dmi_scan_machine();
-+ if (dmi_available)
-+ dmi_set_dump_stack_arch_desc();
-+ return 0;
-+}
-+core_initcall(arm64_dmi_init);
+ core_initcall(arm64_dmi_init);
+
+/*
+ * If nothing else is handling pm_power_off, use EFI
@@ -4020,208 +1256,6 @@ index 95c49eb..f9de195 100644
+ return ret;
+}
+late_initcall(arm64_register_efi_restart);
-diff --git a/arch/arm64/kernel/entry-ftrace.S b/arch/arm64/kernel/entry-ftrace.S
-index 38e704e..08cafc5 100644
---- a/arch/arm64/kernel/entry-ftrace.S
-+++ b/arch/arm64/kernel/entry-ftrace.S
-@@ -98,8 +98,8 @@
- ENTRY(_mcount)
- mcount_enter
-
-- ldr x0, =ftrace_trace_function
-- ldr x2, [x0]
-+ adrp x0, ftrace_trace_function
-+ ldr x2, [x0, #:lo12:ftrace_trace_function]
- adr x0, ftrace_stub
- cmp x0, x2 // if (ftrace_trace_function
- b.eq skip_ftrace_call // != ftrace_stub) {
-@@ -115,14 +115,15 @@ skip_ftrace_call: // return;
- mcount_exit // return;
- // }
- skip_ftrace_call:
-- ldr x1, =ftrace_graph_return
-- ldr x2, [x1] // if ((ftrace_graph_return
-- cmp x0, x2 // != ftrace_stub)
-- b.ne ftrace_graph_caller
--
-- ldr x1, =ftrace_graph_entry // || (ftrace_graph_entry
-- ldr x2, [x1] // != ftrace_graph_entry_stub))
-- ldr x0, =ftrace_graph_entry_stub
-+ adrp x1, ftrace_graph_return
-+ ldr x2, [x1, #:lo12:ftrace_graph_return]
-+ cmp x0, x2 // if ((ftrace_graph_return
-+ b.ne ftrace_graph_caller // != ftrace_stub)
-+
-+ adrp x1, ftrace_graph_entry // || (ftrace_graph_entry
-+ adrp x0, ftrace_graph_entry_stub // != ftrace_graph_entry_stub))
-+ ldr x2, [x1, #:lo12:ftrace_graph_entry]
-+ add x0, x0, #:lo12:ftrace_graph_entry_stub
- cmp x0, x2
- b.ne ftrace_graph_caller // ftrace_graph_caller();
-
-diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
-index 0a6e4f9..5a76e3a 100644
---- a/arch/arm64/kernel/head.S
-+++ b/arch/arm64/kernel/head.S
-@@ -132,6 +132,8 @@ efi_head:
- #endif
-
- #ifdef CONFIG_EFI
-+ .globl stext_offset
-+ .set stext_offset, stext - efi_head
- .align 3
- pe_header:
- .ascii "PE"
-@@ -155,12 +157,12 @@ optional_header:
- .long 0 // SizeOfInitializedData
- .long 0 // SizeOfUninitializedData
- .long efi_stub_entry - efi_head // AddressOfEntryPoint
-- .long stext - efi_head // BaseOfCode
-+ .long stext_offset // BaseOfCode
-
- extra_header_fields:
- .quad 0 // ImageBase
-- .long 0x20 // SectionAlignment
-- .long 0x8 // FileAlignment
-+ .long 0x1000 // SectionAlignment
-+ .long PECOFF_FILE_ALIGNMENT // FileAlignment
- .short 0 // MajorOperatingSystemVersion
- .short 0 // MinorOperatingSystemVersion
- .short 0 // MajorImageVersion
-@@ -172,7 +174,7 @@ extra_header_fields:
- .long _end - efi_head // SizeOfImage
-
- // Everything before the kernel image is considered part of the header
-- .long stext - efi_head // SizeOfHeaders
-+ .long stext_offset // SizeOfHeaders
- .long 0 // CheckSum
- .short 0xa // Subsystem (EFI application)
- .short 0 // DllCharacteristics
-@@ -217,16 +219,24 @@ section_table:
- .byte 0
- .byte 0 // end of 0 padding of section name
- .long _end - stext // VirtualSize
-- .long stext - efi_head // VirtualAddress
-+ .long stext_offset // VirtualAddress
- .long _edata - stext // SizeOfRawData
-- .long stext - efi_head // PointerToRawData
-+ .long stext_offset // PointerToRawData
-
- .long 0 // PointerToRelocations (0 for executables)
- .long 0 // PointerToLineNumbers (0 for executables)
- .short 0 // NumberOfRelocations (0 for executables)
- .short 0 // NumberOfLineNumbers (0 for executables)
- .long 0xe0500020 // Characteristics (section flags)
-- .align 5
-+
-+ /*
-+ * EFI will load stext onwards at the 4k section alignment
-+ * described in the PE/COFF header. To ensure that instruction
-+ * sequences using an adrp and a :lo12: immediate will function
-+ * correctly at this alignment, we must ensure that stext is
-+ * placed at a 4k boundary in the Image to begin with.
-+ */
-+ .align 12
- #endif
-
- ENTRY(stext)
-diff --git a/arch/arm64/kernel/io.c b/arch/arm64/kernel/io.c
-index 7d37ead..354be2a 100644
---- a/arch/arm64/kernel/io.c
-+++ b/arch/arm64/kernel/io.c
-@@ -25,12 +25,26 @@
- */
- void __memcpy_fromio(void *to, const volatile void __iomem *from, size_t count)
- {
-- unsigned char *t = to;
-- while (count) {
-+ while (count && (!IS_ALIGNED((unsigned long)from, 8) ||
-+ !IS_ALIGNED((unsigned long)to, 8))) {
-+ *(u8 *)to = __raw_readb(from);
-+ from++;
-+ to++;
- count--;
-- *t = readb(from);
-- t++;
-+ }
-+
-+ while (count >= 8) {
-+ *(u64 *)to = __raw_readq(from);
-+ from += 8;
-+ to += 8;
-+ count -= 8;
-+ }
-+
-+ while (count) {
-+ *(u8 *)to = __raw_readb(from);
- from++;
-+ to++;
-+ count--;
- }
- }
- EXPORT_SYMBOL(__memcpy_fromio);
-@@ -40,12 +54,26 @@ EXPORT_SYMBOL(__memcpy_fromio);
- */
- void __memcpy_toio(volatile void __iomem *to, const void *from, size_t count)
- {
-- const unsigned char *f = from;
-- while (count) {
-+ while (count && (!IS_ALIGNED((unsigned long)to, 8) ||
-+ !IS_ALIGNED((unsigned long)from, 8))) {
-+ __raw_writeb(*(volatile u8 *)from, to);
-+ from++;
-+ to++;
- count--;
-- writeb(*f, to);
-- f++;
-+ }
-+
-+ while (count >= 8) {
-+ __raw_writeq(*(volatile u64 *)from, to);
-+ from += 8;
-+ to += 8;
-+ count -= 8;
-+ }
-+
-+ while (count) {
-+ __raw_writeb(*(volatile u8 *)from, to);
-+ from++;
- to++;
-+ count--;
- }
- }
- EXPORT_SYMBOL(__memcpy_toio);
-@@ -55,10 +83,28 @@ EXPORT_SYMBOL(__memcpy_toio);
- */
- void __memset_io(volatile void __iomem *dst, int c, size_t count)
- {
-- while (count) {
-+ u64 qc = (u8)c;
-+
-+ qc |= qc << 8;
-+ qc |= qc << 16;
-+ qc |= qc << 32;
-+
-+ while (count && !IS_ALIGNED((unsigned long)dst, 8)) {
-+ __raw_writeb(c, dst);
-+ dst++;
- count--;
-- writeb(c, dst);
-+ }
-+
-+ while (count >= 8) {
-+ __raw_writeq(qc, dst);
-+ dst += 8;
-+ count -= 8;
-+ }
-+
-+ while (count) {
-+ __raw_writeb(c, dst);
- dst++;
-+ count--;
- }
- }
- EXPORT_SYMBOL(__memset_io);
diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
index ce5836c..978cd21 100644
--- a/arch/arm64/kernel/pci.c
@@ -4351,7 +1385,7 @@ index ce5836c..978cd21 100644
+ */
+fs_initcall(pcibios_assign_resources);
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
-index 663da77..2d0deda 100644
+index f1dbca7..dbb3945 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -15,6 +15,7 @@
@@ -4475,7 +1509,7 @@ index 663da77..2d0deda 100644
static int __init cpu_psci_cpu_init(struct device_node *dn, unsigned int cpu)
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
-index 2437196..914287d 100644
+index 20fe2932ad0c..cf4ab5661088 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -43,6 +43,7 @@
@@ -4483,10 +1517,10 @@ index 2437196..914287d 100644
#include <linux/of_platform.h>
#include <linux/efi.h>
+#include <linux/acpi.h>
+ #include <linux/personality.h>
#include <asm/fixmap.h>
- #include <asm/cpu.h>
-@@ -59,6 +60,7 @@
+@@ -61,6 +62,7 @@
#include <asm/memblock.h>
#include <asm/psci.h>
#include <asm/efi.h>
@@ -4494,33 +1528,8 @@ index 2437196..914287d 100644
unsigned int processor_id;
EXPORT_SYMBOL(processor_id);
-@@ -116,12 +118,16 @@ void __init early_print(const char *str, ...)
-
- void __init smp_setup_processor_id(void)
- {
-+ u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
-+ cpu_logical_map(0) = mpidr;
-+
- /*
- * clear __my_cpu_offset on boot CPU to avoid hang caused by
- * using percpu variable early, for example, lockdep will
- * access percpu variable inside lock_release
- */
- set_my_cpu_offset(0);
-+ pr_info("Booting Linux on physical CPU 0x%lx\n", (unsigned long)mpidr);
- }
-
- bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
-@@ -312,6 +318,7 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
- }
-
- machine_name = of_flat_dt_get_machine_name();
-+ dump_stack_set_arch_desc("%s (DT)", machine_name);
- }
-
- /*
-@@ -378,6 +385,8 @@ void __init setup_arch(char **cmdline_p)
-
+@@ -387,6 +389,8 @@ void __init setup_arch(char **cmdline_p)
+ early_fixmap_init();
early_ioremap_init();
+ disable_acpi();
@@ -4528,7 +1537,7 @@ index 2437196..914287d 100644
parse_early_param();
/*
-@@ -389,19 +398,27 @@ void __init setup_arch(char **cmdline_p)
+@@ -398,19 +402,29 @@ void __init setup_arch(char **cmdline_p)
efi_init();
arm64_memblock_init();
@@ -4539,6 +1548,7 @@ index 2437196..914287d 100644
request_standard_resources();
efi_idmap_init();
+ early_ioremap_reset();
- unflatten_device_tree();
-
@@ -4555,14 +1565,13 @@ index 2437196..914287d 100644
+ acpi_smp_init_cpus();
+ }
-- cpu_logical_map(0) = read_cpuid_mpidr() & MPIDR_HWID_BITMASK;
-- cpu_read_bootcpu_ops();
+ cpu_read_bootcpu_ops();
#ifdef CONFIG_SMP
- smp_init_cpus();
smp_build_mpidr_hash();
#endif
-@@ -506,3 +523,25 @@ const struct seq_operations cpuinfo_op = {
+@@ -565,3 +579,25 @@ const struct seq_operations cpuinfo_op = {
.stop = c_stop,
.show = c_show
};
@@ -4589,10 +1598,10 @@ index 2437196..914287d 100644
+}
+early_initcall(arm64_console_setup);
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
-index b06d1d9..2988829 100644
+index 7ae6ee0..5aaf5a4 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
-@@ -321,7 +321,7 @@ void __init smp_prepare_boot_cpu(void)
+@@ -323,7 +323,7 @@ void __init smp_prepare_boot_cpu(void)
* cpu logical map array containing MPIDR values related to logical
* cpus. Assumes that cpu_logical_map(0) has already been initialized.
*/
@@ -4742,58 +1751,6 @@ index 1a7125c..42f9195 100644
arch_timer_rate = arch_timer_get_rate();
if (!arch_timer_rate)
panic("Unable to initialise architected timer.\n");
-diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
-index edf8715..4596f46 100644
---- a/arch/arm64/kernel/vmlinux.lds.S
-+++ b/arch/arm64/kernel/vmlinux.lds.S
-@@ -32,6 +32,22 @@ jiffies = jiffies_64;
- *(.hyp.text) \
- VMLINUX_SYMBOL(__hyp_text_end) = .;
-
-+/*
-+ * The size of the PE/COFF section that covers the kernel image, which
-+ * runs from stext to _edata, must be a round multiple of the PE/COFF
-+ * FileAlignment, which we set to its minimum value of 0x200. 'stext'
-+ * itself is 4 KB aligned, so padding out _edata to a 0x200 aligned
-+ * boundary should be sufficient.
-+ */
-+PECOFF_FILE_ALIGNMENT = 0x200;
-+
-+#ifdef CONFIG_EFI
-+#define PECOFF_EDATA_PADDING \
-+ .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
-+#else
-+#define PECOFF_EDATA_PADDING
-+#endif
-+
- SECTIONS
- {
- /*
-@@ -103,6 +119,7 @@ SECTIONS
- _data = .;
- _sdata = .;
- RW_DATA_SECTION(64, PAGE_SIZE, THREAD_SIZE)
-+ PECOFF_EDATA_PADDING
- _edata = .;
-
- BSS_SECTION(0, 0, 0)
-diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S
-index b72aa9f..fbe909f 100644
---- a/arch/arm64/kvm/hyp.S
-+++ b/arch/arm64/kvm/hyp.S
-@@ -761,10 +761,10 @@
- .macro activate_traps
- ldr x2, [x0, #VCPU_HCR_EL2]
- msr hcr_el2, x2
-- ldr x2, =(CPTR_EL2_TTA)
-+ mov x2, #CPTR_EL2_TTA
- msr cptr_el2, x2
-
-- ldr x2, =(1 << 15) // Trap CP15 Cr=15
-+ mov x2, #(1 << 15) // Trap CP15 Cr=15
- msr hstr_el2, x2
-
- mrs x2, mdcr_el2
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index d920942..cf890e3 100644
--- a/arch/arm64/mm/dma-mapping.c
@@ -5704,7 +2661,7 @@ index 0000000..0166475
+
+#endif /* CONFIG_ACPI */
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
-index b23fe37..555e226 100644
+index 8951cef..63aa47c 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -5,8 +5,7 @@
@@ -5735,7 +2692,7 @@ index b23fe37..555e226 100644
help
This driver creates entries in /sys/bus/pci/slots/ for all PCI
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
-index c3b2fcb..5a21476 100644
+index f74317c..c346011 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -23,7 +23,11 @@ acpi-y += nvs.o
@@ -5759,14 +2716,6 @@ index c3b2fcb..5a21476 100644
acpi-y += acpi_lpss.o
acpi-y += acpi_platform.o
acpi-y += acpi_pnp.o
-@@ -47,6 +51,7 @@ acpi-y += int340x_thermal.o
- acpi-y += power.o
- acpi-y += event.o
- acpi-y += sysfs.o
-+acpi-y += property.o
- acpi-$(CONFIG_X86) += acpi_cmos_rtc.o
- acpi-$(CONFIG_DEBUG_FS) += debugfs.o
- acpi-$(CONFIG_ACPI_NUMA) += numa.o
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 8b67bd0..c412fdb 100644
--- a/drivers/acpi/bus.c
@@ -5782,7 +2731,7 @@ index 8b67bd0..c412fdb 100644
message = "platform specific model";
break;
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
-index 447f6d6..c5ff8ba 100644
+index 163e82f..c5ff8ba 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -26,8 +26,13 @@
@@ -5799,19 +2748,8 @@ index 447f6d6..c5ff8ba 100644
void acpi_processor_init(void);
void acpi_platform_init(void);
void acpi_pnp_init(void);
-@@ -173,4 +178,10 @@ static inline void suspend_nvs_restore(void) {}
- bool acpi_osi_is_win8(void);
- #endif
-
-+/*--------------------------------------------------------------------------
-+ Device properties
-+ -------------------------------------------------------------------------- */
-+void acpi_init_properties(struct acpi_device *adev);
-+void acpi_free_properties(struct acpi_device *adev);
-+
- #endif /* _ACPI_INTERNAL_H_ */
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
-index 9964f70..5c480d5 100644
+index f9eeae8..581b9f7 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -336,11 +336,11 @@ acpi_map_lookup_virt(void __iomem *virt, acpi_size size)
@@ -5830,7 +2768,7 @@ index 9964f70..5c480d5 100644
static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz)
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
-index ef58f46..5c84e0d 100644
+index 342942f..734c029 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -64,6 +64,38 @@ static int map_lsapic_id(struct acpi_subtable_header *entry,
@@ -5874,751 +2812,23 @@ index ef58f46..5c84e0d 100644
unsigned long madt_end, entry;
@@ -99,6 +131,9 @@ static int map_madt_entry(int type, u32 acpi_id)
} else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) {
- if (!map_lsapic_id(header, type, acpi_id, &apic_id))
+ if (!map_lsapic_id(header, type, acpi_id, &phys_id))
break;
+ } else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) {
-+ if (!map_gicc_mpidr(header, type, acpi_id, &apic_id))
++ if (!map_gicc_mpidr(header, type, acpi_id, &phys_id))
+ break;
}
entry += header->length;
}
@@ -131,6 +166,8 @@ static int map_mat_entry(acpi_handle handle, int type, u32 acpi_id)
- map_lsapic_id(header, type, acpi_id, &apic_id);
- } else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC) {
- map_x2apic_id(header, type, acpi_id, &apic_id);
-+ } else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) {
-+ map_gicc_mpidr(header, type, acpi_id, &apic_id);
- }
+ map_lsapic_id(header, type, acpi_id, &phys_id);
+ else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC)
+ map_x2apic_id(header, type, acpi_id, &phys_id);
++ else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT)
++ map_gicc_mpidr(header, type, acpi_id, &phys_id);
exit:
-diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
-new file mode 100644
-index 0000000..0d08373
---- /dev/null
-+++ b/drivers/acpi/property.c
-@@ -0,0 +1,551 @@
-+/*
-+ * ACPI device specific properties support.
-+ *
-+ * Copyright (C) 2014, Intel Corporation
-+ * All rights reserved.
-+ *
-+ * Authors: Mika Westerberg <mika.westerberg@linux.intel.com>
-+ * Darren Hart <dvhart@linux.intel.com>
-+ * Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/acpi.h>
-+#include <linux/device.h>
-+#include <linux/export.h>
-+
-+#include "internal.h"
-+
-+/* ACPI _DSD device properties UUID: daffd814-6eba-4d8c-8a91-bc9bbf4aa301 */
-+static const u8 prp_uuid[16] = {
-+ 0x14, 0xd8, 0xff, 0xda, 0xba, 0x6e, 0x8c, 0x4d,
-+ 0x8a, 0x91, 0xbc, 0x9b, 0xbf, 0x4a, 0xa3, 0x01
-+};
-+
-+static bool acpi_property_value_ok(const union acpi_object *value)
-+{
-+ int j;
-+
-+ /*
-+ * The value must be an integer, a string, a reference, or a package
-+ * whose every element must be an integer, a string, or a reference.
-+ */
-+ switch (value->type) {
-+ case ACPI_TYPE_INTEGER:
-+ case ACPI_TYPE_STRING:
-+ case ACPI_TYPE_LOCAL_REFERENCE:
-+ return true;
-+
-+ case ACPI_TYPE_PACKAGE:
-+ for (j = 0; j < value->package.count; j++)
-+ switch (value->package.elements[j].type) {
-+ case ACPI_TYPE_INTEGER:
-+ case ACPI_TYPE_STRING:
-+ case ACPI_TYPE_LOCAL_REFERENCE:
-+ continue;
-+
-+ default:
-+ return false;
-+ }
-+
-+ return true;
-+ }
-+ return false;
-+}
-+
-+static bool acpi_properties_format_valid(const union acpi_object *properties)
-+{
-+ int i;
-+
-+ for (i = 0; i < properties->package.count; i++) {
-+ const union acpi_object *property;
-+
-+ property = &properties->package.elements[i];
-+ /*
-+ * Only two elements allowed, the first one must be a string and
-+ * the second one has to satisfy certain conditions.
-+ */
-+ if (property->package.count != 2
-+ || property->package.elements[0].type != ACPI_TYPE_STRING
-+ || !acpi_property_value_ok(&property->package.elements[1]))
-+ return false;
-+ }
-+ return true;
-+}
-+
-+static void acpi_init_of_compatible(struct acpi_device *adev)
-+{
-+ const union acpi_object *of_compatible;
-+ struct acpi_hardware_id *hwid;
-+ bool acpi_of = false;
-+ int ret;
-+
-+ /*
-+ * Check if the special PRP0001 ACPI ID is present and in that
-+ * case we fill in Device Tree compatible properties for this
-+ * device.
-+ */
-+ list_for_each_entry(hwid, &adev->pnp.ids, list) {
-+ if (!strcmp(hwid->id, "PRP0001")) {
-+ acpi_of = true;
-+ break;
-+ }
-+ }
-+
-+ if (!acpi_of)
-+ return;
-+
-+ ret = acpi_dev_get_property_array(adev, "compatible", ACPI_TYPE_STRING,
-+ &of_compatible);
-+ if (ret) {
-+ ret = acpi_dev_get_property(adev, "compatible",
-+ ACPI_TYPE_STRING, &of_compatible);
-+ if (ret) {
-+ acpi_handle_warn(adev->handle,
-+ "PRP0001 requires compatible property\n");
-+ return;
-+ }
-+ }
-+ adev->data.of_compatible = of_compatible;
-+}
-+
-+void acpi_init_properties(struct acpi_device *adev)
-+{
-+ struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
-+ const union acpi_object *desc;
-+ acpi_status status;
-+ int i;
-+
-+ status = acpi_evaluate_object_typed(adev->handle, "_DSD", NULL, &buf,
-+ ACPI_TYPE_PACKAGE);
-+ if (ACPI_FAILURE(status))
-+ return;
-+
-+ desc = buf.pointer;
-+ if (desc->package.count % 2)
-+ goto fail;
-+
-+ /* Look for the device properties UUID. */
-+ for (i = 0; i < desc->package.count; i += 2) {
-+ const union acpi_object *uuid, *properties;
-+
-+ uuid = &desc->package.elements[i];
-+ properties = &desc->package.elements[i + 1];
-+
-+ /*
-+ * The first element must be a UUID and the second one must be
-+ * a package.
-+ */
-+ if (uuid->type != ACPI_TYPE_BUFFER || uuid->buffer.length != 16
-+ || properties->type != ACPI_TYPE_PACKAGE)
-+ break;
-+
-+ if (memcmp(uuid->buffer.pointer, prp_uuid, sizeof(prp_uuid)))
-+ continue;
-+
-+ /*
-+ * We found the matching UUID. Now validate the format of the
-+ * package immediately following it.
-+ */
-+ if (!acpi_properties_format_valid(properties))
-+ break;
-+
-+ adev->data.pointer = buf.pointer;
-+ adev->data.properties = properties;
-+
-+ acpi_init_of_compatible(adev);
-+ return;
-+ }
-+
-+ fail:
-+ dev_warn(&adev->dev, "Returned _DSD data is not valid, skipping\n");
-+ ACPI_FREE(buf.pointer);
-+}
-+
-+void acpi_free_properties(struct acpi_device *adev)
-+{
-+ ACPI_FREE((void *)adev->data.pointer);
-+ adev->data.of_compatible = NULL;
-+ adev->data.pointer = NULL;
-+ adev->data.properties = NULL;
-+}
-+
-+/**
-+ * acpi_dev_get_property - return an ACPI property with given name
-+ * @adev: ACPI device to get property
-+ * @name: Name of the property
-+ * @type: Expected property type
-+ * @obj: Location to store the property value (if not %NULL)
-+ *
-+ * Look up a property with @name and store a pointer to the resulting ACPI
-+ * object at the location pointed to by @obj if found.
-+ *
-+ * Callers must not attempt to free the returned objects. These objects will be
-+ * freed by the ACPI core automatically during the removal of @adev.
-+ *
-+ * Return: %0 if property with @name has been found (success),
-+ * %-EINVAL if the arguments are invalid,
-+ * %-ENODATA if the property doesn't exist,
-+ * %-EPROTO if the property value type doesn't match @type.
-+ */
-+int acpi_dev_get_property(struct acpi_device *adev, const char *name,
-+ acpi_object_type type, const union acpi_object **obj)
-+{
-+ const union acpi_object *properties;
-+ int i;
-+
-+ if (!adev || !name)
-+ return -EINVAL;
-+
-+ if (!adev->data.pointer || !adev->data.properties)
-+ return -ENODATA;
-+
-+ properties = adev->data.properties;
-+ for (i = 0; i < properties->package.count; i++) {
-+ const union acpi_object *propname, *propvalue;
-+ const union acpi_object *property;
-+
-+ property = &properties->package.elements[i];
-+
-+ propname = &property->package.elements[0];
-+ propvalue = &property->package.elements[1];
-+
-+ if (!strcmp(name, propname->string.pointer)) {
-+ if (type != ACPI_TYPE_ANY && propvalue->type != type)
-+ return -EPROTO;
-+ else if (obj)
-+ *obj = propvalue;
-+
-+ return 0;
-+ }
-+ }
-+ return -ENODATA;
-+}
-+EXPORT_SYMBOL_GPL(acpi_dev_get_property);
-+
-+/**
-+ * acpi_dev_get_property_array - return an ACPI array property with given name
-+ * @adev: ACPI device to get property
-+ * @name: Name of the property
-+ * @type: Expected type of array elements
-+ * @obj: Location to store a pointer to the property value (if not NULL)
-+ *
-+ * Look up an array property with @name and store a pointer to the resulting
-+ * ACPI object at the location pointed to by @obj if found.
-+ *
-+ * Callers must not attempt to free the returned objects. Those objects will be
-+ * freed by the ACPI core automatically during the removal of @adev.
-+ *
-+ * Return: %0 if array property (package) with @name has been found (success),
-+ * %-EINVAL if the arguments are invalid,
-+ * %-ENODATA if the property doesn't exist,
-+ * %-EPROTO if the property is not a package or the type of its elements
-+ * doesn't match @type.
-+ */
-+int acpi_dev_get_property_array(struct acpi_device *adev, const char *name,
-+ acpi_object_type type,
-+ const union acpi_object **obj)
-+{
-+ const union acpi_object *prop;
-+ int ret, i;
-+
-+ ret = acpi_dev_get_property(adev, name, ACPI_TYPE_PACKAGE, &prop);
-+ if (ret)
-+ return ret;
-+
-+ if (type != ACPI_TYPE_ANY) {
-+ /* Check that all elements are of correct type. */
-+ for (i = 0; i < prop->package.count; i++)
-+ if (prop->package.elements[i].type != type)
-+ return -EPROTO;
-+ }
-+ if (obj)
-+ *obj = prop;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(acpi_dev_get_property_array);
-+
-+/**
-+ * acpi_dev_get_property_reference - returns handle to the referenced object
-+ * @adev: ACPI device to get property
-+ * @name: Name of the property
-+ * @index: Index of the reference to return
-+ * @args: Location to store the returned reference with optional arguments
-+ *
-+ * Find property with @name, verifify that it is a package containing at least
-+ * one object reference and if so, store the ACPI device object pointer to the
-+ * target object in @args->adev. If the reference includes arguments, store
-+ * them in the @args->args[] array.
-+ *
-+ * If there's more than one reference in the property value package, @index is
-+ * used to select the one to return.
-+ *
-+ * Return: %0 on success, negative error code on failure.
-+ */
-+int acpi_dev_get_property_reference(struct acpi_device *adev,
-+ const char *name, size_t index,
-+ struct acpi_reference_args *args)
-+{
-+ const union acpi_object *element, *end;
-+ const union acpi_object *obj;
-+ struct acpi_device *device;
-+ int ret, idx = 0;
-+
-+ ret = acpi_dev_get_property(adev, name, ACPI_TYPE_ANY, &obj);
-+ if (ret)
-+ return ret;
-+
-+ /*
-+ * The simplest case is when the value is a single reference. Just
-+ * return that reference then.
-+ */
-+ if (obj->type == ACPI_TYPE_LOCAL_REFERENCE) {
-+ if (index)
-+ return -EINVAL;
-+
-+ ret = acpi_bus_get_device(obj->reference.handle, &device);
-+ if (ret)
-+ return ret;
-+
-+ args->adev = device;
-+ args->nargs = 0;
-+ return 0;
-+ }
-+
-+ /*
-+ * If it is not a single reference, then it is a package of
-+ * references followed by number of ints as follows:
-+ *
-+ * Package () { REF, INT, REF, INT, INT }
-+ *
-+ * The index argument is then used to determine which reference
-+ * the caller wants (along with the arguments).
-+ */
-+ if (obj->type != ACPI_TYPE_PACKAGE || index >= obj->package.count)
-+ return -EPROTO;
-+
-+ element = obj->package.elements;
-+ end = element + obj->package.count;
-+
-+ while (element < end) {
-+ u32 nargs, i;
-+
-+ if (element->type != ACPI_TYPE_LOCAL_REFERENCE)
-+ return -EPROTO;
-+
-+ ret = acpi_bus_get_device(element->reference.handle, &device);
-+ if (ret)
-+ return -ENODEV;
-+
-+ element++;
-+ nargs = 0;
-+
-+ /* assume following integer elements are all args */
-+ for (i = 0; element + i < end; i++) {
-+ int type = element[i].type;
-+
-+ if (type == ACPI_TYPE_INTEGER)
-+ nargs++;
-+ else if (type == ACPI_TYPE_LOCAL_REFERENCE)
-+ break;
-+ else
-+ return -EPROTO;
-+ }
-+
-+ if (idx++ == index) {
-+ args->adev = device;
-+ args->nargs = nargs;
-+ for (i = 0; i < nargs; i++)
-+ args->args[i] = element[i].integer.value;
-+
-+ return 0;
-+ }
-+
-+ element += nargs;
-+ }
-+
-+ return -EPROTO;
-+}
-+EXPORT_SYMBOL_GPL(acpi_dev_get_property_reference);
-+
-+int acpi_dev_prop_get(struct acpi_device *adev, const char *propname,
-+ void **valptr)
-+{
-+ return acpi_dev_get_property(adev, propname, ACPI_TYPE_ANY,
-+ (const union acpi_object **)valptr);
-+}
-+
-+int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname,
-+ enum dev_prop_type proptype, void *val)
-+{
-+ const union acpi_object *obj;
-+ int ret;
-+
-+ if (!val)
-+ return -EINVAL;
-+
-+ if (proptype >= DEV_PROP_U8 && proptype <= DEV_PROP_U64) {
-+ ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_INTEGER, &obj);
-+ if (ret)
-+ return ret;
-+
-+ switch (proptype) {
-+ case DEV_PROP_U8:
-+ if (obj->integer.value > U8_MAX)
-+ return -EOVERFLOW;
-+ *(u8 *)val = obj->integer.value;
-+ break;
-+ case DEV_PROP_U16:
-+ if (obj->integer.value > U16_MAX)
-+ return -EOVERFLOW;
-+ *(u16 *)val = obj->integer.value;
-+ break;
-+ case DEV_PROP_U32:
-+ if (obj->integer.value > U32_MAX)
-+ return -EOVERFLOW;
-+ *(u32 *)val = obj->integer.value;
-+ break;
-+ default:
-+ *(u64 *)val = obj->integer.value;
-+ break;
-+ }
-+ } else if (proptype == DEV_PROP_STRING) {
-+ ret = acpi_dev_get_property(adev, propname, ACPI_TYPE_STRING, &obj);
-+ if (ret)
-+ return ret;
-+
-+ *(char **)val = obj->string.pointer;
-+ } else {
-+ ret = -EINVAL;
-+ }
-+ return ret;
-+}
-+
-+static int acpi_copy_property_array_u8(const union acpi_object *items, u8 *val,
-+ size_t nval)
-+{
-+ int i;
-+
-+ for (i = 0; i < nval; i++) {
-+ if (items[i].type != ACPI_TYPE_INTEGER)
-+ return -EPROTO;
-+ if (items[i].integer.value > U8_MAX)
-+ return -EOVERFLOW;
-+
-+ val[i] = items[i].integer.value;
-+ }
-+ return 0;
-+}
-+
-+static int acpi_copy_property_array_u16(const union acpi_object *items,
-+ u16 *val, size_t nval)
-+{
-+ int i;
-+
-+ for (i = 0; i < nval; i++) {
-+ if (items[i].type != ACPI_TYPE_INTEGER)
-+ return -EPROTO;
-+ if (items[i].integer.value > U16_MAX)
-+ return -EOVERFLOW;
-+
-+ val[i] = items[i].integer.value;
-+ }
-+ return 0;
-+}
-+
-+static int acpi_copy_property_array_u32(const union acpi_object *items,
-+ u32 *val, size_t nval)
-+{
-+ int i;
-+
-+ for (i = 0; i < nval; i++) {
-+ if (items[i].type != ACPI_TYPE_INTEGER)
-+ return -EPROTO;
-+ if (items[i].integer.value > U32_MAX)
-+ return -EOVERFLOW;
-+
-+ val[i] = items[i].integer.value;
-+ }
-+ return 0;
-+}
-+
-+static int acpi_copy_property_array_u64(const union acpi_object *items,
-+ u64 *val, size_t nval)
-+{
-+ int i;
-+
-+ for (i = 0; i < nval; i++) {
-+ if (items[i].type != ACPI_TYPE_INTEGER)
-+ return -EPROTO;
-+
-+ val[i] = items[i].integer.value;
-+ }
-+ return 0;
-+}
-+
-+static int acpi_copy_property_array_string(const union acpi_object *items,
-+ char **val, size_t nval)
-+{
-+ int i;
-+
-+ for (i = 0; i < nval; i++) {
-+ if (items[i].type != ACPI_TYPE_STRING)
-+ return -EPROTO;
-+
-+ val[i] = items[i].string.pointer;
-+ }
-+ return 0;
-+}
-+
-+int acpi_dev_prop_read(struct acpi_device *adev, const char *propname,
-+ enum dev_prop_type proptype, void *val, size_t nval)
-+{
-+ const union acpi_object *obj;
-+ const union acpi_object *items;
-+ int ret;
-+
-+ if (val && nval == 1) {
-+ ret = acpi_dev_prop_read_single(adev, propname, proptype, val);
-+ if (!ret)
-+ return ret;
-+ }
-+
-+ ret = acpi_dev_get_property_array(adev, propname, ACPI_TYPE_ANY, &obj);
-+ if (ret)
-+ return ret;
-+
-+ if (!val)
-+ return obj->package.count;
-+ else if (nval <= 0)
-+ return -EINVAL;
-+
-+ if (nval > obj->package.count)
-+ return -EOVERFLOW;
-+
-+ items = obj->package.elements;
-+ switch (proptype) {
-+ case DEV_PROP_U8:
-+ ret = acpi_copy_property_array_u8(items, (u8 *)val, nval);
-+ break;
-+ case DEV_PROP_U16:
-+ ret = acpi_copy_property_array_u16(items, (u16 *)val, nval);
-+ break;
-+ case DEV_PROP_U32:
-+ ret = acpi_copy_property_array_u32(items, (u32 *)val, nval);
-+ break;
-+ case DEV_PROP_U64:
-+ ret = acpi_copy_property_array_u64(items, (u64 *)val, nval);
-+ break;
-+ case DEV_PROP_STRING:
-+ ret = acpi_copy_property_array_string(items, (char **)val, nval);
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+ return ret;
-+}
-diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
-index 0476e90..9cb5cca 100644
---- a/drivers/acpi/scan.c
-+++ b/drivers/acpi/scan.c
-@@ -124,17 +124,56 @@ static int create_modalias(struct acpi_device *acpi_dev, char *modalias,
- if (list_empty(&acpi_dev->pnp.ids))
- return 0;
-
-- len = snprintf(modalias, size, "acpi:");
-- size -= len;
--
-- list_for_each_entry(id, &acpi_dev->pnp.ids, list) {
-- count = snprintf(&modalias[len], size, "%s:", id->id);
-- if (count < 0)
-- return -EINVAL;
-- if (count >= size)
-- return -ENOMEM;
-- len += count;
-- size -= count;
-+ /*
-+ * If the device has PRP0001 we expose DT compatible modalias
-+ * instead in form of of:NnameTCcompatible.
-+ */
-+ if (acpi_dev->data.of_compatible) {
-+ struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
-+ const union acpi_object *of_compatible, *obj;
-+ int i, nval;
-+ char *c;
-+
-+ acpi_get_name(acpi_dev->handle, ACPI_SINGLE_NAME, &buf);
-+ /* DT strings are all in lower case */
-+ for (c = buf.pointer; *c != '\0'; c++)
-+ *c = tolower(*c);
-+
-+ len = snprintf(modalias, size, "of:N%sT", (char *)buf.pointer);
-+ ACPI_FREE(buf.pointer);
-+
-+ of_compatible = acpi_dev->data.of_compatible;
-+ if (of_compatible->type == ACPI_TYPE_PACKAGE) {
-+ nval = of_compatible->package.count;
-+ obj = of_compatible->package.elements;
-+ } else { /* Must be ACPI_TYPE_STRING. */
-+ nval = 1;
-+ obj = of_compatible;
-+ }
-+ for (i = 0; i < nval; i++, obj++) {
-+ count = snprintf(&modalias[len], size, "C%s",
-+ obj->string.pointer);
-+ if (count < 0)
-+ return -EINVAL;
-+ if (count >= size)
-+ return -ENOMEM;
-+
-+ len += count;
-+ size -= count;
-+ }
-+ } else {
-+ len = snprintf(modalias, size, "acpi:");
-+ size -= len;
-+
-+ list_for_each_entry(id, &acpi_dev->pnp.ids, list) {
-+ count = snprintf(&modalias[len], size, "%s:", id->id);
-+ if (count < 0)
-+ return -EINVAL;
-+ if (count >= size)
-+ return -ENOMEM;
-+ len += count;
-+ size -= count;
-+ }
- }
-
- modalias[len] = '\0';
-@@ -902,6 +941,51 @@ int acpi_match_device_ids(struct acpi_device *device,
- }
- EXPORT_SYMBOL(acpi_match_device_ids);
-
-+/* Performs match against special "PRP0001" shoehorn ACPI ID */
-+static bool acpi_of_driver_match_device(struct device *dev,
-+ const struct device_driver *drv)
-+{
-+ const union acpi_object *of_compatible, *obj;
-+ struct acpi_device *adev;
-+ int i, nval;
-+
-+ adev = ACPI_COMPANION(dev);
-+ if (!adev)
-+ return false;
-+
-+ of_compatible = adev->data.of_compatible;
-+ if (!drv->of_match_table || !of_compatible)
-+ return false;
-+
-+ if (of_compatible->type == ACPI_TYPE_PACKAGE) {
-+ nval = of_compatible->package.count;
-+ obj = of_compatible->package.elements;
-+ } else { /* Must be ACPI_TYPE_STRING. */
-+ nval = 1;
-+ obj = of_compatible;
-+ }
-+ /* Now we can look for the driver DT compatible strings */
-+ for (i = 0; i < nval; i++, obj++) {
-+ const struct of_device_id *id;
-+
-+ for (id = drv->of_match_table; id->compatible[0]; id++)
-+ if (!strcasecmp(obj->string.pointer, id->compatible))
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool acpi_driver_match_device(struct device *dev,
-+ const struct device_driver *drv)
-+{
-+ if (!drv->acpi_match_table)
-+ return acpi_of_driver_match_device(dev, drv);
-+
-+ return !!acpi_match_device(drv->acpi_match_table, dev);
-+}
-+EXPORT_SYMBOL_GPL(acpi_driver_match_device);
-+
- static void acpi_free_power_resources_lists(struct acpi_device *device)
- {
- int i;
-@@ -922,6 +1006,7 @@ static void acpi_device_release(struct device *dev)
- {
- struct acpi_device *acpi_dev = to_acpi_device(dev);
-
-+ acpi_free_properties(acpi_dev);
- acpi_free_pnp_ids(&acpi_dev->pnp);
- acpi_free_power_resources_lists(acpi_dev);
- kfree(acpi_dev);
-@@ -1304,6 +1389,26 @@ int acpi_device_add(struct acpi_device *device,
- return result;
- }
-
-+struct acpi_device *acpi_get_next_child(struct device *dev,
-+ struct acpi_device *child)
-+{
-+ struct acpi_device *adev = ACPI_COMPANION(dev);
-+ struct list_head *head, *next;
-+
-+ if (!adev)
-+ return NULL;
-+
-+ head = &adev->children;
-+ if (list_empty(head))
-+ return NULL;
-+
-+ if (!child)
-+ return list_first_entry(head, struct acpi_device, node);
-+
-+ next = child->node.next;
-+ return next == head ? NULL : list_entry(next, struct acpi_device, node);
-+}
-+
- /* --------------------------------------------------------------------------
- Driver Management
- -------------------------------------------------------------------------- */
-@@ -1923,9 +2028,11 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
- device->device_type = type;
- device->handle = handle;
- device->parent = acpi_bus_get_parent(handle);
-+ device->fwnode.type = FWNODE_ACPI;
- acpi_set_device_status(device, sta);
- acpi_device_get_busid(device);
- acpi_set_pnp_ids(handle, &device->pnp, type);
-+ acpi_init_properties(device);
- acpi_bus_get_flags(device);
- device->flags.match_driver = false;
- device->flags.initialized = true;
+ kfree(buffer.pointer);
diff --git a/drivers/acpi/sleep-arm.c b/drivers/acpi/sleep-arm.c
new file mode 100644
index 0000000..54578ef
@@ -6654,7 +2864,7 @@ index 0000000..54578ef
+ return -ENOSYS;
+}
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c
-index 6d5a6cd..47f36d4 100644
+index 93b8152..122b48f 100644
--- a/drivers/acpi/tables.c
+++ b/drivers/acpi/tables.c
@@ -183,6 +183,49 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
@@ -6707,74 +2917,17 @@ index 6d5a6cd..47f36d4 100644
default:
pr_warn("Found unsupported MADT entry (type = 0x%x)\n",
header->type);
-@@ -192,17 +235,14 @@ void acpi_table_print_madt_entry(struct acpi_subtable_header *header)
-
-
- int __init
--acpi_table_parse_entries(char *id,
-- unsigned long table_size,
-- int entry_id,
-- acpi_tbl_entry_handler handler,
-- unsigned int max_entries)
-+acpi_parse_entries(unsigned long table_size,
-+ acpi_tbl_entry_handler handler,
-+ struct acpi_table_header *table_header,
-+ int entry_id, unsigned int max_entries)
- {
-- struct acpi_table_header *table_header = NULL;
- struct acpi_subtable_header *entry;
-- unsigned int count = 0;
-+ int count = 0;
- unsigned long table_end;
-- acpi_size tbl_size;
-
- if (acpi_disabled)
- return -ENODEV;
-@@ -210,13 +250,11 @@ acpi_table_parse_entries(char *id,
- if (!handler)
+@@ -210,7 +253,7 @@ acpi_parse_entries(char *id, unsigned long table_size,
return -EINVAL;
-- if (strncmp(id, ACPI_SIG_MADT, 4) == 0)
-- acpi_get_table_with_size(id, acpi_apic_instance, &table_header, &tbl_size);
-- else
-- acpi_get_table_with_size(id, 0, &table_header, &tbl_size);
-+ if (!table_size)
-+ return -EINVAL;
-
if (!table_header) {
- pr_warn("%4.4s not present\n", id);
+ pr_warn("Table header not present\n");
return -ENODEV;
}
-@@ -230,32 +268,67 @@ acpi_table_parse_entries(char *id,
- while (((unsigned long)entry) + sizeof(struct acpi_subtable_header) <
- table_end) {
- if (entry->type == entry_id
-- && (!max_entries || count++ < max_entries))
-+ && (!max_entries || count < max_entries)) {
- if (handler(entry, table_end))
-- goto err;
-+ return -EINVAL;
-+
-+ count++;
-+ }
+@@ -246,7 +289,8 @@ acpi_parse_entries(char *id, unsigned long table_size,
- /*
- * If entry->length is 0, break from this loop to avoid
- * infinite loop.
- */
- if (entry->length == 0) {
-- pr_err("[%4.4s:0x%02x] Invalid zero length\n", id, entry_id);
-- goto err;
-+ pr_err("[0x%02x] Invalid zero length\n", entry_id);
-+ return -EINVAL;
- }
-
- entry = (struct acpi_subtable_header *)
- ((unsigned long)entry + entry->length);
- }
-+
if (max_entries && count > max_entries) {
pr_warn("[%4.4s:0x%02x] ignored %i entries of %i found\n",
- id, entry_id, count - max_entries, count);
@@ -6782,52 +2935,12 @@ index 6d5a6cd..47f36d4 100644
+ count);
}
-- early_acpi_os_unmap_memory((char *)table_header, tbl_size);
return count;
--err:
-+}
-+
-+int __init
-+acpi_table_parse_entries(char *id,
-+ unsigned long table_size,
-+ int entry_id,
-+ acpi_tbl_entry_handler handler,
-+ unsigned int max_entries)
-+{
-+ struct acpi_table_header *table_header = NULL;
-+ acpi_size tbl_size;
-+ int count;
-+
-+ if (acpi_disabled)
-+ return -ENODEV;
-+
-+ if (!handler)
-+ return -EINVAL;
-+
-+ if (strncmp(id, ACPI_SIG_MADT, 4) == 0)
-+ acpi_get_table_with_size(id, acpi_apic_instance, &table_header, &tbl_size);
-+ else
-+ acpi_get_table_with_size(id, 0, &table_header, &tbl_size);
-+
-+ if (!table_header) {
-+ pr_warn("%4.4s not present\n", id);
-+ return -ENODEV;
-+ }
-+
-+ count = acpi_parse_entries(table_size, handler, table_header,
-+ entry_id, max_entries);
-+
- early_acpi_os_unmap_memory((char *)table_header, tbl_size);
-- return -EINVAL;
-+ return count;
- }
-
- int __init
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
-index 371ac12..af325a7 100644
+index cd49a39..7f68f96 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
-@@ -723,3 +723,29 @@ bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs)
+@@ -712,3 +712,29 @@ bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs)
return false;
}
EXPORT_SYMBOL(acpi_check_dsm);
@@ -6858,7 +2971,7 @@ index 371ac12..af325a7 100644
+}
+EXPORT_SYMBOL(acpi_check_coherency);
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
-index cd4cccb..edb00c6 100644
+index a3a1360..edca892 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -48,7 +48,7 @@ config ATA_VERBOSE_ERROR
@@ -6871,7 +2984,7 @@ index cd4cccb..edb00c6 100644
help
This option adds support for ATA-related ACPI objects.
diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
-index 06f1d59..df2ea85 100644
+index 18d5398..999e577 100644
--- a/drivers/ata/ahci_platform.c
+++ b/drivers/ata/ahci_platform.c
@@ -20,6 +20,9 @@
@@ -6884,7 +2997,7 @@ index 06f1d59..df2ea85 100644
#include "ahci.h"
static const struct ata_port_info ahci_port_info = {
-@@ -71,6 +74,13 @@ static const struct of_device_id ahci_of_match[] = {
+@@ -71,12 +74,22 @@ static const struct of_device_id ahci_of_match[] = {
};
MODULE_DEVICE_TABLE(of, ahci_of_match);
@@ -6898,9 +3011,8 @@ index 06f1d59..df2ea85 100644
static struct platform_driver ahci_driver = {
.probe = ahci_probe,
.remove = ata_platform_remove_one,
-@@ -78,6 +88,9 @@ static struct platform_driver ahci_driver = {
+ .driver = {
.name = "ahci",
- .owner = THIS_MODULE,
.of_match_table = ahci_of_match,
+#ifdef CONFIG_ATA_ACPI
+ .acpi_match_table = ACPI_PTR(ahci_acpi_match),
@@ -6909,7 +3021,7 @@ index 06f1d59..df2ea85 100644
},
};
diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
-index 0f8538f..2d8103a 100644
+index feeb8f1..8f82267 100644
--- a/drivers/ata/ahci_xgene.c
+++ b/drivers/ata/ahci_xgene.c
@@ -28,6 +28,7 @@
@@ -6920,16 +3032,6 @@ index 0f8538f..2d8103a 100644
#include "ahci.h"
/* Max # of disk per a controller */
-@@ -137,7 +138,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
- struct xgene_ahci_context *ctx = hpriv->plat_data;
- int rc = 0;
-
-- if (unlikely(ctx->last_cmd[ap->port_no] == ATA_CMD_ID_ATA))
-+ if (unlikely(ctx->last_cmd[ap->port_no] == ATA_CMD_ID_ATA ||
-+ ctx->last_cmd[ap->port_no] == ATA_CMD_SMART))
- xgene_ahci_restart_engine(ap);
-
- rc = ahci_qc_issue(qc);
@@ -148,14 +150,6 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
return rc;
}
@@ -6983,466 +3085,16 @@ index 0f8538f..2d8103a 100644
static const struct of_device_id xgene_ahci_of_match[] = {
{.compatible = "apm,xgene-ahci"},
{},
-@@ -546,6 +545,7 @@ static struct platform_driver xgene_ahci_driver = {
+@@ -545,6 +544,7 @@ static struct platform_driver xgene_ahci_driver = {
+ .driver = {
.name = "xgene-ahci",
- .owner = THIS_MODULE,
.of_match_table = xgene_ahci_of_match,
+ .acpi_match_table = ACPI_PTR(xgene_ahci_acpi_match),
},
};
-diff --git a/drivers/base/Makefile b/drivers/base/Makefile
-index 6922cd6..53c3fe1 100644
---- a/drivers/base/Makefile
-+++ b/drivers/base/Makefile
-@@ -4,7 +4,7 @@ obj-y := component.o core.o bus.o dd.o syscore.o \
- driver.o class.o platform.o \
- cpu.o firmware.o init.o map.o devres.o \
- attribute_container.o transport_class.o \
-- topology.o container.o
-+ topology.o container.o property.o
- obj-$(CONFIG_DEVTMPFS) += devtmpfs.o
- obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
- obj-y += power/
-diff --git a/drivers/base/property.c b/drivers/base/property.c
-new file mode 100644
-index 0000000..c458458
---- /dev/null
-+++ b/drivers/base/property.c
-@@ -0,0 +1,431 @@
-+/*
-+ * property.c - Unified device property interface.
-+ *
-+ * Copyright (C) 2014, Intel Corporation
-+ * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-+ * Mika Westerberg <mika.westerberg@linux.intel.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/property.h>
-+#include <linux/export.h>
-+#include <linux/acpi.h>
-+#include <linux/of.h>
-+
-+/**
-+ * device_property_present - check if a property of a device is present
-+ * @dev: Device whose property is being checked
-+ * @propname: Name of the property
-+ *
-+ * Check if property @propname is present in the device firmware description.
-+ */
-+bool device_property_present(struct device *dev, const char *propname)
-+{
-+ if (IS_ENABLED(CONFIG_OF) && dev->of_node)
-+ return of_property_read_bool(dev->of_node, propname);
-+
-+ return !acpi_dev_prop_get(ACPI_COMPANION(dev), propname, NULL);
-+}
-+EXPORT_SYMBOL_GPL(device_property_present);
-+
-+/**
-+ * fwnode_property_present - check if a property of a firmware node is present
-+ * @fwnode: Firmware node whose property to check
-+ * @propname: Name of the property
-+ */
-+bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
-+{
-+ if (is_of_node(fwnode))
-+ return of_property_read_bool(of_node(fwnode), propname);
-+ else if (is_acpi_node(fwnode))
-+ return !acpi_dev_prop_get(acpi_node(fwnode), propname, NULL);
-+
-+ return false;
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_present);
-+
-+#define OF_DEV_PROP_READ_ARRAY(node, propname, type, val, nval) \
-+ (val) ? of_property_read_##type##_array((node), (propname), (val), (nval)) \
-+ : of_property_count_elems_of_size((node), (propname), sizeof(type))
-+
-+#define DEV_PROP_READ_ARRAY(_dev_, _propname_, _type_, _proptype_, _val_, _nval_) \
-+ IS_ENABLED(CONFIG_OF) && _dev_->of_node ? \
-+ (OF_DEV_PROP_READ_ARRAY(_dev_->of_node, _propname_, _type_, \
-+ _val_, _nval_)) : \
-+ acpi_dev_prop_read(ACPI_COMPANION(_dev_), _propname_, \
-+ _proptype_, _val_, _nval_)
-+
-+/**
-+ * device_property_read_u8_array - return a u8 array property of a device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Function reads an array of u8 properties with @propname from the device
-+ * firmware description and stores them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected.
-+ */
-+int device_property_read_u8_array(struct device *dev, const char *propname,
-+ u8 *val, size_t nval)
-+{
-+ return DEV_PROP_READ_ARRAY(dev, propname, u8, DEV_PROP_U8, val, nval);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_u8_array);
-+
-+/**
-+ * device_property_read_u16_array - return a u16 array property of a device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Function reads an array of u16 properties with @propname from the device
-+ * firmware description and stores them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected.
-+ */
-+int device_property_read_u16_array(struct device *dev, const char *propname,
-+ u16 *val, size_t nval)
-+{
-+ return DEV_PROP_READ_ARRAY(dev, propname, u16, DEV_PROP_U16, val, nval);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_u16_array);
-+
-+/**
-+ * device_property_read_u32_array - return a u32 array property of a device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Function reads an array of u32 properties with @propname from the device
-+ * firmware description and stores them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected.
-+ */
-+int device_property_read_u32_array(struct device *dev, const char *propname,
-+ u32 *val, size_t nval)
-+{
-+ return DEV_PROP_READ_ARRAY(dev, propname, u32, DEV_PROP_U32, val, nval);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_u32_array);
-+
-+/**
-+ * device_property_read_u64_array - return a u64 array property of a device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Function reads an array of u64 properties with @propname from the device
-+ * firmware description and stores them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected.
-+ */
-+int device_property_read_u64_array(struct device *dev, const char *propname,
-+ u64 *val, size_t nval)
-+{
-+ return DEV_PROP_READ_ARRAY(dev, propname, u64, DEV_PROP_U64, val, nval);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_u64_array);
-+
-+/**
-+ * device_property_read_string_array - return a string array property of device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Function reads an array of string properties with @propname from the device
-+ * firmware description and stores them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO or %-EILSEQ if the property is not an array of strings,
-+ * %-EOVERFLOW if the size of the property is not as expected.
-+ */
-+int device_property_read_string_array(struct device *dev, const char *propname,
-+ const char **val, size_t nval)
-+{
-+ return IS_ENABLED(CONFIG_OF) && dev->of_node ?
-+ of_property_read_string_array(dev->of_node, propname, val, nval) :
-+ acpi_dev_prop_read(ACPI_COMPANION(dev), propname,
-+ DEV_PROP_STRING, val, nval);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_string_array);
-+
-+/**
-+ * device_property_read_string - return a string property of a device
-+ * @dev: Device to get the property of
-+ * @propname: Name of the property
-+ * @val: The value is stored here
-+ *
-+ * Function reads property @propname from the device firmware description and
-+ * stores the value into @val if found. The value is checked to be a string.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO or %-EILSEQ if the property type is not a string.
-+ */
-+int device_property_read_string(struct device *dev, const char *propname,
-+ const char **val)
-+{
-+ return IS_ENABLED(CONFIG_OF) && dev->of_node ?
-+ of_property_read_string(dev->of_node, propname, val) :
-+ acpi_dev_prop_read(ACPI_COMPANION(dev), propname,
-+ DEV_PROP_STRING, val, 1);
-+}
-+EXPORT_SYMBOL_GPL(device_property_read_string);
-+
-+#define FWNODE_PROP_READ_ARRAY(_fwnode_, _propname_, _type_, _proptype_, _val_, _nval_) \
-+({ \
-+ int _ret_; \
-+ if (is_of_node(_fwnode_)) \
-+ _ret_ = OF_DEV_PROP_READ_ARRAY(of_node(_fwnode_), _propname_, \
-+ _type_, _val_, _nval_); \
-+ else if (is_acpi_node(_fwnode_)) \
-+ _ret_ = acpi_dev_prop_read(acpi_node(_fwnode_), _propname_, \
-+ _proptype_, _val_, _nval_); \
-+ else \
-+ _ret_ = -ENXIO; \
-+ _ret_; \
-+})
-+
-+/**
-+ * fwnode_property_read_u8_array - return a u8 array property of firmware node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Read an array of u8 properties with @propname from @fwnode and stores them to
-+ * @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_u8_array(struct fwnode_handle *fwnode,
-+ const char *propname, u8 *val, size_t nval)
-+{
-+ return FWNODE_PROP_READ_ARRAY(fwnode, propname, u8, DEV_PROP_U8,
-+ val, nval);
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_u8_array);
-+
-+/**
-+ * fwnode_property_read_u16_array - return a u16 array property of firmware node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Read an array of u16 properties with @propname from @fwnode and store them to
-+ * @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_u16_array(struct fwnode_handle *fwnode,
-+ const char *propname, u16 *val, size_t nval)
-+{
-+ return FWNODE_PROP_READ_ARRAY(fwnode, propname, u16, DEV_PROP_U16,
-+ val, nval);
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_u16_array);
-+
-+/**
-+ * fwnode_property_read_u32_array - return a u32 array property of firmware node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Read an array of u32 properties with @propname from @fwnode store them to
-+ * @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_u32_array(struct fwnode_handle *fwnode,
-+ const char *propname, u32 *val, size_t nval)
-+{
-+ return FWNODE_PROP_READ_ARRAY(fwnode, propname, u32, DEV_PROP_U32,
-+ val, nval);
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_u32_array);
-+
-+/**
-+ * fwnode_property_read_u64_array - return a u64 array property firmware node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Read an array of u64 properties with @propname from @fwnode and store them to
-+ * @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of numbers,
-+ * %-EOVERFLOW if the size of the property is not as expected,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
-+ const char *propname, u64 *val, size_t nval)
-+{
-+ return FWNODE_PROP_READ_ARRAY(fwnode, propname, u64, DEV_PROP_U64,
-+ val, nval);
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_u64_array);
-+
-+/**
-+ * fwnode_property_read_string_array - return string array property of a node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The values are stored here
-+ * @nval: Size of the @val array
-+ *
-+ * Read an string list property @propname from the given firmware node and store
-+ * them to @val if found.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO if the property is not an array of strings,
-+ * %-EOVERFLOW if the size of the property is not as expected,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
-+ const char *propname, const char **val,
-+ size_t nval)
-+{
-+ if (is_of_node(fwnode))
-+ return of_property_read_string_array(of_node(fwnode), propname,
-+ val, nval);
-+ else if (is_acpi_node(fwnode))
-+ return acpi_dev_prop_read(acpi_node(fwnode), propname,
-+ DEV_PROP_STRING, val, nval);
-+
-+ return -ENXIO;
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_string_array);
-+
-+/**
-+ * fwnode_property_read_string - return a string property of a firmware node
-+ * @fwnode: Firmware node to get the property of
-+ * @propname: Name of the property
-+ * @val: The value is stored here
-+ *
-+ * Read property @propname from the given firmware node and store the value into
-+ * @val if found. The value is checked to be a string.
-+ *
-+ * Return: %0 if the property was found (success),
-+ * %-EINVAL if given arguments are not valid,
-+ * %-ENODATA if the property does not have a value,
-+ * %-EPROTO or %-EILSEQ if the property is not a string,
-+ * %-ENXIO if no suitable firmware interface is present.
-+ */
-+int fwnode_property_read_string(struct fwnode_handle *fwnode,
-+ const char *propname, const char **val)
-+{
-+ if (is_of_node(fwnode))
-+ return of_property_read_string(of_node(fwnode),propname, val);
-+ else if (is_acpi_node(fwnode))
-+ return acpi_dev_prop_read(acpi_node(fwnode), propname,
-+ DEV_PROP_STRING, val, 1);
-+
-+ return -ENXIO;
-+}
-+EXPORT_SYMBOL_GPL(fwnode_property_read_string);
-+
-+/**
-+ * device_get_next_child_node - Return the next child node handle for a device
-+ * @dev: Device to find the next child node for.
-+ * @child: Handle to one of the device's child nodes or a null handle.
-+ */
-+struct fwnode_handle *device_get_next_child_node(struct device *dev,
-+ struct fwnode_handle *child)
-+{
-+ if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
-+ struct device_node *node;
-+
-+ node = of_get_next_available_child(dev->of_node, of_node(child));
-+ if (node)
-+ return &node->fwnode;
-+ } else if (IS_ENABLED(CONFIG_ACPI)) {
-+ struct acpi_device *node;
-+
-+ node = acpi_get_next_child(dev, acpi_node(child));
-+ if (node)
-+ return acpi_fwnode_handle(node);
-+ }
-+ return NULL;
-+}
-+EXPORT_SYMBOL_GPL(device_get_next_child_node);
-+
-+/**
-+ * fwnode_handle_put - Drop reference to a device node
-+ * @fwnode: Pointer to the device node to drop the reference to.
-+ *
-+ * This has to be used when terminating device_for_each_child_node() iteration
-+ * with break or return to prevent stale device node references from being left
-+ * behind.
-+ */
-+void fwnode_handle_put(struct fwnode_handle *fwnode)
-+{
-+ if (is_of_node(fwnode))
-+ of_node_put(of_node(fwnode));
-+}
-+EXPORT_SYMBOL_GPL(fwnode_handle_put);
-+
-+/**
-+ * device_get_child_node_count - return the number of child nodes for device
-+ * @dev: Device to cound the child nodes for
-+ */
-+unsigned int device_get_child_node_count(struct device *dev)
-+{
-+ struct fwnode_handle *child;
-+ unsigned int count = 0;
-+
-+ device_for_each_child_node(dev, child)
-+ count++;
-+
-+ return count;
-+}
-+EXPORT_SYMBOL_GPL(device_get_child_node_count);
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
-index 43005d4..c9411e6 100644
+index 095c177..fd5ebbf 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -21,6 +21,7 @@
@@ -7478,7 +3130,7 @@ index 43005d4..c9411e6 100644
if (cntbase)
arch_timer_rate = readl_relaxed(cntbase + CNTFRQ);
else
-@@ -687,20 +693,8 @@ static void __init arch_timer_common_init(void)
+@@ -690,28 +696,8 @@ static void __init arch_timer_common_init(void)
arch_timer_arch_init();
}
@@ -7497,10 +3149,18 @@ index 43005d4..c9411e6 100644
- arch_timer_ppi[i] = irq_of_parse_and_map(np, i);
- arch_timer_detect_rate(NULL, np);
-
+- /*
+- * If we cannot rely on firmware initializing the timer registers then
+- * we should use the physical timers instead.
+- */
+- if (IS_ENABLED(CONFIG_ARM) &&
+- of_property_read_bool(np, "arm,cpu-registers-not-fw-configured"))
+- arch_timer_use_virtual = false;
+-
/*
* If HYP mode is available, we know that the physical timer
* has been configured to be accessible from PL1. Use it, so
-@@ -719,13 +713,31 @@ static void __init arch_timer_init(struct device_node *np)
+@@ -730,13 +716,39 @@ static void __init arch_timer_init(struct device_node *np)
}
}
@@ -7516,6 +3176,14 @@ index 43005d4..c9411e6 100644
+{
+ int i;
+
++ /*
++ * If we cannot rely on firmware initializing the timer registers then
++ * we should use the physical timers instead.
++ */
++ if (IS_ENABLED(CONFIG_ARM) &&
++ of_property_read_bool(np, "arm,cpu-registers-not-fw-configured"))
++ arch_timer_use_virtual = false;
++
+ if (arch_timers_present & ARCH_CP15_TIMER) {
+ pr_warn("arch_timer: multiple nodes in dt, skipping\n");
+ return;
@@ -7536,7 +3204,7 @@ index 43005d4..c9411e6 100644
static void __init arch_timer_mem_init(struct device_node *np)
{
-@@ -792,3 +804,71 @@ static void __init arch_timer_mem_init(struct device_node *np)
+@@ -803,3 +815,71 @@ static void __init arch_timer_mem_init(struct device_node *np)
}
CLOCKSOURCE_OF_DECLARE(armv7_arch_timer_mem, "arm,armv7-timer-mem",
arch_timer_mem_init);
@@ -7608,1163 +3276,23 @@ index 43005d4..c9411e6 100644
+ acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init);
+}
+#endif
-diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
-index 17afc51..c5f7b4e 100644
---- a/drivers/firmware/dmi_scan.c
-+++ b/drivers/firmware/dmi_scan.c
-@@ -93,6 +93,12 @@ static void dmi_table(u8 *buf, int len, int num,
- const struct dmi_header *dm = (const struct dmi_header *)data;
-
- /*
-+ * 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0]
-+ */
-+ if (dm->type == DMI_ENTRY_END_OF_TABLE)
-+ break;
-+
-+ /*
- * We want to know the total length (formatted area and
- * strings) before decoding to make sure we won't run off the
- * table in dmi_decode or dmi_string
-@@ -107,7 +113,7 @@ static void dmi_table(u8 *buf, int len, int num,
- }
- }
-
--static u32 dmi_base;
-+static phys_addr_t dmi_base;
- static u16 dmi_len;
- static u16 dmi_num;
-
-@@ -467,7 +473,7 @@ static int __init dmi_present(const u8 *buf)
-
- if (memcmp(buf, "_SM_", 4) == 0 &&
- buf[5] < 32 && dmi_checksum(buf, buf[5])) {
-- smbios_ver = (buf[6] << 8) + buf[7];
-+ smbios_ver = get_unaligned_be16(buf + 6);
-
- /* Some BIOS report weird SMBIOS version, fix that up */
- switch (smbios_ver) {
-@@ -489,10 +495,9 @@ static int __init dmi_present(const u8 *buf)
- buf += 16;
-
- if (memcmp(buf, "_DMI_", 5) == 0 && dmi_checksum(buf, 15)) {
-- dmi_num = (buf[13] << 8) | buf[12];
-- dmi_len = (buf[7] << 8) | buf[6];
-- dmi_base = (buf[11] << 24) | (buf[10] << 16) |
-- (buf[9] << 8) | buf[8];
-+ dmi_num = get_unaligned_le16(buf + 12);
-+ dmi_len = get_unaligned_le16(buf + 6);
-+ dmi_base = get_unaligned_le32(buf + 8);
-
- if (dmi_walk_early(dmi_decode) == 0) {
- if (smbios_ver) {
-@@ -514,12 +519,72 @@ static int __init dmi_present(const u8 *buf)
- return 1;
- }
-
-+/*
-+ * Check for the SMBIOS 3.0 64-bit entry point signature. Unlike the legacy
-+ * 32-bit entry point, there is no embedded DMI header (_DMI_) in here.
-+ */
-+static int __init dmi_smbios3_present(const u8 *buf)
-+{
-+ if (memcmp(buf, "_SM3_", 5) == 0 &&
-+ buf[6] < 32 && dmi_checksum(buf, buf[6])) {
-+ dmi_ver = get_unaligned_be16(buf + 7);
-+ dmi_len = get_unaligned_le32(buf + 12);
-+ dmi_base = get_unaligned_le64(buf + 16);
-+
-+ /*
-+ * The 64-bit SMBIOS 3.0 entry point no longer has a field
-+ * containing the number of structures present in the table.
-+ * Instead, it defines the table size as a maximum size, and
-+ * relies on the end-of-table structure type (#127) to be used
-+ * to signal the end of the table.
-+ * So let's define dmi_num as an upper bound as well: each
-+ * structure has a 4 byte header, so dmi_len / 4 is an upper
-+ * bound for the number of structures in the table.
-+ */
-+ dmi_num = dmi_len / 4;
-+
-+ if (dmi_walk_early(dmi_decode) == 0) {
-+ pr_info("SMBIOS %d.%d present.\n",
-+ dmi_ver >> 8, dmi_ver & 0xFF);
-+ dmi_format_ids(dmi_ids_string, sizeof(dmi_ids_string));
-+ pr_debug("DMI: %s\n", dmi_ids_string);
-+ return 0;
-+ }
-+ }
-+ return 1;
-+}
-+
- void __init dmi_scan_machine(void)
- {
- char __iomem *p, *q;
- char buf[32];
-
- if (efi_enabled(EFI_CONFIG_TABLES)) {
-+ /*
-+ * According to the DMTF SMBIOS reference spec v3.0.0, it is
-+ * allowed to define both the 64-bit entry point (smbios3) and
-+ * the 32-bit entry point (smbios), in which case they should
-+ * either both point to the same SMBIOS structure table, or the
-+ * table pointed to by the 64-bit entry point should contain a
-+ * superset of the table contents pointed to by the 32-bit entry
-+ * point (section 5.2)
-+ * This implies that the 64-bit entry point should have
-+ * precedence if it is defined and supported by the OS. If we
-+ * have the 64-bit entry point, but fail to decode it, fall
-+ * back to the legacy one (if available)
-+ */
-+ if (efi.smbios3 != EFI_INVALID_TABLE_ADDR) {
-+ p = dmi_early_remap(efi.smbios3, 32);
-+ if (p == NULL)
-+ goto error;
-+ memcpy_fromio(buf, p, 32);
-+ dmi_early_unmap(p, 32);
-+
-+ if (!dmi_smbios3_present(buf)) {
-+ dmi_available = 1;
-+ goto out;
-+ }
-+ }
- if (efi.smbios == EFI_INVALID_TABLE_ADDR)
- goto error;
-
-@@ -552,7 +617,7 @@ void __init dmi_scan_machine(void)
- memset(buf, 0, 16);
- for (q = p; q < p + 0x10000; q += 16) {
- memcpy_fromio(buf + 16, q, 16);
-- if (!dmi_present(buf)) {
-+ if (!dmi_smbios3_present(buf) || !dmi_present(buf)) {
- dmi_available = 1;
- dmi_early_unmap(p, 0x10000);
- goto out;
-diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
-index 8590099..9035c1b 100644
---- a/drivers/firmware/efi/efi.c
-+++ b/drivers/firmware/efi/efi.c
-@@ -30,6 +30,7 @@ struct efi __read_mostly efi = {
- .acpi = EFI_INVALID_TABLE_ADDR,
- .acpi20 = EFI_INVALID_TABLE_ADDR,
- .smbios = EFI_INVALID_TABLE_ADDR,
-+ .smbios3 = EFI_INVALID_TABLE_ADDR,
- .sal_systab = EFI_INVALID_TABLE_ADDR,
- .boot_info = EFI_INVALID_TABLE_ADDR,
- .hcdp = EFI_INVALID_TABLE_ADDR,
-@@ -86,6 +87,8 @@ static ssize_t systab_show(struct kobject *kobj,
- str += sprintf(str, "ACPI=0x%lx\n", efi.acpi);
- if (efi.smbios != EFI_INVALID_TABLE_ADDR)
- str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
-+ if (efi.smbios3 != EFI_INVALID_TABLE_ADDR)
-+ str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
- if (efi.hcdp != EFI_INVALID_TABLE_ADDR)
- str += sprintf(str, "HCDP=0x%lx\n", efi.hcdp);
- if (efi.boot_info != EFI_INVALID_TABLE_ADDR)
-@@ -260,6 +263,7 @@ static __initdata efi_config_table_type_t common_tables[] = {
- {MPS_TABLE_GUID, "MPS", &efi.mps},
- {SAL_SYSTEM_TABLE_GUID, "SALsystab", &efi.sal_systab},
- {SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios},
-+ {SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3},
- {UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga},
- {NULL_GUID, NULL, NULL},
- };
-diff --git a/drivers/firmware/efi/libstub/arm-stub.c b/drivers/firmware/efi/libstub/arm-stub.c
-index 75ee059..eb48a1a 100644
---- a/drivers/firmware/efi/libstub/arm-stub.c
-+++ b/drivers/firmware/efi/libstub/arm-stub.c
-@@ -247,9 +247,18 @@ unsigned long __init efi_entry(void *handle, efi_system_table_t *sys_table,
- goto fail_free_cmdline;
- }
- }
-- if (!fdt_addr)
-+
-+ if (fdt_addr) {
-+ pr_efi(sys_table, "Using DTB from command line\n");
-+ } else {
- /* Look for a device tree configuration table entry. */
- fdt_addr = (uintptr_t)get_fdt(sys_table);
-+ if (fdt_addr)
-+ pr_efi(sys_table, "Using DTB from configuration table\n");
-+ }
-+
-+ if (!fdt_addr)
-+ pr_efi(sys_table, "Generating empty DTB\n");
-
- status = handle_cmdline_files(sys_table, image, cmdline_ptr,
- "initrd=", dram_base + SZ_512M,
-diff --git a/drivers/gpio/devres.c b/drivers/gpio/devres.c
-index 954b9f6..13dbd3d 100644
---- a/drivers/gpio/devres.c
-+++ b/drivers/gpio/devres.c
-@@ -109,6 +109,38 @@ struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev,
- EXPORT_SYMBOL(__devm_gpiod_get_index);
-
- /**
-+ * devm_get_gpiod_from_child - get a GPIO descriptor from a device's child node
-+ * @dev: GPIO consumer
-+ * @child: firmware node (child of @dev)
-+ *
-+ * GPIO descriptors returned from this function are automatically disposed on
-+ * driver detach.
-+ */
-+struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
-+ struct fwnode_handle *child)
-+{
-+ struct gpio_desc **dr;
-+ struct gpio_desc *desc;
-+
-+ dr = devres_alloc(devm_gpiod_release, sizeof(struct gpio_desc *),
-+ GFP_KERNEL);
-+ if (!dr)
-+ return ERR_PTR(-ENOMEM);
-+
-+ desc = fwnode_get_named_gpiod(child, "gpios");
-+ if (IS_ERR(desc)) {
-+ devres_free(dr);
-+ return desc;
-+ }
-+
-+ *dr = desc;
-+ devres_add(dev, dr);
-+
-+ return desc;
-+}
-+EXPORT_SYMBOL(devm_get_gpiod_from_child);
-+
-+/**
- * devm_gpiod_get_index_optional - Resource-managed gpiod_get_index_optional()
- * @dev: GPIO consumer
- * @con_id: function within the GPIO consumer
-diff --git a/drivers/gpio/gpio-sch.c b/drivers/gpio/gpio-sch.c
-index 41e91d7..99720c8 100644
---- a/drivers/gpio/gpio-sch.c
-+++ b/drivers/gpio/gpio-sch.c
-@@ -29,290 +29,221 @@
-
- #include <linux/gpio.h>
-
--static DEFINE_SPINLOCK(gpio_lock);
--
--#define CGEN (0x00)
--#define CGIO (0x04)
--#define CGLV (0x08)
--
--#define RGEN (0x20)
--#define RGIO (0x24)
--#define RGLV (0x28)
--
--static unsigned short gpio_ba;
--
--static int sch_gpio_core_direction_in(struct gpio_chip *gc, unsigned gpio_num)
--{
-- u8 curr_dirs;
-- unsigned short offset, bit;
--
-- spin_lock(&gpio_lock);
--
-- offset = CGIO + gpio_num / 8;
-- bit = gpio_num % 8;
--
-- curr_dirs = inb(gpio_ba + offset);
--
-- if (!(curr_dirs & (1 << bit)))
-- outb(curr_dirs | (1 << bit), gpio_ba + offset);
-+#define GEN 0x00
-+#define GIO 0x04
-+#define GLV 0x08
-+
-+struct sch_gpio {
-+ struct gpio_chip chip;
-+ spinlock_t lock;
-+ unsigned short iobase;
-+ unsigned short core_base;
-+ unsigned short resume_base;
-+};
-
-- spin_unlock(&gpio_lock);
-- return 0;
--}
-+#define to_sch_gpio(c) container_of(c, struct sch_gpio, chip)
-
--static int sch_gpio_core_get(struct gpio_chip *gc, unsigned gpio_num)
-+static unsigned sch_gpio_offset(struct sch_gpio *sch, unsigned gpio,
-+ unsigned reg)
- {
-- int res;
-- unsigned short offset, bit;
-+ unsigned base = 0;
-
-- offset = CGLV + gpio_num / 8;
-- bit = gpio_num % 8;
-+ if (gpio >= sch->resume_base) {
-+ gpio -= sch->resume_base;
-+ base += 0x20;
-+ }
-
-- res = !!(inb(gpio_ba + offset) & (1 << bit));
-- return res;
-+ return base + reg + gpio / 8;
- }
-
--static void sch_gpio_core_set(struct gpio_chip *gc, unsigned gpio_num, int val)
-+static unsigned sch_gpio_bit(struct sch_gpio *sch, unsigned gpio)
- {
-- u8 curr_vals;
-- unsigned short offset, bit;
--
-- spin_lock(&gpio_lock);
--
-- offset = CGLV + gpio_num / 8;
-- bit = gpio_num % 8;
--
-- curr_vals = inb(gpio_ba + offset);
--
-- if (val)
-- outb(curr_vals | (1 << bit), gpio_ba + offset);
-- else
-- outb((curr_vals & ~(1 << bit)), gpio_ba + offset);
-- spin_unlock(&gpio_lock);
-+ if (gpio >= sch->resume_base)
-+ gpio -= sch->resume_base;
-+ return gpio % 8;
- }
-
--static int sch_gpio_core_direction_out(struct gpio_chip *gc,
-- unsigned gpio_num, int val)
-+static void sch_gpio_enable(struct sch_gpio *sch, unsigned gpio)
- {
-- u8 curr_dirs;
- unsigned short offset, bit;
-+ u8 enable;
-
-- spin_lock(&gpio_lock);
-+ spin_lock(&sch->lock);
-
-- offset = CGIO + gpio_num / 8;
-- bit = gpio_num % 8;
--
-- curr_dirs = inb(gpio_ba + offset);
-- if (curr_dirs & (1 << bit))
-- outb(curr_dirs & ~(1 << bit), gpio_ba + offset);
-+ offset = sch_gpio_offset(sch, gpio, GEN);
-+ bit = sch_gpio_bit(sch, gpio);
-
-- spin_unlock(&gpio_lock);
-+ enable = inb(sch->iobase + offset);
-+ if (!(enable & (1 << bit)))
-+ outb(enable | (1 << bit), sch->iobase + offset);
-
-- /*
-- * according to the datasheet, writing to the level register has no
-- * effect when GPIO is programmed as input.
-- * Actually the the level register is read-only when configured as input.
-- * Thus presetting the output level before switching to output is _NOT_ possible.
-- * Hence we set the level after configuring the GPIO as output.
-- * But we cannot prevent a short low pulse if direction is set to high
-- * and an external pull-up is connected.
-- */
-- sch_gpio_core_set(gc, gpio_num, val);
-- return 0;
-+ spin_unlock(&sch->lock);
- }
-
--static struct gpio_chip sch_gpio_core = {
-- .label = "sch_gpio_core",
-- .owner = THIS_MODULE,
-- .direction_input = sch_gpio_core_direction_in,
-- .get = sch_gpio_core_get,
-- .direction_output = sch_gpio_core_direction_out,
-- .set = sch_gpio_core_set,
--};
--
--static int sch_gpio_resume_direction_in(struct gpio_chip *gc,
-- unsigned gpio_num)
-+static int sch_gpio_direction_in(struct gpio_chip *gc, unsigned gpio_num)
- {
-+ struct sch_gpio *sch = to_sch_gpio(gc);
- u8 curr_dirs;
- unsigned short offset, bit;
-
-- spin_lock(&gpio_lock);
-+ spin_lock(&sch->lock);
-
-- offset = RGIO + gpio_num / 8;
-- bit = gpio_num % 8;
-+ offset = sch_gpio_offset(sch, gpio_num, GIO);
-+ bit = sch_gpio_bit(sch, gpio_num);
-
-- curr_dirs = inb(gpio_ba + offset);
-+ curr_dirs = inb(sch->iobase + offset);
-
- if (!(curr_dirs & (1 << bit)))
-- outb(curr_dirs | (1 << bit), gpio_ba + offset);
-+ outb(curr_dirs | (1 << bit), sch->iobase + offset);
-
-- spin_unlock(&gpio_lock);
-+ spin_unlock(&sch->lock);
- return 0;
- }
-
--static int sch_gpio_resume_get(struct gpio_chip *gc, unsigned gpio_num)
-+static int sch_gpio_get(struct gpio_chip *gc, unsigned gpio_num)
- {
-+ struct sch_gpio *sch = to_sch_gpio(gc);
-+ int res;
- unsigned short offset, bit;
-
-- offset = RGLV + gpio_num / 8;
-- bit = gpio_num % 8;
-+ offset = sch_gpio_offset(sch, gpio_num, GLV);
-+ bit = sch_gpio_bit(sch, gpio_num);
-+
-+ res = !!(inb(sch->iobase + offset) & (1 << bit));
-
-- return !!(inb(gpio_ba + offset) & (1 << bit));
-+ return res;
- }
-
--static void sch_gpio_resume_set(struct gpio_chip *gc,
-- unsigned gpio_num, int val)
-+static void sch_gpio_set(struct gpio_chip *gc, unsigned gpio_num, int val)
- {
-+ struct sch_gpio *sch = to_sch_gpio(gc);
- u8 curr_vals;
- unsigned short offset, bit;
-
-- spin_lock(&gpio_lock);
-+ spin_lock(&sch->lock);
-
-- offset = RGLV + gpio_num / 8;
-- bit = gpio_num % 8;
-+ offset = sch_gpio_offset(sch, gpio_num, GLV);
-+ bit = sch_gpio_bit(sch, gpio_num);
-
-- curr_vals = inb(gpio_ba + offset);
-+ curr_vals = inb(sch->iobase + offset);
-
- if (val)
-- outb(curr_vals | (1 << bit), gpio_ba + offset);
-+ outb(curr_vals | (1 << bit), sch->iobase + offset);
- else
-- outb((curr_vals & ~(1 << bit)), gpio_ba + offset);
-+ outb((curr_vals & ~(1 << bit)), sch->iobase + offset);
-
-- spin_unlock(&gpio_lock);
-+ spin_unlock(&sch->lock);
- }
-
--static int sch_gpio_resume_direction_out(struct gpio_chip *gc,
-- unsigned gpio_num, int val)
-+static int sch_gpio_direction_out(struct gpio_chip *gc, unsigned gpio_num,
-+ int val)
- {
-+ struct sch_gpio *sch = to_sch_gpio(gc);
- u8 curr_dirs;
- unsigned short offset, bit;
-
-- offset = RGIO + gpio_num / 8;
-- bit = gpio_num % 8;
-+ spin_lock(&sch->lock);
-
-- spin_lock(&gpio_lock);
-+ offset = sch_gpio_offset(sch, gpio_num, GIO);
-+ bit = sch_gpio_bit(sch, gpio_num);
-
-- curr_dirs = inb(gpio_ba + offset);
-+ curr_dirs = inb(sch->iobase + offset);
- if (curr_dirs & (1 << bit))
-- outb(curr_dirs & ~(1 << bit), gpio_ba + offset);
-+ outb(curr_dirs & ~(1 << bit), sch->iobase + offset);
-
-- spin_unlock(&gpio_lock);
-+ spin_unlock(&sch->lock);
-
- /*
-- * according to the datasheet, writing to the level register has no
-- * effect when GPIO is programmed as input.
-- * Actually the the level register is read-only when configured as input.
-- * Thus presetting the output level before switching to output is _NOT_ possible.
-- * Hence we set the level after configuring the GPIO as output.
-- * But we cannot prevent a short low pulse if direction is set to high
-- * and an external pull-up is connected.
-- */
-- sch_gpio_resume_set(gc, gpio_num, val);
-+ * according to the datasheet, writing to the level register has no
-+ * effect when GPIO is programmed as input.
-+ * Actually the the level register is read-only when configured as input.
-+ * Thus presetting the output level before switching to output is _NOT_ possible.
-+ * Hence we set the level after configuring the GPIO as output.
-+ * But we cannot prevent a short low pulse if direction is set to high
-+ * and an external pull-up is connected.
-+ */
-+ sch_gpio_set(gc, gpio_num, val);
- return 0;
- }
-
--static struct gpio_chip sch_gpio_resume = {
-- .label = "sch_gpio_resume",
-+static struct gpio_chip sch_gpio_chip = {
-+ .label = "sch_gpio",
- .owner = THIS_MODULE,
-- .direction_input = sch_gpio_resume_direction_in,
-- .get = sch_gpio_resume_get,
-- .direction_output = sch_gpio_resume_direction_out,
-- .set = sch_gpio_resume_set,
-+ .direction_input = sch_gpio_direction_in,
-+ .get = sch_gpio_get,
-+ .direction_output = sch_gpio_direction_out,
-+ .set = sch_gpio_set,
- };
-
- static int sch_gpio_probe(struct platform_device *pdev)
- {
-+ struct sch_gpio *sch;
- struct resource *res;
-- int err, id;
-
-- id = pdev->id;
-- if (!id)
-- return -ENODEV;
-+ sch = devm_kzalloc(&pdev->dev, sizeof(*sch), GFP_KERNEL);
-+ if (!sch)
-+ return -ENOMEM;
-
- res = platform_get_resource(pdev, IORESOURCE_IO, 0);
- if (!res)
- return -EBUSY;
-
-- if (!request_region(res->start, resource_size(res), pdev->name))
-+ if (!devm_request_region(&pdev->dev, res->start, resource_size(res),
-+ pdev->name))
- return -EBUSY;
-
-- gpio_ba = res->start;
-+ spin_lock_init(&sch->lock);
-+ sch->iobase = res->start;
-+ sch->chip = sch_gpio_chip;
-+ sch->chip.label = dev_name(&pdev->dev);
-+ sch->chip.dev = &pdev->dev;
-
-- switch (id) {
-+ switch (pdev->id) {
- case PCI_DEVICE_ID_INTEL_SCH_LPC:
-- sch_gpio_core.base = 0;
-- sch_gpio_core.ngpio = 10;
-- sch_gpio_resume.base = 10;
-- sch_gpio_resume.ngpio = 4;
-+ sch->core_base = 0;
-+ sch->resume_base = 10;
-+ sch->chip.ngpio = 14;
-+
- /*
- * GPIO[6:0] enabled by default
- * GPIO7 is configured by the CMC as SLPIOVR
- * Enable GPIO[9:8] core powered gpios explicitly
- */
-- outb(0x3, gpio_ba + CGEN + 1);
-+ sch_gpio_enable(sch, 8);
-+ sch_gpio_enable(sch, 9);
- /*
- * SUS_GPIO[2:0] enabled by default
- * Enable SUS_GPIO3 resume powered gpio explicitly
- */
-- outb(0x8, gpio_ba + RGEN);
-+ sch_gpio_enable(sch, 13);
- break;
-
- case PCI_DEVICE_ID_INTEL_ITC_LPC:
-- sch_gpio_core.base = 0;
-- sch_gpio_core.ngpio = 5;
-- sch_gpio_resume.base = 5;
-- sch_gpio_resume.ngpio = 9;
-+ sch->core_base = 0;
-+ sch->resume_base = 5;
-+ sch->chip.ngpio = 14;
- break;
-
- case PCI_DEVICE_ID_INTEL_CENTERTON_ILB:
-- sch_gpio_core.base = 0;
-- sch_gpio_core.ngpio = 21;
-- sch_gpio_resume.base = 21;
-- sch_gpio_resume.ngpio = 9;
-+ sch->core_base = 0;
-+ sch->resume_base = 21;
-+ sch->chip.ngpio = 30;
- break;
-
- default:
-- err = -ENODEV;
-- goto err_sch_gpio_core;
-+ return -ENODEV;
- }
-
-- sch_gpio_core.dev = &pdev->dev;
-- sch_gpio_resume.dev = &pdev->dev;
--
-- err = gpiochip_add(&sch_gpio_core);
-- if (err < 0)
-- goto err_sch_gpio_core;
-+ platform_set_drvdata(pdev, sch);
-
-- err = gpiochip_add(&sch_gpio_resume);
-- if (err < 0)
-- goto err_sch_gpio_resume;
--
-- return 0;
--
--err_sch_gpio_resume:
-- gpiochip_remove(&sch_gpio_core);
--
--err_sch_gpio_core:
-- release_region(res->start, resource_size(res));
-- gpio_ba = 0;
--
-- return err;
-+ return gpiochip_add(&sch->chip);
- }
-
- static int sch_gpio_remove(struct platform_device *pdev)
- {
-- struct resource *res;
-- if (gpio_ba) {
--
-- gpiochip_remove(&sch_gpio_core);
-- gpiochip_remove(&sch_gpio_resume);
--
-- res = platform_get_resource(pdev, IORESOURCE_IO, 0);
--
-- release_region(res->start, resource_size(res));
-- gpio_ba = 0;
-- }
-+ struct sch_gpio *sch = platform_get_drvdata(pdev);
-
-+ gpiochip_remove(&sch->chip);
- return 0;
- }
-
-diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
-index 05c6275..ba98bb5 100644
---- a/drivers/gpio/gpiolib-acpi.c
-+++ b/drivers/gpio/gpiolib-acpi.c
-@@ -287,9 +287,45 @@ void acpi_gpiochip_free_interrupts(struct gpio_chip *chip)
- }
- }
-
-+int acpi_dev_add_driver_gpios(struct acpi_device *adev,
-+ const struct acpi_gpio_mapping *gpios)
-+{
-+ if (adev && gpios) {
-+ adev->driver_gpios = gpios;
-+ return 0;
-+ }
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL_GPL(acpi_dev_add_driver_gpios);
-+
-+static bool acpi_get_driver_gpio_data(struct acpi_device *adev,
-+ const char *name, int index,
-+ struct acpi_reference_args *args)
-+{
-+ const struct acpi_gpio_mapping *gm;
-+
-+ if (!adev->driver_gpios)
-+ return false;
-+
-+ for (gm = adev->driver_gpios; gm->name; gm++)
-+ if (!strcmp(name, gm->name) && gm->data && index < gm->size) {
-+ const struct acpi_gpio_params *par = gm->data + index;
-+
-+ args->adev = adev;
-+ args->args[0] = par->crs_entry_index;
-+ args->args[1] = par->line_index;
-+ args->args[2] = par->active_low;
-+ args->nargs = 3;
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
- struct acpi_gpio_lookup {
- struct acpi_gpio_info info;
- int index;
-+ int pin_index;
- struct gpio_desc *desc;
- int n;
- };
-@@ -303,13 +339,24 @@ static int acpi_find_gpio(struct acpi_resource *ares, void *data)
-
- if (lookup->n++ == lookup->index && !lookup->desc) {
- const struct acpi_resource_gpio *agpio = &ares->data.gpio;
-+ int pin_index = lookup->pin_index;
-+
-+ if (pin_index >= agpio->pin_table_length)
-+ return 1;
-
- lookup->desc = acpi_get_gpiod(agpio->resource_source.string_ptr,
-- agpio->pin_table[0]);
-+ agpio->pin_table[pin_index]);
- lookup->info.gpioint =
- agpio->connection_type == ACPI_RESOURCE_GPIO_TYPE_INT;
-- lookup->info.active_low =
-- agpio->polarity == ACPI_ACTIVE_LOW;
-+
-+ /*
-+ * ActiveLow is only specified for GpioInt resource. If
-+ * GpioIo is used then the only way to set the flag is
-+ * to use _DSD "gpios" property.
-+ */
-+ if (lookup->info.gpioint)
-+ lookup->info.active_low =
-+ agpio->polarity == ACPI_ACTIVE_LOW;
- }
-
- return 1;
-@@ -317,40 +364,79 @@ static int acpi_find_gpio(struct acpi_resource *ares, void *data)
-
- /**
- * acpi_get_gpiod_by_index() - get a GPIO descriptor from device resources
-- * @dev: pointer to a device to get GPIO from
-+ * @adev: pointer to a ACPI device to get GPIO from
-+ * @propname: Property name of the GPIO (optional)
- * @index: index of GpioIo/GpioInt resource (starting from %0)
- * @info: info pointer to fill in (optional)
- *
-- * Function goes through ACPI resources for @dev and based on @index looks
-+ * Function goes through ACPI resources for @adev and based on @index looks
- * up a GpioIo/GpioInt resource, translates it to the Linux GPIO descriptor,
- * and returns it. @index matches GpioIo/GpioInt resources only so if there
- * are total %3 GPIO resources, the index goes from %0 to %2.
- *
-+ * If @propname is specified the GPIO is looked using device property. In
-+ * that case @index is used to select the GPIO entry in the property value
-+ * (in case of multiple).
-+ *
- * If the GPIO cannot be translated or there is an error an ERR_PTR is
- * returned.
- *
- * Note: if the GPIO resource has multiple entries in the pin list, this
- * function only returns the first.
- */
--struct gpio_desc *acpi_get_gpiod_by_index(struct device *dev, int index,
-+struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
-+ const char *propname, int index,
- struct acpi_gpio_info *info)
- {
- struct acpi_gpio_lookup lookup;
- struct list_head resource_list;
-- struct acpi_device *adev;
-- acpi_handle handle;
-+ bool active_low = false;
- int ret;
-
-- if (!dev)
-- return ERR_PTR(-EINVAL);
--
-- handle = ACPI_HANDLE(dev);
-- if (!handle || acpi_bus_get_device(handle, &adev))
-+ if (!adev)
- return ERR_PTR(-ENODEV);
-
- memset(&lookup, 0, sizeof(lookup));
- lookup.index = index;
-
-+ if (propname) {
-+ struct acpi_reference_args args;
-+
-+ dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
-+
-+ memset(&args, 0, sizeof(args));
-+ ret = acpi_dev_get_property_reference(adev, propname,
-+ index, &args);
-+ if (ret) {
-+ bool found = acpi_get_driver_gpio_data(adev, propname,
-+ index, &args);
-+ if (!found)
-+ return ERR_PTR(ret);
-+ }
-+
-+ /*
-+ * The property was found and resolved so need to
-+ * lookup the GPIO based on returned args instead.
-+ */
-+ adev = args.adev;
-+ if (args.nargs >= 2) {
-+ lookup.index = args.args[0];
-+ lookup.pin_index = args.args[1];
-+ /*
-+ * 3rd argument, if present is used to
-+ * specify active_low.
-+ */
-+ if (args.nargs >= 3)
-+ active_low = !!args.args[2];
-+ }
-+
-+ dev_dbg(&adev->dev, "GPIO: _DSD returned %s %zd %llu %llu %llu\n",
-+ dev_name(&adev->dev), args.nargs,
-+ args.args[0], args.args[1], args.args[2]);
-+ } else {
-+ dev_dbg(&adev->dev, "GPIO: looking up %d in _CRS\n", index);
-+ }
-+
- INIT_LIST_HEAD(&resource_list);
- ret = acpi_dev_get_resources(adev, &resource_list, acpi_find_gpio,
- &lookup);
-@@ -359,8 +445,11 @@ struct gpio_desc *acpi_get_gpiod_by_index(struct device *dev, int index,
-
- acpi_dev_free_resource_list(&resource_list);
-
-- if (lookup.desc && info)
-+ if (lookup.desc && info) {
- *info = lookup.info;
-+ if (active_low)
-+ info->active_low = active_low;
-+ }
-
- return lookup.desc ? lookup.desc : ERR_PTR(-ENOENT);
- }
-diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index e8e98ca..58659db 100644
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -1505,14 +1505,36 @@ static struct gpio_desc *acpi_find_gpio(struct device *dev, const char *con_id,
- unsigned int idx,
- enum gpio_lookup_flags *flags)
- {
-+ static const char * const suffixes[] = { "gpios", "gpio" };
-+ struct acpi_device *adev = ACPI_COMPANION(dev);
- struct acpi_gpio_info info;
- struct gpio_desc *desc;
-+ char propname[32];
-+ int i;
-
-- desc = acpi_get_gpiod_by_index(dev, idx, &info);
-- if (IS_ERR(desc))
-- return desc;
-+ /* Try first from _DSD */
-+ for (i = 0; i < ARRAY_SIZE(suffixes); i++) {
-+ if (con_id && strcmp(con_id, "gpios")) {
-+ snprintf(propname, sizeof(propname), "%s-%s",
-+ con_id, suffixes[i]);
-+ } else {
-+ snprintf(propname, sizeof(propname), "%s",
-+ suffixes[i]);
-+ }
-+
-+ desc = acpi_get_gpiod_by_index(adev, propname, idx, &info);
-+ if (!IS_ERR(desc) || (PTR_ERR(desc) == -EPROBE_DEFER))
-+ break;
-+ }
-
-- if (info.gpioint && info.active_low)
-+ /* Then from plain _CRS GPIOs */
-+ if (IS_ERR(desc)) {
-+ desc = acpi_get_gpiod_by_index(adev, NULL, idx, &info);
-+ if (IS_ERR(desc))
-+ return desc;
-+ }
-+
-+ if (info.active_low)
- *flags |= GPIO_ACTIVE_LOW;
-
- return desc;
-@@ -1713,6 +1735,61 @@ struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
- EXPORT_SYMBOL_GPL(__gpiod_get_index);
-
- /**
-+ * fwnode_get_named_gpiod - obtain a GPIO from firmware node
-+ * @fwnode: handle of the firmware node
-+ * @propname: name of the firmware property representing the GPIO
-+ *
-+ * This function can be used for drivers that get their configuration
-+ * from firmware.
-+ *
-+ * Function properly finds the corresponding GPIO using whatever is the
-+ * underlying firmware interface and then makes sure that the GPIO
-+ * descriptor is requested before it is returned to the caller.
-+ *
-+ * In case of error an ERR_PTR() is returned.
-+ */
-+struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
-+ const char *propname)
-+{
-+ struct gpio_desc *desc = ERR_PTR(-ENODEV);
-+ bool active_low = false;
-+ int ret;
-+
-+ if (!fwnode)
-+ return ERR_PTR(-EINVAL);
-+
-+ if (is_of_node(fwnode)) {
-+ enum of_gpio_flags flags;
-+
-+ desc = of_get_named_gpiod_flags(of_node(fwnode), propname, 0,
-+ &flags);
-+ if (!IS_ERR(desc))
-+ active_low = flags & OF_GPIO_ACTIVE_LOW;
-+ } else if (is_acpi_node(fwnode)) {
-+ struct acpi_gpio_info info;
-+
-+ desc = acpi_get_gpiod_by_index(acpi_node(fwnode), propname, 0,
-+ &info);
-+ if (!IS_ERR(desc))
-+ active_low = info.active_low;
-+ }
-+
-+ if (IS_ERR(desc))
-+ return desc;
-+
-+ ret = gpiod_request(desc, NULL);
-+ if (ret)
-+ return ERR_PTR(ret);
-+
-+ /* Only value flag can be set from both DT and ACPI is active_low */
-+ if (active_low)
-+ set_bit(FLAG_ACTIVE_LOW, &desc->flags);
-+
-+ return desc;
-+}
-+EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod);
-+
-+/**
- * gpiod_get_index_optional - obtain an optional GPIO from a multi-index GPIO
- * function
- * @dev: GPIO consumer, can be NULL for system-global GPIOs
-diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
-index 9db2b6a..e3a5211 100644
---- a/drivers/gpio/gpiolib.h
-+++ b/drivers/gpio/gpiolib.h
-@@ -34,7 +34,8 @@ void acpi_gpiochip_remove(struct gpio_chip *chip);
- void acpi_gpiochip_request_interrupts(struct gpio_chip *chip);
- void acpi_gpiochip_free_interrupts(struct gpio_chip *chip);
-
--struct gpio_desc *acpi_get_gpiod_by_index(struct device *dev, int index,
-+struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
-+ const char *propname, int index,
- struct acpi_gpio_info *info);
- #else
- static inline void acpi_gpiochip_add(struct gpio_chip *chip) { }
-@@ -47,8 +48,8 @@ static inline void
- acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { }
-
- static inline struct gpio_desc *
--acpi_get_gpiod_by_index(struct device *dev, int index,
-- struct acpi_gpio_info *info)
-+acpi_get_gpiod_by_index(struct acpi_device *adev, const char *propname,
-+ int index, struct acpi_gpio_info *info)
- {
- return ERR_PTR(-ENOSYS);
- }
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
-index 432d363..c9c1c8c 100644
+index 90df4df..c9c1c8c 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
-@@ -23,10 +23,9 @@
- #include <linux/ioport.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
-+#include <linux/gpio/consumer.h>
- #include <linux/gpio_keys.h>
--#include <linux/of.h>
--#include <linux/of_platform.h>
--#include <linux/of_gpio.h>
-+#include <linux/property.h>
-
- #define DRV_NAME "gpio-keys-polled"
-
-@@ -51,15 +50,14 @@ static void gpio_keys_polled_check_state(struct input_dev *input,
- int state;
-
- if (bdata->can_sleep)
-- state = !!gpio_get_value_cansleep(button->gpio);
-+ state = !!gpiod_get_value_cansleep(button->gpiod);
- else
-- state = !!gpio_get_value(button->gpio);
-+ state = !!gpiod_get_value(button->gpiod);
-
- if (state != bdata->last_state) {
- unsigned int type = button->type ?: EV_KEY;
-
-- input_event(input, type, button->code,
-- !!(state ^ button->active_low));
-+ input_event(input, type, button->code, state);
- input_sync(input);
- bdata->count = 0;
- bdata->last_state = state;
-@@ -102,21 +100,15 @@ static void gpio_keys_polled_close(struct input_polled_dev *dev)
- pdata->disable(bdev->dev);
- }
-
--#ifdef CONFIG_OF
- static struct gpio_keys_platform_data *gpio_keys_polled_get_devtree_pdata(struct device *dev)
- {
-- struct device_node *node, *pp;
- struct gpio_keys_platform_data *pdata;
- struct gpio_keys_button *button;
-+ struct fwnode_handle *child;
- int error;
- int nbuttons;
-- int i;
--
-- node = dev->of_node;
-- if (!node)
-- return NULL;
-
-- nbuttons = of_get_child_count(node);
-+ nbuttons = device_get_child_node_count(dev);
- if (nbuttons == 0)
- return NULL;
-
-@@ -126,52 +118,44 @@ static struct gpio_keys_platform_data *gpio_keys_polled_get_devtree_pdata(struct
- return ERR_PTR(-ENOMEM);
-
- pdata->buttons = (struct gpio_keys_button *)(pdata + 1);
-- pdata->nbuttons = nbuttons;
-
-- pdata->rep = !!of_get_property(node, "autorepeat", NULL);
-- of_property_read_u32(node, "poll-interval", &pdata->poll_interval);
-+ pdata->rep = device_property_present(dev, "autorepeat");
-+ device_property_read_u32(dev, "poll-interval", &pdata->poll_interval);
-
-- i = 0;
-- for_each_child_of_node(node, pp) {
-- int gpio;
-- enum of_gpio_flags flags;
-+ device_for_each_child_node(dev, child) {
-+ struct gpio_desc *desc;
-
-- if (!of_find_property(pp, "gpios", NULL)) {
-- pdata->nbuttons--;
-- dev_warn(dev, "Found button without gpios\n");
-- continue;
-- }
--
-- gpio = of_get_gpio_flags(pp, 0, &flags);
-- if (gpio < 0) {
-- error = gpio;
-+ desc = devm_get_gpiod_from_child(dev, child);
-+ if (IS_ERR(desc)) {
-+ error = PTR_ERR(desc);
- if (error != -EPROBE_DEFER)
- dev_err(dev,
- "Failed to get gpio flags, error: %d\n",
- error);
-+ fwnode_handle_put(child);
- return ERR_PTR(error);
- }
-
-- button = &pdata->buttons[i++];
--
-- button->gpio = gpio;
-- button->active_low = flags & OF_GPIO_ACTIVE_LOW;
-+ button = &pdata->buttons[pdata->nbuttons++];
-+ button->gpiod = desc;
-
-- if (of_property_read_u32(pp, "linux,code", &button->code)) {
-- dev_err(dev, "Button without keycode: 0x%x\n",
-- button->gpio);
-+ if (fwnode_property_read_u32(child, "linux,code", &button->code)) {
-+ dev_err(dev, "Button without keycode: %d\n",
-+ pdata->nbuttons - 1);
-+ fwnode_handle_put(child);
- return ERR_PTR(-EINVAL);
- }
-
-- button->desc = of_get_property(pp, "label", NULL);
-+ fwnode_property_read_string(child, "label", &button->desc);
-
-- if (of_property_read_u32(pp, "linux,input-type", &button->type))
-+ if (fwnode_property_read_u32(child, "linux,input-type",
-+ &button->type))
- button->type = EV_KEY;
-
-- button->wakeup = !!of_get_property(pp, "gpio-key,wakeup", NULL);
-+ button->wakeup = fwnode_property_present(child, "gpio-key,wakeup");
-
-- if (of_property_read_u32(pp, "debounce-interval",
-- &button->debounce_interval))
-+ if (fwnode_property_read_u32(child, "debounce-interval",
-+ &button->debounce_interval))
- button->debounce_interval = 5;
- }
-
-@@ -187,15 +171,6 @@ static const struct of_device_id gpio_keys_polled_of_match[] = {
- };
- MODULE_DEVICE_TABLE(of, gpio_keys_polled_of_match);
-
--#else
--
--static inline struct gpio_keys_platform_data *
--gpio_keys_polled_get_devtree_pdata(struct device *dev)
--{
-- return NULL;
--}
--#endif
--
- static int gpio_keys_polled_probe(struct platform_device *pdev)
- {
- struct device *dev = &pdev->dev;
-@@ -259,7 +234,6 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
- for (i = 0; i < pdata->nbuttons; i++) {
- struct gpio_keys_button *button = &pdata->buttons[i];
- struct gpio_keys_button_data *bdata = &bdev->data[i];
-- unsigned int gpio = button->gpio;
- unsigned int type = button->type ?: EV_KEY;
-
- if (button->wakeup) {
-@@ -267,15 +241,31 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
- return -EINVAL;
- }
-
-- error = devm_gpio_request_one(&pdev->dev, gpio, GPIOF_IN,
-- button->desc ? : DRV_NAME);
-- if (error) {
-- dev_err(dev, "unable to claim gpio %u, err=%d\n",
-- gpio, error);
-- return error;
-+ /*
-+ * Legacy GPIO number so request the GPIO here and
-+ * convert it to descriptor.
-+ */
-+ if (!button->gpiod && gpio_is_valid(button->gpio)) {
-+ unsigned flags = 0;
-+
-+ if (button->active_low)
-+ flags |= GPIOF_ACTIVE_LOW;
-+
-+ error = devm_gpio_request_one(&pdev->dev, button->gpio,
-+ flags, button->desc ? : DRV_NAME);
-+ if (error) {
-+ dev_err(dev, "unable to claim gpio %u, err=%d\n",
-+ button->gpio, error);
-+ return error;
-+ }
-+
-+ button->gpiod = gpio_to_desc(button->gpio);
- }
-
-- bdata->can_sleep = gpio_cansleep(gpio);
-+ if (IS_ERR(button->gpiod))
-+ return PTR_ERR(button->gpiod);
-+
-+ bdata->can_sleep = gpiod_cansleep(button->gpiod);
- bdata->last_state = -1;
- bdata->threshold = DIV_ROUND_UP(button->debounce_interval,
- pdata->poll_interval);
-@@ -308,7 +298,7 @@ static struct platform_driver gpio_keys_polled_driver = {
+@@ -297,6 +297,7 @@ static struct platform_driver gpio_keys_polled_driver = {
+ .probe = gpio_keys_polled_probe,
.driver = {
.name = DRV_NAME,
- .owner = THIS_MODULE,
-- .of_match_table = of_match_ptr(gpio_keys_polled_of_match),
-+ .of_match_table = gpio_keys_polled_of_match,
++ .owner = THIS_MODULE,
+ .of_match_table = gpio_keys_polled_of_match,
},
};
- module_platform_driver(gpio_keys_polled_driver);
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
-index 60558f7..3b92862 100644
+index 6cd47b7..09f904a 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
-@@ -444,7 +444,10 @@ static struct device_node *dev_get_dev_node(struct device *dev)
+@@ -451,7 +451,10 @@ static struct device_node *dev_get_dev_node(struct device *dev)
while (!pci_is_root_bus(bus))
bus = bus->parent;
@@ -8776,7 +3304,7 @@ index 60558f7..3b92862 100644
}
return dev->of_node;
-@@ -560,6 +563,9 @@ static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
+@@ -567,6 +570,9 @@ static struct arm_smmu_device *find_smmu_for_device(struct device *dev)
struct arm_smmu_master *master = NULL;
struct device_node *dev_node = dev_get_dev_node(dev);
@@ -8787,10 +3315,10 @@ index 60558f7..3b92862 100644
list_for_each_entry(smmu, &arm_smmu_devices, list) {
master = find_smmu_master(smmu, dev_node);
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
-index aa17ae8..d330dab 100644
+index 1a146cc..ab7dfe2 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
-@@ -506,9 +506,19 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
+@@ -520,9 +520,19 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
isb();
}
@@ -8811,7 +3339,7 @@ index aa17ae8..d330dab 100644
}
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
-index 38493ff..26e6773 100644
+index d617ee5..da0cd51 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -33,12 +33,14 @@
@@ -8843,7 +3371,7 @@ index 38493ff..26e6773 100644
#endif
#ifdef CONFIG_BL_SWITCHER
-@@ -996,6 +1005,9 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
+@@ -1025,6 +1034,9 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start,
#ifdef CONFIG_SMP
set_smp_cross_call(gic_raise_softirq);
register_cpu_notifier(&gic_cpu_notifier);
@@ -8853,7 +3381,7 @@ index 38493ff..26e6773 100644
#endif
set_handle_irq(gic_handle_irq);
}
-@@ -1048,3 +1060,107 @@ IRQCHIP_DECLARE(msm_8660_qgic, "qcom,msm-8660-qgic", gic_of_init);
+@@ -1083,3 +1095,109 @@ IRQCHIP_DECLARE(msm_8660_qgic, "qcom,msm-8660-qgic", gic_of_init);
IRQCHIP_DECLARE(msm_qgic2, "qcom,msm-qgic2", gic_of_init);
#endif
@@ -8909,7 +3437,8 @@ index 38493ff..26e6773 100644
+ int count;
+
+ /* Collect CPU base addresses */
-+ count = acpi_parse_entries(sizeof(struct acpi_table_madt),
++ count = acpi_parse_entries(ACPI_SIG_MADT,
++ sizeof(struct acpi_table_madt),
+ gic_acpi_parse_madt_cpu, table,
+ ACPI_MADT_TYPE_GENERIC_INTERRUPT, 0);
+ if (count < 0) {
@@ -8924,7 +3453,8 @@ index 38493ff..26e6773 100644
+ * Find distributor base address. We expect one distributor entry since
+ * ACPI 5.1 spec neither support multi-GIC instances nor GIC cascade.
+ */
-+ count = acpi_parse_entries(sizeof(struct acpi_table_madt),
++ count = acpi_parse_entries(ACPI_SIG_MADT,
++ sizeof(struct acpi_table_madt),
+ gic_acpi_parse_madt_distributor, table,
+ ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR, 0);
+ if (count <= 0) {
@@ -8981,393 +3511,19 @@ index 0fe2f71..9106c6d 100644
+ acpi_gic_init();
}
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
-index b4518c8..b3c5d9d 100644
+index 7ea1ea42..5fb4440 100644
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
-@@ -12,25 +12,23 @@
- */
- #include <linux/err.h>
- #include <linux/gpio.h>
-+#include <linux/gpio/consumer.h>
- #include <linux/kernel.h>
- #include <linux/leds.h>
- #include <linux/module.h>
--#include <linux/of.h>
--#include <linux/of_gpio.h>
--#include <linux/of_platform.h>
- #include <linux/platform_device.h>
-+#include <linux/property.h>
- #include <linux/slab.h>
- #include <linux/workqueue.h>
-
- struct gpio_led_data {
- struct led_classdev cdev;
-- unsigned gpio;
-+ struct gpio_desc *gpiod;
- struct work_struct work;
- u8 new_level;
- u8 can_sleep;
-- u8 active_low;
- u8 blinking;
-- int (*platform_gpio_blink_set)(unsigned gpio, int state,
-+ int (*platform_gpio_blink_set)(struct gpio_desc *desc, int state,
- unsigned long *delay_on, unsigned long *delay_off);
- };
-
-@@ -40,12 +38,11 @@ static void gpio_led_work(struct work_struct *work)
- container_of(work, struct gpio_led_data, work);
-
- if (led_dat->blinking) {
-- led_dat->platform_gpio_blink_set(led_dat->gpio,
-- led_dat->new_level,
-- NULL, NULL);
-+ led_dat->platform_gpio_blink_set(led_dat->gpiod,
-+ led_dat->new_level, NULL, NULL);
- led_dat->blinking = 0;
- } else
-- gpio_set_value_cansleep(led_dat->gpio, led_dat->new_level);
-+ gpiod_set_value_cansleep(led_dat->gpiod, led_dat->new_level);
- }
-
- static void gpio_led_set(struct led_classdev *led_cdev,
-@@ -60,9 +57,6 @@ static void gpio_led_set(struct led_classdev *led_cdev,
- else
- level = 1;
-
-- if (led_dat->active_low)
-- level = !level;
--
- /* Setting GPIOs with I2C/etc requires a task context, and we don't
- * seem to have a reliable way to know if we're already in one; so
- * let's just assume the worst.
-@@ -72,11 +66,11 @@ static void gpio_led_set(struct led_classdev *led_cdev,
- schedule_work(&led_dat->work);
- } else {
- if (led_dat->blinking) {
-- led_dat->platform_gpio_blink_set(led_dat->gpio, level,
-+ led_dat->platform_gpio_blink_set(led_dat->gpiod, level,
- NULL, NULL);
- led_dat->blinking = 0;
- } else
-- gpio_set_value(led_dat->gpio, level);
-+ gpiod_set_value(led_dat->gpiod, level);
- }
- }
-
-@@ -87,34 +81,49 @@ static int gpio_blink_set(struct led_classdev *led_cdev,
- container_of(led_cdev, struct gpio_led_data, cdev);
-
- led_dat->blinking = 1;
-- return led_dat->platform_gpio_blink_set(led_dat->gpio, GPIO_LED_BLINK,
-+ return led_dat->platform_gpio_blink_set(led_dat->gpiod, GPIO_LED_BLINK,
- delay_on, delay_off);
- }
-
- static int create_gpio_led(const struct gpio_led *template,
- struct gpio_led_data *led_dat, struct device *parent,
-- int (*blink_set)(unsigned, int, unsigned long *, unsigned long *))
-+ int (*blink_set)(struct gpio_desc *, int, unsigned long *,
-+ unsigned long *))
- {
- int ret, state;
-
-- led_dat->gpio = -1;
-+ led_dat->gpiod = template->gpiod;
-+ if (!led_dat->gpiod) {
-+ /*
-+ * This is the legacy code path for platform code that
-+ * still uses GPIO numbers. Ultimately we would like to get
-+ * rid of this block completely.
-+ */
-+ unsigned long flags = 0;
-+
-+ /* skip leds that aren't available */
-+ if (!gpio_is_valid(template->gpio)) {
-+ dev_info(parent, "Skipping unavailable LED gpio %d (%s)\n",
-+ template->gpio, template->name);
-+ return 0;
-+ }
-
-- /* skip leds that aren't available */
-- if (!gpio_is_valid(template->gpio)) {
-- dev_info(parent, "Skipping unavailable LED gpio %d (%s)\n",
-- template->gpio, template->name);
-- return 0;
-- }
-+ if (template->active_low)
-+ flags |= GPIOF_ACTIVE_LOW;
-
-- ret = devm_gpio_request(parent, template->gpio, template->name);
-- if (ret < 0)
-- return ret;
-+ ret = devm_gpio_request_one(parent, template->gpio, flags,
-+ template->name);
-+ if (ret < 0)
-+ return ret;
-+
-+ led_dat->gpiod = gpio_to_desc(template->gpio);
-+ if (IS_ERR(led_dat->gpiod))
-+ return PTR_ERR(led_dat->gpiod);
-+ }
-
- led_dat->cdev.name = template->name;
- led_dat->cdev.default_trigger = template->default_trigger;
-- led_dat->gpio = template->gpio;
-- led_dat->can_sleep = gpio_cansleep(template->gpio);
-- led_dat->active_low = template->active_low;
-+ led_dat->can_sleep = gpiod_cansleep(led_dat->gpiod);
- led_dat->blinking = 0;
- if (blink_set) {
- led_dat->platform_gpio_blink_set = blink_set;
-@@ -122,30 +131,24 @@ static int create_gpio_led(const struct gpio_led *template,
- }
- led_dat->cdev.brightness_set = gpio_led_set;
- if (template->default_state == LEDS_GPIO_DEFSTATE_KEEP)
-- state = !!gpio_get_value_cansleep(led_dat->gpio) ^ led_dat->active_low;
-+ state = !!gpiod_get_value_cansleep(led_dat->gpiod);
- else
- state = (template->default_state == LEDS_GPIO_DEFSTATE_ON);
- led_dat->cdev.brightness = state ? LED_FULL : LED_OFF;
- if (!template->retain_state_suspended)
- led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
-
-- ret = gpio_direction_output(led_dat->gpio, led_dat->active_low ^ state);
-+ ret = gpiod_direction_output(led_dat->gpiod, state);
- if (ret < 0)
- return ret;
-
- INIT_WORK(&led_dat->work, gpio_led_work);
-
-- ret = led_classdev_register(parent, &led_dat->cdev);
-- if (ret < 0)
-- return ret;
--
-- return 0;
-+ return led_classdev_register(parent, &led_dat->cdev);
- }
-
- static void delete_gpio_led(struct gpio_led_data *led)
- {
-- if (!gpio_is_valid(led->gpio))
-- return;
- led_classdev_unregister(&led->cdev);
- cancel_work_sync(&led->work);
- }
-@@ -161,40 +164,37 @@ static inline int sizeof_gpio_leds_priv(int num_leds)
- (sizeof(struct gpio_led_data) * num_leds);
- }
-
--/* Code to create from OpenFirmware platform devices */
--#ifdef CONFIG_OF_GPIO
--static struct gpio_leds_priv *gpio_leds_create_of(struct platform_device *pdev)
-+static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
- {
-- struct device_node *np = pdev->dev.of_node, *child;
-+ struct device *dev = &pdev->dev;
-+ struct fwnode_handle *child;
- struct gpio_leds_priv *priv;
- int count, ret;
-
-- /* count LEDs in this device, so we know how much to allocate */
-- count = of_get_available_child_count(np);
-+ count = device_get_child_node_count(dev);
- if (!count)
- return ERR_PTR(-ENODEV);
-
-- for_each_available_child_of_node(np, child)
-- if (of_get_gpio(child, 0) == -EPROBE_DEFER)
-- return ERR_PTR(-EPROBE_DEFER);
--
-- priv = devm_kzalloc(&pdev->dev, sizeof_gpio_leds_priv(count),
-- GFP_KERNEL);
-+ priv = devm_kzalloc(dev, sizeof_gpio_leds_priv(count), GFP_KERNEL);
- if (!priv)
- return ERR_PTR(-ENOMEM);
-
-- for_each_available_child_of_node(np, child) {
-+ device_for_each_child_node(dev, child) {
- struct gpio_led led = {};
-- enum of_gpio_flags flags;
-- const char *state;
--
-- led.gpio = of_get_gpio_flags(child, 0, &flags);
-- led.active_low = flags & OF_GPIO_ACTIVE_LOW;
-- led.name = of_get_property(child, "label", NULL) ? : child->name;
-- led.default_trigger =
-- of_get_property(child, "linux,default-trigger", NULL);
-- state = of_get_property(child, "default-state", NULL);
-- if (state) {
-+ const char *state = NULL;
-+
-+ led.gpiod = devm_get_gpiod_from_child(dev, child);
-+ if (IS_ERR(led.gpiod)) {
-+ fwnode_handle_put(child);
-+ goto err;
-+ }
-+
-+ fwnode_property_read_string(child, "label", &led.name);
-+ fwnode_property_read_string(child, "linux,default-trigger",
-+ &led.default_trigger);
-+
-+ if (!fwnode_property_read_string(child, "linux,default_state",
-+ &state)) {
- if (!strcmp(state, "keep"))
- led.default_state = LEDS_GPIO_DEFSTATE_KEEP;
- else if (!strcmp(state, "on"))
-@@ -203,13 +203,13 @@ static struct gpio_leds_priv *gpio_leds_create_of(struct platform_device *pdev)
- led.default_state = LEDS_GPIO_DEFSTATE_OFF;
- }
-
-- if (of_get_property(child, "retain-state-suspended", NULL))
-+ if (fwnode_property_present(child, "retain-state-suspended"))
- led.retain_state_suspended = 1;
-
- ret = create_gpio_led(&led, &priv->leds[priv->num_leds++],
-- &pdev->dev, NULL);
-+ dev, NULL);
- if (ret < 0) {
-- of_node_put(child);
-+ fwnode_handle_put(child);
- goto err;
- }
- }
-@@ -228,12 +228,6 @@ static const struct of_device_id of_gpio_leds_match[] = {
- };
-
- MODULE_DEVICE_TABLE(of, of_gpio_leds_match);
--#else /* CONFIG_OF_GPIO */
--static struct gpio_leds_priv *gpio_leds_create_of(struct platform_device *pdev)
--{
-- return ERR_PTR(-ENODEV);
--}
--#endif /* CONFIG_OF_GPIO */
-
- static int gpio_led_probe(struct platform_device *pdev)
- {
-@@ -261,7 +255,7 @@ static int gpio_led_probe(struct platform_device *pdev)
- }
- }
- } else {
-- priv = gpio_leds_create_of(pdev);
-+ priv = gpio_leds_create(pdev);
- if (IS_ERR(priv))
- return PTR_ERR(priv);
- }
-@@ -288,7 +282,7 @@ static struct platform_driver gpio_led_driver = {
+@@ -291,6 +291,7 @@ static struct platform_driver gpio_led_driver = {
+ .remove = gpio_led_remove,
.driver = {
.name = "leds-gpio",
- .owner = THIS_MODULE,
-- .of_match_table = of_match_ptr(of_gpio_leds_match),
-+ .of_match_table = of_gpio_leds_match,
++ .owner = THIS_MODULE,
+ .of_match_table = of_gpio_leds_match,
},
};
-
-diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
-index 634f729..0a1af93 100644
---- a/drivers/misc/eeprom/at25.c
-+++ b/drivers/misc/eeprom/at25.c
-@@ -18,7 +18,7 @@
-
- #include <linux/spi/spi.h>
- #include <linux/spi/eeprom.h>
--#include <linux/of.h>
-+#include <linux/property.h>
-
- /*
- * NOTE: this is an *EEPROM* driver. The vagaries of product naming
-@@ -301,35 +301,33 @@ static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf,
-
- /*-------------------------------------------------------------------------*/
-
--static int at25_np_to_chip(struct device *dev,
-- struct device_node *np,
-- struct spi_eeprom *chip)
-+static int at25_fw_to_chip(struct device *dev, struct spi_eeprom *chip)
- {
- u32 val;
-
- memset(chip, 0, sizeof(*chip));
-- strncpy(chip->name, np->name, sizeof(chip->name));
-+ strncpy(chip->name, "at25", sizeof(chip->name));
-
-- if (of_property_read_u32(np, "size", &val) == 0 ||
-- of_property_read_u32(np, "at25,byte-len", &val) == 0) {
-+ if (device_property_read_u32(dev, "size", &val) == 0 ||
-+ device_property_read_u32(dev, "at25,byte-len", &val) == 0) {
- chip->byte_len = val;
- } else {
- dev_err(dev, "Error: missing \"size\" property\n");
- return -ENODEV;
- }
-
-- if (of_property_read_u32(np, "pagesize", &val) == 0 ||
-- of_property_read_u32(np, "at25,page-size", &val) == 0) {
-+ if (device_property_read_u32(dev, "pagesize", &val) == 0 ||
-+ device_property_read_u32(dev, "at25,page-size", &val) == 0) {
- chip->page_size = (u16)val;
- } else {
- dev_err(dev, "Error: missing \"pagesize\" property\n");
- return -ENODEV;
- }
-
-- if (of_property_read_u32(np, "at25,addr-mode", &val) == 0) {
-+ if (device_property_read_u32(dev, "at25,addr-mode", &val) == 0) {
- chip->flags = (u16)val;
- } else {
-- if (of_property_read_u32(np, "address-width", &val)) {
-+ if (device_property_read_u32(dev, "address-width", &val)) {
- dev_err(dev,
- "Error: missing \"address-width\" property\n");
- return -ENODEV;
-@@ -350,7 +348,7 @@ static int at25_np_to_chip(struct device *dev,
- val);
- return -ENODEV;
- }
-- if (of_find_property(np, "read-only", NULL))
-+ if (device_property_present(dev, "read-only"))
- chip->flags |= EE_READONLY;
- }
- return 0;
-@@ -360,21 +358,15 @@ static int at25_probe(struct spi_device *spi)
- {
- struct at25_data *at25 = NULL;
- struct spi_eeprom chip;
-- struct device_node *np = spi->dev.of_node;
- int err;
- int sr;
- int addrlen;
-
- /* Chip description */
- if (!spi->dev.platform_data) {
-- if (np) {
-- err = at25_np_to_chip(&spi->dev, np, &chip);
-- if (err)
-- return err;
-- } else {
-- dev_err(&spi->dev, "Error: no chip description\n");
-- return -ENODEV;
-- }
-+ err = at25_fw_to_chip(&spi->dev, &chip);
-+ if (err)
-+ return err;
- } else
- chip = *(struct spi_eeprom *)spi->dev.platform_data;
-
-diff --git a/drivers/net/ethernet/amd/Kconfig b/drivers/net/ethernet/amd/Kconfig
-index 8319c99..6feb6ef3 100644
---- a/drivers/net/ethernet/amd/Kconfig
-+++ b/drivers/net/ethernet/amd/Kconfig
-@@ -179,7 +179,7 @@ config SUNLANCE
-
- config AMD_XGBE
- tristate "AMD 10GbE Ethernet driver"
-- depends on OF_NET
-+ depends on OF_NET || ACPI
- select PHYLIB
- select AMD_XGBE_PHY
- select BITREVERSE
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
-index 9da3a03..a34cad2 100644
+index 53f5f66..3957e63 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -130,7 +130,7 @@ static unsigned int xgbe_usec_to_riwt(struct xgbe_prv_data *pdata,
@@ -9388,7 +3544,7 @@ index 9da3a03..a34cad2 100644
/*
* Convert the input watchdog timer value to the usec value. Each
-@@ -695,6 +695,18 @@ static int xgbe_read_mmd_regs(struct xgbe_prv_data *pdata, int prtad,
+@@ -854,6 +854,18 @@ static int xgbe_read_mmd_regs(struct xgbe_prv_data *pdata, int prtad,
else
mmd_address = (pdata->mdio_mmd << 16) | (mmd_reg & 0xffff);
@@ -9408,10 +3564,10 @@ index 9da3a03..a34cad2 100644
* management interface uses indirect addressing to access the MMD
* register sets. This requires accessing of the PCS register in two
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-index 2349ea9..a04b18b 100644
+index 7bb5f07..0ed3379 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-@@ -425,6 +425,9 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata)
+@@ -560,6 +560,9 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata)
hw_feat->rx_ch_cnt++;
hw_feat->tx_ch_cnt++;
@@ -9422,7 +3578,7 @@ index 2349ea9..a04b18b 100644
}
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
-index f5a8fa0..338c0ed 100644
+index dbd3850..74be78e 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
@@ -124,6 +124,7 @@
@@ -9433,7 +3589,7 @@ index f5a8fa0..338c0ed 100644
#include "xgbe.h"
#include "xgbe-common.h"
-@@ -215,6 +216,205 @@ static void xgbe_init_all_fptrs(struct xgbe_prv_data *pdata)
+@@ -161,6 +162,205 @@ static void xgbe_init_all_fptrs(struct xgbe_prv_data *pdata)
xgbe_init_function_ptrs_desc(&pdata->desc_if);
}
@@ -9639,16 +3795,7 @@ index f5a8fa0..338c0ed 100644
static int xgbe_probe(struct platform_device *pdev)
{
struct xgbe_prv_data *pdata;
-@@ -222,8 +422,6 @@ static int xgbe_probe(struct platform_device *pdev)
- struct xgbe_desc_if *desc_if;
- struct net_device *netdev;
- struct device *dev = &pdev->dev;
-- struct resource *res;
-- const u8 *mac_addr;
- int ret;
-
- DBGPR("--> xgbe_probe\n");
-@@ -239,6 +437,7 @@ static int xgbe_probe(struct platform_device *pdev)
+@@ -186,6 +386,7 @@ static int xgbe_probe(struct platform_device *pdev)
pdata = netdev_priv(netdev);
pdata->netdev = netdev;
pdata->pdev = pdev;
@@ -9656,7 +3803,7 @@ index f5a8fa0..338c0ed 100644
pdata->dev = dev;
platform_set_drvdata(pdev, netdev);
-@@ -264,40 +463,13 @@ static int xgbe_probe(struct platform_device *pdev)
+@@ -212,40 +413,13 @@ static int xgbe_probe(struct platform_device *pdev)
goto err_io;
}
@@ -9703,34 +3850,20 @@ index f5a8fa0..338c0ed 100644
/* Set the DMA mask */
if (!dev->dma_mask)
-@@ -308,23 +480,16 @@ static int xgbe_probe(struct platform_device *pdev)
- goto err_io;
- }
-
-- if (of_property_read_bool(dev->of_node, "dma-coherent")) {
-- pdata->axdomain = XGBE_DMA_OS_AXDOMAIN;
-- pdata->arcache = XGBE_DMA_OS_ARCACHE;
-- pdata->awcache = XGBE_DMA_OS_AWCACHE;
-- } else {
-- pdata->axdomain = XGBE_DMA_SYS_AXDOMAIN;
-- pdata->arcache = XGBE_DMA_SYS_ARCACHE;
-- pdata->awcache = XGBE_DMA_SYS_AWCACHE;
-- }
--
-+ /* Get the device interrupt */
- ret = platform_get_irq(pdev, 0);
- if (ret < 0) {
- dev_err(dev, "platform_get_irq failed\n");
+@@ -275,10 +449,12 @@ static int xgbe_probe(struct platform_device *pdev)
+ dev_err(dev, "platform_get_irq 0 failed\n");
goto err_io;
}
+
- netdev->irq = ret;
+ pdata->dev_irq = ret;
+
+ netdev->irq = pdata->dev_irq;
netdev->base_addr = (unsigned long)pdata->xgmac_regs;
+ memcpy(netdev->dev_addr, pdata->mac_addr, netdev->addr_len);
/* Set all the function pointers */
xgbe_init_all_fptrs(pdata);
-@@ -337,23 +502,6 @@ static int xgbe_probe(struct platform_device *pdev)
+@@ -291,23 +467,6 @@ static int xgbe_probe(struct platform_device *pdev)
/* Populate the hardware features */
xgbe_get_all_hw_features(pdata);
@@ -9754,7 +3887,7 @@ index f5a8fa0..338c0ed 100644
/* Set default configuration data */
xgbe_default_config(pdata);
-@@ -531,10 +679,22 @@ static int xgbe_resume(struct device *dev)
+@@ -491,10 +650,22 @@ static int xgbe_resume(struct device *dev)
}
#endif /* CONFIG_PM */
@@ -9777,7 +3910,7 @@ index f5a8fa0..338c0ed 100644
MODULE_DEVICE_TABLE(of, xgbe_of_match);
static SIMPLE_DEV_PM_OPS(xgbe_pm_ops, xgbe_suspend, xgbe_resume);
-@@ -542,7 +702,12 @@ static SIMPLE_DEV_PM_OPS(xgbe_pm_ops, xgbe_suspend, xgbe_resume);
+@@ -502,7 +673,12 @@ static SIMPLE_DEV_PM_OPS(xgbe_pm_ops, xgbe_suspend, xgbe_resume);
static struct platform_driver xgbe_driver = {
.driver = {
.name = "amd-xgbe",
@@ -9884,12 +4017,12 @@ index a1bf9d1c..fa67203 100644
/* Setup the timecounter */
cc->read = xgbe_cc_read;
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
-index 789957d..59498eb 100644
+index f9ec762..6f3a39e 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
-@@ -172,6 +172,12 @@
- #define XGBE_DMA_CLOCK "dma_clk"
+@@ -187,6 +187,12 @@
#define XGBE_PTP_CLOCK "ptp_clk"
+ #define XGBE_DMA_IRQS "amd,per-channel-interrupt"
+/* ACPI property names */
+#define XGBE_ACPI_MAC_ADDR "mac-address"
@@ -9900,7 +4033,7 @@ index 789957d..59498eb 100644
/* Timestamp support - values based on 50MHz PTP clock
* 50MHz => 20 nsec
*/
-@@ -186,8 +192,11 @@
+@@ -201,8 +207,11 @@
#define XGBE_FIFO_SIZE_B(x) (x)
#define XGBE_FIFO_SIZE_KB(x) (x * 1024)
@@ -9912,7 +4045,7 @@ index 789957d..59498eb 100644
/* Helper macro for descriptor handling
* Always use XGBE_GET_DESC_DATA to access the descriptor data
* since the index is free-running and needs to be and-ed
-@@ -569,6 +578,7 @@ struct xgbe_hw_features {
+@@ -650,6 +659,7 @@ struct xgbe_hw_features {
struct xgbe_prv_data {
struct net_device *netdev;
struct platform_device *pdev;
@@ -9920,7 +4053,7 @@ index 789957d..59498eb 100644
struct device *dev;
/* XGMAC/XPCS related mmio registers */
-@@ -649,6 +659,7 @@ struct xgbe_prv_data {
+@@ -739,6 +749,7 @@ struct xgbe_prv_data {
unsigned int phy_rx_pause;
/* Netdev related settings */
@@ -9928,7 +4061,7 @@ index 789957d..59498eb 100644
netdev_features_t netdev_features;
struct napi_struct napi;
struct xgbe_mmc_stats mmc_stats;
-@@ -658,7 +669,9 @@ struct xgbe_prv_data {
+@@ -748,7 +759,9 @@ struct xgbe_prv_data {
/* Device clocks */
struct clk *sysclk;
@@ -10046,7 +4179,7 @@ index 7ba83ff..29aad5e 100644
netdev_err(ndev, "Failed to register MDIO bus\n");
mdiobus_free(mdio_bus);
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
-index 1236696..f66598a 100644
+index 83a5028..f66598a 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
@@ -746,6 +746,42 @@ static const struct net_device_ops xgene_ndev_ops = {
@@ -10092,34 +4225,46 @@ index 1236696..f66598a 100644
static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
{
struct platform_device *pdev;
-@@ -761,6 +797,8 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
+@@ -761,6 +797,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
ndev = pdata->ndev;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "enet_csr");
+ if (!res)
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res) {
- dev_err(dev, "Resource enet_csr not defined\n");
- return -ENODEV;
-@@ -772,6 +810,8 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
++ if (!res) {
++ dev_err(dev, "Resource enet_csr not defined\n");
++ return -ENODEV;
++ }
+ pdata->base_addr = devm_ioremap_resource(dev, res);
+ if (IS_ERR(pdata->base_addr)) {
+ dev_err(dev, "Unable to retrieve ENET Port CSR region\n");
+@@ -768,6 +810,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
}
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ring_csr");
+ if (!res)
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
- if (!res) {
- dev_err(dev, "Resource ring_csr not defined\n");
- return -ENODEV;
-@@ -783,6 +823,8 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
++ if (!res) {
++ dev_err(dev, "Resource ring_csr not defined\n");
++ return -ENODEV;
++ }
+ pdata->ring_csr_addr = devm_ioremap_resource(dev, res);
+ if (IS_ERR(pdata->ring_csr_addr)) {
+ dev_err(dev, "Unable to retrieve ENET Ring CSR region\n");
+@@ -775,6 +823,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
}
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ring_cmd");
+ if (!res)
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
- if (!res) {
- dev_err(dev, "Resource ring_cmd not defined\n");
- return -ENODEV;
-@@ -804,11 +846,13 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
++ if (!res) {
++ dev_err(dev, "Resource ring_cmd not defined\n");
++ return -ENODEV;
++ }
+ pdata->ring_cmd_addr = devm_ioremap_resource(dev, res);
+ if (IS_ERR(pdata->ring_cmd_addr)) {
+ dev_err(dev, "Unable to retrieve ENET Ring command region\n");
+@@ -792,11 +846,13 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
mac = of_get_mac_address(dev->of_node);
if (mac)
memcpy(ndev->dev_addr, mac, ndev->addr_len);
@@ -10134,7 +4279,7 @@ index 1236696..f66598a 100644
if (pdata->phy_mode < 0) {
dev_err(dev, "Unable to get phy-connection-type\n");
return pdata->phy_mode;
-@@ -821,11 +865,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
+@@ -809,11 +865,12 @@ static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)
}
pdata->clk = devm_clk_get(&pdev->dev, NULL);
@@ -10151,7 +4296,7 @@ index 1236696..f66598a 100644
}
base_addr = pdata->base_addr;
-@@ -875,7 +920,7 @@ static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata)
+@@ -863,7 +920,7 @@ static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata)
pdata->port_ops->cle_bypass(pdata, dst_ring_num, buf_pool->id);
pdata->mac_ops->init(pdata);
@@ -10160,7 +4305,7 @@ index 1236696..f66598a 100644
}
static void xgene_enet_setup_ops(struct xgene_enet_pdata *pdata)
-@@ -936,7 +981,7 @@ static int xgene_enet_probe(struct platform_device *pdev)
+@@ -924,7 +981,7 @@ static int xgene_enet_probe(struct platform_device *pdev)
goto err;
}
@@ -10169,7 +4314,7 @@ index 1236696..f66598a 100644
if (ret) {
netdev_err(ndev, "No usable DMA configuration\n");
goto err;
-@@ -984,6 +1029,14 @@ static int xgene_enet_remove(struct platform_device *pdev)
+@@ -972,6 +1029,14 @@ static int xgene_enet_remove(struct platform_device *pdev)
return 0;
}
@@ -10184,7 +4329,7 @@ index 1236696..f66598a 100644
static struct of_device_id xgene_enet_match[] = {
{.compatible = "apm,xgene-enet",},
{},
-@@ -995,6 +1048,7 @@ static struct platform_driver xgene_enet_driver = {
+@@ -983,6 +1048,7 @@ static struct platform_driver xgene_enet_driver = {
.driver = {
.name = "xgene-enet",
.of_match_table = xgene_enet_match,
@@ -10205,7 +4350,7 @@ index f9958fa..0e06cad 100644
#define XGENE_DRV_VERSION "v1.0"
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c
-index 6cc3cf6..91c36a2 100644
+index 88a55f9..944b177 100644
--- a/drivers/net/ethernet/smsc/smc91x.c
+++ b/drivers/net/ethernet/smsc/smc91x.c
@@ -82,6 +82,7 @@ static const char version[] =
@@ -10231,29 +4376,16 @@ index 6cc3cf6..91c36a2 100644
static struct platform_driver smc_driver = {
.probe = smc_drv_probe,
.remove = smc_drv_remove,
-@@ -2475,6 +2484,7 @@ static struct platform_driver smc_driver = {
- .owner = THIS_MODULE,
+@@ -2474,6 +2483,7 @@ static struct platform_driver smc_driver = {
+ .name = CARDNAME,
.pm = &smc_drv_pm_ops,
.of_match_table = of_match_ptr(smc91x_match),
+ .acpi_match_table = ACPI_PTR(smc91x_acpi_match),
},
};
-diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
-index 75472cf7..bacafe2 100644
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -26,7 +26,7 @@ config AMD_PHY
-
- config AMD_XGBE_PHY
- tristate "Driver for the AMD 10GbE (amd-xgbe) PHYs"
-- depends on OF
-+ depends on OF || ACPI
- ---help---
- Currently supports the AMD 10GbE PHY
-
diff --git a/drivers/net/phy/amd-xgbe-phy.c b/drivers/net/phy/amd-xgbe-phy.c
-index c456559..d852c6e 100644
+index 903dc3d..fcc4fc7 100644
--- a/drivers/net/phy/amd-xgbe-phy.c
+++ b/drivers/net/phy/amd-xgbe-phy.c
@@ -74,15 +74,19 @@
@@ -10961,7 +5093,7 @@ index c456559..d852c6e 100644
netdev_info(phydev->attached_dev, "%s successful\n",
an_supported ? "Auto negotiation"
: "Parallel detection");
-@@ -1069,6 +1010,7 @@ static int amd_xgbe_phy_config_aneg(struct phy_device *phydev)
+@@ -1070,6 +1011,7 @@ static int amd_xgbe_phy_config_aneg(struct phy_device *phydev)
{
struct amd_xgbe_phy_priv *priv = phydev->priv;
u32 mmd_mask = phydev->c45_ids.devices_in_package;
@@ -10969,7 +5101,7 @@ index c456559..d852c6e 100644
if (phydev->autoneg != AUTONEG_ENABLE)
return amd_xgbe_phy_setup_forced(phydev);
-@@ -1077,6 +1019,11 @@ static int amd_xgbe_phy_config_aneg(struct phy_device *phydev)
+@@ -1078,6 +1020,11 @@ static int amd_xgbe_phy_config_aneg(struct phy_device *phydev)
if (!(mmd_mask & MDIO_DEVS_AN))
return -EINVAL;
@@ -10981,7 +5113,7 @@ index c456559..d852c6e 100644
/* Start/Restart the auto-negotiation state machine */
mutex_lock(&priv->an_mutex);
priv->an_result = AMD_XGBE_AN_READY;
-@@ -1166,14 +1113,18 @@ static int amd_xgbe_phy_read_status(struct phy_device *phydev)
+@@ -1167,14 +1114,18 @@ static int amd_xgbe_phy_read_status(struct phy_device *phydev)
{
struct amd_xgbe_phy_priv *priv = phydev->priv;
u32 mmd_mask = phydev->c45_ids.devices_in_package;
@@ -11003,7 +5135,7 @@ index c456559..d852c6e 100644
if (!(mmd_mask & MDIO_DEVS_AN))
return -EINVAL;
-@@ -1204,39 +1155,40 @@ static int amd_xgbe_phy_read_status(struct phy_device *phydev)
+@@ -1205,39 +1156,40 @@ static int amd_xgbe_phy_read_status(struct phy_device *phydev)
ad_ret &= lp_ret;
if (ad_ret & 0x80) {
phydev->speed = SPEED_10000;
@@ -11064,7 +5196,7 @@ index c456559..d852c6e 100644
}
phydev->duplex = DUPLEX_FULL;
phydev->pause = 0;
-@@ -1288,29 +1240,188 @@ unlock:
+@@ -1289,29 +1241,188 @@ unlock:
return ret;
}
@@ -11265,7 +5397,7 @@ index c456559..d852c6e 100644
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv) {
-@@ -1318,86 +1429,54 @@ static int amd_xgbe_phy_probe(struct phy_device *phydev)
+@@ -1319,86 +1430,54 @@ static int amd_xgbe_phy_probe(struct phy_device *phydev)
goto err_name;
}
@@ -11374,7 +5506,7 @@ index c456559..d852c6e 100644
err_priv:
devm_kfree(dev, priv);
-@@ -1405,9 +1484,6 @@ err_priv:
+@@ -1406,9 +1485,6 @@ err_priv:
err_name:
kfree(wq_name);
@@ -11384,7 +5516,7 @@ index c456559..d852c6e 100644
return ret;
}
-@@ -1424,18 +1500,7 @@ static void amd_xgbe_phy_remove(struct phy_device *phydev)
+@@ -1425,18 +1501,7 @@ static void amd_xgbe_phy_remove(struct phy_device *phydev)
flush_workqueue(priv->an_workqueue);
destroy_workqueue(priv->an_workqueue);
@@ -11404,52 +5536,8 @@ index c456559..d852c6e 100644
devm_kfree(dev, priv);
}
-diff --git a/drivers/of/base.c b/drivers/of/base.c
-index 3823edf..4c2ccde 100644
---- a/drivers/of/base.c
-+++ b/drivers/of/base.c
-@@ -1250,6 +1250,39 @@ int of_property_read_u64(const struct device_node *np, const char *propname,
- EXPORT_SYMBOL_GPL(of_property_read_u64);
-
- /**
-+ * of_property_read_u64_array - Find and read an array of 64 bit integers
-+ * from a property.
-+ *
-+ * @np: device node from which the property value is to be read.
-+ * @propname: name of the property to be searched.
-+ * @out_values: pointer to return value, modified only if return value is 0.
-+ * @sz: number of array elements to read
-+ *
-+ * Search for a property in a device node and read 64-bit value(s) from
-+ * it. Returns 0 on success, -EINVAL if the property does not exist,
-+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
-+ * property data isn't large enough.
-+ *
-+ * The out_values is modified only if a valid u64 value can be decoded.
-+ */
-+int of_property_read_u64_array(const struct device_node *np,
-+ const char *propname, u64 *out_values,
-+ size_t sz)
-+{
-+ const __be32 *val = of_find_property_value_of_size(np, propname,
-+ (sz * sizeof(*out_values)));
-+
-+ if (IS_ERR(val))
-+ return PTR_ERR(val);
-+
-+ while (sz--) {
-+ *out_values++ = of_read_number(val, 2);
-+ val += 2;
-+ }
-+ return 0;
-+}
-+
-+/**
- * of_property_read_string - Find and read a string from a property
- * @np: device node from which the property value is to be read.
- * @propname: name of the property to be searched.
diff --git a/drivers/pci/host/pci-xgene.c b/drivers/pci/host/pci-xgene.c
-index 2988fe1..9029d59c 100644
+index b1d0596..06b8f97 100644
--- a/drivers/pci/host/pci-xgene.c
+++ b/drivers/pci/host/pci-xgene.c
@@ -29,6 +29,7 @@
@@ -12051,10 +6139,10 @@ index 0000000..0f44624
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
-index beea6ca..7038a2d 100644
+index 555de07..3991aa0 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
-@@ -310,10 +310,18 @@ static int dw8250_probe_of(struct uart_port *p,
+@@ -351,10 +351,18 @@ static int dw8250_probe_of(struct uart_port *p,
static int dw8250_probe_acpi(struct uart_8250_port *up,
struct dw8250_data *data)
{
@@ -12073,7 +6161,7 @@ index beea6ca..7038a2d 100644
p->iotype = UPIO_MEM32;
p->serial_in = dw8250_serial_in32;
p->serial_out = dw8250_serial_out32;
-@@ -536,6 +544,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
+@@ -577,6 +585,7 @@ static const struct acpi_device_id dw8250_acpi_match[] = {
{ "INT3435", 0 },
{ "80860F0A", 0 },
{ "8086228A", 0 },
@@ -12082,7 +6170,7 @@ index beea6ca..7038a2d 100644
};
MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);
diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmio.c
-index ef9a165..9f1939c 100644
+index 00d115b..cd9b974 100644
--- a/drivers/virtio/virtio_mmio.c
+++ b/drivers/virtio/virtio_mmio.c
@@ -100,8 +100,7 @@
@@ -12095,7 +6183,7 @@ index ef9a165..9f1939c 100644
/* The alignment to use between consumer and producer parts of vring.
* Currently hardcoded to the page size. */
-@@ -634,6 +633,14 @@ static struct of_device_id virtio_mmio_match[] = {
+@@ -635,12 +634,21 @@ static struct of_device_id virtio_mmio_match[] = {
};
MODULE_DEVICE_TABLE(of, virtio_mmio_match);
@@ -12110,39 +6198,18 @@ index ef9a165..9f1939c 100644
static struct platform_driver virtio_mmio_driver = {
.probe = virtio_mmio_probe,
.remove = virtio_mmio_remove,
-@@ -641,6 +648,7 @@ static struct platform_driver virtio_mmio_driver = {
+ .driver = {
.name = "virtio-mmio",
- .owner = THIS_MODULE,
.of_match_table = virtio_mmio_match,
+ .acpi_match_table = ACPI_PTR(virtio_mmio_acpi_match),
},
};
-diff --git a/drivers/xen/efi.c b/drivers/xen/efi.c
-index 1f850c9..f745db2 100644
---- a/drivers/xen/efi.c
-+++ b/drivers/xen/efi.c
-@@ -294,6 +294,7 @@ static const struct efi efi_xen __initconst = {
- .acpi = EFI_INVALID_TABLE_ADDR,
- .acpi20 = EFI_INVALID_TABLE_ADDR,
- .smbios = EFI_INVALID_TABLE_ADDR,
-+ .smbios3 = EFI_INVALID_TABLE_ADDR,
- .sal_systab = EFI_INVALID_TABLE_ADDR,
- .boot_info = EFI_INVALID_TABLE_ADDR,
- .hcdp = EFI_INVALID_TABLE_ADDR,
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
-index f34a083..04d02fc 100644
+index 61e32ec..1fec6f5 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
-@@ -27,6 +27,7 @@
- #define __ACPI_BUS_H__
-
- #include <linux/device.h>
-+#include <linux/property.h>
-
- /* TBD: Make dynamic */
- #define ACPI_MAX_HANDLES 10
-@@ -68,6 +69,8 @@ bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs);
+@@ -69,6 +69,8 @@ bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs);
union acpi_object *acpi_evaluate_dsm(acpi_handle handle, const u8 *uuid,
int rev, int func, union acpi_object *argv4);
@@ -12151,61 +6218,6 @@ index f34a083..04d02fc 100644
static inline union acpi_object *
acpi_evaluate_dsm_typed(acpi_handle handle, const u8 *uuid, int rev, int func,
union acpi_object *argv4, acpi_object_type type)
-@@ -337,10 +340,20 @@ struct acpi_device_physical_node {
- bool put_online:1;
- };
-
-+/* ACPI Device Specific Data (_DSD) */
-+struct acpi_device_data {
-+ const union acpi_object *pointer;
-+ const union acpi_object *properties;
-+ const union acpi_object *of_compatible;
-+};
-+
-+struct acpi_gpio_mapping;
-+
- /* Device */
- struct acpi_device {
- int device_type;
- acpi_handle handle; /* no handle for fixed hardware */
-+ struct fwnode_handle fwnode;
- struct acpi_device *parent;
- struct list_head children;
- struct list_head node;
-@@ -353,9 +366,11 @@ struct acpi_device {
- struct acpi_device_wakeup wakeup;
- struct acpi_device_perf performance;
- struct acpi_device_dir dir;
-+ struct acpi_device_data data;
- struct acpi_scan_handler *handler;
- struct acpi_hotplug_context *hp;
- struct acpi_driver *driver;
-+ const struct acpi_gpio_mapping *driver_gpios;
- void *driver_data;
- struct device dev;
- unsigned int physical_node_count;
-@@ -364,6 +379,21 @@ struct acpi_device {
- void (*remove)(struct acpi_device *);
- };
-
-+static inline bool is_acpi_node(struct fwnode_handle *fwnode)
-+{
-+ return fwnode && fwnode->type == FWNODE_ACPI;
-+}
-+
-+static inline struct acpi_device *acpi_node(struct fwnode_handle *fwnode)
-+{
-+ return fwnode ? container_of(fwnode, struct acpi_device, fwnode) : NULL;
-+}
-+
-+static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
-+{
-+ return &adev->fwnode;
-+}
-+
- static inline void *acpi_driver_data(struct acpi_device *d)
- {
- return d->driver_data;
diff --git a/include/acpi/acpi_io.h b/include/acpi/acpi_io.h
index 444671e..9d573db 100644
--- a/include/acpi/acpi_io.h
@@ -12229,10 +6241,10 @@ index 444671e..9d573db 100644
}
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
-index aa70cbd..1261fef 100644
+index bee5d68..140d514 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
-@@ -275,6 +275,13 @@
+@@ -276,6 +276,13 @@
VMLINUX_SYMBOL(__end_pci_fixups_suspend_late) = .; \
} \
\
@@ -12247,12 +6259,12 @@ index aa70cbd..1261fef 100644
.builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_builtin_fw) = .; \
diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h
-index 206dcc3..660dbfc 100644
+index ac4888d..d68268d 100644
--- a/include/kvm/arm_vgic.h
+++ b/include/kvm/arm_vgic.h
-@@ -289,17 +289,19 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
- #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
- #define vgic_initialized(k) ((k)->arch.vgic.ready)
+@@ -290,17 +290,19 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
+ #define vgic_initialized(k) (!!((k)->arch.vgic.nr_cpus))
+ #define vgic_ready(k) ((k)->arch.vgic.ready)
-int vgic_v2_probe(struct device_node *vgic_node,
- const struct vgic_ops **ops,
@@ -12280,18 +6292,10 @@ index 206dcc3..660dbfc 100644
return -ENODEV;
}
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
-index 407a12f..de81de3 100644
+index 856d381..13e6200 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
-@@ -28,6 +28,7 @@
- #include <linux/errno.h>
- #include <linux/ioport.h> /* for struct resource */
- #include <linux/device.h>
-+#include <linux/property.h>
-
- #ifndef _LINUX
- #define _LINUX
-@@ -71,6 +72,7 @@ enum acpi_irq_model_id {
+@@ -72,6 +72,7 @@ enum acpi_irq_model_id {
ACPI_IRQ_MODEL_IOAPIC,
ACPI_IRQ_MODEL_IOSAPIC,
ACPI_IRQ_MODEL_PLATFORM,
@@ -12299,171 +6303,6 @@ index 407a12f..de81de3 100644
ACPI_IRQ_MODEL_COUNT
};
-@@ -123,6 +125,10 @@ int acpi_numa_init (void);
-
- int acpi_table_init (void);
- int acpi_table_parse(char *id, acpi_tbl_table_handler handler);
-+int __init acpi_parse_entries(unsigned long table_size,
-+ acpi_tbl_entry_handler handler,
-+ struct acpi_table_header *table_header,
-+ int entry_id, unsigned int max_entries);
- int __init acpi_table_parse_entries(char *id, unsigned long table_size,
- int entry_id,
- acpi_tbl_entry_handler handler,
-@@ -423,12 +429,8 @@ extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
- const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
- const struct device *dev);
-
--static inline bool acpi_driver_match_device(struct device *dev,
-- const struct device_driver *drv)
--{
-- return !!acpi_match_device(drv->acpi_match_table, dev);
--}
--
-+extern bool acpi_driver_match_device(struct device *dev,
-+ const struct device_driver *drv);
- int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *);
- int acpi_device_modalias(struct device *, char *, int);
-
-@@ -443,6 +445,23 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *);
- #define ACPI_COMPANION_SET(dev, adev) do { } while (0)
- #define ACPI_HANDLE(dev) (NULL)
-
-+struct fwnode_handle;
-+
-+static inline bool is_acpi_node(struct fwnode_handle *fwnode)
-+{
-+ return false;
-+}
-+
-+static inline struct acpi_device *acpi_node(struct fwnode_handle *fwnode)
-+{
-+ return NULL;
-+}
-+
-+static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
-+{
-+ return NULL;
-+}
-+
- static inline const char *acpi_dev_name(struct acpi_device *adev)
- {
- return NULL;
-@@ -659,4 +678,114 @@ do { \
- #endif
- #endif
-
-+struct acpi_gpio_params {
-+ unsigned int crs_entry_index;
-+ unsigned int line_index;
-+ bool active_low;
-+};
-+
-+struct acpi_gpio_mapping {
-+ const char *name;
-+ const struct acpi_gpio_params *data;
-+ unsigned int size;
-+};
-+
-+#if defined(CONFIG_ACPI) && defined(CONFIG_GPIOLIB)
-+int acpi_dev_add_driver_gpios(struct acpi_device *adev,
-+ const struct acpi_gpio_mapping *gpios);
-+
-+static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev)
-+{
-+ if (adev)
-+ adev->driver_gpios = NULL;
-+}
-+#else
-+static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev,
-+ const struct acpi_gpio_mapping *gpios)
-+{
-+ return -ENXIO;
-+}
-+static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {}
-+#endif
-+
-+/* Device properties */
-+
-+#define MAX_ACPI_REFERENCE_ARGS 8
-+struct acpi_reference_args {
-+ struct acpi_device *adev;
-+ size_t nargs;
-+ u64 args[MAX_ACPI_REFERENCE_ARGS];
-+};
-+
-+#ifdef CONFIG_ACPI
-+int acpi_dev_get_property(struct acpi_device *adev, const char *name,
-+ acpi_object_type type, const union acpi_object **obj);
-+int acpi_dev_get_property_array(struct acpi_device *adev, const char *name,
-+ acpi_object_type type,
-+ const union acpi_object **obj);
-+int acpi_dev_get_property_reference(struct acpi_device *adev,
-+ const char *name, size_t index,
-+ struct acpi_reference_args *args);
-+
-+int acpi_dev_prop_get(struct acpi_device *adev, const char *propname,
-+ void **valptr);
-+int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname,
-+ enum dev_prop_type proptype, void *val);
-+int acpi_dev_prop_read(struct acpi_device *adev, const char *propname,
-+ enum dev_prop_type proptype, void *val, size_t nval);
-+
-+struct acpi_device *acpi_get_next_child(struct device *dev,
-+ struct acpi_device *child);
-+#else
-+static inline int acpi_dev_get_property(struct acpi_device *adev,
-+ const char *name, acpi_object_type type,
-+ const union acpi_object **obj)
-+{
-+ return -ENXIO;
-+}
-+static inline int acpi_dev_get_property_array(struct acpi_device *adev,
-+ const char *name,
-+ acpi_object_type type,
-+ const union acpi_object **obj)
-+{
-+ return -ENXIO;
-+}
-+static inline int acpi_dev_get_property_reference(struct acpi_device *adev,
-+ const char *name, const char *cells_name,
-+ size_t index, struct acpi_reference_args *args)
-+{
-+ return -ENXIO;
-+}
-+
-+static inline int acpi_dev_prop_get(struct acpi_device *adev,
-+ const char *propname,
-+ void **valptr)
-+{
-+ return -ENXIO;
-+}
-+
-+static inline int acpi_dev_prop_read_single(struct acpi_device *adev,
-+ const char *propname,
-+ enum dev_prop_type proptype,
-+ void *val)
-+{
-+ return -ENXIO;
-+}
-+
-+static inline int acpi_dev_prop_read(struct acpi_device *adev,
-+ const char *propname,
-+ enum dev_prop_type proptype,
-+ void *val, size_t nval)
-+{
-+ return -ENXIO;
-+}
-+
-+static inline struct acpi_device *acpi_get_next_child(struct device *dev,
-+ struct acpi_device *child)
-+{
-+ return NULL;
-+}
-+
-+#endif
-+
- #endif /*_LINUX_ACPI_H*/
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index abcafaa..4f5caa1 100644
--- a/include/linux/clocksource.h
@@ -12479,76 +6318,6 @@ index abcafaa..4f5caa1 100644
+#endif
+
#endif /* _LINUX_CLOCKSOURCE_H */
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 0949f9c..0238d61 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -547,6 +547,9 @@ void efi_native_runtime_setup(void);
- #define SMBIOS_TABLE_GUID \
- EFI_GUID( 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d )
-
-+#define SMBIOS3_TABLE_GUID \
-+ EFI_GUID( 0xf2fd1544, 0x9794, 0x4a2c, 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 )
-+
- #define SAL_SYSTEM_TABLE_GUID \
- EFI_GUID( 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d )
-
-@@ -810,7 +813,8 @@ extern struct efi {
- unsigned long mps; /* MPS table */
- unsigned long acpi; /* ACPI table (IA64 ext 0.71) */
- unsigned long acpi20; /* ACPI table (ACPI 2.0) */
-- unsigned long smbios; /* SM BIOS table */
-+ unsigned long smbios; /* SMBIOS table (32 bit entry point) */
-+ unsigned long smbios3; /* SMBIOS table (64 bit entry point) */
- unsigned long sal_systab; /* SAL system table */
- unsigned long boot_info; /* boot info table */
- unsigned long hcdp; /* HCDP table */
-diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
-index 12f146f..00b1b70 100644
---- a/include/linux/gpio/consumer.h
-+++ b/include/linux/gpio/consumer.h
-@@ -94,6 +94,13 @@ int gpiod_to_irq(const struct gpio_desc *desc);
- struct gpio_desc *gpio_to_desc(unsigned gpio);
- int desc_to_gpio(const struct gpio_desc *desc);
-
-+/* Child properties interface */
-+struct fwnode_handle;
-+
-+struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
-+ const char *propname);
-+struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
-+ struct fwnode_handle *child);
- #else /* CONFIG_GPIOLIB */
-
- static inline struct gpio_desc *__must_check __gpiod_get(struct device *dev,
-diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h
-index 8b62246..ee2d8c6 100644
---- a/include/linux/gpio_keys.h
-+++ b/include/linux/gpio_keys.h
-@@ -2,6 +2,7 @@
- #define _GPIO_KEYS_H
-
- struct device;
-+struct gpio_desc;
-
- /**
- * struct gpio_keys_button - configuration parameters
-@@ -17,6 +18,7 @@ struct device;
- * disable button via sysfs
- * @value: axis value for %EV_ABS
- * @irq: Irq number in case of interrupt keys
-+ * @gpiod: GPIO descriptor
- */
- struct gpio_keys_button {
- unsigned int code;
-@@ -29,6 +31,7 @@ struct gpio_keys_button {
- bool can_disable;
- int value;
- unsigned int irq;
-+ struct gpio_desc *gpiod;
- };
-
- /**
diff --git a/include/linux/irqchip/arm-gic-acpi.h b/include/linux/irqchip/arm-gic-acpi.h
new file mode 100644
index 0000000..ad5b577
@@ -12587,7 +6356,7 @@ index 0000000..ad5b577
+
+#endif /* ARM_GIC_ACPI_H_ */
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
-index 13eed92..dc9cb5f 100644
+index 71d706d..5c55f37 100644
--- a/include/linux/irqchip/arm-gic.h
+++ b/include/linux/irqchip/arm-gic.h
@@ -55,6 +55,8 @@
@@ -12599,131 +6368,11 @@ index 13eed92..dc9cb5f 100644
#define GICH_HCR 0x0
#define GICH_VTR 0x4
#define GICH_VMCR 0x8
-diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
-index a6059bd..e4d8f70 100644
---- a/include/linux/kvm_host.h
-+++ b/include/linux/kvm_host.h
-@@ -43,6 +43,7 @@
- * include/linux/kvm_h.
- */
- #define KVM_MEMSLOT_INVALID (1UL << 16)
-+#define KVM_MEMSLOT_INCOHERENT (1UL << 17)
-
- /* Two fragments for cross MMIO pages. */
- #define KVM_MAX_MMIO_FRAGMENTS 2
-diff --git a/include/linux/leds.h b/include/linux/leds.h
-index a57611d..361101f 100644
---- a/include/linux/leds.h
-+++ b/include/linux/leds.h
-@@ -261,6 +261,7 @@ struct gpio_led {
- unsigned retain_state_suspended : 1;
- unsigned default_state : 2;
- /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
-+ struct gpio_desc *gpiod;
- };
- #define LEDS_GPIO_DEFSTATE_OFF 0
- #define LEDS_GPIO_DEFSTATE_ON 1
-@@ -273,7 +274,7 @@ struct gpio_led_platform_data {
- #define GPIO_LED_NO_BLINK_LOW 0 /* No blink GPIO state low */
- #define GPIO_LED_NO_BLINK_HIGH 1 /* No blink GPIO state high */
- #define GPIO_LED_BLINK 2 /* Please, blink */
-- int (*gpio_blink_set)(unsigned gpio, int state,
-+ int (*gpio_blink_set)(struct gpio_desc *desc, int state,
- unsigned long *delay_on,
- unsigned long *delay_off);
- };
-diff --git a/include/linux/of.h b/include/linux/of.h
-index 29f0adc..cf79be1 100644
---- a/include/linux/of.h
-+++ b/include/linux/of.h
-@@ -23,6 +23,7 @@
- #include <linux/spinlock.h>
- #include <linux/topology.h>
- #include <linux/notifier.h>
-+#include <linux/property.h>
-
- #include <asm/byteorder.h>
- #include <asm/errno.h>
-@@ -49,6 +50,7 @@ struct device_node {
- const char *type;
- phandle phandle;
- const char *full_name;
-+ struct fwnode_handle fwnode;
-
- struct property *properties;
- struct property *deadprops; /* removed properties */
-@@ -79,6 +81,7 @@ extern struct kobj_type of_node_ktype;
- static inline void of_node_init(struct device_node *node)
- {
- kobject_init(&node->kobj, &of_node_ktype);
-+ node->fwnode.type = FWNODE_OF;
- }
-
- /* true when node is initialized */
-@@ -114,6 +117,16 @@ extern struct device_node *of_aliases;
- extern struct device_node *of_stdout;
- extern raw_spinlock_t devtree_lock;
-
-+static inline bool is_of_node(struct fwnode_handle *fwnode)
-+{
-+ return fwnode && fwnode->type == FWNODE_OF;
-+}
-+
-+static inline struct device_node *of_node(struct fwnode_handle *fwnode)
-+{
-+ return fwnode ? container_of(fwnode, struct device_node, fwnode) : NULL;
-+}
-+
- static inline bool of_have_populated_dt(void)
- {
- return of_allnodes != NULL;
-@@ -263,6 +276,10 @@ extern int of_property_read_u32_array(const struct device_node *np,
- size_t sz);
- extern int of_property_read_u64(const struct device_node *np,
- const char *propname, u64 *out_value);
-+extern int of_property_read_u64_array(const struct device_node *np,
-+ const char *propname,
-+ u64 *out_values,
-+ size_t sz);
-
- extern int of_property_read_string(struct device_node *np,
- const char *propname,
-@@ -355,6 +372,16 @@ bool of_console_check(struct device_node *dn, char *name, int index);
-
- #else /* CONFIG_OF */
-
-+static inline bool is_of_node(struct fwnode_handle *fwnode)
-+{
-+ return false;
-+}
-+
-+static inline struct device_node *of_node(struct fwnode_handle *fwnode)
-+{
-+ return NULL;
-+}
-+
- static inline const char* of_node_full_name(const struct device_node *np)
- {
- return "<no-node>";
-@@ -477,6 +504,13 @@ static inline int of_property_read_u32_array(const struct device_node *np,
- return -ENOSYS;
- }
-
-+static inline int of_property_read_u64_array(const struct device_node *np,
-+ const char *propname,
-+ u64 *out_values, size_t sz)
-+{
-+ return -ENOSYS;
-+}
-+
- static inline int of_property_read_string(struct device_node *np,
- const char *propname,
- const char **out_string)
diff --git a/include/linux/pci.h b/include/linux/pci.h
-index 4c8ac5f..ea663d8 100644
+index 360a966..1476a66 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
-@@ -563,15 +563,6 @@ struct pci_ops {
+@@ -564,15 +564,6 @@ struct pci_ops {
int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
};
@@ -12739,7 +6388,7 @@ index 4c8ac5f..ea663d8 100644
struct pci_bus_region {
dma_addr_t start;
dma_addr_t end;
-@@ -1326,6 +1317,16 @@ typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
+@@ -1329,6 +1320,16 @@ typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
unsigned int command_bits, u32 flags);
void pci_register_set_vga_state(arch_set_vga_state_t func);
@@ -12756,7 +6405,7 @@ index 4c8ac5f..ea663d8 100644
#else /* CONFIG_PCI is not enabled */
/*
-@@ -1427,6 +1428,23 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
+@@ -1430,6 +1431,23 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
unsigned int devfn)
{ return NULL; }
@@ -12780,7 +6429,7 @@ index 4c8ac5f..ea663d8 100644
static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
static inline struct pci_dev *pci_dev_get(struct pci_dev *dev) { return NULL; }
static inline int pci_get_new_domain_nr(void) { return -ENOSYS; }
-@@ -1636,7 +1654,6 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev,
+@@ -1639,7 +1657,6 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev,
enum pcie_reset_state state);
int pcibios_add_device(struct pci_dev *dev);
void pcibios_release_device(struct pci_dev *dev);
@@ -12788,214 +6437,8 @@ index 4c8ac5f..ea663d8 100644
#ifdef CONFIG_HIBERNATE_CALLBACKS
extern struct dev_pm_ops pcibios_pm_ops;
-diff --git a/include/linux/property.h b/include/linux/property.h
-new file mode 100644
-index 0000000..a6a3d98
---- /dev/null
-+++ b/include/linux/property.h
-@@ -0,0 +1,143 @@
-+/*
-+ * property.h - Unified device property interface.
-+ *
-+ * Copyright (C) 2014, Intel Corporation
-+ * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-+ * Mika Westerberg <mika.westerberg@linux.intel.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _LINUX_PROPERTY_H_
-+#define _LINUX_PROPERTY_H_
-+
-+#include <linux/types.h>
-+
-+struct device;
-+
-+enum dev_prop_type {
-+ DEV_PROP_U8,
-+ DEV_PROP_U16,
-+ DEV_PROP_U32,
-+ DEV_PROP_U64,
-+ DEV_PROP_STRING,
-+ DEV_PROP_MAX,
-+};
-+
-+bool device_property_present(struct device *dev, const char *propname);
-+int device_property_read_u8_array(struct device *dev, const char *propname,
-+ u8 *val, size_t nval);
-+int device_property_read_u16_array(struct device *dev, const char *propname,
-+ u16 *val, size_t nval);
-+int device_property_read_u32_array(struct device *dev, const char *propname,
-+ u32 *val, size_t nval);
-+int device_property_read_u64_array(struct device *dev, const char *propname,
-+ u64 *val, size_t nval);
-+int device_property_read_string_array(struct device *dev, const char *propname,
-+ const char **val, size_t nval);
-+int device_property_read_string(struct device *dev, const char *propname,
-+ const char **val);
-+
-+enum fwnode_type {
-+ FWNODE_INVALID = 0,
-+ FWNODE_OF,
-+ FWNODE_ACPI,
-+};
-+
-+struct fwnode_handle {
-+ enum fwnode_type type;
-+};
-+
-+bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname);
-+int fwnode_property_read_u8_array(struct fwnode_handle *fwnode,
-+ const char *propname, u8 *val,
-+ size_t nval);
-+int fwnode_property_read_u16_array(struct fwnode_handle *fwnode,
-+ const char *propname, u16 *val,
-+ size_t nval);
-+int fwnode_property_read_u32_array(struct fwnode_handle *fwnode,
-+ const char *propname, u32 *val,
-+ size_t nval);
-+int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
-+ const char *propname, u64 *val,
-+ size_t nval);
-+int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
-+ const char *propname, const char **val,
-+ size_t nval);
-+int fwnode_property_read_string(struct fwnode_handle *fwnode,
-+ const char *propname, const char **val);
-+
-+struct fwnode_handle *device_get_next_child_node(struct device *dev,
-+ struct fwnode_handle *child);
-+
-+#define device_for_each_child_node(dev, child) \
-+ for (child = device_get_next_child_node(dev, NULL); child; \
-+ child = device_get_next_child_node(dev, child))
-+
-+void fwnode_handle_put(struct fwnode_handle *fwnode);
-+
-+unsigned int device_get_child_node_count(struct device *dev);
-+
-+static inline bool device_property_read_bool(struct device *dev,
-+ const char *propname)
-+{
-+ return device_property_present(dev, propname);
-+}
-+
-+static inline int device_property_read_u8(struct device *dev,
-+ const char *propname, u8 *val)
-+{
-+ return device_property_read_u8_array(dev, propname, val, 1);
-+}
-+
-+static inline int device_property_read_u16(struct device *dev,
-+ const char *propname, u16 *val)
-+{
-+ return device_property_read_u16_array(dev, propname, val, 1);
-+}
-+
-+static inline int device_property_read_u32(struct device *dev,
-+ const char *propname, u32 *val)
-+{
-+ return device_property_read_u32_array(dev, propname, val, 1);
-+}
-+
-+static inline int device_property_read_u64(struct device *dev,
-+ const char *propname, u64 *val)
-+{
-+ return device_property_read_u64_array(dev, propname, val, 1);
-+}
-+
-+static inline bool fwnode_property_read_bool(struct fwnode_handle *fwnode,
-+ const char *propname)
-+{
-+ return fwnode_property_present(fwnode, propname);
-+}
-+
-+static inline int fwnode_property_read_u8(struct fwnode_handle *fwnode,
-+ const char *propname, u8 *val)
-+{
-+ return fwnode_property_read_u8_array(fwnode, propname, val, 1);
-+}
-+
-+static inline int fwnode_property_read_u16(struct fwnode_handle *fwnode,
-+ const char *propname, u16 *val)
-+{
-+ return fwnode_property_read_u16_array(fwnode, propname, val, 1);
-+}
-+
-+static inline int fwnode_property_read_u32(struct fwnode_handle *fwnode,
-+ const char *propname, u32 *val)
-+{
-+ return fwnode_property_read_u32_array(fwnode, propname, val, 1);
-+}
-+
-+static inline int fwnode_property_read_u64(struct fwnode_handle *fwnode,
-+ const char *propname, u64 *val)
-+{
-+ return fwnode_property_read_u64_array(fwnode, propname, val, 1);
-+}
-+
-+#endif /* _LINUX_PROPERTY_H_ */
-diff --git a/net/rfkill/rfkill-gpio.c b/net/rfkill/rfkill-gpio.c
-index 0f62326..2a47179 100644
---- a/net/rfkill/rfkill-gpio.c
-+++ b/net/rfkill/rfkill-gpio.c
-@@ -63,6 +63,15 @@ static const struct rfkill_ops rfkill_gpio_ops = {
- .set_block = rfkill_gpio_set_power,
- };
-
-+static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
-+static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false };
-+
-+static const struct acpi_gpio_mapping acpi_rfkill_default_gpios[] = {
-+ { "reset-gpios", &reset_gpios, 1 },
-+ { "shutdown-gpios", &shutdown_gpios, 1 },
-+ { },
-+};
-+
- static int rfkill_gpio_acpi_probe(struct device *dev,
- struct rfkill_gpio_data *rfkill)
- {
-@@ -75,7 +84,8 @@ static int rfkill_gpio_acpi_probe(struct device *dev,
- rfkill->name = dev_name(dev);
- rfkill->type = (unsigned)id->driver_data;
-
-- return 0;
-+ return acpi_dev_add_driver_gpios(ACPI_COMPANION(dev),
-+ acpi_rfkill_default_gpios);
- }
-
- static int rfkill_gpio_probe(struct platform_device *pdev)
-@@ -102,7 +112,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
-
- rfkill->clk = devm_clk_get(&pdev->dev, NULL);
-
-- gpio = devm_gpiod_get_index(&pdev->dev, "reset", 0);
-+ gpio = devm_gpiod_get(&pdev->dev, "reset");
- if (!IS_ERR(gpio)) {
- ret = gpiod_direction_output(gpio, 0);
- if (ret)
-@@ -110,7 +120,7 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
- rfkill->reset_gpio = gpio;
- }
-
-- gpio = devm_gpiod_get_index(&pdev->dev, "shutdown", 1);
-+ gpio = devm_gpiod_get(&pdev->dev, "shutdown");
- if (!IS_ERR(gpio)) {
- ret = gpiod_direction_output(gpio, 0);
- if (ret)
-@@ -150,6 +160,8 @@ static int rfkill_gpio_remove(struct platform_device *pdev)
- rfkill_unregister(rfkill->rfkill_dev);
- rfkill_destroy(rfkill->rfkill_dev);
-
-+ acpi_dev_remove_driver_gpios(ACPI_COMPANION(&pdev->dev));
-+
- return 0;
- }
-
diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
-index 22fa819..642dad4 100644
+index 1c0772b..b9d11aa 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -21,9 +21,11 @@
@@ -13010,7 +6453,7 @@ index 22fa819..642dad4 100644
#include <kvm/arm_vgic.h>
#include <kvm/arm_arch_timer.h>
-@@ -244,60 +246,91 @@ static const struct of_device_id arch_timer_of_match[] = {
+@@ -246,60 +248,91 @@ static const struct of_device_id arch_timer_of_match[] = {
{},
};
@@ -13300,7 +6743,7 @@ index 1c2c8ee..8b56920 100644
int ret = 0;
u32 gicv_idx;
diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
-index aacdb59..d972d63 100644
+index 03affc7..cdd4c64 100644
--- a/virt/kvm/arm/vgic.c
+++ b/virt/kvm/arm/vgic.c
@@ -25,9 +25,11 @@
@@ -13315,7 +6758,7 @@ index aacdb59..d972d63 100644
#include <asm/kvm_emulate.h>
#include <asm/kvm_arm.h>
#include <asm/kvm_mmu.h>
-@@ -2427,8 +2429,8 @@ static struct notifier_block vgic_cpu_nb = {
+@@ -2431,8 +2433,8 @@ static struct notifier_block vgic_cpu_nb = {
};
static const struct of_device_id vgic_ids[] = {
@@ -13326,7 +6769,7 @@ index aacdb59..d972d63 100644
{},
};
-@@ -2438,20 +2440,26 @@ int kvm_vgic_hyp_init(void)
+@@ -2442,20 +2444,26 @@ int kvm_vgic_hyp_init(void)
const int (*vgic_probe)(struct device_node *,const struct vgic_ops **,
const struct vgic_params **);
struct device_node *vgic_node;
diff --git a/freed-ora/current/master/kernel.spec b/freed-ora/current/master/kernel.spec
index db92b1f0d..0ce211e3e 100644
--- a/freed-ora/current/master/kernel.spec
+++ b/freed-ora/current/master/kernel.spec
@@ -6,7 +6,7 @@ Summary: The Linux kernel
# For a stable, released kernel, released_kernel should be 1. For rawhide
# and/or a kernel built from an rc or git snapshot, released_kernel should
# be 0.
-%global released_kernel 1
+%global released_kernel 0
%global aarch64patches 1
@@ -42,7 +42,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 2
+%global baserelease 1
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -58,8 +58,8 @@ Summary: The Linux kernel
%define basegnu -gnu%{?librev}
# To be inserted between "patch" and "-2.6.".
-#define stablelibre -3.18%{?stablegnux}
-#define rcrevlibre -3.18%{?rcrevgnux}
+#define stablelibre -3.19%{?stablegnux}
+%define rcrevlibre -3.18%{?rcrevgnux}
#define gitrevlibre -3.18%{?gitrevgnux}
%if 0%{?stablelibre:1}
@@ -92,7 +92,7 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 1
+%define stable_update 0
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev %{stable_update}
@@ -105,7 +105,7 @@ Summary: The Linux kernel
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
# The rc snapshot level
-%define rcrev 0
+%define rcrev 6
# The git snapshot level
%define gitrev 0
# Set rpm version accordingly
@@ -458,7 +458,7 @@ Source0: http://linux-libre.fsfla.org/pub/linux-libre/freed-ora/src/linux%{?base
Source3: deblob-main
Source4: deblob-check
Source5: deblob-%{kversion}
-#Source6: deblob-3.%{upstream_sublevel}
+Source6: deblob-3.%{upstream_sublevel}
Source10: perf-man-%{kversion}.tar.gz
Source11: x509.genkey
@@ -638,7 +638,6 @@ Patch21025: arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
Patch21026: pinctrl-pinctrl-single-must-be-initialized-early.patch
Patch21028: arm-i.MX6-Utilite-device-dtb.patch
-Patch21029: arm-dts-sun7i-bananapi.patch
Patch21100: arm-highbank-l2-reverts.patch
@@ -653,65 +652,18 @@ Patch21247: ath9k-rx-dma-stop-check.patch
Patch22000: weird-root-dentry-name-debug.patch
-# Patch series from Hans for various backlight and platform driver fixes
-Patch26002: samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
-
Patch26058: asus-nb-wmi-Add-wapf4-quirk-for-the-X550VB.patch
#rhbz 1111138
Patch26059: i8042-Add-notimeout-quirk-for-Fujitsu-Lifebook-A544-.patch
-Patch26064: Input-add-driver-for-the-Goodix-touchpanel.patch
-
-#rhbz 1135338
-Patch26070: HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch
-
-#CVE-2014-8134 rhbz 1172765 1172769
-Patch26091: x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch
-
-#rhbz 1164945
-Patch26092: xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch
-Patch26093: uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch
-Patch26094: uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch
-
-#rhbz 1172543
-Patch26096: cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch
-
-#CVE-2014-8133 rhbz 1172797 1174374
-Patch26100: x86-tls-Validate-TLS-entries-to-protect-espfix.patch
-
-#rhbz 1173806
-Patch26101: powerpc-powernv-force-all-CPUs-to-be-bootable.patch
+#rhbz 1124119
+Patch26128: uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch
-#CVE-2014-XXXX rhbz 1175235 1175250
-Patch26102: isofs-Fix-infinite-looping-over-CE-entries.patch
-
-#rhbz 1175261
-Patch26103: blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch
-
-#rhbz 1168434
-Patch26104: dm-cache-only-use-overwrite-optimisation-for-promoti.patch
-Patch26105: dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch
-Patch26106: dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch
-
-Patch26107: uapi-linux-target_core_user.h-fix-headers_install.sh.patch
-
-#mount fixes for stable
-Patch26108: mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch
-Patch26109: mnt-Update-unprivileged-remount-test.patch
-Patch26110: umount-Disallow-unprivileged-mount-force.patch
-
-#CVE-2014-8989 rhbz 1170684 1170688
-Patch26111: groups-Consolidate-the-setgroups-permission-checks.patch
-Patch26112: userns-Document-what-the-invariant-required-for-safe.patch
-Patch26113: userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch
-Patch26114: userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch
-Patch26115: userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch
-Patch26116: userns-Only-allow-the-creator-of-the-userns-unprivil.patch
-Patch26117: userns-Rename-id_map_mutex-to-userns_state_mutex.patch
-Patch26118: userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch
-Patch26119: userns-Allow-setting-gid_maps-without-privilege-when.patch
-Patch26120: userns-Unbreak-the-unprivileged-remount-tests.patch
+#rhbz 1115713
+Patch26129: samsung-laptop-Add-use_native_backlight-quirk-and-en.patch
+#rhbz 1094948
+Patch26131: acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
# git clone ssh://git.fedorahosted.org/git/kernel-arm64.git, git diff master...devel
Patch30000: kernel-arm64.patch
@@ -943,6 +895,8 @@ Provides: kernel-devel = %{version}-%{release}%{?1:+%{1}}\
Provides: kernel-libre-devel = %{version}-%{release}%{?1:+%{1}}\
Provides: kernel-devel-uname-r = %{KVERREL}%{?1:+%{1}}\
Provides: kernel-libre-devel-uname-r = %{KVERREL}%{?1:+%{1}}\
+Provides: installonlypkg(kernel)\
+Provides: installonlypkg(kernel-libre)\
AutoReqProv: no\
Requires(pre): /usr/bin/find\
Requires: perl\
@@ -1320,6 +1274,13 @@ cp -al vanilla-%{vanillaversion} linux-%{KVERREL}
cd linux-%{KVERREL}
+#HACK for 3.19-rc6+patch-2.7.3 rbhz 1185928
+# make the symlink for arm64 dt-bindings. sigh.
+mkdir -p arch/arm64/boot/dts/include
+pushd arch/arm64/boot/dts/include/
+ln -s ../../../../../include/dt-bindings
+popd
+
# released_kernel with possible stable updates
%if 0%{?stable_base}
ApplyPatch %{stable_patch_00}
@@ -1386,7 +1347,6 @@ ApplyPatch arm-dts-am335x-bone-common-add-uart2_pins-uart4_pins.patch
ApplyPatch pinctrl-pinctrl-single-must-be-initialized-early.patch
ApplyPatch arm-i.MX6-Utilite-device-dtb.patch
-ApplyPatch arm-dts-sun7i-bananapi.patch
ApplyPatch arm-highbank-l2-reverts.patch
@@ -1507,65 +1467,18 @@ ApplyPatch criu-no-expert.patch
#rhbz 892811
ApplyPatch ath9k-rx-dma-stop-check.patch
-# Patch series from Hans for various backlight and platform driver fixes
-ApplyPatch samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
-
ApplyPatch asus-nb-wmi-Add-wapf4-quirk-for-the-X550VB.patch
#rhbz 1111138
ApplyPatch i8042-Add-notimeout-quirk-for-Fujitsu-Lifebook-A544-.patch
-ApplyPatch Input-add-driver-for-the-Goodix-touchpanel.patch
-
-#rhbz 1135338
-ApplyPatch HID-add-support-for-MS-Surface-Pro-3-Type-Cover.patch
-
-#CVE-2014-8134 rhbz 1172765 1172769
-ApplyPatch x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch
-
-#rhbz 1164945
-ApplyPatch xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch
-ApplyPatch uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch
-ApplyPatch uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch
-
-#rhbz 1172543
-ApplyPatch cfg80211-don-t-WARN-about-two-consecutive-Country-IE.patch
-
-#CVE-2014-8133 rhbz 1172797 1174374
-ApplyPatch x86-tls-Validate-TLS-entries-to-protect-espfix.patch
-
-#rhbz 1173806
-ApplyPatch powerpc-powernv-force-all-CPUs-to-be-bootable.patch
+#rhbz 1124119
+ApplyPatch uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch
-#CVE-2014-XXXX rhbz 1175235 1175250
-ApplyPatch isofs-Fix-infinite-looping-over-CE-entries.patch
-
-#rhbz 1175261
-ApplyPatch blk-mq-Fix-uninitialized-kobject-at-CPU-hotplugging.patch
-
-#rhbz 1168434
-ApplyPatch dm-cache-only-use-overwrite-optimisation-for-promoti.patch
-ApplyPatch dm-cache-dirty-flag-was-mistakenly-being-cleared-whe.patch
-ApplyPatch dm-cache-fix-spurious-cell_defer-when-dealing-with-p.patch
-
-ApplyPatch uapi-linux-target_core_user.h-fix-headers_install.sh.patch
-
-#mount fixes for stable
-ApplyPatch mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch
-ApplyPatch mnt-Update-unprivileged-remount-test.patch
-ApplyPatch umount-Disallow-unprivileged-mount-force.patch
-
-#CVE-2014-8989 rhbz 1170684 1170688
-ApplyPatch groups-Consolidate-the-setgroups-permission-checks.patch
-ApplyPatch userns-Document-what-the-invariant-required-for-safe.patch
-ApplyPatch userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch
-ApplyPatch userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch
-ApplyPatch userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch
-ApplyPatch userns-Only-allow-the-creator-of-the-userns-unprivil.patch
-ApplyPatch userns-Rename-id_map_mutex-to-userns_state_mutex.patch
-ApplyPatch userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch
-ApplyPatch userns-Allow-setting-gid_maps-without-privilege-when.patch
-ApplyPatch userns-Unbreak-the-unprivileged-remount-tests.patch
+#rhbz 1115713
+ApplyPatch samsung-laptop-Add-use_native_backlight-quirk-and-en.patch
+#rhbz 1094948
+ApplyPatch acpi-video-Add-disable_native_backlight-quirk-for-Sa.patch
%if 0%{?aarch64patches}
ApplyPatch kernel-arm64.patch
@@ -1706,10 +1619,8 @@ BuildKernel() {
%{make} -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
%ifarch %{arm} aarch64
- %{make} -s ARCH=$Arch V=1 dtbs
- mkdir -p $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
- install -m 644 arch/$Arch/boot/dts/*.dtb $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer/
- rm -f arch/$Arch/boot/dts/*.dtb
+ %{make} -s ARCH=$Arch V=1 dtbs dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
+ find arch/$Arch/boot/dts -name '*.dtb' -type f | xargs rm -f
%endif
# Start installing the results
@@ -2448,6 +2359,90 @@ fi
# ||----w |
# || ||
%changelog
+* Sun Feb 1 2015 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- GNU Linux-libre 3.19-rc6-gnu.
+
+* Mon Jan 26 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc6.git0.1
+- Linux v3.19-rc6
+- Remove symbolic link hunk from patch-3.19-rc6 (rbhz 1185928)
+- Disable debugging options.
+
+* Thu Jan 22 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git2.1
+- Linux v3.19-rc5-134-gf8de05ca38b7
+
+* Wed Jan 21 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git1.1
+- Linux v3.19-rc5-117-g5eb11d6b3f55
+- Reenable debugging options.
+
+* Tue Jan 20 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- More ARM config option cleanups
+
+* Mon Jan 19 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc5.git0.1
+- Linux v3.19-rc5
+- Disable debugging options.
+
+* Sat Jan 17 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Move Rockchip to ARMv7 generic to support rk32xx on LPAE
+- Enable Device Tree Overlays for dynamic DTB
+- ARM config updates
+
+* Fri Jan 16 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git4.1
+- Linux v3.19-rc4-155-gcb59670870d9
+
+* Thu Jan 15 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Re-enable BUILD_DOCSRC
+
+* Thu Jan 15 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git3.1
+- Linux v3.19-rc4-141-gf800c25b7a76
+
+* Wed Jan 14 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git2.1
+- Linux v3.19-rc4-46-g188c901941ef
+- Enable I40E_VXLAN (rhbz 1182116)
+
+* Tue Jan 13 2015 Peter Robinson <pbrobinson@fedoraproject.org>
+- Enable Checkpoint/Restore on ARMv7 (rhbz 1146995)
+
+* Tue Jan 13 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Add installonlypkg(kernel) to kernel-devel subpackages (rhbz 1079906)
+
+* Tue Jan 13 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git1.1
+- Linux v3.19-rc4-23-g971780b70194
+- Reenable debugging options.
+
+* Mon Jan 12 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc4.git0.1
+- Linux v3.19-rc4
+- Disable debugging options.
+
+* Mon Jan 12 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Backlight fixes for Samsung and Dell machines (rhbz 1094948 1115713)
+- Add various UAS quirks (rhbz 1124119)
+- Add patch to fix loop in VDSO (rhbz 1178975)
+
+* Fri Jan 09 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc3.git2.1
+- Linux v3.19-rc3-69-g11c8f01b423b
+
+* Wed Jan 07 2015 Kyle McMartin <kyle@fedoraproject.org> - 3.19.0-0.rc3.git1.2
+- kernel-arm64.patch: fix up build... no idea if it works.
+
+* Wed Jan 07 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- CVE-2014-9529 memory corruption or panic during key gc (rhbz 1179813 1179853)
+
+* Wed Jan 07 2015 Josh Boyer <jwboyer@fedoraproject.org> - 3.19.0-0.rc3.git1.1
+- Linux v3.19-rc3-38-gbdec41963890
+- Enable POWERCAP and INTEL_RAPL options
+- Reenable debugging options.
+
+* Tue Jan 06 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.19-rc3
+
+* Mon Jan 05 2015 Josh Boyer <jwboyer@fedoraproject.org>
+- Linux v3.19-rc2
+- Temporarily disable aarch64patches
+- Happy New Year
+
+* Sun Dec 28 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Enable F2FS (rhbz 972446)
+
* Thu Dec 18 2014 Josh Boyer <jwboyer@fedoraproject.org> - 3.18.1-2
- CVE-2014-8989 userns can bypass group restrictions (rhbz 1170684 1170688)
- Fix from Kyle McMartin for target_core_user uapi issue since it's enabled
diff --git a/freed-ora/current/master/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch b/freed-ora/current/master/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
index eac51c600..d521c804d 100644
--- a/freed-ora/current/master/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
+++ b/freed-ora/current/master/kexec-Disable-at-runtime-if-the-kernel-enforces-modu.patch
@@ -13,7 +13,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
1 file changed, 8 insertions(+)
diff --git a/kernel/kexec.c b/kernel/kexec.c
-index 2abf9f6e9a61..417bd0599024 100644
+index 9a8a01abbaed..9a0ecbf14545 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -36,6 +36,7 @@
diff --git a/freed-ora/current/master/mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch b/freed-ora/current/master/mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch
deleted file mode 100644
index 0fff15128..000000000
--- a/freed-ora/current/master/mnt-Implicitly-add-MNT_NODEV-on-remount-when-it-was-.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Wed, 13 Aug 2014 01:33:38 -0700
-Subject: [PATCH] mnt: Implicitly add MNT_NODEV on remount when it was
- implicitly added by mount
-
-Now that remount is properly enforcing the rule that you can't remove
-nodev at least sandstorm.io is breaking when performing a remount.
-
-It turns out that there is an easy intuitive solution implicitly
-add nodev on remount when nodev was implicitly added on mount.
-
-Tested-by: Cedric Bosdonnat <cbosdonnat@suse.com>
-Tested-by: Richard Weinberger <richard@nod.at>
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- fs/namespace.c | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 5b66b2b3624d..3a1a87dc33df 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -2098,7 +2098,13 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
- }
- if ((mnt->mnt.mnt_flags & MNT_LOCK_NODEV) &&
- !(mnt_flags & MNT_NODEV)) {
-- return -EPERM;
-+ /* Was the nodev implicitly added in mount? */
-+ if ((mnt->mnt_ns->user_ns != &init_user_ns) &&
-+ !(sb->s_type->fs_flags & FS_USERNS_DEV_MOUNT)) {
-+ mnt_flags |= MNT_NODEV;
-+ } else {
-+ return -EPERM;
-+ }
- }
- if ((mnt->mnt.mnt_flags & MNT_LOCK_NOSUID) &&
- !(mnt_flags & MNT_NOSUID)) {
---
-2.1.0
-
diff --git a/freed-ora/current/master/mnt-Update-unprivileged-remount-test.patch b/freed-ora/current/master/mnt-Update-unprivileged-remount-test.patch
deleted file mode 100644
index 5913d8272..000000000
--- a/freed-ora/current/master/mnt-Update-unprivileged-remount-test.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 22 Aug 2014 16:39:03 -0500
-Subject: [PATCH] mnt: Update unprivileged remount test
-
-- MNT_NODEV should be irrelevant except when reading back mount flags,
- no longer specify MNT_NODEV on remount.
-
-- Test MNT_NODEV on devpts where it is meaningful even for unprivileged mounts.
-
-- Add a test to verify that remount of a prexisting mount with the same flags
- is allowed and does not change those flags.
-
-- Cleanup up the definitions of MS_REC, MS_RELATIME, MS_STRICTATIME that are used
- when the code is built in an environment without them.
-
-- Correct the test error messages when tests fail. There were not 5 tests
- that tested MS_RELATIME.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
----
- .../selftests/mount/unprivileged-remount-test.c | 172 +++++++++++++++++----
- 1 file changed, 142 insertions(+), 30 deletions(-)
-
-diff --git a/tools/testing/selftests/mount/unprivileged-remount-test.c b/tools/testing/selftests/mount/unprivileged-remount-test.c
-index 1b3ff2fda4d0..9669d375625a 100644
---- a/tools/testing/selftests/mount/unprivileged-remount-test.c
-+++ b/tools/testing/selftests/mount/unprivileged-remount-test.c
-@@ -6,6 +6,8 @@
- #include <sys/types.h>
- #include <sys/mount.h>
- #include <sys/wait.h>
-+#include <sys/vfs.h>
-+#include <sys/statvfs.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
-@@ -32,11 +34,14 @@
- # define CLONE_NEWPID 0x20000000
- #endif
-
-+#ifndef MS_REC
-+# define MS_REC 16384
-+#endif
- #ifndef MS_RELATIME
--#define MS_RELATIME (1 << 21)
-+# define MS_RELATIME (1 << 21)
- #endif
- #ifndef MS_STRICTATIME
--#define MS_STRICTATIME (1 << 24)
-+# define MS_STRICTATIME (1 << 24)
- #endif
-
- static void die(char *fmt, ...)
-@@ -87,6 +92,45 @@ static void write_file(char *filename, char *fmt, ...)
- }
- }
-
-+static int read_mnt_flags(const char *path)
-+{
-+ int ret;
-+ struct statvfs stat;
-+ int mnt_flags;
-+
-+ ret = statvfs(path, &stat);
-+ if (ret != 0) {
-+ die("statvfs of %s failed: %s\n",
-+ path, strerror(errno));
-+ }
-+ if (stat.f_flag & ~(ST_RDONLY | ST_NOSUID | ST_NODEV | \
-+ ST_NOEXEC | ST_NOATIME | ST_NODIRATIME | ST_RELATIME | \
-+ ST_SYNCHRONOUS | ST_MANDLOCK)) {
-+ die("Unrecognized mount flags\n");
-+ }
-+ mnt_flags = 0;
-+ if (stat.f_flag & ST_RDONLY)
-+ mnt_flags |= MS_RDONLY;
-+ if (stat.f_flag & ST_NOSUID)
-+ mnt_flags |= MS_NOSUID;
-+ if (stat.f_flag & ST_NODEV)
-+ mnt_flags |= MS_NODEV;
-+ if (stat.f_flag & ST_NOEXEC)
-+ mnt_flags |= MS_NOEXEC;
-+ if (stat.f_flag & ST_NOATIME)
-+ mnt_flags |= MS_NOATIME;
-+ if (stat.f_flag & ST_NODIRATIME)
-+ mnt_flags |= MS_NODIRATIME;
-+ if (stat.f_flag & ST_RELATIME)
-+ mnt_flags |= MS_RELATIME;
-+ if (stat.f_flag & ST_SYNCHRONOUS)
-+ mnt_flags |= MS_SYNCHRONOUS;
-+ if (stat.f_flag & ST_MANDLOCK)
-+ mnt_flags |= ST_MANDLOCK;
-+
-+ return mnt_flags;
-+}
-+
- static void create_and_enter_userns(void)
- {
- uid_t uid;
-@@ -118,7 +162,8 @@ static void create_and_enter_userns(void)
- }
-
- static
--bool test_unpriv_remount(int mount_flags, int remount_flags, int invalid_flags)
-+bool test_unpriv_remount(const char *fstype, const char *mount_options,
-+ int mount_flags, int remount_flags, int invalid_flags)
- {
- pid_t child;
-
-@@ -151,9 +196,11 @@ bool test_unpriv_remount(int mount_flags, int remount_flags, int invalid_flags)
- strerror(errno));
- }
-
-- if (mount("testing", "/tmp", "ramfs", mount_flags, NULL) != 0) {
-- die("mount of /tmp failed: %s\n",
-- strerror(errno));
-+ if (mount("testing", "/tmp", fstype, mount_flags, mount_options) != 0) {
-+ die("mount of %s with options '%s' on /tmp failed: %s\n",
-+ fstype,
-+ mount_options? mount_options : "",
-+ strerror(errno));
- }
-
- create_and_enter_userns();
-@@ -181,62 +228,127 @@ bool test_unpriv_remount(int mount_flags, int remount_flags, int invalid_flags)
-
- static bool test_unpriv_remount_simple(int mount_flags)
- {
-- return test_unpriv_remount(mount_flags, mount_flags, 0);
-+ return test_unpriv_remount("ramfs", NULL, mount_flags, mount_flags, 0);
- }
-
- static bool test_unpriv_remount_atime(int mount_flags, int invalid_flags)
- {
-- return test_unpriv_remount(mount_flags, mount_flags, invalid_flags);
-+ return test_unpriv_remount("ramfs", NULL, mount_flags, mount_flags,
-+ invalid_flags);
-+}
-+
-+static bool test_priv_mount_unpriv_remount(void)
-+{
-+ pid_t child;
-+ int ret;
-+ const char *orig_path = "/dev";
-+ const char *dest_path = "/tmp";
-+ int orig_mnt_flags, remount_mnt_flags;
-+
-+ child = fork();
-+ if (child == -1) {
-+ die("fork failed: %s\n",
-+ strerror(errno));
-+ }
-+ if (child != 0) { /* parent */
-+ pid_t pid;
-+ int status;
-+ pid = waitpid(child, &status, 0);
-+ if (pid == -1) {
-+ die("waitpid failed: %s\n",
-+ strerror(errno));
-+ }
-+ if (pid != child) {
-+ die("waited for %d got %d\n",
-+ child, pid);
-+ }
-+ if (!WIFEXITED(status)) {
-+ die("child did not terminate cleanly\n");
-+ }
-+ return WEXITSTATUS(status) == EXIT_SUCCESS ? true : false;
-+ }
-+
-+ orig_mnt_flags = read_mnt_flags(orig_path);
-+
-+ create_and_enter_userns();
-+ ret = unshare(CLONE_NEWNS);
-+ if (ret != 0) {
-+ die("unshare(CLONE_NEWNS) failed: %s\n",
-+ strerror(errno));
-+ }
-+
-+ ret = mount(orig_path, dest_path, "bind", MS_BIND | MS_REC, NULL);
-+ if (ret != 0) {
-+ die("recursive bind mount of %s onto %s failed: %s\n",
-+ orig_path, dest_path, strerror(errno));
-+ }
-+
-+ ret = mount(dest_path, dest_path, "none",
-+ MS_REMOUNT | MS_BIND | orig_mnt_flags , NULL);
-+ if (ret != 0) {
-+ /* system("cat /proc/self/mounts"); */
-+ die("remount of /tmp failed: %s\n",
-+ strerror(errno));
-+ }
-+
-+ remount_mnt_flags = read_mnt_flags(dest_path);
-+ if (orig_mnt_flags != remount_mnt_flags) {
-+ die("Mount flags unexpectedly changed during remount of %s originally mounted on %s\n",
-+ dest_path, orig_path);
-+ }
-+ exit(EXIT_SUCCESS);
- }
-
- int main(int argc, char **argv)
- {
-- if (!test_unpriv_remount_simple(MS_RDONLY|MS_NODEV)) {
-+ if (!test_unpriv_remount_simple(MS_RDONLY)) {
- die("MS_RDONLY malfunctions\n");
- }
-- if (!test_unpriv_remount_simple(MS_NODEV)) {
-+ if (!test_unpriv_remount("devpts", "newinstance", MS_NODEV, MS_NODEV, 0)) {
- die("MS_NODEV malfunctions\n");
- }
-- if (!test_unpriv_remount_simple(MS_NOSUID|MS_NODEV)) {
-+ if (!test_unpriv_remount_simple(MS_NOSUID)) {
- die("MS_NOSUID malfunctions\n");
- }
-- if (!test_unpriv_remount_simple(MS_NOEXEC|MS_NODEV)) {
-+ if (!test_unpriv_remount_simple(MS_NOEXEC)) {
- die("MS_NOEXEC malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODEV,
-- MS_NOATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_RELATIME,
-+ MS_NOATIME))
- {
- die("MS_RELATIME malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODEV,
-- MS_NOATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_STRICTATIME,
-+ MS_NOATIME))
- {
- die("MS_STRICTATIME malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODEV,
-- MS_STRICTATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_NOATIME,
-+ MS_STRICTATIME))
- {
-- die("MS_RELATIME malfunctions\n");
-+ die("MS_NOATIME malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODIRATIME|MS_NODEV,
-- MS_NOATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODIRATIME,
-+ MS_NOATIME))
- {
-- die("MS_RELATIME malfunctions\n");
-+ die("MS_RELATIME|MS_NODIRATIME malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODIRATIME|MS_NODEV,
-- MS_NOATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODIRATIME,
-+ MS_NOATIME))
- {
-- die("MS_RELATIME malfunctions\n");
-+ die("MS_STRICTATIME|MS_NODIRATIME malfunctions\n");
- }
-- if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODIRATIME|MS_NODEV,
-- MS_STRICTATIME|MS_NODEV))
-+ if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODIRATIME,
-+ MS_STRICTATIME))
- {
-- die("MS_RELATIME malfunctions\n");
-+ die("MS_NOATIME|MS_DIRATIME malfunctions\n");
- }
-- if (!test_unpriv_remount(MS_STRICTATIME|MS_NODEV, MS_NODEV,
-- MS_NOATIME|MS_NODEV))
-+ if (!test_unpriv_remount("ramfs", NULL, MS_STRICTATIME, 0, MS_NOATIME))
- {
- die("Default atime malfunctions\n");
- }
-+ if (!test_priv_mount_unpriv_remount()) {
-+ die("Mount flags unexpectedly changed after remount\n");
-+ }
- return EXIT_SUCCESS;
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/no-pcspkr-modalias.patch b/freed-ora/current/master/no-pcspkr-modalias.patch
index a258676c3..28008094d 100644
--- a/freed-ora/current/master/no-pcspkr-modalias.patch
+++ b/freed-ora/current/master/no-pcspkr-modalias.patch
@@ -9,7 +9,7 @@ Upstream-status: Fedora mustard
1 file changed, 1 deletion(-)
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
-index 674a2cfc3c0e..9a2807227c69 100644
+index 72b1fc3ab910..86907eaa4883 100644
--- a/drivers/input/misc/pcspkr.c
+++ b/drivers/input/misc/pcspkr.c
@@ -23,7 +23,6 @@
diff --git a/freed-ora/current/master/patch-3.18-gnu-3.19-rc6-gnu.xz.sign b/freed-ora/current/master/patch-3.18-gnu-3.19-rc6-gnu.xz.sign
new file mode 100644
index 000000000..d8d862e25
--- /dev/null
+++ b/freed-ora/current/master/patch-3.18-gnu-3.19-rc6-gnu.xz.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iEYEABECAAYFAlTO44cACgkQvLfPh359R6ekoACfaT4HcqJ07j1M7D0S1IsyKpVt
+vNsAoIK98NpUgkTS5p6qX+KX6jtIS89h
+=qY1V
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/master/pinctrl-pinctrl-single-must-be-initialized-early.patch b/freed-ora/current/master/pinctrl-pinctrl-single-must-be-initialized-early.patch
index 765ec1d3d..5aa4bd22f 100644
--- a/freed-ora/current/master/pinctrl-pinctrl-single-must-be-initialized-early.patch
+++ b/freed-ora/current/master/pinctrl-pinctrl-single-must-be-initialized-early.patch
@@ -10,10 +10,10 @@ exercise left to the reader.
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
-index fb94b772ad62..99668ad01b54 100644
+index 69e84427f913..f21cf4291476 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
-@@ -2026,7 +2026,17 @@ static struct platform_driver pcs_driver = {
+@@ -2025,7 +2025,17 @@ static struct platform_driver pcs_driver = {
#endif
};
diff --git a/freed-ora/current/master/powerpc-powernv-force-all-CPUs-to-be-bootable.patch b/freed-ora/current/master/powerpc-powernv-force-all-CPUs-to-be-bootable.patch
deleted file mode 100644
index f98ac878d..000000000
--- a/freed-ora/current/master/powerpc-powernv-force-all-CPUs-to-be-bootable.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From: Greg Kurz <gkurz@linux.vnet.ibm.com>
-Date: Fri, 12 Dec 2014 12:37:40 +0100
-Subject: [PATCH] powerpc/powernv: force all CPUs to be bootable
-
-The subcore logic needs all the CPUs declared in the DT to be bootable,
-otherwise the kernel hangs at boot time. Since subcore support starts
-with POWER8, we can keep the current behaviour for older CPUs.
-
-Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
----
- arch/powerpc/platforms/powernv/smp.c | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c
-index 4753958cd509..44ecd0925f56 100644
---- a/arch/powerpc/platforms/powernv/smp.c
-+++ b/arch/powerpc/platforms/powernv/smp.c
-@@ -185,13 +185,24 @@ static void pnv_smp_cpu_kill_self(void)
-
- #endif /* CONFIG_HOTPLUG_CPU */
-
-+static int pnv_cpu_bootable(unsigned int nr)
-+{
-+ /* Starting with POWER8, all CPUs need to be booted to avoid hangs
-+ * during subcore init.
-+ */
-+ if (cpu_has_feature(CPU_FTR_ARCH_207S))
-+ return 1;
-+
-+ return smp_generic_cpu_bootable(nr);
-+}
-+
- static struct smp_ops_t pnv_smp_ops = {
- .message_pass = smp_muxed_ipi_message_pass,
- .cause_ipi = NULL, /* Filled at runtime by xics_smp_probe() */
- .probe = xics_smp_probe,
- .kick_cpu = pnv_smp_kick_cpu,
- .setup_cpu = pnv_smp_setup_cpu,
-- .cpu_bootable = smp_generic_cpu_bootable,
-+ .cpu_bootable = pnv_cpu_bootable,
- #ifdef CONFIG_HOTPLUG_CPU
- .cpu_disable = pnv_smp_cpu_disable,
- .cpu_die = generic_cpu_die,
---
-2.1.0
-
diff --git a/freed-ora/current/master/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch b/freed-ora/current/master/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
deleted file mode 100644
index 86870bb41..000000000
--- a/freed-ora/current/master/samsung-laptop-Add-broken-acpi-video-quirk-for-NC210.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 2 Jun 2014 17:40:59 +0200
-Subject: [PATCH] samsung-laptop: Add broken-acpi-video quirk for NC210/NC110
-
-Reported (and tested) here:
-https://bugzilla.redhat.com/show_bug.cgi?id=861573
-
-Bugzilla: 861573
-Upstream-status: Waiting for feedback from reporter
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/platform/x86/samsung-laptop.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
-index ff765d8e1a09..864290243e46 100644
---- a/drivers/platform/x86/samsung-laptop.c
-+++ b/drivers/platform/x86/samsung-laptop.c
-@@ -1578,6 +1578,16 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
- },
- .driver_data = &samsung_np740u3e,
- },
-+ {
-+ .callback = samsung_dmi_matched,
-+ .ident = "NC210",
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "NC210/NC110"),
-+ DMI_MATCH(DMI_BOARD_NAME, "NC210/NC110"),
-+ },
-+ .driver_data = &samsung_broken_acpi_video,
-+ },
- { },
- };
- MODULE_DEVICE_TABLE(dmi, samsung_dmi_table);
---
-2.1.0
-
diff --git a/freed-ora/current/master/samsung-laptop-Add-use_native_backlight-quirk-and-en.patch b/freed-ora/current/master/samsung-laptop-Add-use_native_backlight-quirk-and-en.patch
new file mode 100644
index 000000000..39aa5fffa
--- /dev/null
+++ b/freed-ora/current/master/samsung-laptop-Add-use_native_backlight-quirk-and-en.patch
@@ -0,0 +1,107 @@
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Fri, 9 Jan 2015 14:51:21 +0100
+Subject: [PATCH] samsung-laptop: Add use_native_backlight quirk, and enable it
+ on some models
+
+Since kernel 3.14 the backlight control has been broken on various Samsung
+Atom based netbooks. This has been bisected and this problem happens since
+commit b35684b8fa94 ("drm/i915: do full backlight setup at enable time")
+
+This has been reported and discussed in detail here:
+http://lists.freedesktop.org/archives/intel-gfx/2014-July/049395.html
+
+Unfortunately no-one has been able to fix this. This only affects Samsung
+Atom netbooks, and the Linux kernel and the BIOS of those laptops have never
+worked well together. All affected laptops already have a quirk to avoid using
+the standard acpi-video interface and instead use the samsung specific SABI
+interface which samsung-laptop uses. It seems that recent fixes to the i915
+driver have also broken backlight control through the SABI interface.
+
+The intel_backlight driver OTOH works fine, and also allows for finer grained
+backlight control. So add a new use_native_backlight quirk, and replace the
+broken_acpi_video quirk with this quirk for affected models. This new quirk
+disables acpi-video as before and also stops samsung-laptop from registering
+the SABI based samsung_laptop backlight interface, leaving only the working
+intel_backlight interface.
+
+This commit enables this new quirk for 3 models which are known to be affected,
+chances are that it needs to be used on other models too.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1094948 # N145P
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1115713 # N250P
+Reported-by: Bertrik Sikken <bertrik@sikken.nl> # N150P
+Cc: stable@vger.kernel.org # 3.16
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/platform/x86/samsung-laptop.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
+index ff765d8e1a09..ce364a41842a 100644
+--- a/drivers/platform/x86/samsung-laptop.c
++++ b/drivers/platform/x86/samsung-laptop.c
+@@ -353,6 +353,7 @@ struct samsung_quirks {
+ bool broken_acpi_video;
+ bool four_kbd_backlight_levels;
+ bool enable_kbd_backlight;
++ bool use_native_backlight;
+ };
+
+ static struct samsung_quirks samsung_unknown = {};
+@@ -361,6 +362,10 @@ static struct samsung_quirks samsung_broken_acpi_video = {
+ .broken_acpi_video = true,
+ };
+
++static struct samsung_quirks samsung_use_native_backlight = {
++ .use_native_backlight = true,
++};
++
+ static struct samsung_quirks samsung_np740u3e = {
+ .four_kbd_backlight_levels = true,
+ .enable_kbd_backlight = true,
+@@ -1507,7 +1512,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "N150P"),
+ DMI_MATCH(DMI_BOARD_NAME, "N150P"),
+ },
+- .driver_data = &samsung_broken_acpi_video,
++ .driver_data = &samsung_use_native_backlight,
+ },
+ {
+ .callback = samsung_dmi_matched,
+@@ -1517,7 +1522,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "N145P/N250P/N260P"),
+ DMI_MATCH(DMI_BOARD_NAME, "N145P/N250P/N260P"),
+ },
+- .driver_data = &samsung_broken_acpi_video,
++ .driver_data = &samsung_use_native_backlight,
+ },
+ {
+ .callback = samsung_dmi_matched,
+@@ -1557,7 +1562,7 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "N250P"),
+ DMI_MATCH(DMI_BOARD_NAME, "N250P"),
+ },
+- .driver_data = &samsung_broken_acpi_video,
++ .driver_data = &samsung_use_native_backlight,
+ },
+ {
+ .callback = samsung_dmi_matched,
+@@ -1616,6 +1621,15 @@ static int __init samsung_init(void)
+ pr_info("Disabling ACPI video driver\n");
+ acpi_video_unregister();
+ }
++
++ if (samsung->quirks->use_native_backlight) {
++ pr_info("Using native backlight driver\n");
++ /* Tell acpi-video to not handle the backlight */
++ acpi_video_dmi_promote_vendor();
++ acpi_video_unregister();
++ /* And also do not handle it ourselves */
++ samsung->handle_backlight = false;
++ }
+ #endif
+
+ ret = samsung_platform_init(samsung);
+--
+2.1.0
+
diff --git a/freed-ora/current/master/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch b/freed-ora/current/master/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
index 62530050f..f635da21a 100644
--- a/freed-ora/current/master/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
+++ b/freed-ora/current/master/scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
@@ -9,10 +9,10 @@ Upstream-status: Fedora mustard (might be worth dropping...)
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index cfba74cd8e8b..5127df3cc064 100644
+index 399516925d80..2ac9a156da39 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
-@@ -2768,13 +2768,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
+@@ -2750,13 +2750,18 @@ static int sd_try_extended_inquiry(struct scsi_device *sdp)
static int sd_revalidate_disk(struct gendisk *disk)
{
struct scsi_disk *sdkp = scsi_disk(disk);
diff --git a/freed-ora/current/master/silence-fbcon-logo.patch b/freed-ora/current/master/silence-fbcon-logo.patch
index 654927e41..baeb94e5c 100644
--- a/freed-ora/current/master/silence-fbcon-logo.patch
+++ b/freed-ora/current/master/silence-fbcon-logo.patch
@@ -9,7 +9,7 @@ Upstream-status: Fedora mustard
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
-index eb976ee3a02f..275f20a643f4 100644
+index ea437245562e..eefa9c45d2e1 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/console/fbcon.c
@@ -637,13 +637,15 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
@@ -47,7 +47,7 @@ index eb976ee3a02f..275f20a643f4 100644
+
+early_param("quiet", quiet_logo);
+
- module_init(fb_console_init);
+ fs_initcall(fb_console_init);
#ifdef MODULE
--
diff --git a/freed-ora/current/master/sources b/freed-ora/current/master/sources
index ef470eb6a..f3641a5d0 100644
--- a/freed-ora/current/master/sources
+++ b/freed-ora/current/master/sources
@@ -1,3 +1,3 @@
b3c2a6827813398dde7e8a2d4e02a2c3 linux-libre-3.18-gnu.tar.xz
813ccb96f0b379d656e57442c2587ca3 perf-man-3.18.tar.gz
-82864000fde42252dd5e80cceb971479 patch-3.18.1.xz
+d834a0fbc5f971dc309776bef42c0b09 patch-3.18-gnu-3.19-rc6-gnu.xz
diff --git a/freed-ora/current/master/uapi-linux-target_core_user.h-fix-headers_install.sh.patch b/freed-ora/current/master/uapi-linux-target_core_user.h-fix-headers_install.sh.patch
deleted file mode 100644
index 516d10f8a..000000000
--- a/freed-ora/current/master/uapi-linux-target_core_user.h-fix-headers_install.sh.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: Kyle McMartin <kyle@redhat.com>
-Date: Thu, 18 Dec 2014 12:57:14 -0500
-Subject: [PATCH] uapi/linux/target_core_user.h: fix headers_install.sh badness
-
-scripts/headers_install.sh will transform __packed to
-__attribute__((packed)), so the #ifndef is not necessary.
-(and, in fact, it's problematic, because we'll end up with the header
- containing:
-#ifndef __attribute__((packed))
-#define __attribu...
-and so forth.)
-
-Cc: stable@vger.kernel.org # 3.18
-Signed-off-by: Kyle McMartin <kyle@redhat.com>
----
- include/uapi/linux/target_core_user.h | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/include/uapi/linux/target_core_user.h b/include/uapi/linux/target_core_user.h
-index 7dcfbe6771b1..b483d1909d3e 100644
---- a/include/uapi/linux/target_core_user.h
-+++ b/include/uapi/linux/target_core_user.h
-@@ -6,10 +6,6 @@
- #include <linux/types.h>
- #include <linux/uio.h>
-
--#ifndef __packed
--#define __packed __attribute__((packed))
--#endif
--
- #define TCMU_VERSION "1.0"
-
- /*
---
-2.1.0
-
diff --git a/freed-ora/current/master/uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch b/freed-ora/current/master/uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch
deleted file mode 100644
index 66e28232a..000000000
--- a/freed-ora/current/master/uas-Add-US_FL_NO_ATA_1X-for-Seagate-devices-with-usb.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Fri, 5 Dec 2014 11:06:36 +0100
-Subject: [PATCH] uas: Add US_FL_NO_ATA_1X for Seagate devices with usb-id
- 0bc2:a013
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This is yet another Seagate device which needs the US_FL_NO_ATA_1X quirk
-
-Reported-by: Marcin ZajÄ…czkowski <mszpak@wp.pl>
-Cc: stable@vger.kernel.org # 3.16
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/usb/storage/unusual_uas.h | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
-index 18a283d6de1c..2918376a1979 100644
---- a/drivers/usb/storage/unusual_uas.h
-+++ b/drivers/usb/storage/unusual_uas.h
-@@ -68,6 +68,13 @@ UNUSUAL_DEV(0x0bc2, 0xa003, 0x0000, 0x9999,
- USB_SC_DEVICE, USB_PR_DEVICE, NULL,
- US_FL_NO_ATA_1X),
-
-+/* Reported-by: Marcin ZajÄ…czkowski <mszpak@wp.pl> */
-+UNUSUAL_DEV(0x0bc2, 0xa013, 0x0000, 0x9999,
-+ "Seagate",
-+ "Backup Plus",
-+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
-+ US_FL_NO_ATA_1X),
-+
- /* https://bbs.archlinux.org/viewtopic.php?id=183190 */
- UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999,
- "Seagate",
---
-2.1.0
-
diff --git a/freed-ora/current/master/uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch b/freed-ora/current/master/uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch
deleted file mode 100644
index e95a5c736..000000000
--- a/freed-ora/current/master/uas-Add-US_FL_NO_REPORT_OPCODES-for-JMicron-JMS566-w.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Mon, 8 Dec 2014 09:46:36 +0100
-Subject: [PATCH] uas: Add US_FL_NO_REPORT_OPCODES for JMicron JMS566 with
- usb-id 0bc2:a013
-
-Like the JMicron JMS567 enclosures with the JMS566 choke on report-opcodes,
-so avoid it.
-
-Tested-and-reported-by: Takeo Nakayama <javhera@gmx.com>
-Cc: stable@vger.kernel.org # 3.16
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/usb/storage/unusual_uas.h | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
-index 2918376a1979..2f0a3d35269a 100644
---- a/drivers/usb/storage/unusual_uas.h
-+++ b/drivers/usb/storage/unusual_uas.h
-@@ -111,6 +111,13 @@ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999,
- USB_SC_DEVICE, USB_PR_DEVICE, NULL,
- US_FL_NO_ATA_1X),
-
-+/* Reported-by: Takeo Nakayama <javhera@gmx.com> */
-+UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999,
-+ "JMicron",
-+ "JMS566",
-+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
-+ US_FL_NO_REPORT_OPCODES),
-+
- /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
- UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999,
- "Hitachi",
---
-2.1.0
-
diff --git a/freed-ora/current/master/uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch b/freed-ora/current/master/uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch
new file mode 100644
index 000000000..4141ab66e
--- /dev/null
+++ b/freed-ora/current/master/uas-Add-no-report-opcodes-quirk-for-Simpletech-devic.patch
@@ -0,0 +1,33 @@
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 12 Jan 2015 13:24:31 +0100
+Subject: [PATCH] uas: Add no-report-opcodes quirk for Simpletech devices with
+ id 4971:8017
+
+Like some other uas devices these devices hang when a report-opcodes scsi
+command is send to them.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1124119
+Cc: stable@vger.kernel.org # 3.16
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/usb/storage/unusual_uas.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
+index 6df4357d9ee3..dbc00e56c7f5 100644
+--- a/drivers/usb/storage/unusual_uas.h
++++ b/drivers/usb/storage/unusual_uas.h
+@@ -140,3 +140,10 @@ UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999,
+ "External HDD",
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_IGNORE_UAS),
++
++/* Reported-by: Richard Henderson <rth@redhat.com> */
++UNUSUAL_DEV(0x4971, 0x8017, 0x0000, 0x9999,
++ "SimpleTech",
++ "External HDD",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++ US_FL_NO_REPORT_OPCODES),
+--
+2.1.0
+
diff --git a/freed-ora/current/master/umount-Disallow-unprivileged-mount-force.patch b/freed-ora/current/master/umount-Disallow-unprivileged-mount-force.patch
deleted file mode 100644
index a57b2c927..000000000
--- a/freed-ora/current/master/umount-Disallow-unprivileged-mount-force.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Sat, 4 Oct 2014 14:44:03 -0700
-Subject: [PATCH] umount: Disallow unprivileged mount force
-
-Forced unmount affects not just the mount namespace but the underlying
-superblock as well. Restrict forced unmount to the global root user
-for now. Otherwise it becomes possible a user in a less privileged
-mount namespace to force the shutdown of a superblock of a filesystem
-in a more privileged mount namespace, allowing a DOS attack on root.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- fs/namespace.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/fs/namespace.c b/fs/namespace.c
-index 3a1a87dc33df..43b16af8af30 100644
---- a/fs/namespace.c
-+++ b/fs/namespace.c
-@@ -1544,6 +1544,9 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
- goto dput_and_out;
- if (mnt->mnt.mnt_flags & MNT_LOCKED)
- goto dput_and_out;
-+ retval = -EPERM;
-+ if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN))
-+ goto dput_and_out;
-
- retval = do_umount(mnt, flags);
- dput_and_out:
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch b/freed-ora/current/master/userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch
deleted file mode 100644
index a55381706..000000000
--- a/freed-ora/current/master/userns-Add-a-knob-to-disable-setgroups-on-a-per-user.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Tue, 2 Dec 2014 12:27:26 -0600
-Subject: [PATCH] userns: Add a knob to disable setgroups on a per user
- namespace basis
-
-- Expose the knob to user space through a proc file /proc/<pid>/setgroups
-
- A value of "deny" means the setgroups system call is disabled in the
- current processes user namespace and can not be enabled in the
- future in this user namespace.
-
- A value of "allow" means the segtoups system call is enabled.
-
-- Descendant user namespaces inherit the value of setgroups from
- their parents.
-
-- A proc file is used (instead of a sysctl) as sysctls currently do
- not allow checking the permissions at open time.
-
-- Writing to the proc file is restricted to before the gid_map
- for the user namespace is set.
-
- This ensures that disabling setgroups at a user namespace
- level will never remove the ability to call setgroups
- from a process that already has that ability.
-
- A process may opt in to the setgroups disable for itself by
- creating, entering and configuring a user namespace or by calling
- setns on an existing user namespace with setgroups disabled.
- Processes without privileges already can not call setgroups so this
- is a noop. Prodcess with privilege become processes without
- privilege when entering a user namespace and as with any other path
- to dropping privilege they would not have the ability to call
- setgroups. So this remains within the bounds of what is possible
- without a knob to disable setgroups permanently in a user namespace.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- fs/proc/base.c | 53 ++++++++++++++++++++++++++
- include/linux/user_namespace.h | 7 ++++
- kernel/user.c | 1 +
- kernel/user_namespace.c | 85 ++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 146 insertions(+)
-
-diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 772efa45a452..7dc3ea89ef1a 100644
---- a/fs/proc/base.c
-+++ b/fs/proc/base.c
-@@ -2464,6 +2464,57 @@ static const struct file_operations proc_projid_map_operations = {
- .llseek = seq_lseek,
- .release = proc_id_map_release,
- };
-+
-+static int proc_setgroups_open(struct inode *inode, struct file *file)
-+{
-+ struct user_namespace *ns = NULL;
-+ struct task_struct *task;
-+ int ret;
-+
-+ ret = -ESRCH;
-+ task = get_proc_task(inode);
-+ if (task) {
-+ rcu_read_lock();
-+ ns = get_user_ns(task_cred_xxx(task, user_ns));
-+ rcu_read_unlock();
-+ put_task_struct(task);
-+ }
-+ if (!ns)
-+ goto err;
-+
-+ if (file->f_mode & FMODE_WRITE) {
-+ ret = -EACCES;
-+ if (!ns_capable(ns, CAP_SYS_ADMIN))
-+ goto err_put_ns;
-+ }
-+
-+ ret = single_open(file, &proc_setgroups_show, ns);
-+ if (ret)
-+ goto err_put_ns;
-+
-+ return 0;
-+err_put_ns:
-+ put_user_ns(ns);
-+err:
-+ return ret;
-+}
-+
-+static int proc_setgroups_release(struct inode *inode, struct file *file)
-+{
-+ struct seq_file *seq = file->private_data;
-+ struct user_namespace *ns = seq->private;
-+ int ret = single_release(inode, file);
-+ put_user_ns(ns);
-+ return ret;
-+}
-+
-+static const struct file_operations proc_setgroups_operations = {
-+ .open = proc_setgroups_open,
-+ .write = proc_setgroups_write,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = proc_setgroups_release,
-+};
- #endif /* CONFIG_USER_NS */
-
- static int proc_pid_personality(struct seq_file *m, struct pid_namespace *ns,
-@@ -2572,6 +2623,7 @@ static const struct pid_entry tgid_base_stuff[] = {
- REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations),
- REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
- REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
-+ REG("setgroups", S_IRUGO|S_IWUSR, proc_setgroups_operations),
- #endif
- #ifdef CONFIG_CHECKPOINT_RESTORE
- REG("timers", S_IRUGO, proc_timers_operations),
-@@ -2913,6 +2965,7 @@ static const struct pid_entry tid_base_stuff[] = {
- REG("uid_map", S_IRUGO|S_IWUSR, proc_uid_map_operations),
- REG("gid_map", S_IRUGO|S_IWUSR, proc_gid_map_operations),
- REG("projid_map", S_IRUGO|S_IWUSR, proc_projid_map_operations),
-+ REG("setgroups", S_IRUGO|S_IWUSR, proc_setgroups_operations),
- #endif
- };
-
-diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index 8d493083486a..9f3579ff543d 100644
---- a/include/linux/user_namespace.h
-+++ b/include/linux/user_namespace.h
-@@ -17,6 +17,10 @@ struct uid_gid_map { /* 64 bytes -- 1 cache line */
- } extent[UID_GID_MAP_MAX_EXTENTS];
- };
-
-+#define USERNS_SETGROUPS_ALLOWED 1UL
-+
-+#define USERNS_INIT_FLAGS USERNS_SETGROUPS_ALLOWED
-+
- struct user_namespace {
- struct uid_gid_map uid_map;
- struct uid_gid_map gid_map;
-@@ -27,6 +31,7 @@ struct user_namespace {
- kuid_t owner;
- kgid_t group;
- unsigned int proc_inum;
-+ unsigned long flags;
-
- /* Register of per-UID persistent keyrings for this namespace */
- #ifdef CONFIG_PERSISTENT_KEYRINGS
-@@ -63,6 +68,8 @@ extern const struct seq_operations proc_projid_seq_operations;
- extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *);
- extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *);
- extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *);
-+extern ssize_t proc_setgroups_write(struct file *, const char __user *, size_t, loff_t *);
-+extern int proc_setgroups_show(struct seq_file *m, void *v);
- extern bool userns_may_setgroups(const struct user_namespace *ns);
- #else
-
-diff --git a/kernel/user.c b/kernel/user.c
-index 4efa39350e44..2d09940c9632 100644
---- a/kernel/user.c
-+++ b/kernel/user.c
-@@ -51,6 +51,7 @@ struct user_namespace init_user_ns = {
- .owner = GLOBAL_ROOT_UID,
- .group = GLOBAL_ROOT_GID,
- .proc_inum = PROC_USER_INIT_INO,
-+ .flags = USERNS_INIT_FLAGS,
- #ifdef CONFIG_PERSISTENT_KEYRINGS
- .persistent_keyring_register_sem =
- __RWSEM_INITIALIZER(init_user_ns.persistent_keyring_register_sem),
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 44a555ac6104..6e80f4c1322b 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -100,6 +100,11 @@ int create_user_ns(struct cred *new)
- ns->owner = owner;
- ns->group = group;
-
-+ /* Inherit USERNS_SETGROUPS_ALLOWED from our parent */
-+ mutex_lock(&userns_state_mutex);
-+ ns->flags = parent_ns->flags;
-+ mutex_unlock(&userns_state_mutex);
-+
- set_cred_user_ns(new, ns);
-
- #ifdef CONFIG_PERSISTENT_KEYRINGS
-@@ -839,6 +844,84 @@ static bool new_idmap_permitted(const struct file *file,
- return false;
- }
-
-+int proc_setgroups_show(struct seq_file *seq, void *v)
-+{
-+ struct user_namespace *ns = seq->private;
-+ unsigned long userns_flags = ACCESS_ONCE(ns->flags);
-+
-+ seq_printf(seq, "%s\n",
-+ (userns_flags & USERNS_SETGROUPS_ALLOWED) ?
-+ "allow" : "deny");
-+ return 0;
-+}
-+
-+ssize_t proc_setgroups_write(struct file *file, const char __user *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ struct seq_file *seq = file->private_data;
-+ struct user_namespace *ns = seq->private;
-+ char kbuf[8], *pos;
-+ bool setgroups_allowed;
-+ ssize_t ret;
-+
-+ /* Only allow a very narrow range of strings to be written */
-+ ret = -EINVAL;
-+ if ((*ppos != 0) || (count >= sizeof(kbuf)))
-+ goto out;
-+
-+ /* What was written? */
-+ ret = -EFAULT;
-+ if (copy_from_user(kbuf, buf, count))
-+ goto out;
-+ kbuf[count] = '\0';
-+ pos = kbuf;
-+
-+ /* What is being requested? */
-+ ret = -EINVAL;
-+ if (strncmp(pos, "allow", 5) == 0) {
-+ pos += 5;
-+ setgroups_allowed = true;
-+ }
-+ else if (strncmp(pos, "deny", 4) == 0) {
-+ pos += 4;
-+ setgroups_allowed = false;
-+ }
-+ else
-+ goto out;
-+
-+ /* Verify there is not trailing junk on the line */
-+ pos = skip_spaces(pos);
-+ if (*pos != '\0')
-+ goto out;
-+
-+ ret = -EPERM;
-+ mutex_lock(&userns_state_mutex);
-+ if (setgroups_allowed) {
-+ /* Enabling setgroups after setgroups has been disabled
-+ * is not allowed.
-+ */
-+ if (!(ns->flags & USERNS_SETGROUPS_ALLOWED))
-+ goto out_unlock;
-+ } else {
-+ /* Permanently disabling setgroups after setgroups has
-+ * been enabled by writing the gid_map is not allowed.
-+ */
-+ if (ns->gid_map.nr_extents != 0)
-+ goto out_unlock;
-+ ns->flags &= ~USERNS_SETGROUPS_ALLOWED;
-+ }
-+ mutex_unlock(&userns_state_mutex);
-+
-+ /* Report a successful write */
-+ *ppos = count;
-+ ret = count;
-+out:
-+ return ret;
-+out_unlock:
-+ mutex_unlock(&userns_state_mutex);
-+ goto out;
-+}
-+
- bool userns_may_setgroups(const struct user_namespace *ns)
- {
- bool allowed;
-@@ -848,6 +931,8 @@ bool userns_may_setgroups(const struct user_namespace *ns)
- * the user namespace has been established.
- */
- allowed = ns->gid_map.nr_extents != 0;
-+ /* Is setgroups allowed? */
-+ allowed = allowed && (ns->flags & USERNS_SETGROUPS_ALLOWED);
- mutex_unlock(&userns_state_mutex);
-
- return allowed;
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Allow-setting-gid_maps-without-privilege-when.patch b/freed-ora/current/master/userns-Allow-setting-gid_maps-without-privilege-when.patch
deleted file mode 100644
index 97d3fe69a..000000000
--- a/freed-ora/current/master/userns-Allow-setting-gid_maps-without-privilege-when.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 19:36:04 -0600
-Subject: [PATCH] userns: Allow setting gid_maps without privilege when
- setgroups is disabled
-
-Now that setgroups can be disabled and not reenabled, setting gid_map
-without privielge can now be enabled when setgroups is disabled.
-
-This restores most of the functionality that was lost when unprivileged
-setting of gid_map was removed. Applications that use this functionality
-will need to check to see if they use setgroups or init_groups, and if they
-don't they can be fixed by simply disabling setgroups before writing to
-gid_map.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 6e80f4c1322b..a2e37c5d2f63 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -826,6 +826,11 @@ static bool new_idmap_permitted(const struct file *file,
- kuid_t uid = make_kuid(ns->parent, id);
- if (uid_eq(uid, cred->euid))
- return true;
-+ } else if (cap_setid == CAP_SETGID) {
-+ kgid_t gid = make_kgid(ns->parent, id);
-+ if (!(ns->flags & USERNS_SETGROUPS_ALLOWED) &&
-+ gid_eq(gid, cred->egid))
-+ return true;
- }
- }
-
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch b/freed-ora/current/master/userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch
deleted file mode 100644
index 50830c30e..000000000
--- a/freed-ora/current/master/userns-Check-euid-no-fsuid-when-establishing-an-unpr.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 18:26:30 -0600
-Subject: [PATCH] userns: Check euid no fsuid when establishing an unprivileged
- uid mapping
-
-setresuid allows the euid to be set to any of uid, euid, suid, and
-fsuid. Therefor it is safe to allow an unprivileged user to map
-their euid and use CAP_SETUID privileged with exactly that uid,
-as no new credentials can be obtained.
-
-I can not find a combination of existing system calls that allows setting
-uid, euid, suid, and fsuid from the fsuid making the previous use
-of fsuid for allowing unprivileged mappings a bug.
-
-This is part of a fix for CVE-2014-8989.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 1ce6d67c07b7..9451b12a9b6c 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -819,7 +819,7 @@ static bool new_idmap_permitted(const struct file *file,
- u32 id = new_map->extent[0].lower_first;
- if (cap_setid == CAP_SETUID) {
- kuid_t uid = make_kuid(ns->parent, id);
-- if (uid_eq(uid, file->f_cred->fsuid))
-+ if (uid_eq(uid, file->f_cred->euid))
- return true;
- }
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Document-what-the-invariant-required-for-safe.patch b/freed-ora/current/master/userns-Document-what-the-invariant-required-for-safe.patch
deleted file mode 100644
index c364b2bce..000000000
--- a/freed-ora/current/master/userns-Document-what-the-invariant-required-for-safe.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 17:51:47 -0600
-Subject: [PATCH] userns: Document what the invariant required for safe
- unprivileged mappings.
-
-The rule is simple. Don't allow anything that wouldn't be allowed
-without unprivileged mappings.
-
-It was previously overlooked that establishing gid mappings would
-allow dropping groups and potentially gaining permission to files and
-directories that had lesser permissions for a specific group than for
-all other users.
-
-This is the rule needed to fix CVE-2014-8989 and prevent any other
-security issues with new_idmap_permitted.
-
-The reason for this rule is that the unix permission model is old and
-there are programs out there somewhere that take advantage of every
-little corner of it. So allowing a uid or gid mapping to be
-established without privielge that would allow anything that would not
-be allowed without that mapping will result in expectations from some
-code somewhere being violated. Violated expectations about the
-behavior of the OS is a long way to say a security issue.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index aa312b0dc3ec..b99c862a2e3f 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -812,7 +812,9 @@ static bool new_idmap_permitted(const struct file *file,
- struct user_namespace *ns, int cap_setid,
- struct uid_gid_map *new_map)
- {
-- /* Allow mapping to your own filesystem ids */
-+ /* Don't allow mappings that would allow anything that wouldn't
-+ * be allowed without the establishment of unprivileged mappings.
-+ */
- if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1)) {
- u32 id = new_map->extent[0].lower_first;
- if (cap_setid == CAP_SETUID) {
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch b/freed-ora/current/master/userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch
deleted file mode 100644
index 81217d2a5..000000000
--- a/freed-ora/current/master/userns-Don-t-allow-setgroups-until-a-gid-mapping-has.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 18:01:11 -0600
-Subject: [PATCH] userns: Don't allow setgroups until a gid mapping has been
- setablished
-
-setgroups is unique in not needing a valid mapping before it can be called,
-in the case of setgroups(0, NULL) which drops all supplemental groups.
-
-The design of the user namespace assumes that CAP_SETGID can not actually
-be used until a gid mapping is established. Therefore add a helper function
-to see if the user namespace gid mapping has been established and call
-that function in the setgroups permission check.
-
-This is part of the fix for CVE-2014-8989, being able to drop groups
-without privilege using user namespaces.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- include/linux/user_namespace.h | 5 +++++
- kernel/groups.c | 4 +++-
- kernel/user_namespace.c | 14 ++++++++++++++
- 3 files changed, 22 insertions(+), 1 deletion(-)
-
-diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index e95372654f09..8d493083486a 100644
---- a/include/linux/user_namespace.h
-+++ b/include/linux/user_namespace.h
-@@ -63,6 +63,7 @@ extern const struct seq_operations proc_projid_seq_operations;
- extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *);
- extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *);
- extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *);
-+extern bool userns_may_setgroups(const struct user_namespace *ns);
- #else
-
- static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
-@@ -87,6 +88,10 @@ static inline void put_user_ns(struct user_namespace *ns)
- {
- }
-
-+static inline bool userns_may_setgroups(const struct user_namespace *ns)
-+{
-+ return true;
-+}
- #endif
-
- #endif /* _LINUX_USER_H */
-diff --git a/kernel/groups.c b/kernel/groups.c
-index 02d8a251c476..664411f171b5 100644
---- a/kernel/groups.c
-+++ b/kernel/groups.c
-@@ -6,6 +6,7 @@
- #include <linux/slab.h>
- #include <linux/security.h>
- #include <linux/syscalls.h>
-+#include <linux/user_namespace.h>
- #include <asm/uaccess.h>
-
- /* init to 2 - one for init_task, one to ensure it is never freed */
-@@ -217,7 +218,8 @@ bool may_setgroups(void)
- {
- struct user_namespace *user_ns = current_user_ns();
-
-- return ns_capable(user_ns, CAP_SETGID);
-+ return ns_capable(user_ns, CAP_SETGID) &&
-+ userns_may_setgroups(user_ns);
- }
-
- /*
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index b99c862a2e3f..27c8dab48c07 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -843,6 +843,20 @@ static bool new_idmap_permitted(const struct file *file,
- return false;
- }
-
-+bool userns_may_setgroups(const struct user_namespace *ns)
-+{
-+ bool allowed;
-+
-+ mutex_lock(&id_map_mutex);
-+ /* It is not safe to use setgroups until a gid mapping in
-+ * the user namespace has been established.
-+ */
-+ allowed = ns->gid_map.nr_extents != 0;
-+ mutex_unlock(&id_map_mutex);
-+
-+ return allowed;
-+}
-+
- static void *userns_get(struct task_struct *task)
- {
- struct user_namespace *user_ns;
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch b/freed-ora/current/master/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch
deleted file mode 100644
index b1d53828a..000000000
--- a/freed-ora/current/master/userns-Don-t-allow-unprivileged-creation-of-gid-mapp.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Fri, 5 Dec 2014 18:14:19 -0600
-Subject: [PATCH] userns: Don't allow unprivileged creation of gid mappings
-
-As any gid mapping will allow and must allow for backwards
-compatibility dropping groups don't allow any gid mappings to be
-established without CAP_SETGID in the parent user namespace.
-
-For a small class of applications this change breaks userspace
-and removes useful functionality. This small class of applications
-includes tools/testing/selftests/mount/unprivilged-remount-test.c
-
-Most of the removed functionality will be added back with the addition
-of a one way knob to disable setgroups. Once setgroups is disabled
-setting the gid_map becomes as safe as setting the uid_map.
-
-For more common applications that set the uid_map and the gid_map
-with privilege this change will have no affect.
-
-This is part of a fix for CVE-2014-8989.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 27c8dab48c07..1ce6d67c07b7 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -821,10 +821,6 @@ static bool new_idmap_permitted(const struct file *file,
- kuid_t uid = make_kuid(ns->parent, id);
- if (uid_eq(uid, file->f_cred->fsuid))
- return true;
-- } else if (cap_setid == CAP_SETGID) {
-- kgid_t gid = make_kgid(ns->parent, id);
-- if (gid_eq(gid, file->f_cred->fsgid))
-- return true;
- }
- }
-
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Only-allow-the-creator-of-the-userns-unprivil.patch b/freed-ora/current/master/userns-Only-allow-the-creator-of-the-userns-unprivil.patch
deleted file mode 100644
index 8381b14e3..000000000
--- a/freed-ora/current/master/userns-Only-allow-the-creator-of-the-userns-unprivil.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Wed, 26 Nov 2014 23:22:14 -0600
-Subject: [PATCH] userns: Only allow the creator of the userns unprivileged
- mappings
-
-If you did not create the user namespace and are allowed
-to write to uid_map or gid_map you should already have the necessary
-privilege in the parent user namespace to establish any mapping
-you want so this will not affect userspace in practice.
-
-Limiting unprivileged uid mapping establishment to the creator of the
-user namespace makes it easier to verify all credentials obtained with
-the uid mapping can be obtained without the uid mapping without
-privilege.
-
-Limiting unprivileged gid mapping establishment (which is temporarily
-absent) to the creator of the user namespace also ensures that the
-combination of uid and gid can already be obtained without privilege.
-
-This is part of the fix for CVE-2014-8989.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 9451b12a9b6c..1e34de2fbd60 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -812,14 +812,16 @@ static bool new_idmap_permitted(const struct file *file,
- struct user_namespace *ns, int cap_setid,
- struct uid_gid_map *new_map)
- {
-+ const struct cred *cred = file->f_cred;
- /* Don't allow mappings that would allow anything that wouldn't
- * be allowed without the establishment of unprivileged mappings.
- */
-- if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1)) {
-+ if ((new_map->nr_extents == 1) && (new_map->extent[0].count == 1) &&
-+ uid_eq(ns->owner, cred->euid)) {
- u32 id = new_map->extent[0].lower_first;
- if (cap_setid == CAP_SETUID) {
- kuid_t uid = make_kuid(ns->parent, id);
-- if (uid_eq(uid, file->f_cred->euid))
-+ if (uid_eq(uid, cred->euid))
- return true;
- }
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Rename-id_map_mutex-to-userns_state_mutex.patch b/freed-ora/current/master/userns-Rename-id_map_mutex-to-userns_state_mutex.patch
deleted file mode 100644
index ce6288ae6..000000000
--- a/freed-ora/current/master/userns-Rename-id_map_mutex-to-userns_state_mutex.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Tue, 9 Dec 2014 14:03:14 -0600
-Subject: [PATCH] userns: Rename id_map_mutex to userns_state_mutex
-
-Generalize id_map_mutex so it can be used for more state of a user namespace.
-
-Cc: stable@vger.kernel.org
-Reviewed-by: Andy Lutomirski <luto@amacapital.net>
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- kernel/user_namespace.c | 14 ++++++--------
- 1 file changed, 6 insertions(+), 8 deletions(-)
-
-diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index 1e34de2fbd60..44a555ac6104 100644
---- a/kernel/user_namespace.c
-+++ b/kernel/user_namespace.c
-@@ -24,6 +24,7 @@
- #include <linux/fs_struct.h>
-
- static struct kmem_cache *user_ns_cachep __read_mostly;
-+static DEFINE_MUTEX(userns_state_mutex);
-
- static bool new_idmap_permitted(const struct file *file,
- struct user_namespace *ns, int cap_setid,
-@@ -583,9 +584,6 @@ static bool mappings_overlap(struct uid_gid_map *new_map,
- return false;
- }
-
--
--static DEFINE_MUTEX(id_map_mutex);
--
- static ssize_t map_write(struct file *file, const char __user *buf,
- size_t count, loff_t *ppos,
- int cap_setid,
-@@ -602,7 +600,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
- ssize_t ret = -EINVAL;
-
- /*
-- * The id_map_mutex serializes all writes to any given map.
-+ * The userns_state_mutex serializes all writes to any given map.
- *
- * Any map is only ever written once.
- *
-@@ -620,7 +618,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
- * order and smp_rmb() is guaranteed that we don't have crazy
- * architectures returning stale data.
- */
-- mutex_lock(&id_map_mutex);
-+ mutex_lock(&userns_state_mutex);
-
- ret = -EPERM;
- /* Only allow one successful write to the map */
-@@ -750,7 +748,7 @@ static ssize_t map_write(struct file *file, const char __user *buf,
- *ppos = count;
- ret = count;
- out:
-- mutex_unlock(&id_map_mutex);
-+ mutex_unlock(&userns_state_mutex);
- if (page)
- free_page(page);
- return ret;
-@@ -845,12 +843,12 @@ bool userns_may_setgroups(const struct user_namespace *ns)
- {
- bool allowed;
-
-- mutex_lock(&id_map_mutex);
-+ mutex_lock(&userns_state_mutex);
- /* It is not safe to use setgroups until a gid mapping in
- * the user namespace has been established.
- */
- allowed = ns->gid_map.nr_extents != 0;
-- mutex_unlock(&id_map_mutex);
-+ mutex_unlock(&userns_state_mutex);
-
- return allowed;
- }
---
-2.1.0
-
diff --git a/freed-ora/current/master/userns-Unbreak-the-unprivileged-remount-tests.patch b/freed-ora/current/master/userns-Unbreak-the-unprivileged-remount-tests.patch
deleted file mode 100644
index 69edd2ed3..000000000
--- a/freed-ora/current/master/userns-Unbreak-the-unprivileged-remount-tests.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From: "Eric W. Biederman" <ebiederm@xmission.com>
-Date: Tue, 2 Dec 2014 13:56:30 -0600
-Subject: [PATCH] userns: Unbreak the unprivileged remount tests
-
-A security fix in caused the way the unprivileged remount tests were
-using user namespaces to break. Tweak the way user namespaces are
-being used so the test works again.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
----
- .../selftests/mount/unprivileged-remount-test.c | 32 ++++++++++++++++------
- 1 file changed, 24 insertions(+), 8 deletions(-)
-
-diff --git a/tools/testing/selftests/mount/unprivileged-remount-test.c b/tools/testing/selftests/mount/unprivileged-remount-test.c
-index 9669d375625a..517785052f1c 100644
---- a/tools/testing/selftests/mount/unprivileged-remount-test.c
-+++ b/tools/testing/selftests/mount/unprivileged-remount-test.c
-@@ -53,17 +53,14 @@ static void die(char *fmt, ...)
- exit(EXIT_FAILURE);
- }
-
--static void write_file(char *filename, char *fmt, ...)
-+static void vmaybe_write_file(bool enoent_ok, char *filename, char *fmt, va_list ap)
- {
- char buf[4096];
- int fd;
- ssize_t written;
- int buf_len;
-- va_list ap;
-
-- va_start(ap, fmt);
- buf_len = vsnprintf(buf, sizeof(buf), fmt, ap);
-- va_end(ap);
- if (buf_len < 0) {
- die("vsnprintf failed: %s\n",
- strerror(errno));
-@@ -74,6 +71,8 @@ static void write_file(char *filename, char *fmt, ...)
-
- fd = open(filename, O_WRONLY);
- if (fd < 0) {
-+ if ((errno == ENOENT) && enoent_ok)
-+ return;
- die("open of %s failed: %s\n",
- filename, strerror(errno));
- }
-@@ -92,6 +91,26 @@ static void write_file(char *filename, char *fmt, ...)
- }
- }
-
-+static void maybe_write_file(char *filename, char *fmt, ...)
-+{
-+ va_list ap;
-+
-+ va_start(ap, fmt);
-+ vmaybe_write_file(true, filename, fmt, ap);
-+ va_end(ap);
-+
-+}
-+
-+static void write_file(char *filename, char *fmt, ...)
-+{
-+ va_list ap;
-+
-+ va_start(ap, fmt);
-+ vmaybe_write_file(false, filename, fmt, ap);
-+ va_end(ap);
-+
-+}
-+
- static int read_mnt_flags(const char *path)
- {
- int ret;
-@@ -144,13 +163,10 @@ static void create_and_enter_userns(void)
- strerror(errno));
- }
-
-+ maybe_write_file("/proc/self/setgroups", "deny");
- write_file("/proc/self/uid_map", "0 %d 1", uid);
- write_file("/proc/self/gid_map", "0 %d 1", gid);
-
-- if (setgroups(0, NULL) != 0) {
-- die("setgroups failed: %s\n",
-- strerror(errno));
-- }
- if (setgid(0) != 0) {
- die ("setgid(0) failed %s\n",
- strerror(errno));
---
-2.1.0
-
diff --git a/freed-ora/current/master/x86-Lock-down-IO-port-access-when-module-security-is.patch b/freed-ora/current/master/x86-Lock-down-IO-port-access-when-module-security-is.patch
index 13392c902..cf57f33bd 100644
--- a/freed-ora/current/master/x86-Lock-down-IO-port-access-when-module-security-is.patch
+++ b/freed-ora/current/master/x86-Lock-down-IO-port-access-when-module-security-is.patch
@@ -44,7 +44,7 @@ index 4ddaf66ea35f..00b440307419 100644
}
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 524b707894ef..c268e2581ed6 100644
+index 4c58333b4257..fc9637812d78 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -27,6 +27,7 @@
@@ -55,7 +55,7 @@ index 524b707894ef..c268e2581ed6 100644
#include <asm/uaccess.h>
-@@ -568,6 +569,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
+@@ -571,6 +572,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
unsigned long i = *ppos;
const char __user *tmp = buf;
diff --git a/freed-ora/current/master/x86-Restrict-MSR-access-when-module-loading-is-restr.patch b/freed-ora/current/master/x86-Restrict-MSR-access-when-module-loading-is-restr.patch
index 12eedc931..39ea0604b 100644
--- a/freed-ora/current/master/x86-Restrict-MSR-access-when-module-loading-is-restr.patch
+++ b/freed-ora/current/master/x86-Restrict-MSR-access-when-module-loading-is-restr.patch
@@ -13,10 +13,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
1 file changed, 7 insertions(+)
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
-index c9603ac80de5..8bef43fc3f40 100644
+index 113e70784854..26c2f83fc470 100644
--- a/arch/x86/kernel/msr.c
+++ b/arch/x86/kernel/msr.c
-@@ -103,6 +103,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
+@@ -105,6 +105,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
int err = 0;
ssize_t bytes = 0;
@@ -26,7 +26,7 @@ index c9603ac80de5..8bef43fc3f40 100644
if (count % 8)
return -EINVAL; /* Invalid chunk size */
-@@ -150,6 +153,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
+@@ -152,6 +155,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
err = -EBADF;
break;
}
diff --git a/freed-ora/current/master/x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch b/freed-ora/current/master/x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch
deleted file mode 100644
index 4fbbfb585..000000000
--- a/freed-ora/current/master/x86-kvm-Clear-paravirt_enabled-on-KVM-guests-for-esp.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From: Andy Lutomirski <luto@amacapital.net>
-Date: Fri, 5 Dec 2014 19:03:28 -0800
-Subject: [PATCH] x86, kvm: Clear paravirt_enabled on KVM guests for espfix32's
- benefit
-
-paravirt_enabled has the following effects:
-
- - Disables the F00F bug workaround warning. There is no F00F bug
- workaround any more because Linux's standard IDT handling already
- works around the F00F bug, but the warning still exists. This
- is only cosmetic, and, in any event, there is no such thing as
- KVM on a CPU with the F00F bug.
-
- - Disables 32-bit APM BIOS detection. On a KVM paravirt system,
- there should be no APM BIOS anyway.
-
- - Disables tboot. I think that the tboot code should check the
- CPUID hypervisor bit directly if it matters.
-
- - paravirt_enabled disables espfix32. espfix32 should *not* be
- disabled under KVM paravirt.
-
-The last point is the purpose of this patch. It fixes a leak of the
-high 16 bits of the kernel stack address on 32-bit KVM paravirt
-guests.
-
-While I'm at it, this removes pv_info setup from kvmclock. That
-code seems to serve no purpose.
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Andy Lutomirski <luto@amacapital.net>
----
- arch/x86/kernel/kvm.c | 9 ++++++++-
- arch/x86/kernel/kvmclock.c | 2 --
- 2 files changed, 8 insertions(+), 3 deletions(-)
-
-diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
-index f6945bef2cd1..94f643484300 100644
---- a/arch/x86/kernel/kvm.c
-+++ b/arch/x86/kernel/kvm.c
-@@ -283,7 +283,14 @@ NOKPROBE_SYMBOL(do_async_page_fault);
- static void __init paravirt_ops_setup(void)
- {
- pv_info.name = "KVM";
-- pv_info.paravirt_enabled = 1;
-+
-+ /*
-+ * KVM isn't paravirt in the sense of paravirt_enabled. A KVM
-+ * guest kernel works like a bare metal kernel with additional
-+ * features, and paravirt_enabled is about features that are
-+ * missing.
-+ */
-+ pv_info.paravirt_enabled = 0;
-
- if (kvm_para_has_feature(KVM_FEATURE_NOP_IO_DELAY))
- pv_cpu_ops.io_delay = kvm_io_delay;
-diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
-index d9156ceecdff..d4d9a8ad7893 100644
---- a/arch/x86/kernel/kvmclock.c
-+++ b/arch/x86/kernel/kvmclock.c
-@@ -263,8 +263,6 @@ void __init kvmclock_init(void)
- #endif
- kvm_get_preset_lpj();
- clocksource_register_hz(&kvm_clock, NSEC_PER_SEC);
-- pv_info.paravirt_enabled = 1;
-- pv_info.name = "KVM";
-
- if (kvm_para_has_feature(KVM_FEATURE_CLOCKSOURCE_STABLE_BIT))
- pvclock_set_flags(PVCLOCK_TSC_STABLE_BIT);
---
-2.1.0
-
diff --git a/freed-ora/current/master/x86-tls-Validate-TLS-entries-to-protect-espfix.patch b/freed-ora/current/master/x86-tls-Validate-TLS-entries-to-protect-espfix.patch
deleted file mode 100644
index 52c049767..000000000
--- a/freed-ora/current/master/x86-tls-Validate-TLS-entries-to-protect-espfix.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From: Andy Lutomirski <luto@amacapital.net>
-Date: Thu, 4 Dec 2014 16:48:16 -0800
-Subject: [PATCH] x86/tls: Validate TLS entries to protect espfix
-
-Installing a 16-bit RW data segment into the GDT defeats espfix.
-AFAICT this will not affect glibc, Wine, or dosemu at all.
-
-Signed-off-by: Andy Lutomirski <luto@amacapital.net>
-Acked-by: H. Peter Anvin <hpa@zytor.com>
-Cc: stable@vger.kernel.org
-Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-Cc: Linus Torvalds <torvalds@linux-foundation.org>
-Cc: security@kernel.org <security@kernel.org>
-Cc: Willy Tarreau <w@1wt.eu>
-Signed-off-by: Ingo Molnar <mingo@kernel.org>
----
- arch/x86/kernel/tls.c | 23 +++++++++++++++++++++++
- 1 file changed, 23 insertions(+)
-
-diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c
-index f7fec09e3e3a..e7650bd71109 100644
---- a/arch/x86/kernel/tls.c
-+++ b/arch/x86/kernel/tls.c
-@@ -27,6 +27,21 @@ static int get_free_idx(void)
- return -ESRCH;
- }
-
-+static bool tls_desc_okay(const struct user_desc *info)
-+{
-+ if (LDT_empty(info))
-+ return true;
-+
-+ /*
-+ * espfix is required for 16-bit data segments, but espfix
-+ * only works for LDT segments.
-+ */
-+ if (!info->seg_32bit)
-+ return false;
-+
-+ return true;
-+}
-+
- static void set_tls_desc(struct task_struct *p, int idx,
- const struct user_desc *info, int n)
- {
-@@ -66,6 +81,9 @@ int do_set_thread_area(struct task_struct *p, int idx,
- if (copy_from_user(&info, u_info, sizeof(info)))
- return -EFAULT;
-
-+ if (!tls_desc_okay(&info))
-+ return -EINVAL;
-+
- if (idx == -1)
- idx = info.entry_number;
-
-@@ -192,6 +210,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
- {
- struct user_desc infobuf[GDT_ENTRY_TLS_ENTRIES];
- const struct user_desc *info;
-+ int i;
-
- if (pos >= GDT_ENTRY_TLS_ENTRIES * sizeof(struct user_desc) ||
- (pos % sizeof(struct user_desc)) != 0 ||
-@@ -205,6 +224,10 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
- else
- info = infobuf;
-
-+ for (i = 0; i < count / sizeof(struct user_desc); i++)
-+ if (!tls_desc_okay(info + i))
-+ return -EINVAL;
-+
- set_tls_desc(target,
- GDT_ENTRY_TLS_MIN + (pos / sizeof(struct user_desc)),
- info, count / sizeof(struct user_desc));
---
-2.1.0
-
diff --git a/freed-ora/current/master/xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch b/freed-ora/current/master/xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch
deleted file mode 100644
index 0f79ee0ac..000000000
--- a/freed-ora/current/master/xhci-Add-broken-streams-quirk-for-Fresco-Logic-FL100.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Fri, 5 Dec 2014 11:01:00 +0100
-Subject: [PATCH] xhci: Add broken-streams quirk for Fresco Logic FL1000G xhci
- controllers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Streams do not work reliabe on Fresco Logic FL1000G xhci controllers,
-trying to use them results in errors like this:
-
-21:37:33 kernel: xhci_hcd 0000:04:00.0: ERROR Transfer event for disabled endpoint or incorrect stream ring
-21:37:33 kernel: xhci_hcd 0000:04:00.0: @00000000368b3570 9067b000 00000000 05000000 01078001
-21:37:33 kernel: xhci_hcd 0000:04:00.0: ERROR Transfer event for disabled endpoint or incorrect stream ring
-21:37:33 kernel: xhci_hcd 0000:04:00.0: @00000000368b3580 9067b400 00000000 05000000 01038001
-
-As always I've ordered a pci-e addon card with a Fresco Logic controller for
-myself to see if I can come up with a better fix then the big hammer, in
-the mean time this will make uas devices work again (in usb-storage mode)
-for FL1000G users.
-
-Reported-by: Marcin ZajÄ…czkowski <mszpak@wp.pl>
-Cc: stable@vger.kernel.org # 3.15
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/usb/host/xhci-pci.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
-index 142b601f9563..7f76c8a12f89 100644
---- a/drivers/usb/host/xhci-pci.c
-+++ b/drivers/usb/host/xhci-pci.c
-@@ -82,6 +82,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
- "must be suspended extra slowly",
- pdev->revision);
- }
-+ if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK)
-+ xhci->quirks |= XHCI_BROKEN_STREAMS;
- /* Fresco Logic confirms: all revisions of this chip do not
- * support MSI, even though some of them claim to in their PCI
- * capabilities.
---
-2.1.0
-
OpenPOWER on IntegriCloud