1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
Package: memtest86+
Version: 1.55
Tags: patch
The current and older versions of memtest86+ does not support the interal
Opteron memory controller properly. These are a few simple fixes for that
in two patches. The patches are against an older version, but visual
inspection says that they should apply well to a current upstreams source
at least.
In addition to this, ecc polling should be turned on for "AMD 762", "AMD
761", "AMD 8000", "AMD 8000", "Intel E7205", "Intel i848/i865", "Intel
i875P", "Intel E7505". (Change the 0 after the string name to 1 in static
struct pci_memory_controller...)
/Mattias Wadenstein
diff -upr memtest86+-1.26.orig/pci.c memtest86+-1.26/pci.c
--- memtest86+-1.26.orig/pci.c Mon May 17 10:50:05 2004
+++ memtest86+-1.26/pci.c Fri Oct 8 10:41:05 2004
@@ -80,12 +83,18 @@ static int pci_sanity_check(void)
{
unsigned long value;
int result;
+ int dev;
+
/* Do a trivial check to make certain we can see a host bridge.
* There are reportedly some buggy chipsets from intel and
* compaq where this test does not work, I will worry about
* that when we support them.
*/
- result = pci_conf_read(0, 0, 0, PCI_CLASS_DEVICE, 2, &value);
+ dev = 0;
+ if (cpu_id.cpuid > 0 && cpu_id.vend_id[0] == 'A' && cpu_id.type == 15) {
+ dev = 24;
+ }
+ result = pci_conf_read(0, dev, 0, PCI_CLASS_DEVICE, 2, &value);
if (result == 0) {
result = -1;
if (value == PCI_CLASS_BRIDGE_HOST) {
diff -upr memtest86+-1.26.orig/controller.c memtest86+-1.26/controller.c
--- memtest86+-1.26.orig/controller.c Wed Sep 1 16:02:00 2004
+++ memtest86+-1.26/controller.c Fri Oct 8 10:46:44 2004
@@ -1705,6 +1708,11 @@ void find_controller(void)
unsigned long device;
int i;
int result;
+
+ /* AMD64 don't have anything on dev 0 (at least not the ones we have access too) */
+ if (cpu_id.cpuid > 0 && cpu_id.vend_id[0] == 'A' && cpu_id.type == 15) {
+ ctrl.dev = 24;
+ }
result = pci_conf_read(ctrl.bus, ctrl.dev, ctrl.fn, PCI_VENDOR_ID, 2, &vendor);
result = pci_conf_read(ctrl.bus, ctrl.dev, ctrl.fn, PCI_DEVICE_ID, 2, &device);
ctrl.index = 0;
|