Re: ichwd on ich9 attach failing ?

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 1 Oct 2008 11:21:21 -0400
On Wednesday 01 October 2008 10:05:48 am Mike Tancsa wrote:
> Does anyone have a board with this chipset where ichwd attaches properly ?
> 
> When I try to load the driver I get
> 
> ichwd module loaded
> isab0: found ICH9 or equivalent chipset: Intel ICH9R watchdog timer
> ichwd0: <Intel ICH9R watchdog timer> on isa0
> isab0: found ICH9 or equivalent chipset: Intel ICH9R watchdog timer
> ichwd0: ICH WDT present but disabled in BIOS or hardware
> device_attach: ichwd0 attach returned 6
> ppc0: parallel port not found.
> 
> the ppc0 error seems normal, as on other boards I see the same error 
> and things attach just fine
> 
> It is enabled in the BIOS as the box will automatically reboot after 
> 5 min, since the watchdog is not set by the OS

Hmm, looks like the test to clear a bit is failing.  Maybe some quality time 
with the ICH9 datasheet (you should be able to find it on 
developer.intel.com) can help resolve this.  Here is the relevant code:

static __inline int
ichwd_clear_noreboot(struct ichwd_softc *sc)
{
	uint32_t status;
	int rc = 0;

	/* try to clear the NO_REBOOT bit */
	if (sc->ich_version <= 5) {
		status = pci_read_config(sc->ich, ICH_GEN_STA, 1);
		status &= ~ICH_GEN_STA_NO_REBOOT;
		pci_write_config(sc->ich, ICH_GEN_STA, status, 1);
		status = pci_read_config(sc->ich, ICH_GEN_STA, 1);
		if (status & ICH_GEN_STA_NO_REBOOT)
			rc = EIO;
	} else {
		status = ichwd_read_gcs_4(sc, 0);
		status &= ~ICH_GCS_NO_REBOOT;
		ichwd_write_gcs_4(sc, 0, status);
		status = ichwd_read_gcs_4(sc, 0);
		if (status & ICH_GCS_NO_REBOOT)
			rc = EIO;
	}

	if (rc)
		device_printf(sc->device,
		    "ICH WDT present but disabled in BIOS or hardware\n");

	return (rc);
}

-- 
John Baldwin
Received on Wed Oct 01 2008 - 17:19:17 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:35 UTC