Stomping on Athlon bug

From: VDA (VDA@port.imtp.ilyichevsk.odessa.ua)
Date: Thu Sep 13 2001 - 04:13:04 EST


Hi. Below is a modified printout of lspci -vvvxxx
made on VIA KT133A based mainboard with BIOS version 3R flashed in
(this system is exhibiting Athlon bug) and on the same system
with BIOS version YH (which do not trigger bug).
Each chipset config register which is changed between these two BIOSes
is underlined with carets "^" with programming details immediately below.
Each register is then commented with:
*** 3R BIOS: settings made by 3R BIOS
*** YH BIOS: settings made by YH BIOS
*** TODO: is this relevant and what to do

Anyone interested in trying to pin down the bug might
try to reprogram this chipset along the lines:
    ...
    struct pci_dev *dev;
    dev = pci_find_device(PCI_VENDOR_ID_VIA, 0x0305, NULL);
    if(dev) {
        printk("Trying to stomp on Athlon bug...\n");
        u8 v;
        pci_read_config_byte(dev, 0x52, &v);
        /* set 52.7: Disconnect Enable When STPGNT Detected */
        v |= 0x80;
        pci_write_config_byte(dev, 0x52, v);
        ...
    }
    ...
I'm not sure where exactly this piece of code should go.
Anyway, compile K7 optimized kernel with this fix
and give it a try.
========================================================
00:00.0 Host bridge: VIA Technologies, Inc.: Unknown device 0305 (rev 03)
        Subsystem: ABIT Computer Corp.: Unknown device a401
                
YH 00: 06 11 05 03 06 00 10 22 03 00 00 06 00 00 00 00
3R 00: 06 11 05 03 06 00 10 22 03 00 00 06 00 08 00 00
                                              ^^
Device 0 Offset D - Latency Timer (00h)(RW)
Specifies the latency timer value in PCI bus clocks.
7-3 Guaranteed Time Slice for CPU. default=0
2-0 Reserved (fixed granularity of 8 clks). always read 0
    Bits 2-1 are writeable but read 0 for PCI specification
    compatibility. The programmed value may be read
    back in Offset 75 bits 5-4 (PCI Arbitration 1).
*** 3R BIOS: bits 7-3=00001
*** YH BIOS: bits 7-3=00000
*** TODO: probably does not matter

YH 10: 08 00 00 d0 00 00 00 00 00 00 00 00 00 00 00 00
3R 10: 08 00 00 e0 00 00 00 00 00 00 00 00 00 00 00 00
       ^^^^^^^^^^^
Device 0 Offset 13-10 - Graphics Aperture Base
    (00000008h) (RW)
31-28 Upper Programmable Base Address Bits. default=0
27-20 Lower Programmable Base Address Bits. default=0
    These bits behave as if hardwired to 0 if the
    corresponding Graphics Aperture Size register bit
    (Device 0 Offset 84h) is 0.
    27 26 25 24 23 22 21 20 (This Register)
     7 6 5 4 3 2 1 0 (Gr Aper Size)
    RW RW RW RW RW RW RW RW 1M
    RW RW RW RW RW RW RW 0 2M
    RW RW RW RW RW RW 0 0 4M
    RW RW RW RW RW 0 0 0 8M
    RW RW RW RW 0 0 0 0 16M
    RW RW RW 0 0 0 0 0 32M
    RW RW 0 0 0 0 0 0 64M
    RW 0 0 0 0 0 0 0 128M
     0 0 0 0 0 0 0 0 256M
19-0 Reserved. always reads 00008
    Note: The locations in the address range defined by this
    register are prefetchable.

*** 3R BIOS: addr: E0000000
*** YH BIOS: addr: D0000000
*** TODO: probably does not matter

YH 50: 16 f4 eb
3R 50: 16 f4 6b
             ^^
Device 0 Offset 52 - S2K Timing Control III..................RW
    The contents of this register are preserved during suspend.
    Bits 2-0 have no default value.
7 Disconnect Enable When STPGNT Detected
6 Write to Read Delay. default = 1
5-4 Read to Write Delay. default = 11b
3 1ns Skew Between Even / Odd Clock Group For Data (Strapped
  from MAB3)
    0 Disable (default if no strap on MAB3)
    1 Enable
2-0 Write Data Delay from SYSDC to CPU Data
  Output (WrDataDly)
