All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Buesch <mb@bu3sch.de>
To: Larry Finger <Larry.Finger@lwfinger.net>
Cc: John W Linville <linville@tuxdriver.com>,
	bcm43xx-dev@lists.berlios.de, linux-wireless@vger.kernel.org
Subject: Re: [RFC/RFT] b43: Allow PIO mode to be selected at module load
Date: Thu, 10 Dec 2009 17:59:52 +0100	[thread overview]
Message-ID: <200912101759.54881.mb@bu3sch.de> (raw)
In-Reply-To: <4b21218d.wt8w3J8GbcDHhv31%Larry.Finger@lwfinger.net>

On Thursday 10 December 2009 17:27:57 Larry Finger wrote:
> If a user encounters the "Fatal DMA Problem" with a BCM43XX device, and
> still wishes to use b43 as the driver, their only option is to rebuild
> the kernel with CONFIG_B43_FORCE_PIO. This patch removes this option and
> allows PIO mode to be selected with a load-time option for the module.
> 
> Once the DMA problem with the BCM4312 devices is solved, this patch will
> likely be reverted.
> 
> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> ---
> 
> 
> Index: wireless-testing/drivers/net/wireless/b43/Kconfig
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/b43/Kconfig
> +++ wireless-testing/drivers/net/wireless/b43/Kconfig
> @@ -79,10 +79,11 @@ config B43_SDIO
>  	  If unsure, say N.
>  
>  # Data transfers to the device via PIO
> -# This is only needed on PCMCIA and SDIO devices. All others can do DMA properly.
> +# Technically, this is only needed on PCMCIA and SDIO devices; but some LP PHYs
> +# cannot do DMA properly.
>  config B43_PIO
>  	bool
> -	depends on B43 && (B43_SDIO || B43_PCMCIA || B43_FORCE_PIO)
> +	depends on B43
>  	select SSB_BLOCKIO
>  	default y

Just remove the kconfig entry, too. ;)
Add the select SSB_BLOCKIO to CONFIG_B43

> @@ -137,12 +138,4 @@ config B43_DEBUG
>  	  for production use.
>  	  Only say Y, if you are debugging a problem in the b43 driver sourcecode.
>  
> -config B43_FORCE_PIO
> -	bool "Force usage of PIO instead of DMA"
> -	depends on B43 && B43_DEBUG
> -	---help---
> -	  This will disable DMA and always enable PIO instead.
>  
> -	  Say N!
> -	  This is only for debugging the PIO engine code. You do
> -	  _NOT_ want to enable this.
> Index: wireless-testing/drivers/net/wireless/b43/Makefile
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/b43/Makefile
> +++ wireless-testing/drivers/net/wireless/b43/Makefile
> @@ -12,7 +12,7 @@ b43-y				+= xmit.o
>  b43-y				+= lo.o
>  b43-y				+= wa.o
>  b43-y				+= dma.o
> -b43-$(CONFIG_B43_PIO)		+= pio.o
> +b43-y				+= pio.o
>  b43-y				+= rfkill.o
>  b43-$(CONFIG_B43_LEDS)		+= leds.o
>  b43-$(CONFIG_B43_PCMCIA)	+= pcmcia.o
> Index: wireless-testing/drivers/net/wireless/b43/b43.h
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/b43/b43.h
> +++ wireless-testing/drivers/net/wireless/b43/b43.h
> @@ -821,11 +821,9 @@ struct b43_wl {
>  	/* The device LEDs. */
>  	struct b43_leds leds;
>  
> -#ifdef CONFIG_B43_PIO
>  	/* Kmalloc'ed scratch space for PIO TX/RX. Protected by wl->mutex. */
>  	u8 pio_scratchspace[110] __attribute__((__aligned__(8)));
>  	u8 pio_tailspace[4] __attribute__((__aligned__(8)));
> -#endif /* CONFIG_B43_PIO */
>  };
>  
>  static inline struct b43_wl *hw_to_b43_wl(struct ieee80211_hw *hw)
> @@ -876,20 +874,9 @@ static inline void b43_write32(struct b4
>  
>  static inline bool b43_using_pio_transfers(struct b43_wldev *dev)
>  {
> -#ifdef CONFIG_B43_PIO
>  	return dev->__using_pio_transfers;
> -#else
> -	return 0;
> -#endif
>  }
>  
> -#ifdef CONFIG_B43_FORCE_PIO
> -# define B43_FORCE_PIO	1
> -#else
> -# define B43_FORCE_PIO	0
> -#endif
> -
> -
>  /* Message printing */
>  void b43info(struct b43_wl *wl, const char *fmt, ...)
>      __attribute__ ((format(printf, 2, 3)));
> Index: wireless-testing/drivers/net/wireless/b43/main.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/b43/main.c
> +++ wireless-testing/drivers/net/wireless/b43/main.c
> @@ -102,6 +102,9 @@ int b43_modparam_verbose = B43_VERBOSITY
>  module_param_named(verbose, b43_modparam_verbose, int, 0644);
>  MODULE_PARM_DESC(verbose, "Log message verbosity: 0=error, 1=warn, 2=info(default), 3=debug");
>  
> +static int modparam_pio;
> +module_param_named(pio, modparam_pio, int, 0444);
> +MODULE_PARM_DESC(pio, "enable(1) / disable(0) PIO mode");
>  
>  static const struct ssb_device_id b43_ssb_tbl[] = {
>  	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
> @@ -1786,8 +1789,8 @@ static void b43_do_interrupt_thread(stru
>  			       dma_reason[4], dma_reason[5]);
>  			b43err(dev->wl, "This device does not support DMA "
>  			       "on your system. Please use PIO instead.\n");
> -			b43err(dev->wl, "CONFIG_B43_FORCE_PIO must be set in "
> -			       "your kernel configuration.\n");
> +			b43err(dev->wl, "Unload the b43 module and reload "
> +			       "with 'pio=1'\n");
>  			return;
>  		}
>  		if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) {
> @@ -4353,11 +4356,9 @@ static int b43_wireless_core_init(struct
>  
>  	if ((dev->dev->bus->bustype == SSB_BUSTYPE_PCMCIA) ||
>  	    (dev->dev->bus->bustype == SSB_BUSTYPE_SDIO) ||
> -	    B43_FORCE_PIO) {
> -		dev->__using_pio_transfers = 1;
> +	    dev->__using_pio_transfers) {

No, check for modparam_pio here instead of __using_pio_transfers.

>  		err = b43_pio_init(dev);
>  	} else {
> -		dev->__using_pio_transfers = 0;

and don't remove that here.

>  		err = b43_dma_init(dev);
>  	}
>  	if (err)
> @@ -4827,6 +4828,8 @@ static int b43_one_core_attach(struct ss
>  	wldev->wl = wl;
>  	b43_set_status(wldev, B43_STAT_UNINIT);
>  	wldev->bad_frames_preempt = modparam_bad_frames_preempt;
> +	if (modparam_pio)
> +		wldev->__using_pio_transfers = 1;

And remove this hunk.

>  	INIT_LIST_HEAD(&wldev->list);
>  
>  	err = b43_wireless_core_attach(wldev);



-- 
Greetings, Michael.

      reply	other threads:[~2009-12-10 17:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-10 16:27 [RFC/RFT] b43: Allow PIO mode to be selected at module load Larry Finger
2009-12-10 16:59 ` Michael Buesch [this message]

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=200912101759.54881.mb@bu3sch.de \
    --to=mb@bu3sch.de \
    --cc=Larry.Finger@lwfinger.net \
    --cc=bcm43xx-dev@lists.berlios.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.