Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2008 11:21:21 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-current@freebsd.org
Cc:        Mike Tancsa <mike@sentex.net>
Subject:   Re: ichwd on ich9 attach failing ?
Message-ID:  <200810011121.21908.jhb@freebsd.org>
In-Reply-To: <200810011405.m91E5ugg028685@lava.sentex.ca>
References:  <200810011405.m91E5ugg028685@lava.sentex.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810011121.21908.jhb>