From aab10490@pop16.odn.ne.jp  Sat Mar 31 13:48:38 2001
Return-Path: <aab10490@pop16.odn.ne.jp>
Received: from t-mta1.odn.ne.jp (mfep1.odn.ne.jp [143.90.131.179])
	by hub.freebsd.org (Postfix) with ESMTP id 3D93C37B719
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 31 Mar 2001 13:48:37 -0800 (PST)
	(envelope-from aab10490@pop16.odn.ne.jp)
Received: from pop16.odn.ne.jp ([143.90.210.102]) by t-mta1.odn.ne.jp
          with ESMTP
          id <20010331214816967.LXJK.13478.t-mta1.odn.ne.jp@mta1.odn.ne.jp>
          for <FreeBSD-gnats-submit@freebsd.org>;
          Sun, 1 Apr 2001 06:48:16 +0900
Message-Id: <3AC645B6.BD29D9BA@pop16.odn.ne.jp>
Date: Sun, 01 Apr 2001 01:01:42 +0900
From: WATANABE Kiyoshi <aab10490@pop16.odn.ne.jp>
Sender: root@FreeBSD.ORG
To: FreeBSD-gnats-submit@freebsd.org
Subject: [patch] CS4281 driver, fixed power mode problem.

>Number:         26255
>Category:       kern
>Synopsis:       [patch] CS4281 driver, fixed power mode problem.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Mar 31 13:50:00 PST 2001
>Closed-Date:    Thu Apr 19 06:24:54 PDT 2001
>Last-Modified:  Thu Apr 19 06:27:31 PDT 2001
>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:
State-Changed-From-To: open->closed 
State-Changed-By: orion 
State-Changed-When: Thu Apr 19 06:24:54 PDT 2001 
State-Changed-Why:  
Patch applied.  Thanks! 


http://www.freebsd.org/cgi/query-pr.cgi?pr=26255 
>Unformatted:
