From: Greg Kroah-Hartman Date: Fri, 16 Dec 2011 00:22:05 +0000 (-0800) Subject: 3.0 patches X-Git-Tag: v3.0.14~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b4170dcd24d63ab8921b162969e7bce2ceba62a5;p=thirdparty%2Fkernel%2Fstable-queue.git 3.0 patches added patches: ibft-fix-finding-ibft-acpi-table-on-uefi.patch usb-cdc-acm-add-ids-for-motorola-h24-hspa-usb-module.patch usb-option-add-huawei-e398-controlling-interfaces.patch usb-option-removing-one-bogus-and-adding-some-new-huawei-combinations.patch --- diff --git a/queue-3.0/ibft-fix-finding-ibft-acpi-table-on-uefi.patch b/queue-3.0/ibft-fix-finding-ibft-acpi-table-on-uefi.patch new file mode 100644 index 00000000000..656536565c4 --- /dev/null +++ b/queue-3.0/ibft-fix-finding-ibft-acpi-table-on-uefi.patch @@ -0,0 +1,155 @@ +From 935a9fee51c945b8942be2d7b4bae069167b4886 Mon Sep 17 00:00:00 2001 +From: Yinghai Lu +Date: Mon, 12 Dec 2011 12:39:14 -0800 +Subject: ibft: Fix finding IBFT ACPI table on UEFI + +From: Yinghai Lu + +commit 935a9fee51c945b8942be2d7b4bae069167b4886 upstream. + +Found one system with UEFI/iBFT, kernel does not detect the iBFT during +iscsi_ibft module loading. + +Root cause: on x86 (UEFI), we are calling of find_ibft_region() much earlier +- specifically in setup_arch() before ACPI is enabled. + +Try to split acpi checking code out and call that later + +At that time ACPI iBFT already get permanent mapped with ioremap. +So isa_virt_to_bus() will get wrong phys from right virt address. +We could just skip that phys address printing. + +For legacy one, print the found address early. + +-v2: update comments and description according to Konrad. +-v3: fix problem about module use case that is found by Konrad. +-v4: use acpi_get_table() instead of acpi_table_parse() to handle module use case that is found by Konrad again.. +Signed-off-by: Yinghai Lu +Signed-off-by: Konrad Rzeszutek Wilk +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/firmware/iscsi_ibft.c | 42 +++++++++++++++++++++++++++++++++++-- + drivers/firmware/iscsi_ibft_find.c | 26 +--------------------- + 2 files changed, 42 insertions(+), 26 deletions(-) + +--- a/drivers/firmware/iscsi_ibft.c ++++ b/drivers/firmware/iscsi_ibft.c +@@ -738,6 +738,37 @@ static void __exit ibft_exit(void) + ibft_cleanup(); + } + ++#ifdef CONFIG_ACPI ++static const struct { ++ char *sign; ++} ibft_signs[] = { ++ /* ++ * One spec says "IBFT", the other says "iBFT". We have to check ++ * for both. ++ */ ++ { ACPI_SIG_IBFT }, ++ { "iBFT" }, ++}; ++ ++static void __init acpi_find_ibft_region(void) ++{ ++ int i; ++ struct acpi_table_header *table = NULL; ++ ++ if (acpi_disabled) ++ return; ++ ++ for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++) { ++ acpi_get_table(ibft_signs[i].sign, 0, &table); ++ ibft_addr = (struct acpi_table_ibft *)table; ++ } ++} ++#else ++static void __init acpi_find_ibft_region(void) ++{ ++} ++#endif ++ + /* + * ibft_init() - creates sysfs tree entries for the iBFT data. + */ +@@ -745,9 +776,16 @@ static int __init ibft_init(void) + { + int rc = 0; + ++ /* ++ As on UEFI systems the setup_arch()/find_ibft_region() ++ is called before ACPI tables are parsed and it only does ++ legacy finding. ++ */ ++ if (!ibft_addr) ++ acpi_find_ibft_region(); ++ + if (ibft_addr) { +- printk(KERN_INFO "iBFT detected at 0x%llx.\n", +- (u64)isa_virt_to_bus(ibft_addr)); ++ pr_info("iBFT detected.\n"); + + rc = ibft_check_device(); + if (rc) +--- a/drivers/firmware/iscsi_ibft_find.c ++++ b/drivers/firmware/iscsi_ibft_find.c +@@ -45,13 +45,6 @@ EXPORT_SYMBOL_GPL(ibft_addr); + static const struct { + char *sign; + } ibft_signs[] = { +-#ifdef CONFIG_ACPI +- /* +- * One spec says "IBFT", the other says "iBFT". We have to check +- * for both. +- */ +- { ACPI_SIG_IBFT }, +-#endif + { "iBFT" }, + { "BIFT" }, /* Broadcom iSCSI Offload */ + }; +@@ -62,14 +55,6 @@ static const struct { + #define VGA_MEM 0xA0000 /* VGA buffer */ + #define VGA_SIZE 0x20000 /* 128kB */ + +-#ifdef CONFIG_ACPI +-static int __init acpi_find_ibft(struct acpi_table_header *header) +-{ +- ibft_addr = (struct acpi_table_ibft *)header; +- return 0; +-} +-#endif /* CONFIG_ACPI */ +- + static int __init find_ibft_in_mem(void) + { + unsigned long pos; +@@ -94,6 +79,7 @@ static int __init find_ibft_in_mem(void) + * the table cannot be valid. */ + if (pos + len <= (IBFT_END-1)) { + ibft_addr = (struct acpi_table_ibft *)virt; ++ pr_info("iBFT found at 0x%lx.\n", pos); + goto done; + } + } +@@ -108,20 +94,12 @@ done: + */ + unsigned long __init find_ibft_region(unsigned long *sizep) + { +-#ifdef CONFIG_ACPI +- int i; +-#endif + ibft_addr = NULL; + +-#ifdef CONFIG_ACPI +- for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++) +- acpi_table_parse(ibft_signs[i].sign, acpi_find_ibft); +-#endif /* CONFIG_ACPI */ +- + /* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will + * only use ACPI for this */ + +- if (!ibft_addr && !efi_enabled) ++ if (!efi_enabled) + find_ibft_in_mem(); + + if (ibft_addr) { diff --git a/queue-3.0/series b/queue-3.0/series index d69e6b29759..95db881ca47 100644 --- a/queue-3.0/series +++ b/queue-3.0/series @@ -39,3 +39,7 @@ ext4-handle-eof-correctly-in-ext4_bio_write_page.patch fuse-fix-fuse_retrieve.patch staging-r8712u-add-new-usb-id.patch drm-radeon-kms-add-some-new-pci-ids.patch +ibft-fix-finding-ibft-acpi-table-on-uefi.patch +usb-cdc-acm-add-ids-for-motorola-h24-hspa-usb-module.patch +usb-option-add-huawei-e398-controlling-interfaces.patch +usb-option-removing-one-bogus-and-adding-some-new-huawei-combinations.patch diff --git a/queue-3.0/usb-cdc-acm-add-ids-for-motorola-h24-hspa-usb-module.patch b/queue-3.0/usb-cdc-acm-add-ids-for-motorola-h24-hspa-usb-module.patch new file mode 100644 index 00000000000..195a9acb69f --- /dev/null +++ b/queue-3.0/usb-cdc-acm-add-ids-for-motorola-h24-hspa-usb-module.patch @@ -0,0 +1,41 @@ +From 6abff5dc4d5a2c90e597137ce8987e7fd439259b Mon Sep 17 00:00:00 2001 +From: Krzysztof Hałasa +Date: Mon, 12 Dec 2011 14:51:00 +0100 +Subject: USB: cdc-acm: add IDs for Motorola H24 HSPA USB module. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Krzysztof Hałasa + +commit 6abff5dc4d5a2c90e597137ce8987e7fd439259b upstream. + +Add USB IDs for Motorola H24 HSPA USB module. + +Signed-off-by: Krzysztof Hałasa +Acked-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/cdc-acm.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/drivers/usb/class/cdc-acm.c ++++ b/drivers/usb/class/cdc-acm.c +@@ -1458,6 +1458,16 @@ static const struct usb_device_id acm_id + }, + { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */ + }, ++ /* Motorola H24 HSPA module: */ ++ { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */ ++ { USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */ ++ { USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */ ++ { USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */ ++ { USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */ ++ { USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */ ++ { USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */ ++ { USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */ ++ + { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */ + .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on + data interface instead of diff --git a/queue-3.0/usb-option-add-huawei-e398-controlling-interfaces.patch b/queue-3.0/usb-option-add-huawei-e398-controlling-interfaces.patch new file mode 100644 index 00000000000..49007d7b49e --- /dev/null +++ b/queue-3.0/usb-option-add-huawei-e398-controlling-interfaces.patch @@ -0,0 +1,36 @@ +From 414b591fd16655871e9f5592a55368b10a3ccc30 Mon Sep 17 00:00:00 2001 +From: Alex Hermann +Date: Mon, 12 Dec 2011 21:42:23 +0100 +Subject: usb: option: Add Huawei E398 controlling interfaces +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Hermann + +commit 414b591fd16655871e9f5592a55368b10a3ccc30 upstream. + +This patch adds the controlling interfaces for the Huawei E398. + +Thanks to Bjørn Mork for extracting the interface +numbers from the windows driver. + +Signed-off-by: Alex Hermann +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -660,6 +660,9 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x02) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x03) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x08) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x01) }, /* E398 3G Modem */ ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x02) }, /* E398 3G PC UI Interface */ ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x03) }, /* E398 3G Application Interface */ + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, diff --git a/queue-3.0/usb-option-removing-one-bogus-and-adding-some-new-huawei-combinations.patch b/queue-3.0/usb-option-removing-one-bogus-and-adding-some-new-huawei-combinations.patch new file mode 100644 index 00000000000..152a7418e08 --- /dev/null +++ b/queue-3.0/usb-option-removing-one-bogus-and-adding-some-new-huawei-combinations.patch @@ -0,0 +1,48 @@ +From 02a551c9755b799579e0a093bcc99b80b4dc1453 Mon Sep 17 00:00:00 2001 +From: Bjørn Mork +Date: Tue, 13 Dec 2011 05:33:02 +0100 +Subject: USB: option: Removing one bogus and adding some new Huawei combinations +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Bjørn Mork + +commit 02a551c9755b799579e0a093bcc99b80b4dc1453 upstream. + +Huawei use the product code HUAWEI_PRODUCT_E353 (0x1506) for a +number of different devices, which each can appear with a number +of different descriptor sets. Different types of interfaces +can be identified by looking at the subclass and protocol fields + +Subclass 1 protocol 8 is actually the data interface of a CDC +ECM set, with subclass 1 protocol 9 as the control interface. +Neither support serial data communcation, and cannot therefore +be supported by this driver. + +At the same time, add a few other sets which appear if the +device is configured in "Windows mode" using this modeswitch +message: +55534243000000000000000000000011060000000100000000000000000000 + +Signed-off-by: Bjørn Mork +Cc: stable +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -659,7 +659,9 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x02) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x03) }, +- { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x08) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x10) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x12) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x13) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x01) }, /* E398 3G Modem */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x02) }, /* E398 3G PC UI Interface */ + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x02, 0x03) }, /* E398 3G Application Interface */