[Bug 235944] jedec_dimm(4) does not attach to KFA2 (aka Galax) Hall of Fame DDR4 sticks
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Feb 23 03:45:51 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235944
Ravi Pokala <rpokala at panasas.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |avg at FreeBSD.org
--- Comment #8 from Ravi Pokala <rpokala at panasas.com> ---
The fact that the message from intsmb_error() comes immediately before a
message about failing to change or restore the page, means that the call that
failed was smbus_writeb(), which is ultimately handled by intsmb_writeb():
================================================================
static int
intsmb_writeb(device_t dev, u_char slave, char cmd, char byte)
{
struct intsmb_softc *sc = device_get_softc(dev);
int error;
INTSMB_LOCK(sc);
error = intsmb_free(sc);
if (error) {
INTSMB_UNLOCK(sc);
return (error);
}
bus_write_1(sc->io_res, PIIX4_SMBHSTADD, slave & ~LSB);
bus_write_1(sc->io_res, PIIX4_SMBHSTCMD, cmd);
bus_write_1(sc->io_res, PIIX4_SMBHSTDAT0, byte);
intsmb_start(sc, PIIX4_SMBHSTCNT_PROT_BDATA, 0);
error = intsmb_stop(sc);
INTSMB_UNLOCK(sc);
return (error);
}
================================================================
You can see that intsmb_writeb() does not call intsmb_error() directly.
However, it does call intsmb_stop():
================================================================
static int
intsmb_stop(struct intsmb_softc *sc)
{
int error, status;
INTSMB_LOCK_ASSERT(sc);
if (sc->poll || cold)
/* So that it can use device during device probe on SMBus. */
return (intsmb_stop_poll(sc));
error = msleep(sc, &sc->lock, PWAIT | PCATCH, "SMBWAI", hz / 8);
if (error == 0) {
status = bus_read_1(sc->io_res, PIIX4_SMBHSTSTS);
if (!(status & PIIX4_SMBHSTSTAT_BUSY)) {
error = intsmb_error(sc->dev, status);
if (error == 0 && !(status & PIIX4_SMBHSTSTAT_INTR))
device_printf(sc->dev, "unknown cause why?\n");
#ifdef ENABLE_ALART
bus_write_1(sc->io_res, PIIX4_SMBSLVCNT,
PIIX4_SMBSLVCNT_ALTEN);
#endif
return (error);
}
}
/* Timeout Procedure. */
sc->isbusy = 0;
/* Re-enable suppressed interrupt from slave part. */
bus_write_1(sc->io_res, PIIX4_SMBSLVCNT, PIIX4_SMBSLVCNT_ALTEN);
if (error == EWOULDBLOCK)
return (SMB_ETIMEOUT);
else
return (SMB_EABORT);
}
================================================================
Unfortunately, I'm not familiar enough with this SMBus controller -- or the
intsmb(4) driver -- to debug this further. It looks like the people who have
made functional changes in the past decade are cem@ (already CCed) and avg@
(adding).
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list