[PATCH stable 4/4] b43: Workaround DMA quirks

2008-04-24 Thread Michael Buesch
Some mainboards/CPUs don't allow DMA masks bigger than a certain limit.
Some VIA crap^h^h^h^hdevices have an upper limit of 0x. So in this
case a 64-bit b43 device would always fail to acquire the mask.
Implement a workaround to fallback to lower DMA mask, as we can always
also support a lower mask.

This patch is in wireless-testing.git, commit
91725545159f81f1c9dc738dfc329199583f649a

Signed-off-by: Michael Buesch [EMAIL PROTECTED]


Index: linux-2.6.25/drivers/net/wireless/b43/dma.c
===
--- linux-2.6.25.orig/drivers/net/wireless/b43/dma.c2008-04-19 
18:29:16.0 +0200
+++ linux-2.6.25/drivers/net/wireless/b43/dma.c 2008-04-23 18:35:33.0 
+0200
@@ -819,12 +819,24 @@ static u64 supported_dma_mask(struct b43
if (tmp  B43_DMA32_TXADDREXT_MASK)
return DMA_32BIT_MASK;
 
return DMA_30BIT_MASK;
 }
 
+static enum b43_dmatype dma_mask_to_engine_type(u64 dmamask)
+{
+   if (dmamask == DMA_30BIT_MASK)
+   return B43_DMA_30BIT;
+   if (dmamask == DMA_32BIT_MASK)
+   return B43_DMA_32BIT;
+   if (dmamask == DMA_64BIT_MASK)
+   return B43_DMA_64BIT;
+   B43_WARN_ON(1);
+   return B43_DMA_30BIT;
+}
+
 /* Main initialization function. */
 static
 struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
  int controller_index,
  int for_tx,
  enum b43_dmatype type)
@@ -979,42 +991,61 @@ void b43_dma_free(struct b43_wldev *dev)
b43_destroy_dmaring(dma-tx_ring1);
dma-tx_ring1 = NULL;
b43_destroy_dmaring(dma-tx_ring0);
dma-tx_ring0 = NULL;
 }
 
+static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask)
+{
+   u64 orig_mask = mask;
+   bool fallback = 0;
+   int err;
+
+   /* Try to set the DMA mask. If it fails, try falling back to a
+* lower mask, as we can always also support a lower one. */
+   while (1) {
+   err = ssb_dma_set_mask(dev-dev, mask);
+   if (!err)
+   break;
+   if (mask == DMA_64BIT_MASK) {
+   mask = DMA_32BIT_MASK;
+   fallback = 1;
+   continue;
+   }
+   if (mask == DMA_32BIT_MASK) {
+   mask = DMA_30BIT_MASK;
+   fallback = 1;
+   continue;
+   }
+   b43err(dev-wl, The machine/kernel does not support 
+  the required %u-bit DMA mask\n,
+  (unsigned int)dma_mask_to_engine_type(orig_mask));
+   return -EOPNOTSUPP;
+   }
+   if (fallback) {
+   b43info(dev-wl, DMA mask fallback from %u-bit to %u-bit\n,
+   (unsigned int)dma_mask_to_engine_type(orig_mask),
+   (unsigned int)dma_mask_to_engine_type(mask));
+   }
+
+   return 0;
+}
+
 int b43_dma_init(struct b43_wldev *dev)
 {
struct b43_dma *dma = dev-dma;
struct b43_dmaring *ring;
int err;
u64 dmamask;
enum b43_dmatype type;
 
dmamask = supported_dma_mask(dev);
-   switch (dmamask) {
-   default:
-   B43_WARN_ON(1);
-   case DMA_30BIT_MASK:
-   type = B43_DMA_30BIT;
-   break;
-   case DMA_32BIT_MASK:
-   type = B43_DMA_32BIT;
-   break;
-   case DMA_64BIT_MASK:
-   type = B43_DMA_64BIT;
-   break;
-   }
-   err = ssb_dma_set_mask(dev-dev, dmamask);
-   if (err) {
-   b43err(dev-wl, The machine/kernel does not support 
-  the required DMA mask (0x%08X%08X)\n,
-  (unsigned int)((dmamask  0xULL)  32),
-  (unsigned int)(dmamask  0xULL));
-   return -EOPNOTSUPP;
-   }
+   type = dma_mask_to_engine_type(dmamask);
+   err = b43_dma_set_mask(dev, dmamask);
+   if (err)
+   return err;
 
err = -ENOMEM;
/* setup TX DMA channels. */
ring = b43_setup_dmaring(dev, 0, 1, type);
if (!ring)
goto out;
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH stable 1/4] ssb: Fix all-ones boardflags

