From e13ea7f2e90d190f11bb199072c5cc5bf4970ddb Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 9 Sep 2013 08:35:58 -0400 Subject: [PATCH] Fix system freeze due to incorrect rt2800 initialization (rhbz 1000679) --- kernel.spec | 9 +++ ...0-rearrange-bbp-rfcsr-initialization.patch | 69 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 rt2800-rearrange-bbp-rfcsr-initialization.patch diff --git a/kernel.spec b/kernel.spec index 8568ef32f..17d4f1380 100644 --- a/kernel.spec +++ b/kernel.spec @@ -770,6 +770,9 @@ Patch25057: iwl4965-better-skb-management-in-rx-path.patch #rhbz 963715 Patch25077: media-cx23885-Fix-TeVii-S471-regression-since-introduction-of-ts2020.patch +#rhbz 1000679 +Patch25078: rt2800-rearrange-bbp-rfcsr-initialization.patch + Patch25090: mei-me-fix-hardware-reset-flow.patch #CVE-2013-2888 rhbz 1000451 1002543 CVE-2013-2889 rhbz 999890 1002548 @@ -1516,6 +1519,9 @@ ApplyPatch mei-me-fix-hardware-reset-flow.patch #CVE-2013-2897 rhbz 1000536 1002600 CVE-2013-2899 rhbz 1000373 1002604 ApplyPatch HID-CVE-fixes.patch +#rhbz 1000679 +ApplyPatch rt2800-rearrange-bbp-rfcsr-initialization.patch + # END OF PATCH APPLICATIONS %endif @@ -2315,6 +2321,9 @@ fi # ||----w | # || || %changelog +* Mon Sep 09 2013 Josh Boyer +- Fix system freeze due to incorrect rt2800 initialization (rhbz 1000679) + * Sun Sep 8 2013 Peter Robinson - Minor OMAP config changes diff --git a/rt2800-rearrange-bbp-rfcsr-initialization.patch b/rt2800-rearrange-bbp-rfcsr-initialization.patch new file mode 100644 index 000000000..5b1e27c23 --- /dev/null +++ b/rt2800-rearrange-bbp-rfcsr-initialization.patch @@ -0,0 +1,69 @@ +My commit + +commit c630ccf1a127578421a928489d51e99c05037054 +Author: Stanislaw Gruszka +Date: Sat Mar 16 19:19:46 2013 +0100 + + rt2800: rearrange bbp/rfcsr initialization + +make Maxim machine freeze when try to start wireless device. + +Initialization order and sending MCU_BOOT_SIGNAL request, changed in +above commit, is important. Doing things incorrectly make PCIe bus +problems, which can froze the machine. + +This patch change initialization sequence like vendor driver do: +function NICInitializeAsic() from +2011_1007_RT5390_RT5392_Linux_STA_V2.5.0.3_DPO (PCI devices) and +DPO_RT5572_LinuxSTA_2.6.1.3_20121022 (according Mediatek, latest driver +for RT8070/RT3070/RT3370/RT3572/RT5370/RT5372/RT5572 USB devices). +It fixes freezes on Maxim system. + +Resolve: +https://bugzilla.redhat.com/show_bug.cgi?id=1000679 + +Reported-and-tested-by: Maxim Polyakov +Bisected-by: Igor Gnatenko +Cc: stable@vger.kernel.org # 3.10+ +Signed-off-by: Stanislaw Gruszka +--- + drivers/net/wireless/rt2x00/rt2800lib.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c +index d217c9e..8f6820a 100644 +--- a/drivers/net/wireless/rt2x00/rt2800lib.c ++++ b/drivers/net/wireless/rt2x00/rt2800lib.c +@@ -6631,19 +6631,20 @@ int rt2800_enable_radio(struct rt2x00_dev *rt2x00dev) + rt2800_init_registers(rt2x00dev))) + return -EIO; + ++ if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev))) ++ return -EIO; ++ + /* + * Send signal to firmware during boot time. + */ + rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0); + rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0); +- if (rt2x00_is_usb(rt2x00dev)) { ++ if (rt2x00_is_usb(rt2x00dev)) + rt2800_register_write(rt2x00dev, H2M_INT_SRC, 0); +- rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0); +- } ++ rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0); + msleep(1); + +- if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) || +- rt2800_wait_bbp_ready(rt2x00dev))) ++ if (unlikely(rt2800_wait_bbp_ready(rt2x00dev))) + return -EIO; + + rt2800_init_bbp(rt2x00dev); +-- +1.7.11.7 + +-- +To unsubscribe from this list: send the line "unsubscribe linux-wireless" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html \ No newline at end of file