i386/106850: powernow0 attach returned 6

David Malone dwmalone at maths.tcd.ie
Sat Mar 29 12:20:05 PDT 2008


The following reply was made to PR i386/106850; it has been noted by GNATS.

From: David Malone <dwmalone at maths.tcd.ie>
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: i386/106850: powernow0 attach returned 6
Date: Sat, 29 Mar 2008 17:43:39 +0000

 I see the same thing on a machine that reports a similar BIOS:
  
 	ACPI APIC Table: <VIAK8  AWRDACPI>
  
 I made the patch below to the driver to see what was going on.
 When I do this, it says:
  
 	cpu0: <ACPI CPU> on acpi0
 	powernow0: <Cool`n'Quiet K8> on cpu0
 	powernow0: STATUS: 0x20200101010
 	powernow0: STATUS: maxfid: 0x10
 	powernow0: STATUS: maxvid: 0x00
 	sig 0
 	after pn_decode_pst rv = 19
 	device_attach: powernow0 attach returned 6
  
 This suggests that the driver has failed to find the tables it needs
 in either the BIOS or ACPI. When I check, there is no _PSS entry
 in my ACPI tables, so the acpi_perf driver never attaches. I would
 guess that this is the real problem.
 
 	David.
  
 Index: powernow.c
 ===================================================================
 RCS file: /cvs/FreeBSD-CVS/src/sys/i386/cpufreq/powernow.c,v
 retrieving revision 1.4
 diff -u -r1.4 powernow.c
 --- powernow.c	23 Jan 2007 19:20:30 -0000	1.4
 +++ powernow.c	27 Jan 2007 17:42:17 -0000
 @@ -673,7 +673,7 @@
  		return (ENODEV);
  	}
  
 -	if (bootverbose) {
 +	if (1 || bootverbose) {
  			return (ENODEV);
 @@ -704,7 +706,7 @@
  			sc->irt = PN8_PSB_TO_IRT(psb->res1),
  			sc->mvs = PN8_PSB_TO_MVS(psb->res1),
  			sc->low = PN8_PSB_TO_BATT(psb->res1);
 -			if (bootverbose) {
 +			if (1 || bootverbose) {
  				device_printf(dev, "PSB: VST: %d\n",
  				    psb->settlingtime);
  				device_printf(dev, "PSB: RVO %x IRT %d "
 @@ -968,10 +970,12 @@
  	child = device_find_child(device_get_parent(dev), "acpi_perf", -1);
  	if (child) {
  		rv = pn_decode_acpi(dev, child);
 +		printf("if (child) rv = %d\n", rv);
  		if (rv)
  			rv = pn_decode_pst(dev);
  	} else
  		rv = pn_decode_pst(dev);
 +	printf("after pn_decode_pst rv = %d\n", rv);
  
  	if (rv != 0)
  		return (ENXIO);
 
 


More information about the freebsd-i386 mailing list