2008-04-24 Thread Michael Buesch
From: Larry Finger [EMAIL PROTECTED]

In the SSB SPROM a field set to all ones means the value
is not defined in the SPROM.
In case of the boardflags, we need to set them to zero
to avoid confusing drivers. Drivers will only check the
flags by ANDing.

This patch is in wireless-testing.git, commit
d30cdf8a251e88e58bc566f5acaa9eb97ac102e9

Signed-off-by: Larry Finger [EMAIL PROTECTED]
Signed-off-by: Gabor Stefanik [EMAIL PROTECTED]
Signed-off-by: Michael Buesch [EMAIL PROTECTED]


Index: linux-2.6.25/drivers/ssb/pci.c
===
--- linux-2.6.25.orig/drivers/ssb/pci.c 2008-04-17 17:11:28.0 +0200
+++ linux-2.6.25/drivers/ssb/pci.c  2008-04-19 17:56:54.0 +0200
@@ -482,6 +482,11 @@ static int sprom_extract(struct ssb_bus 
goto unsupported;
}
 
+   if (out-boardflags_lo == 0x)
+   out-boardflags_lo = 0;  /* per specs */
+   if (out-boardflags_hi == 0x)
+   out-boardflags_hi = 0;  /* per specs */
+
return 0;
 unsupported:
ssb_printk(KERN_WARNING PFX Unsupported SPROM revision %d 
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH stable 3/4] b43: Add more btcoexist workarounds

2008-04-24 Thread Michael Buesch
This adds more workarounds for devices with broken BT bits.

This patch is in wireless-testing.git, commit
4b43b16f74b362d4d2ce7df5b761eb838dfd5d32

Signed-off-by: Michael Buesch [EMAIL PROTECTED]


Index: linux-2.6.25/drivers/net/wireless/b43/main.c
===
--- linux-2.6.25.orig/drivers/net/wireless/b43/main.c   2008-04-19 
18:32:08.0 +0200
+++ linux-2.6.25/drivers/net/wireless/b43/main.c2008-04-19 
18:32:08.0 +0200
@@ -4009,6 +4009,12 @@ static int b43_one_core_attach(struct ss
return err;
 }
 
