linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Saul St. John" <saul.stjohn@gmail.com>
To: "Rafał Miłecki" <zajec5@gmail.com>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [RFC] use alternate SPROM offset for 43224
Date: Tue, 14 Feb 2012 12:52:02 -0600	[thread overview]
Message-ID: <20120214185202.GA5339@eris.garyseven.net> (raw)
In-Reply-To: <CACna6rw=ZJe28ahRQFU-_9+BD8+L5SNV_xdwxLxUdNk-b3HHxg@mail.gmail.com>

On Tue, Feb 14, 2012 at 06:29:59PM +0100, Rafał Miłecki wrote:
> W dniu 14 lutego 2012 17:22 użytkownik Saul St. John
> <saul.stjohn@gmail.com> napisał:
> > On Tue, Feb 14, 2012 at 7:34 AM, Rafał Miłecki <zajec5@gmail.com> wrote:
> >> W dniu 14 lutego 2012 05:01 użytkownik Saul St. John
> >> <saul.stjohn@gmail.com> napisał:
> >>> I don't know if this is correct in the general sense, but the wireless on my
> >>> mid-2010 MacBook Pro doesn't work without it.
> >>>
> >>> Signed-off-by: Saul St. John <saul.stjohn@gmail.com>
> >>> ---
> >>>  drivers/bcma/sprom.c |    4 ++--
> >>>  1 files changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
> >>> index 6f230fb..06c87b5 100644
> >>> --- a/drivers/bcma/sprom.c
> >>> +++ b/drivers/bcma/sprom.c
> >>> @@ -228,8 +228,8 @@ int bcma_sprom_get(struct bcma_bus *bus)
> >>>        /* Most cards have SPROM moved by additional offset 0x30 (48 dwords).
> >>>         * According to brcm80211 this applies to cards with PCIe rev >= 6
> >>>         * TODO: understand this condition and use it */
> >>> -       offset = (bus->chipinfo.id == 0x4331) ? BCMA_CC_SPROM :
> >>> -               BCMA_CC_SPROM_PCIE6;
> >>> +       offset = (bus->chipinfo.id == 0x4331 || bus->chipinfo.id == 43224) ?
> >>> +                       BCMA_CC_SPROM : BCMA_CC_SPROM_PCIE6;
> >>>        bcma_sprom_read(bus, offset, sprom);
> >>>
> >>>        if (bus->chipinfo.id == 0x4331)
> >>
> >> I'm quite sure it'll break my BCM43224. It's not chip-specific,
> >> probably some status bit specific.
> >>
> >> --
> >> Rafał
> >
> > My BCM43324 was broken by bmca up until "[PATCH] bcma: don't fail for
> > bad SPROM CRC." Even with that patch, I still get "bmca: Failed to get
> > SPROM: -71" in the dmesg log. Is that error harmless?
> 
> It's harmless for brcmsmac, which doesn't use SPROM struct of bcma bus
> driver. This bug should be fixed and brcmsmac should be improved in
> many contexts: using SPROM, standard bcma module functions, dropping
> other cores initializing. For now you can live with this.
> 
My worry is that, were the brcmsmac driver to be improved in the ways you
suggest, the BCM43224 in my MBP would start failing again.
> 
> > The CRC check appears to pass without issue when using the 0x800
> > offset on my device.
> 
> The quick fix would be probably to implement in bcma two tries of
> reading SPROM. One for 0x800 second for 0x830 (base address). The real
> fix is to grab the real condition from specs/brcmsmac and implement it
> in bcma.
> 
Real fix: any leads on where the real condition can be found? I looked through
the brcmsmac driver, but it wasn't obvious to me.

Quick fix: something like this?

Signed-off-by: Saul St. John <saul.stjohn@gmail.com>
---
 drivers/bcma/sprom.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
index 6f230fb..e99807e 100644
--- a/drivers/bcma/sprom.c
+++ b/drivers/bcma/sprom.c
@@ -207,7 +207,7 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
 
 int bcma_sprom_get(struct bcma_bus *bus)
 {
-	u16 offset;
+	u16 offset = 0;
 	u16 *sprom;
 	int err = 0;
 
@@ -222,20 +222,24 @@ int bcma_sprom_get(struct bcma_bus *bus)
 	if (!sprom)
 		return -ENOMEM;
 
-	if (bus->chipinfo.id == 0x4331)
-		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, false);
-
 	/* Most cards have SPROM moved by additional offset 0x30 (48 dwords).
 	 * According to brcm80211 this applies to cards with PCIe rev >= 6
 	 * TODO: understand this condition and use it */
-	offset = (bus->chipinfo.id == 0x4331) ? BCMA_CC_SPROM :
-		BCMA_CC_SPROM_PCIE6;
-	bcma_sprom_read(bus, offset, sprom);
+	do {
+		if (bus->chipinfo.id == 0x4331)
+			bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, 
+							     false);
+
+		offset = (offset == 0) ? BCMA_CC_SPROM : BCMA_CC_SPROM_PCIE6;
+		bcma_sprom_read(bus, offset, sprom);
+
+		if (bus->chipinfo.id == 0x4331)
+			bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, 
+							     true);
 
-	if (bus->chipinfo.id == 0x4331)
-		bcma_chipco_bcm4331_ext_pa_lines_ctl(&bus->drv_cc, true);
+		err = bcma_sprom_valid(sprom);
+	} while (err && (offset != BCMA_CC_SPROM_PCIE6));
 
-	err = bcma_sprom_valid(sprom);
 	if (err)
 		goto out;
 
-- 
1.7.9


  parent reply	other threads:[~2012-02-14 18:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-14  4:01 [RFC] use alternate SPROM offset for 43224 Saul St. John
2012-02-14 10:07 ` Arend Van Spriel
2012-02-14 13:35   ` Rafał Miłecki
2012-02-14 13:34 ` Rafał Miłecki
2012-02-14 16:22   ` Saul St. John
2012-02-14 17:29     ` Rafał Miłecki
2012-02-14 18:33       ` Hauke Mehrtens
2012-02-14 18:52       ` Saul St. John [this message]
2012-02-14 20:10         ` Larry Finger
2012-02-14 20:20           ` Hauke Mehrtens
2012-02-14 22:04             ` Larry Finger
2012-02-14 22:39               ` Arend Van Spriel
2012-02-19 15:37                 ` Hauke Mehrtens
2012-02-20  9:20                   ` Arend van Spriel

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=20120214185202.GA5339@eris.garyseven.net \
    --to=saul.stjohn@gmail.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=zajec5@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).