From: Florian Fainelli <florian@openwrt.org>
To: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Cc: Julian Calaby <julian.calaby@gmail.com>,
linville@tuxdriver.com, linux-wireless@vger.kernel.org,
dsd@gentoo.org, kune@deine-taler.de
Subject: Re: [PATCH] zd1211rw: wait between setting hash table and powering radio on
Date: Wed, 15 Feb 2012 11:33:14 +0100 [thread overview]
Message-ID: <4F3B89EA.8080501@openwrt.org> (raw)
In-Reply-To: <20120209134130.49211ca9upll7y00@www.81.fi>
On 02/09/12 12:41, Jussi Kivilinna wrote:
> Quoting Julian Calaby <julian.calaby@gmail.com>:
>
>> Hi Florian,
>>
>> On Thu, Feb 9, 2012 at 21:54, Florian Fainelli <florian@openwrt.org>
>> wrote:
>>> Hi Julian,
>>>
>>>
>>> On 02/09/12 11:40, Julian Calaby wrote:
>>>>
>>>> Hi Florian,
>>>>
>>>> A couple of minor points:
>>>>
>>>> On Thu, Feb 9, 2012 at 21:24, Florian Fainelli<florian@openwrt.org>
>>>> wrote:
>>>>>
>>>>> I am running Debian testing kernel 3.1.0-1-amd64, using a
>>>>> 079b:0062 Sagem
>>>>> XG-76NA 802.11bg stick.
>>>>>
>>>>> Upon zd1211rw interface
>>>>> bringup (ifconfig wlan0 up) I get the following timeout:
>>>>>
>>>>> [ 950.330573] zd1211rw 1-3:1.0: phy2
>>>>> [ 955.108510] zd1211rw 1-3:1.0: firmware version 4725
>>>>> [ 955.148532] zd1211rw 1-3:1.0: zd1211b chip 079b:0062 v4810 high
>>>>> 00-19-70
>>>>> AL2230_RF pa0 g--NS
>>>>> [snip]
>>>>> [ 955.204072] zd1211rw 1-3:1.0: error ioread32(CR_REG1): -110
>>>>>
>>>>> A second ifconfig wlan0 up brings the interface up without problems.
>>>>>
>>>>> After a bit more debugging, the call trace is the following:
>>>>>
>>>>> [10241.028130] zd1211rw 1-3:1.0: zd_chip_lock_phy_regs: error
>>>>> ioread32(CR_REG1): -110
>>>>> [10241.028140] zd1211rw 1-3:1.0: zd_switch_radio_on: failed to
>>>>> lock PHY
>>>>> regs
>>>>> [10241.028148] zd1211rw 1-3:1.0: zd_op_start: failed to set radio on
>>>>>
>>>>> Adding a 10 milliseconds delay between the call to set_mc_hash() and
>>>>> zd_chip_switch_radio_on() allows successful interface bringups in all
>>>>> cases and matches what the vendor driver did.
>>>>>
>>>>> Signed-off-by: Florian Fainelli<florian@openwrt.org>
>>>>> ---
>>>>> drivers/net/wireless/zd1211rw/zd_mac.c | 7 ++++++-
>>>>> 1 files changed, 6 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c
>>>>> b/drivers/net/wireless/zd1211rw/zd_mac.c
>>>>> index 98a574a..bed634c 100644
>>>>> --- a/drivers/net/wireless/zd1211rw/zd_mac.c
>>>>> +++ b/drivers/net/wireless/zd1211rw/zd_mac.c
>>>>> @@ -306,9 +306,14 @@ int zd_op_start(struct ieee80211_hw *hw)
>>>>> r = set_mc_hash(mac);
>>>>> if (r)
>>>>> goto disable_int;
>>>>> + msleep(10);
>>>>
>>>> You might want to stick a comment in here to tell future developers
>>>> why we're doing this.
>>>
>>>
>>> I was counting on the commit message to actually provide the detailed
>>> explanation, but you are right, some comment might be appropriate
>>> here as
>>> well.
>>>
>>>
>>>>
>>>>> +
>>>>> r = zd_chip_switch_radio_on(chip);
>>>>> - if (r< 0)
>>>>> + if (r< 0) {
>>>>> + dev_err(zd_chip_dev(chip),
>>>>> + "%s: failed to set radio on\n", __func__);
>>>>> goto disable_int;
>>>>> + }
>>>>
>>>> It might also be an idea to have it re-try powering on the radio
>>>> after, say 100 msecs, just in case 10 msecs isn't enough for whatever
>>>> is causing this issue.
>>>
>>>
>>> Here I would rather let the error be printed in the kernel log for
>>> people to
>>> report an issue if 10 msecs proves not to be enough for some systems.
>>
>> When I see timing like this added to established drivers it makes me
>> think that maybe something has changed since the code was originally
>> written, maybe there was a 10msec delay somewhere deep down in the USB
>> code that's now been eliminated, or something else equally random, and
>> maybe we'll need a longer wait in the future. Writing the code to try
>> it, say, 5 times will probably never completely time out, but it will
>> probably work until the driver is removed from the kernel, rather than
>> having to change this to a larger value some time in the future. On
>> the other hand, this fixes the bug you've found and maybe something
>> like that can wait.
>
> Quick search of "error ioread32(CR_REG1): -110" shows that first
> reports are from 2008/2.6.24. People have found following workarounds
> are "rmmod zd1211rw;modprobe zd1211rw", unplug/replug USB device, use
> motherboard USB connector instead of hub, etc.
So, is the patch as-is acceptable, or do you want me to resubmit with
more comments around the msleep()?
Thank you.
--
Florian
next prev parent reply other threads:[~2012-02-15 10:33 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-29 14:44 zd1211rw firmware loading timeout Florian Fainelli
[not found] ` <CAFAL1Txx=qn3WXdRrtaYPVySY2vx+HinKk-NgthR+2ufcYNMwA@mail.gmail.com>
2012-02-08 13:15 ` Jussi Kivilinna
2012-02-08 13:17 ` Florian Fainelli
2012-02-08 16:01 ` Jussi Kivilinna
2012-02-09 10:24 ` [PATCH] zd1211rw: wait between setting hash table and powering radio on Florian Fainelli
2012-02-09 10:40 ` Julian Calaby
2012-02-09 10:54 ` Florian Fainelli
2012-02-09 11:10 ` Julian Calaby
2012-02-09 11:41 ` Jussi Kivilinna
2012-02-15 10:33 ` Florian Fainelli [this message]
2012-02-15 12:52 ` Jussi Kivilinna
2012-02-29 9:36 ` [PATCH v2] " Florian Fainelli
2012-02-29 10:25 ` Julian Calaby
2012-02-29 13:00 ` [PATCH v3] " Florian Fainelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F3B89EA.8080501@openwrt.org \
--to=florian@openwrt.org \
--cc=dsd@gentoo.org \
--cc=julian.calaby@gmail.com \
--cc=jussi.kivilinna@mbnet.fi \
--cc=kune@deine-taler.de \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.