On Wed, 8 Mar 2006, Francois Romieu wrote:
> Geert Uytterhoeven <[EMAIL PROTECTED]> :
> > On Tue, 7 Mar 2006, Ralf Baechle wrote:
> [...]
> > > I'm just not convinced of having such a workaround as a build option.
> > > The average person building a a kernel will probably not know if the
> > > option needs to be enabled or not.
> > 
> > Indeed, if it's mentioned in the errata of the chip, the driver should take
> > care of it.
> 
> Something like the patch below (+Mr Horton Signed-off-by: and description):
> 
> diff --git a/drivers/net/tulip/tulip.h b/drivers/net/tulip/tulip.h
> index 05d2d96..d109540 100644
> --- a/drivers/net/tulip/tulip.h
> +++ b/drivers/net/tulip/tulip.h
> @@ -262,7 +262,14 @@ enum t21143_csr6_bits {
>  #define RX_RING_SIZE 128 
>  #define MEDIA_MASK     31
>  
> +/* MWI can fail on 21143 rev 65 if the receive buffer ends
> +   on a cache line boundary. Ensure it doesn't ... */
> +
> +#ifdef CONFIG_MIPS_COBALT
> +#define PKT_BUF_SZ           (1536 + 4)
> +#else
>  #define PKT_BUF_SZ           1536    /* Size of each temporary Rx buffer. */
> +#endif
>  
>  #define TULIP_MIN_CACHE_LINE 8       /* in units of 32-bit words */
>  
> diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c
> index c67c912..ca6eeda 100644
> --- a/drivers/net/tulip/tulip_core.c
> +++ b/drivers/net/tulip/tulip_core.c
> @@ -294,6 +294,8 @@ static void tulip_up(struct net_device *
>       if (tp->mii_cnt  ||  (tp->mtable  &&  tp->mtable->has_mii))
>               iowrite32(0x00040000, ioaddr + CSR6);
>  
> +     printk(KERN_DEBUG "%s: CSR0 %08x\n", dev->name, tp->csr0);
> +
>       /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
>       iowrite32(0x00000001, ioaddr + CSR0);
>       udelay(100);
> @@ -1155,8 +1157,10 @@ static void __devinit tulip_mwi_config (
>       /* if we have any cache line size at all, we can do MRM */
>       csr0 |= MRM;
>  
> +#ifndef CONFIG_MIPS_COBALT
>       /* ...and barring hardware bugs, MWI */
>       if (!(tp->chip_id == DC21143 && tp->revision == 65))
> +#endif
>               csr0 |= MWI;

So when compiling for Cobalt, we work around the hardware bug, while for other
platforms, we just disable MWI?

Wouldn't it be possible to always (I mean, when a rev 65 chip is detected) work
around the bug?

>       /* set or disable MWI in the standard PCI command bit.
> @@ -1182,7 +1186,7 @@ static void __devinit tulip_mwi_config (
>        */
>       switch (cache) {
>       case 8:
> -             csr0 |= MRL | (1 << CALShift) | (16 << BurstLenShift);
> +             csr0 |= MRL | (1 << CALShift) | (8 << BurstLenShift);
>               break;
>       case 16:
>               csr0 |= MRL | (2 << CALShift) | (16 << BurstLenShift);

Gr{oetje,eeting}s,

                                                Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [EMAIL PROTECTED]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                                            -- Linus Torvalds
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to