On Sunday 02 July 2006 17:45, you wrote:
> Michael,
> 
> In trying various things in mac_suspend, I accidentally messed up the test 
> for IRQ ready so that the 
> code returned immediately. The bottom line was that nothing went wrong. There 
> were no crashes and no 
> hangs. On that basis, I changed the code as shown in the following patch. 
> This code has been running 
> for two days on my system. Numerous "MAC suspend failed" messages have been 
> logged, but the 
> interface has not failed. I will continue testing.

This patch is not going upstream, as it is broken.
What are you trying to do here?
If the READY bit will be there the first time IT WON'T LOOP ANYWAY.

PLEASE stop messing with the mac_suspend, and apply my original patch.
Damnit!

We _must_ synchronize with the device here. Fullstop.

> ================================================================
> 
> index 1cd47c5..a7ae1a9 100644
> --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> @@ -2307,24 +2147,22 @@ void bcm43xx_mac_enable(struct bcm43xx_p
>       bcm43xx_power_saving_ctl_bits(bcm, -1, -1);
>   }
> 
> -/* http://bcm-specs.sipsolutions.net/SuspendMAC */
> +/* http://bcm-specs.sipsolutions.net/SuspendMAC calls for the code to delay 
> as long as 10 ms for
> +   the interface to set the BCM43xx_IRQ_READY bit in 
> BCM43xx_MMIO_GEN_IRQ_REASON. To date, only
> +   Rev 2 of the BCM4306 has needed any delay before setting the ready bit, 
> and this revision
> +   seems to work OK without a delay, even when the ready bit is not set. 
> Therefore, the delay loop
> +   has been removed. */
> +
>   void bcm43xx_mac_suspend(struct bcm43xx_private *bcm)
>   {
> -     int i;
> -     u32 tmp;
> -
>       bcm43xx_power_saving_ctl_bits(bcm, -1, 1);
>       bcm43xx_write32(bcm, BCM43xx_MMIO_STATUS_BITFIELD,
>                       bcm43xx_read32(bcm, BCM43xx_MMIO_STATUS_BITFIELD)
>                       & ~BCM43xx_SBF_MAC_ENABLED);
>       bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON); /* dummy read */
> -     for (i = 100000; i; i--) {
> -             tmp = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON);
> -             if (tmp & BCM43xx_IRQ_READY)
> -                     return;
> -             udelay(10);
> -     }
> -     printkl(KERN_ERR PFX "MAC suspend failed\n");
> +     if (!(bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON) & 
> BCM43xx_IRQ_READY))
> +             printkl(KERN_ERR PFX "MAC suspend failed\n");
> +     return;
>   }
> 
>   void bcm43xx_set_iwmode(struct bcm43xx_private *bcm,
> 
> 
> =================================================================
> 

-- 
Greetings Michael.
_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
http://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to