diff options
Diffstat (limited to 'package/kernel/mac80211/patches/903-wlcore-block-read-writes-to-FW-during-ELP.patch')
-rw-r--r-- | package/kernel/mac80211/patches/903-wlcore-block-read-writes-to-FW-during-ELP.patch | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/903-wlcore-block-read-writes-to-FW-during-ELP.patch b/package/kernel/mac80211/patches/903-wlcore-block-read-writes-to-FW-during-ELP.patch new file mode 100644 index 0000000000..1aafb32968 --- /dev/null +++ b/package/kernel/mac80211/patches/903-wlcore-block-read-writes-to-FW-during-ELP.patch @@ -0,0 +1,36 @@ +When the chip is in ELP mode read/write to FW is invalid and may cause +the lower layers to get stuck. The reads/writes concerning ELP wakeup +are the exception here and are checked for. In addition to blocking the +IO, produce a warning. + +Signed-off-by: Barak Bercovitz <barak@wizery.com> +Signed-off-by: Eliad Peller <eliad@wizery.com> + +--- +drivers/net/wireless/ti/wlcore/io.h | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +--- a/drivers/net/wireless/ti/wlcore/io.h ++++ b/drivers/net/wireless/ti/wlcore/io.h +@@ -60,7 +60,9 @@ static inline int __must_check wlcore_ra + { + int ret; + +- if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags)) ++ if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) || ++ WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) && ++ addr != HW_ACCESS_ELP_CTRL_REG))) + return -EIO; + + ret = wl->if_ops->write(wl->dev, addr, buf, len, fixed); +@@ -76,7 +78,9 @@ static inline int __must_check wlcore_ra + { + int ret; + +- if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags)) ++ if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) || ++ WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) && ++ addr != HW_ACCESS_ELP_CTRL_REG))) + return -EIO; + + ret = wl->if_ops->read(wl->dev, addr, buf, len, fixed); |