+#define IS_PDEV(pdev, _vendor, _device, _subvendor, _subdevice)
( \
+   (pdev-vendor == PCI_VENDOR_ID_##_vendor) \
+   (pdev-device == _device) \
+   (pdev-subsystem_vendor == PCI_VENDOR_ID_##_subvendor)\
+   (pdev-subsystem_device == _subdevice)  )
+
 static void b43_sprom_fixup(struct ssb_bus *bus)
 {
struct pci_dev *pdev;
@@ -4022,10 +4028,9 @@ static void b43_sprom_fixup(struct ssb_b
bus-sprom.boardflags_lo |= B43_BFL_PACTRL;
if (bus-bustype == SSB_BUSTYPE_PCI) {
pdev = bus-host_pci;
-   if (pdev-vendor == PCI_VENDOR_ID_BROADCOM 
-   pdev-device == 0x4318 
-   pdev-subsystem_vendor == PCI_VENDOR_ID_ASUSTEK 
-   pdev-subsystem_device == 0x100F)
+   if (IS_PDEV(pdev, BROADCOM, 0x4318, ASUSTEK, 0x100F) ||
+   IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0015) ||
+   IS_PDEV(pdev, BROADCOM, 0x4320, LINKSYS, 0x0013))
bus-sprom.boardflags_lo = ~B43_BFL_BTCOEXIST;
}
 }
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH stable 2/4] b43: Workaround invalid bluetooth settings

2008-04-24 Thread Michael Buesch
This adds a workaround for invalid bluetooth SPROM settings
on ASUS PCI cards.
This will stop the microcode from poking with the BT GPIO line.
This fixes data transmission on this device, as the BT GPIO line
is used for something TX related on this device
(probably the power amplifier or the radio).
This also adds a modparam knob to help debugging this in the future,
as more devices with this bug may show up.

This patch is in wireless-testing.git, commit
5e0fa73f3f6d2aea9c0498dc8d7e621c8fb9e6aa

Signed-off-by: Michael Buesch [EMAIL PROTECTED]


Index: linux-2.6.25/drivers/net/wireless/b43/main.c
===
--- linux-2.6.25.orig/drivers/net/wireless/b43/main.c   2008-04-17 
17:11:26.0 +0200
+++ linux-2.6.25/drivers/net/wireless/b43/main.c2008-04-19 
17:58:40.0 +0200
@@ -78,6 +78,11 @@ static int modparam_nohwcrypt;
 module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
 MODULE_PARM_DESC(nohwcrypt, Disable hardware encryption.);
 
+static int modparam_btcoex = 1;
+module_param_named(btcoex, modparam_btcoex, int, 0444);
+MODULE_PARM_DESC(btcoex, Enable Bluetooth coexistance (default on));
+
+
 static const struct ssb_device_id b43_ssb_tbl[] = {
SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 6),
@@ -3339,6 +3344,8 @@ static void b43_bluetooth_coext_enable(s
struct ssb_sprom *sprom = dev-dev-bus-sprom;
u32 hf;
 
+   if (!modparam_btcoex)
+   return;
if (!(sprom-boardflags_lo  B43_BFL_BTCOEXIST))
return;
if (dev-phy.type != B43_PHYTYPE_B  !dev-phy.gmode)
@@ -3350,11 +3357,13 @@ static void b43_bluetooth_coext_enable(s
else
hf |= B43_HF_BTCOEX;
b43_hf_write(dev, hf);
-   //TODO
 }
 
 static void b43_bluetooth_coext_disable(struct b43_wldev *dev)
-{  //TODO
+{
+   if (!modparam_btcoex)
+   return;
+   //TODO
 }
 
 static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev)
@@ -4002,6 +4011,8 @@ static int b43_one_core_attach(struct ss
 
 static void b43_sprom_fixup(struct ssb_bus *bus)
 {
+   struct pci_dev *pdev;
+
/* boardflags workarounds */
if (bus-boardinfo.vendor == SSB_BOARDVENDOR_DELL 
bus-chip_id == 0x4301  bus-boardinfo.rev == 0x74)
@@ -4009,6 +4020,14 @@ static void b43_sprom_fixup(struct ssb_b
if (bus-boardinfo.vendor == PCI_VENDOR_ID_APPLE 
bus-boardinfo.type == 0x4E  bus-boardinfo.rev  0x40)
bus-sprom.boardflags_lo |= B43_BFL_PACTRL;
+   if (bus-bustype == SSB_BUSTYPE_PCI) {
+   pdev = bus-host_pci;
+   if (pdev-vendor == PCI_VENDOR_ID_BROADCOM 
+   pdev-device == 0x4318 
+   pdev-subsystem_vendor == PCI_VENDOR_ID_ASUSTEK 
+   pdev-subsystem_device == 0x100F)
+   bus-sprom.boardflags_lo = ~B43_BFL_BTCOEXIST;
+   }
 }
 
 static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl)
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Tons of interrupts on driver load

2008-04-24 Thread Richard Jonsson
Hello,

First some background:
I am currently running latest mainline from git. This kernel suffers 
from a scheduler? issue where keys get stuck and audio skips every now 
and then. Confirmed to be triggered by a commit named sched: fix fair 
sleepers.

I am currently on wired lan and have the wireless disabled via hardware 
button. The b43 module is still loaded.

While trying to find what these hickups come from I ran watch --interval 
.1 cat /proc/interrupts. I can see there that the b43 disappears, gets 
unloaded probably, and then reappears.

When b43 reappears in the interrupt listing, that line generates some 
25000 irq's within a fraction of a second. Is this a bug somewhere or by 
design?

Note that I wouldn't ever see this if the kernel was behaving as normal. 
I have no idea if the b43 driver has always behaved like this. I could 
of course test an older kernel on request.

regards, Richard
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: Tons of interrupts on driver load

2008-04-24 Thread Pavel Roskin
On Thu, 2008-04-24 at 21:48 +0200, Richard Jonsson wrote:
 Hello,
 
 First some background:
 I am currently running latest mainline from git. This kernel suffers 
 from a scheduler?

I think this question is more suited for LKML.

 While trying to find what these hickups come from I ran watch --interval 
 .1 cat /proc/interrupts. I can see there that the b43 disappears, gets 
 unloaded probably, and then reappears.

You should probably show the exact contents of /proc/interrupts and
provide some details about the systems (architecture, CPU speed,
contents of /proc/sched_debug, lspci output, dmesg output).

 When b43 reappears in the interrupt listing, that line generates some 
 25000 irq's within a fraction of a second. Is this a bug somewhere or by 
 design?

It's possible that the interrupt count is not shown when the driver
disappears, but is not reset to 0.  Once the interrupt has a handler,
the original count is shown.

 Note that I wouldn't ever see this if the kernel was behaving as normal. 
 I have no idea if the b43 driver has always behaved like this. I could 
 of course test an older kernel on request.

That's probably a good idea, as the LKML folks would suspect something
they know least about, i.e. the hardware.

-- 
Regards,
Pavel Roskin
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Feedback on ASUS WL-138G V2 on x86_64

2008-04-24 Thread kala mazoo

Greets,
 I've spent the last too many hours trying to recreate
exactly what I'd done on the 32bit machine, on this box - an
AMD/x2 64bit unit. The software instance installed  is  a
'pure_64bit' type with no 32bit compat at all. The board is
using the nvidia CK804 chipset.

Forgetting about the hardware for a moment, I simply could
*not* get what I'd built/installed on the 32bit machine, to even
build on this 64bit thing. (I still don't believe this ;) That is to
say, I attempted to get this 64bit thing to the same place...ie;

  linux-2.6.25
  compat-wireless-2008-04-20 + Michael's patch series 'mb-wl-20080420-1630'


..has me beat at the moment. The 2.6.25 kernel builds and runs fine 
in pristine form, but the compat-wireless+patches updates are 
producing modules with unknown symbols, and hence will not load.
In b43 mod's case, it claimed to have unknown symbols ;

ssb_bus_resume
ssb_bus_suspend
ssb_bus_pcmciabus_register

...although these are clearly available and present in ssb.o -
nothing like this occurred with the 32bit build. Curious...

So I abandoned this bent in an effort to remain unconcerned.

What I'd done -should've- worked though

InsteadI fathomed out the following logic -- on the 32bit machine
with a pristine 2.6.24 built and installed, b43 will *not* work on these
asus wl-138g v2 cards and now we know why. We also know that
if one does -nothing- to the software set, but instead changes the
ssb_sprom settings on the card itself, b43 *will* then start to work
the card on 32bit. Ergo, I should try see if this so on 64bit...

It isn'tthe above logic doesn't hold true on 64bit. With a fresh 
clean 2.6.24 kernel installed and running, and with the sprom image
Stefanik provided (the same one used to gain clues on the 32bit box)
written into the card, b43 behaves exactly the same as it did before -
nada...
 then I recalled concerns over IOMMU functionality raised
before, so I rebooted with the iommu=off kernel bootparam and tried
again. It still doesn't work, however. following this sequence;

/config radio layer/

iwconfig wlan0 essid dfg
iwconfig wlan0 channel 1
iwconfig wlan0 key 1122334455

/check result/

iwconfig wlan0

wlan0 IEEE 802.11g  ESSID:dfg  
  Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated   
  Tx-Power=27 dBm   
  Retry min limit:7   RTS thr:off   Fragment thr=2346 B   
  Encryption key:1122-3344-55
  Link Quality:0  Signal level:0  Noise level:0
  Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
  Tx excessive retries:0  Invalid misc:0   Missed beacon:0

/seems ok, config IP layer and bring it up/

ifconfig wlan0 172.16.1.111 netmask 255.255.255.0 up

/check result/

ifconfig wlan0

wlan0 Link encap:Ethernet  HWaddr 00:14:A5:0C:8D:EF  
  inet addr:172.16.1.111  Bcast:172.16.1.255  Mask:255.255.255.0
  UP BROADCAST MULTICAST  MTU:1500  Metric:1
  RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:1000 
  RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

/ all looks sane, now this.../

iwlist wlan0 scanning

wlan0 No scan results

=dmesg output==

HW CONFIG: channel=11 freq=2462 phymode=2
phy0: TX to low-level driver (len=42) FC=0x0040 DUR=0x A1=ff:ff:ff:ff:ff:ff 
A2=00:14:a5:0c:8d:ef A3=ff:ff:ff:ff:ff:ff
WARNING: at drivers/net/wireless/b43/dma.c:1095 parse_cookie()
Pid: 0, comm: swapper Tainted: PF   2.6.24 #1

Call Trace:
   [] :b43:b43_dma_handle_txstatus+0xaa/0x460
 [] :b43:b43_debugfs_log_txstat+0x3e/0xe0
 [] :b43:b43_interrupt_tasklet+0x28b/0x7f0
 [] tasklet_action+0x48/0xb0
 [] __do_softirq+0x69/0xe0
 [] call_softirq+0x1c/0x30
 [] do_softirq+0x35/0x90
 [] irq_exit+0x55/0x60
 [] do_IRQ+0x80/0x100
 [] default_idle+0x0/0x40
 [] ret_from_intr+0x0/0xa
   [] default_idle+0x29/0x40
 [] cpu_idle+0x70/0xe0



That passage gets repeated to dmesg multiple times in a
rapid fire machinegun type of way.


Apart from the fact I probably shouldn't be @ 2.6.24 with
this (I'll move to 2.6.25-git5 next reboot), can someone
please advise me on where to head next hunting this?


Regards,

 Donald




_
Are you paid what you're worth? Find out: SEEK Salary Centre
http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fninemsn%2Eseek%2Ecom%2Eau%2Fcareer%2Dresources%2Fsalary%2Dcentre%2F%3Ftracking%3Dsk%3Ahet%3Asc%3Anine%3A0%3Ahot%3Atext_t=764565661_r=OCT07_endtext_salary_m=EXT
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


[PATCH V3] ssb-sprom: Update README

2008-04-24 Thread Larry Finger
Michael,

This version modifies the setting of the patch to ssb_sprom to handle
systems with multiple SSB-based devices.

Larry
---

Index: ssb_sprom/README
===
--- ssb_sprom.orig/README
+++ ssb_sprom/README
@@ -13,3 +13,106 @@ Requirements
  

  1)C99 compatible compiler.
+
+Usage
+-
+
+The contents of the sprom are exposed to the user in sysfs. This
+tool can, in principle, read and write the sprom in place; however,
+making a mistake during sprom writing could render your device
+unusable. For this reason, we recommend copying the sprom contents
+to disk as the first step. This copy can then be modified until it
+contains the desired new information. Only then and with caution
+should the sprom be rewritten. DO NOT MAKE ANY CHANGES UNLESS YOU
+KNOW WHAT YOU ARE DOING You have been warned!!!
+
+Obtaining a disk copy of the sprom contents
+---
+
+This file name for the sprom contents depends on the bus layout of
+the specific computer being used and will be something like
+
+/sys/devices/pci:00/:00:0d.0/:04:00.0/ssb_sprom
+
+It is not recommended that you try to type the name. Instead, you
+should use the following commands to get and check the path for the
+sprom file:
+
+SSB_SPROM=$(find /sys -name ssb_sprom)
+echo $SSB_SPROM
+
+If the echo command only results in a single instance of /sys/...,
+you may proceed. For systems with more than one SSB-based interface,
+there will be such a string for each, and the command that sets the
+SSB_SPROM symbol will have to be changed. In the name above, the
+sequence states that this device is attached to the 0'th PCI bus via
+bridge 0d.0 and is device 04:00.0 on that bridge. To find which of
+your SSB devices to select, use the 'lspci -v' command. On my system,
+the first line of such output for my interface is 04:00.0 Network
+controller: Broadcom Corporation BCM94311MCG wlan mini-PCI (rev 02).
+To select only this device, one would use
+
+SSB_SPROM=$(find /sys -name ssb_sprom | grep 04:00.0)
+echo $SSB_SPROM
+
+Of course, the 04:00.0 needs to match your system, and check the
+output value to determine that there is now a single instance of
+/sys... and that the path matches the device whose SPROM is to be
+changed. If not, adjust the string after 'grep' accordingly.
+
+Once the SSB_SPROM variable matches the path to ssb_sprom for your
+device, get a working copy of the sprom contents with
+
+sudo cat $SSB_SPROM  ssb_sprom_copy
+
+Modifying the contents of the working copy
+--
+
+You may now see the contents of your sprom with the command
+
+ssb-sprom -i ssb_sprom_copy -P
+
+As an example, let us suppose that you have purchased a Dell mini-pci
+card to use in an HP laptop. The HP BIOS refuses to use the card when
+the pcivendor is Dell (code 0x1028), not HP (code 0x103C). From the
+information provided by an ssb-prom --help command, we learn that
+the switch needed to change this vendor code is --subv. To change
+that code, we use the command
+
+ssb-sprom -i ssb_sprom_copy -o new_ssb_sprom_copy --subv 0x103C
+
+to write the HP vendor ID to our working copy. I use different
+input and output files so as not to destroy the original. If further
+changes are needed, for example the PCI product ID, the command
+
+ssb-sprom -i new_ssb_sprom_copy -o new_ssb_sprom_copy --subp 0x137C
+
+would be used. Note that the input and output files may be the same.
+Once you think you have updated correctly, use
+
+ssb-sprom -i new_ssb_sprom_copy -P
+
+to check the contents.
+
+Rewriting the sprom contents
+
+
+Once the sprom contents are the way you want them, and presumably
+correct, you are ready to rewrite the file. First, use
+
+echo $SSB_SPROM
+
+to ensure that this symbol still contains the SPROM path. If not,
+then it will have to be reloaded as discussed above.
+
+You are then ready to rewrite the sprom with
+
+sudo cp new_ssb_sprom_copy $SSB_SPROM
+
+Once again, you are urged to be absolutely certain of the contents
+of the working copy BEFORE taking this step. If your interface
+becomes unusable as a result of writing incorrect data into the
+sprom, the responsibility is YOURS. Once again, you have been warned.
+
+--
+


___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Inconsistency in handling board revision

2008-04-24 Thread Larry Finger
Michael,

I have discovered that both sprom_extract_r123() in the ssb driver, 
and ssb-sprom use a two-byte quantity to extract the board revision. 
In the specifications detailed in 
http://bcm-v4.sipsolutions.net/SPROM, a single-byte is used for this 
parameter.

It is unlikely that this causes any serious difficulties; however, at 
least one fixup depends on the board revision, and I wanted to be 
certain that you were aware of the situation.

Larry
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: Feedback on ASUS WL-138G V2 on x86_64

2008-04-24 Thread Larry Finger
Donald,

kala mazoo wrote:
 Greets,
  I've spent the last too many hours trying to recreate
 exactly what I'd done on the 32bit machine, on this box - an
 AMD/x2 64bit unit. The software instance installed  is  a
 'pure_64bit' type with no 32bit compat at all. The board is
 using the nvidia CK804 chipset.
 
 Forgetting about the hardware for a moment, I simply could
 *not* get what I'd built/installed on the 32bit machine, to even
 build on this 64bit thing. (I still don't believe this ;) That is to
 say, I attempted to get this 64bit thing to the same place...ie;
 
   linux-2.6.25
   compat-wireless-2008-04-20 + Michael's patch series 'mb-wl-20080420-1630'
 
 
 ..has me beat at the moment. The 2.6.25 kernel builds and runs fine 
 in pristine form, but the compat-wireless+patches updates are 
 producing modules with unknown symbols, and hence will not load.
 In b43 mod's case, it claimed to have unknown symbols ;
 
 ssb_bus_resume
 ssb_bus_suspend
 ssb_bus_pcmciabus_register

I don't know why the symbols are unknown, but you should not have to 
use compat-wireless. For the BCM4318, even plain-vanilla 2.6.24 has 
everything that your card should need, except for Michael's patch for 
the bad SPROM.

 
 ...although these are clearly available and present in ssb.o -
 nothing like this occurred with the 32bit build. Curious...
 
 So I abandoned this bent in an effort to remain unconcerned.
 
 What I'd done -should've- worked though
 
 InsteadI fathomed out the following logic -- on the 32bit machine
 with a pristine 2.6.24 built and installed, b43 will *not* work on these
 asus wl-138g v2 cards and now we know why. We also know that
 if one does -nothing- to the software set, but instead changes the
 ssb_sprom settings on the card itself, b43 *will* then start to work
 the card on 32bit. Ergo, I should try see if this so on 64bit...
 
 It isn'tthe above logic doesn't hold true on 64bit. With a fresh 
 clean 2.6.24 kernel installed and running, and with the sprom image
 Stefanik provided (the same one used to gain clues on the 32bit box)
 written into the card, b43 behaves exactly the same as it did before -
 nada...
  then I recalled concerns over IOMMU functionality raised
 before, so I rebooted with the iommu=off kernel bootparam and tried
 again. It still doesn't work, however. following this sequence;
 
 /config radio layer/
 
 iwconfig wlan0 essid dfg
 iwconfig wlan0 channel 1
 iwconfig wlan0 key 1122334455
 
 /check result/
 
 iwconfig wlan0
 
 wlan0 IEEE 802.11g  ESSID:dfg  
   Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated   
   Tx-Power=27 dBm   
   Retry min limit:7   RTS thr:off   Fragment thr=2346 B   
   Encryption key:1122-3344-55
   Link Quality:0  Signal level:0  Noise level:0
   Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
   Tx excessive retries:0  Invalid misc:0   Missed beacon:0
 
 /seems ok, config IP layer and bring it up/
 
 ifconfig wlan0 172.16.1.111 netmask 255.255.255.0 up
 
 /check result/
 
 ifconfig wlan0
 
 wlan0 Link encap:Ethernet  HWaddr 00:14:A5:0C:8D:EF  
   inet addr:172.16.1.111  Bcast:172.16.1.255  Mask:255.255.255.0
   UP BROADCAST MULTICAST  MTU:1500  Metric:1
   RX packets:0 errors:0 dropped:0 overruns:0 frame:0
   TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
   collisions:0 txqueuelen:1000 
   RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
 
 / all looks sane, now this.../
 
 iwlist wlan0 scanning
 
 wlan0 No scan results
 
 =dmesg output==
 
 HW CONFIG: channel=11 freq=2462 phymode=2
 phy0: TX to low-level driver (len=42) FC=0x0040 DUR=0x 
 A1=ff:ff:ff:ff:ff:ff 
 A2=00:14:a5:0c:8d:ef A3=ff:ff:ff:ff:ff:ff
 WARNING: at drivers/net/wireless/b43/dma.c:1095 parse_cookie()
 Pid: 0, comm: swapper Tainted: PF   2.6.24 #1
 
 Call Trace:
[] :b43:b43_dma_handle_txstatus+0xaa/0x460
  [] :b43:b43_debugfs_log_txstat+0x3e/0xe0
  [] :b43:b43_interrupt_tasklet+0x28b/0x7f0
  [] tasklet_action+0x48/0xb0
  [] __do_softirq+0x69/0xe0
  [] call_softirq+0x1c/0x30
  [] do_softirq+0x35/0x90
  [] irq_exit+0x55/0x60
  [] do_IRQ+0x80/0x100
  [] default_idle+0x0/0x40
  [] ret_from_intr+0x0/0xa
[] default_idle+0x29/0x40
  [] cpu_idle+0x70/0xe0
 
 

If you apply the patch for DMA quirks that Michael listed in 
http://lists.berlios.de/pipermail/bcm43xx-dev/2008-April/007395.html,
do you still get this warning? Doing 30-bit DMA on 64-bit machines can 
be dicey. How much RAM does the system have?

Did you build ssb and b43 with debugging enabled? If not, please do, 
and send all messages from dmesg that contain either ssb or b43.

Larry

___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev