wil6210: fix boot loader "ready" indication
authorVladimir Kondratiev <QCA_vkondrat@QCA.qualcomm.com>
Thu, 30 Apr 2015 13:25:07 +0000 (16:25 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 4 May 2015 17:55:31 +0000 (20:55 +0300)
Boot loader "ready" indication has changed from "bit0 set"
to "only bit0 set". This is to address hardware glitches.
Due to glitches, sometimes right after reset register reads
0xffffffff, or (rarely) other garbage.

Reflect this in the driver

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/wil6210/main.c

index 0623d8c98956be664e5204116b5ab010bc35d71f..146fd8088fdeb425ffd4fad9f134cbb7bb40e784 100644 (file)
@@ -551,7 +551,7 @@ static inline void wil_release_cpu(struct wil6210_priv *wil)
 static int wil_target_reset(struct wil6210_priv *wil)
 {
        int delay = 0;
-       u32 x;
+       u32 x, x1 = 0;
 
        wil_dbg_misc(wil, "Resetting \"%s\"...\n", wil->hw_name);
 
@@ -606,12 +606,16 @@ static int wil_target_reset(struct wil6210_priv *wil)
        do {
                msleep(RST_DELAY);
                x = R(RGF_USER_BL + offsetof(struct RGF_BL, ready));
+               if (x1 != x) {
+                       wil_dbg_misc(wil, "BL.ready 0x%08x => 0x%08x\n", x1, x);
+                       x1 = x;
+               }
                if (delay++ > RST_COUNT) {
                        wil_err(wil, "Reset not completed, bl.ready 0x%08x\n",
                                x);
                        return -ETIME;
                }
-       } while (!(x & BIT_BL_READY));
+       } while (x != BIT_BL_READY);
 
        C(RGF_USER_CLKS_CTL_0, BIT_USER_CLKS_RST_PWGD);