From owner-freebsd-bugs Sat Mar 31 13:50: 9 2001 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 10F3637B71A for ; Sat, 31 Mar 2001 13:50:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.11.1/8.11.1) id f2VLo1f64426; Sat, 31 Mar 2001 13:50:01 -0800 (PST) (envelope-from gnats) 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 ; 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 ; 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 To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/26255: [patch] CS4281 driver, fixed power mode problem. Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >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 >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