*** 3R BIOS: bit 7=0
*** YH BIOS: bit 7=1
*** TODO: try to set bit 7 to 1.

YH 50: .. .. .. b4 06
3R 50: .. .. .. b4 47
                   ^^
Device 0 Offset 54 - BIU Control (RW)
7 SDRAM Self-Refresh When Disconnected
    0 Disable (default) 1 Enable
6 Probe Next Tag State T1 When PCI Master Read
 Cacheing Enabled
    0 Disable (default) 1 Enable
5 S2K Data Input Buffer
    0 Disable (default
) 1 Enable
4 S2K Data Output Enable Timing
    0 1T Setup / Hold (default) 1 1/2T Setup / Hold
3 DRAM Speculative Read for PCI Master Read
 (Before Probe Result is Known)
    0 Disable (default) 1 Enable
2 PCI Master Pipeline Request
    0 Disable (default) 1 Enable
1 PCI-to-CPU / CPU-to-PCI (P2C / C2P)
 Concurrency
    0 Disable (default) 1 Enable
0 Fast Write-to-Read Turnaround
    0 Disable (default) 1 Enable
*** 3R BIOS: enabled 6,2,1,0 bits only.
*** YH BIOS: enabled 2,1 bits only.
*** TODO: try disabling bits 6,0.
    bit 0 is most interesting. Try it first.
    
YH 50: .. .. .. .. .. 00 04 04 00 00 01 02 03 04 04 04
3R 50: .. .. .. .. .. 89 04 04 00 00 01 02 03 04 04 04
                      ^^
Device 0 Offset 55 - Debug (RW)
7-0 Reserved (do not program). default = 0
*** 3R BIOS: non-zero!?
*** YH BIOS: zero.
*** TODO: try to set to 0.

YH 60: 0f 0a 00 20 e4 e4 d4 c4 50 28 65 0d 08 5f 00 00
3R 60: 0f 0a 00 20 e4 e4 d4 00 50 08 65 0d 08 5f 00 00
                                  ^^
Device 0 Offset 69 - DRAM Clock Select (00h) (RW)
7 Reserved. always reads 0
6 DRAM Operating Frequency Faster Than CPU
    0 DRAM Same As or Equal to CPU (default)
    1 DRAM Faster Than CPU by 33 MHz
    Rx68[0] Rx69[6] CPU / DRAM
          0 0 100 / 100
          0 1 100 / 133
          1 0 133 / 133 (default)
          1 1 -reserved-
5 Write Recovery Time For Write With Auto-Precharge
    0 1T (default) 1 2T
4 DRAM Controller Command Register Output
    0 Disable (default) 1 Enable
3 Fast DRAM Precharge for Different Bank
    0 Disable (default) 1 Enable
2 DRAM 4K Page Enable (for 64Mbit DRAM)
    0 Disable (default) 1 Enable
1 DIMM Type
    0 Unbuffered (default) 1 Registered
0 AutoPrecharge on CPU Writeback / TLB Lookup
    0 Disable (default) 1 Enable
*** 3R BIOS: bit 5 is 0
*** YH BIOS: bit 5 is 1
*** TODO: try setting it back to 1

YH 70: d4 88 cc 0c 0e 81 d2 00 01 b4 19 02 00 00 00 00
3R 70: d8 88 cc 0c 0e 81 d2 00 01 b4 19 02 00 00 00 00
       ^^
Device 0 Offset 70 - PCI Buffer Control (00h) (RW)
7 CPU to PCI Post-Write
    0 Disable (default) 1 Enable
6 PCI Master to DRAM Post-Write
    0 Disable (default) 1 Enable
5 Reserved. always reads 0
4 PCI Master to DRAM Prefetch
    0 Enable (default) 1 Disable
3 Enhance CPU-to-PCI Write
    0 Normal operation (default)
    1 Reduce 1 cycle when the CPU-to-PCI buffer
      becomes available after being full (PCI and AGP buses)
2 PCI Master Read Caching
    0 Disable (default) 1 Enable
1 Delay Transaction
    0 Disable (default) 1 Enable
0 Slave Device Stopped Idle Cycle Reduction
    0 Normal Operation (default)
    1 Reduce 1 PCI idle cycle when stopped by a
      slave device (PCI and AGP buses)
*** 3R BIOS: bit 4=1, 3=0
*** YH BIOS: bit 4=0, 3=1
*** TODO: probably doesn't matter

