https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235944

--- Comment #7 from Ravi Pokala <rpok...@panasas.com> ---
The fact that the Windows util (and, for that matter, the firmware) can read
the second (256-byte) page of the SPD, means that the SPD's page-change
mechanism does in fact work. That suggests a driver issue.

Conveniently, enabling bootverbose to get the SPD dump from jedec_dimm(4),
*also* enabled error reporting for intsmb(4). That driver is implemented in the
misleadingly-named sys/dev/intpm/intpm.c file; this is an SMBus controller on
an AMD system, not an INTel Power Management controller. <sigh>

> intsmb0: error = 1, status = 0x6

That message can only come from intsmb_error():

================================================================
static int
intsmb_error(device_t dev, int status)
{
        int error = 0;

        if (status & PIIX4_SMBHSTSTAT_ERR)
                error |= SMB_EBUSERR;
        if (status & PIIX4_SMBHSTSTAT_BUSC)
                error |= SMB_ECOLLI;
        if (status & PIIX4_SMBHSTSTAT_FAIL)
                error |= SMB_ENOACK;

        if (error != 0 && bootverbose)
                device_printf(dev, "error = %d, status = %#x\n", error,
status);

        return (error);
}
================================================================

The PIIX4_SMBHSTSTAT* values are defined in sys/dev/intpm/intpmreg.h:

================================================================
#define PIIX4_SMBHSTSTAT_BUSY   (1<<0)
#define PIIX4_SMBHSTSTAT_INTR   (1<<1)
#define PIIX4_SMBHSTSTAT_ERR    (1<<2)
#define PIIX4_SMBHSTSTAT_BUSC   (1<<3)
#define PIIX4_SMBHSTSTAT_FAIL   (1<<4)
================================================================

A "status" value of 0x6 is 00110b : (PIIX4_SMBHSTSTAT_ERR |
PIIX4_SMBHSTSTAT_INTR).

The SMB_E* values are defined in sys/dev/smbus/smbconf.h:

================================================================
#define SMB_ENOERR      0x0
#define SMB_EBUSERR     0x1
#define SMB_ENOTSUPP    0x2
#define SMB_ENOACK      0x4
#define SMB_ECOLLI      0x8
#define SMB_EABORT      0x10
#define SMB_ETIMEOUT    0x20
#define SMB_EBUSY       0x40
#define SMB_EINVAL      0x100
================================================================

An "error" value of 1 is SMB_EBUSERR, which matches the PIIX4_SMBHSTSTAT =>
SMB_E mapping that intsmb_error() does.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to