On Wed, Feb 14, 2024 at 12:34:17PM +0100, Mark Kettenis wrote: Hello Mark,
>> It seems that I have two (at least) lm devices on my motherboard and >> that it's random which attaches. Here are the two I've seen: >> >> lm0 at isa0 port 0x290/8: W83627DHG >> lm0 at isa0 port 0x290/8: NCT6792D >> >> The W83627DHG gives one fan reading, with an obviously incorrect value: >> >> $ sysctl hw|grep fan >> hw.sensors.lm0.fan0=56250 RPM >> >> The NCT6792D gave more than one, and seemingly correct, fan readings in >> `sysctl hw`. From memory there were at least fan readings for the CPU >> and rear fan, both were showing in the range 350-600 RPM when idling, >> and as soon as I made the CPU do some work the readings went up, and >> when the CPU stopped doing some work the readings went down. >> >> The reason I'm being vague about that is that I have only noticed the >> NCT6792D attaching once, so I can't give those fan readings now. AFAICT >> the W83627DHG nearly always attaches: out of 19 dmesgs I've >> (accidentally) stored over many months, only one contains >> "lm0...NCT6792D". >> >> I'm attaching a dmesg from a kernel built from -current yesterday in >> case this is useful, though it's from an W83627DHG attach. > It is probably a misdetection. There are some heuristics involved in > detecting the chip. And there may even be a 2nd agent here (IPMI, SMM) > that may interfere with the code that tries to detect the chip. I put a `printf` to see what value `sc->sioid` is set to. In fact it seems it can be set to more than one value! So far I've seen: 0x9, 0x89, 0xe9. If I match on those values with the (obviously not commitable!) diff at the end of this email then I get sensible fan values: $ dmesg | grep lm0 lm0 at isa0 port 0x290/8 (0xe9) : unknown 6779D-ish $ sysctl hw.sensors|grep fan hw.sensors.lm0.fan0=610 RPM (System Fan) hw.sensors.lm0.fan1=363 RPM (CPU Fan) hw.sensors.lm0.fan2=0 RPM (Aux Fan0) hw.sensors.lm0.fan3=0 RPM (Aux Fan1) hw.sensors.lm0.fan4=0 RPM (Aux Fan2) These go up and down as I'd expect as the system load varies. I had a quick look at the equivalent Linux driver, but it looks to me like it does detection in a very way that doesn't involve making choices based on sioid? Laurie diff --git sys/dev/ic/lm78.c sys/dev/ic/lm78.c index e60f38577a6..561fe603689 100644 --- sys/dev/ic/lm78.c +++ sys/dev/ic/lm78.c @@ -563,6 +563,7 @@ wb_match(struct lm_softc *sc) lm_setup_sensors(sc, w83627ehf_sensors); break; case WB_CHIPID_W83627DHG: + printf(" (%d) ", sc->sioid); switch (sc->sioid) { case WBSIO_ID_NCT6775F: printf(": NCT6775F\n"); @@ -596,6 +597,12 @@ wb_match(struct lm_softc *sc) printf(": NCT6795D\n"); lm_setup_sensors(sc, nct6779d_sensors); break; + case 0x89: + case 0x9: + case 0xe9: + printf(": unknown 6779D-ish\n"); + lm_setup_sensors(sc, nct6779d_sensors); + break; default: printf(": W83627DHG\n"); lm_setup_s