diff options
Diffstat (limited to 'freed-ora/current/master')
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 = <®_vcc3v3>; -+ bus-width = <4>; -+ cd-gpios = <&pio 7 10 0>; /* PH10 */ -+ cd-inverted; -+ status = "okay"; -+ }; -+ -+ usbphy: phy@01c13400 { -+ usb1_vbus-supply = <®_usb1_vbus>; -+ usb2_vbus-supply = <®_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 = <®_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 - |