Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 01 Apr 2001 01:01:42 +0900
From:      WATANABE Kiyoshi <aab10490@pop16.odn.ne.jp>
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   kern/26255: [patch] CS4281 driver, fixed power mode problem.
Message-ID:  <3AC645B6.BD29D9BA@pop16.odn.ne.jp>

next in thread | raw e-mail | index | archive | help

>Number:         26255
>Category:       kern
>Synopsis:       [patch] CS4281 driver, fixed power mode problem.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Mar 31 13:50:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     WATANABE Kiyoshi <aab10490@pop16.odn.ne.jp>
>Release:        FreeBSD 4.3-RC1 i386
>Organization:
japan
>Environment:

	FreeBSD 4.3-RC1 i386
	Celeron 700Mhz.
	i810 mother board.
	CS4281 on board.

>Description:

	[patch] CS4281 driver, fixed power mode problem.

>How-To-Repeat:

	When boot, cs4281_pci_attach() fails if the power state is not in D0. ( not always )

>Fix:

--- cs4281.c-1.4    Sat Mar 24 23:10:27 2001
+++ cs4281.c   Sat Mar 31 19:37:16 2001
@@ -767,8 +767,6 @@
     data |= (PCIM_CMD_PORTEN | PCIM_CMD_MEMEN | PCIM_CMD_BUSMASTEREN);
     pci_write_config(dev, PCIR_COMMAND, data, 2);
 
-    data = pci_read_config(dev, PCIR_COMMAND, 2);
-
 #if __FreeBSD_version > 500000
     if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
	/* Reset the power state. */
@@ -776,6 +774,18 @@
		      "-- setting to D0\n", pci_get_powerstate(dev));
 
	pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+    }
+#else
+
+#define CS4281PCI_PMCS_OFFSET  (CS4281PCI_PMCS - 0x300)
+
+    data = pci_read_config(dev, CS4281PCI_PMCS_OFFSET, 4);
+    if (data & CS4281PCI_PMCS_PS_MASK) {
+	/* Reset the power state. */
+	device_printf(dev, "chip is in D%d power mode "
+		      "-- setting to D0\n", data & CS4281PCI_PMCS_PS_MASK);
+	pci_write_config(dev, CS4281PCI_PMCS_OFFSET,
+			 data & ~CS4281PCI_PMCS_PS_MASK, 4);
     }
 #endif
     sc->regid   = PCIR_MAPS;




>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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