2010-10-22 20:23:33

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

Signed-off-by: Rafał Miłecki <[email protected]>
---
This makes my N-PHY radio at least running (no scanning results so far). The
same register is used by wl on this device.
---
drivers/net/wireless/b43/rfkill.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
index 78016ae..d2734c9 100644
--- a/drivers/net/wireless/b43/rfkill.c
+++ b/drivers/net/wireless/b43/rfkill.c
@@ -28,7 +28,7 @@
/* Returns TRUE, if the radio is enabled in hardware. */
bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
{
- if (dev->phy.rev >= 3 || dev->phy.type == B43_PHYTYPE_LP) {
+ if (dev->dev->id.revision >= 3) {
if (!(b43_read32(dev, B43_MMIO_RADIO_HWENABLED_HI)
& B43_MMIO_RADIO_HWENABLED_HI_MASK))
return 1;
--
1.7.1



2010-10-22 20:25:14

by Rafał Miłecki

[permalink] [raw]
Subject: Re: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

W dniu 22 października 2010 22:24 użytkownik Rafał Miłecki
<[email protected]> napisał:
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> This makes my N-PHY radio at least running (no scanning results so far). The
> same register is used by wl on this device.

John, if you care you can move left opening brace in subject to look
as following:
(not PHY's)

--
Rafał

2010-10-22 22:31:21

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

On 10/22/2010 04:57 PM, Rafał Miłecki wrote:
> W dniu 22 października 2010 23:38 użytkownik Larry Finger
> <[email protected]> napisał:
>> On 10/22/2010 03:24 PM, Rafał Miłecki wrote:
>>
>> As that register is present only when the core revision >= 3, this change should
>> not cause a regression. Perhaps this was an error in the RE from the start and
>> testing the phy.rev has always been wrong.
>
> Do not blame RE team ;) It was described correctly since "ever", you
> can check it in history of:
> http://bcm-specs.sipsolutions.net/MMIO
>
> I actually suspect this may be source of self-switching-on-off-radio
> issue described in:
> "b43legacy-phy3: Radio hardware status changed to XXX" thread.
>
> I already mailed reporter to ask if he still has access to problematic card.

I have two cards that use b43legacy, but their physical format (PCI and Cardbus)
do not include an RFKILL switch, thus I have never tested this code with b43legacy.

Larry




2010-10-22 21:37:57

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

On 10/22/2010 03:24 PM, Rafał Miłecki wrote:
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> This makes my N-PHY radio at least running (no scanning results so far). The
> same register is used by wl on this device.
> ---
> drivers/net/wireless/b43/rfkill.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
> index 78016ae..d2734c9 100644
> --- a/drivers/net/wireless/b43/rfkill.c
> +++ b/drivers/net/wireless/b43/rfkill.c
> @@ -28,7 +28,7 @@
> /* Returns TRUE, if the radio is enabled in hardware. */
> bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
> {
> - if (dev->phy.rev >= 3 || dev->phy.type == B43_PHYTYPE_LP) {
> + if (dev->dev->id.revision >= 3) {
> if (!(b43_read32(dev, B43_MMIO_RADIO_HWENABLED_HI)
> & B43_MMIO_RADIO_HWENABLED_HI_MASK))
> return

As that register is present only when the core revision >= 3, this change should
not cause a regression. Perhaps this was an error in the RE from the start and
testing the phy.rev has always been wrong.

John: Just in case my analysis is wrong, keep this change out of 2.6.37. I'll
give it some testing with G PHYs before 2.6.38 merge time.

Larry

2010-10-22 21:57:27

by Rafał Miłecki

[permalink] [raw]
Subject: Re: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

W dniu 22 października 2010 23:38 użytkownik Larry Finger
<[email protected]> napisał:
> On 10/22/2010 03:24 PM, Rafał Miłecki wrote:
>> Signed-off-by: Rafał Miłecki <[email protected]>
>> ---
>> This makes my N-PHY radio at least running (no scanning results so far). The
>> same register is used by wl on this device.
>> ---
>>  drivers/net/wireless/b43/rfkill.c |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
>> index 78016ae..d2734c9 100644
>> --- a/drivers/net/wireless/b43/rfkill.c
>> +++ b/drivers/net/wireless/b43/rfkill.c
>> @@ -28,7 +28,7 @@
>>  /* Returns TRUE, if the radio is enabled in hardware. */
>>  bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
>>  {
>> -     if (dev->phy.rev >= 3 || dev->phy.type == B43_PHYTYPE_LP) {
>> +     if (dev->dev->id.revision >= 3) {
>>               if (!(b43_read32(dev, B43_MMIO_RADIO_HWENABLED_HI)
>>                     & B43_MMIO_RADIO_HWENABLED_HI_MASK))
>>                       return
>
> As that register is present only when the core revision >= 3, this change should
> not cause a regression. Perhaps this was an error in the RE from the start and
> testing the phy.rev has always been wrong.

Do not blame RE team ;) It was described correctly since "ever", you
can check it in history of:
http://bcm-specs.sipsolutions.net/MMIO

I actually suspect this may be source of self-switching-on-off-radio
issue described in:
"b43legacy-phy3: Radio hardware status changed to XXX" thread.

I already mailed reporter to ask if he still has access to problematic card.

--
Rafał

2010-10-25 12:39:16

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH] b43: rfkill: use status register based on core revision not (PHY's)

On 10/22/2010 03:24 PM, Rafał Miłecki wrote:
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> This makes my N-PHY radio at least running (no scanning results so far). The
> same register is used by wl on this device.
> ---
> drivers/net/wireless/b43/rfkill.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/b43/rfkill.c b/drivers/net/wireless/b43/rfkill.c
> index 78016ae..d2734c9 100644
> --- a/drivers/net/wireless/b43/rfkill.c
> +++ b/drivers/net/wireless/b43/rfkill.c
> @@ -28,7 +28,7 @@
> /* Returns TRUE, if the radio is enabled in hardware. */
> bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
> {
> - if (dev->phy.rev >= 3 || dev->phy.type == B43_PHYTYPE_LP) {
> + if (dev->dev->id.revision >= 3) {
> if (!(b43_read32(dev, B43_MMIO_RADIO_HWENABLED_HI)
> & B43_MMIO_RADIO_HWENABLED_HI_MASK))
> return 1;

Over the weekend, I was able to test this patch using all my b43 hardware. There
were no problems.

Despite having no problems, I still NACK the patch for the reason that b43 only
applies to devices with id.revision >= 5, thus the revised "if" will always be
true. The patch should be rewritten as only b43legacy needs to test the 802.11
core revision.

Larry