[tulip-bug] Admtek Comet (SMC1255TX) wierd errors on Alpha

Juhan Ernits juhan@cc.ioc.ee
Tue Apr 30 13:47:02 2002


On Mon, 29 Apr 2002, Donald Becker wrote:

> Have you tried
>    http://www.scyld.com/network/tulip.html
>       ftp://www.scyld.com/pub/network/tulip.c

It appears that my problem is a non-standard "feature" of the SMC1255
card.

Well, now i played a bit around with the driver. It appears, that the
SMC1255TX  does not tolerate the default bus performance setting for
alpha. The excerpt of code in the end (copied directly from the latest
tulip.c) seems to work (the card seemed to work with the settings
csr0=0x00A04800 but apparently it can do better than that, since the card
works fine with the default x86 settings on x86 hardware)

So, although cache alignment 32 longwords, burst length 32 longwords
doesn't work ( csr0 = 0x01A00000 | 0xE000; ),
cache alignment 16 longwords, burst length 32 longwords does (csr0 = 0x01A00000 | 0xA000;)

My question now is if it is possible to differentiate this setting for
different boards on the same system within one module? 

Is there any point performancewise? 

What would be the best way to stresstest the new setting and find a kind
of optimum? 

Looking forward to your answer,

thankfully,

Juhan Ernits


Excerpt from tulip.c:


/*
  Set the bus performance register.
        Typical: Set 16 longword cache alignment, no burst limit.
        Cache alignment bits 15:14           Burst length 13:8
                0000    No alignment  0x00000000 unlimited
0800 8 longwords
                4000    8  longwords            0100 1 longword
1000 16 longwords
                8000    16 longwords            0200 2 longwords
2000 32 longwords
                C000    32  longwords           0400 4 longwords
        Warning: many older 486 systems are broken and require setting
0x00A04800
           8 longword cache alignment, 8 longword burst.
        ToDo: Non-Intel setting could be better.
*/

/*

#if defined(__alpha__)
static int csr0 = 0x01A00000 | 0xE000;
#elif defined(__i386__) || defined(__powerpc__) || defined(__sparc__)
static int csr0 = 0x01A00000 | 0x8000;
#else
#warning Processor architecture undefined!
static int csr0 = 0x00A00000 | 0x4800;
#endif

*/
# this setting seems to work for SMC1255TX on ruffian alpha
static int csr0 = 0x01A00000 | 0xA000;