37 lines
1.2 KiB
Diff
37 lines
1.2 KiB
Diff
|
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);
|