YH a0: 02 c0 20 00 03 02 00 1f 00 00 00 00 2b 12 00 00
3R a0: 02 c0 20 00 03 02 00 1f 00 00 00 00 2f 12 00 00
                                           ^^
Device 0 Offset AC - AGP Control (00h) (RW)
7 Reserved. always reads 0
6 CPU Stall on AGP Command FIFO GART
 Address Request
    0 Disable (default) 1 Enable
5 AGP Read Snoop DRAM Post-Write Buffer
    0 Disable (default) 1 Enable
4 GREQ# Priority Becomes Higher When Arbiter is
 Parked at AGP Master
    0 Disable (default) 1 Enable
3 2X Rate Supported (read also at RxA4[1])
    0 Not supported (default) 1 Supported
2 LPR In-Order Access (Force Fence)
    0 Fence/Flush functions not guaranteed. AGP
      read requests (low/normal priority and
      high priority) may be executed
      before previously issued write requests
      (default)
    1 Force all requests to be executed in order
      (automatically enables Fence/Flush functions).
      Low (i.e., normal) priority AGP read requests
      will never be executed before previously
      issued writes. High priority AGP read requests
      may still be executed prior to previously issued
      write requests as required.
1 AGP Arbitration Parking
    0 Disable (default)
    1 Enable (GGNT# remains asserted until either
      GREQ# de-asserts or data phase ready)
0 AGP to PCI Master or CPU to PCI Turnaround Cycle
    0 2T or 3T Timing (default)
    1 1T Timing
*** 3R BIOS: bit 2=1
*** YH BIOS: bit 2=0
*** TODO: probably doesn't matter
    
YH b0: db 63 02
3R b0: db 63 1a
             ^^
Device 0 Offset B2 - AGP Pad Drive / Delay Control (RW)
7 GD/GBE/GDS, SBA/SBS Control
  1.5V (Bit-1 = 0)
    0 SBA/SBS = no cap (default)
      GD/GBE/GDS = no cap
    1 SBA/SBS = no cap
      GD/GBE/GDS = cap
  3.3V (Bit-1 = 1)
    0 SBA/SBS = cap (default)
      GD/GBE/GDS = no cap
    1 SBA/SBS = cap
      GD/GBE/GDS = cap
6 Reserved. always reads 0
5 S2K Slew Rate Control. strapped from SRASA#
    0 Enable (default) 1 Disable
4 GD[31-16] Staggered Delay
    0 None (default) 1 GD[31:16] delayed by 1 ns
3 Reserved. always reads 0
2 AGP Preamble Control
    0 Disable (default) 1 Enable
1 AGP Voltage
    0 1.5V (default) 1 3.3V
0 GDS Output Delay
    0 None (default)
    1 GDS[1-0] & GDS[1-0]# delayed by 0.4 ns
      (GDS1 & GDS1# will be delayed an additional
      1ns if bit-4 = 1)
*** 3R BIOS: 1A=00011010
*** YH BIOS: 02=00000010
*** TODO: probably doesn't matter

YH b0: .. .. .. 50 31 ff 80 0a 67 00 00 00 00 00 00 00
3R b0: .. .. .. 50 31 ff 80 0b 67 00 00 00 00 00 00 00
                            ^^
Device 0 Offset B7 - S2K Compensation Result 3 (RO)
7-5 Reserved. always reads 0
4-0 S2K Strobe Delay from DLL Counter (Auto)
    default = 0
*** TODO: readonly. doesn't matter

YH f0: 00 00 00 00 00 03 03 00 22 00 00 00 00 00 00 00
3R f0: 00 00 00 00 00 03 03 00 22 00 00 00 00 80 00 00
                                              ^^
Device 0 Offset FD - Back-DoorControl 2 (00h) ........... RW
7-5 Reserved. always reads 0
4-0 Max # of AGP Requests. default = 0
    00000 1 Request
    00001 2 Requests
    00010 3 Requests
    ..... ........
    11111 32 Requests
    (see also RxA7 and RxFC[1])
*** 3R BIOS: 80
*** YH BIOS: 00
*** TODO: probably doesn't matter
    Curious how "always zero" bit 7 happen to become 1

-- 
Best regards, VDA
mailto:VDA@port.imtp.ilyichevsk.odessa.ua
http://port.imtp.ilyichevsk.odessa.ua/vda/

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Sep 15 2001 - 21:00:40 EST