diff options
author | Barak Bercovitz <barak@wizery.com> | 2014-02-10 06:47:19 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-02-13 15:20:14 -0500 |
commit | 51ae14d0eae31a7d678c201c9664efbb373f97fa (patch) | |
tree | a852f09c4650110223a61020cd5b0841d7702b6e /drivers/net | |
parent | 9be86cf067f43c3a43a538189d773afc812e4017 (diff) |
wlcore: block read/writes to FW during ELP
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>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/ti/wlcore/io.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/wireless/ti/wlcore/io.h b/drivers/net/wireless/ti/wlcore/io.h index 07e3d6a049ad..0305729d0986 100644 --- 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_raw_write(struct wl1271 *wl, int addr, | |||
60 | { | 60 | { |
61 | int ret; | 61 | int ret; |
62 | 62 | ||
63 | if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags)) | 63 | if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) || |
64 | WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) && | ||
65 | addr != HW_ACCESS_ELP_CTRL_REG))) | ||
64 | return -EIO; | 66 | return -EIO; |
65 | 67 | ||
66 | ret = wl->if_ops->write(wl->dev, addr, buf, len, fixed); | 68 | ret = wl->if_ops->write(wl->dev, addr, buf, len, fixed); |
@@ -76,7 +78,9 @@ static inline int __must_check wlcore_raw_read(struct wl1271 *wl, int addr, | |||
76 | { | 78 | { |
77 | int ret; | 79 | int ret; |
78 | 80 | ||
79 | if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags)) | 81 | if (test_bit(WL1271_FLAG_IO_FAILED, &wl->flags) || |
82 | WARN_ON((test_bit(WL1271_FLAG_IN_ELP, &wl->flags) && | ||
83 | addr != HW_ACCESS_ELP_CTRL_REG))) | ||
80 | return -EIO; | 84 | return -EIO; |
81 | 85 | ||
82 | ret = wl->if_ops->read(wl->dev, addr, buf, len, fixed); | 86 | ret = wl->if_ops->read(wl->dev, addr, buf, len, fixed); |