DragonFly BSD
DragonFly users List (threaded) for 2011-09
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: powernow not working on AMD Athlon XP Mobile


From: Maurizio Lombardi <m.lombardi85@xxxxxxxxx>
Date: Thu, 15 Sep 2011 09:39:00 +0200

Hi Sepherosa,

> Well, I think I will need AMD 06h family BKDG to figure out how the
> ACPI VID and FID should be used.  The code we have messed w/ so far is
> according to AMD 0fh family BKDG.

I'm doing some research and looking how other operating systems works
with my Athlon XP-M processor.

1) The DFly's powernow driver is almost identical to the NetBSD's
powernow_k8 driver (NetBSD has a powernow_k7 driver too) , probably
this is the reason why on DFly the powernow module returns an error
message when I try to load it, it simply does not support K7
architectures.

2) On FreeBSD: sys/x86/cpufreq/hwpstate.c

Looks like my CPU family (0x06) is not supported:

--------------------
did = AMD_10H_11H_CUR_DID(msr);
fid = AMD_10H_11H_CUR_FID(msr);
switch(family) {
case 0x11:
	/* fid/did to frequency */
	hwpstate_set[i].freq = 100 * (fid + 0x08) / (1 << did);
	break;
case 0x10:
	/* fid/did to frequency */
	hwpstate_set[i].freq = 100 * (fid + 0x10) / (1 << did);
	break;
default:
	HWPSTATE_DEBUG(dev, "get_info_from_msr: AMD family %d CPU's are not
implemented yet. sorry.\n", family);
	return (ENXIO);
	break;
}

-------------------

But in their powernow driver my cpu family *is* supported:

sys/x86/cpufreq/powernow.c
------------------

switch (cpu_id & 0xf00) {
	case 0x600:
		sfid = PN7_STA_SFID(status);
		mfid = PN7_STA_MFID(status);
		cfid = PN7_STA_CFID(status);
		sc->pn_type = PN7_TYPE;
		sc->fsb = rate / 100000 / pn7_fid_to_mult[cfid];

		/*
		 * If start FID is different to max FID, then it is a
		 * mobile processor.  If not, it is a low powered desktop
		 * processor.
		 */
		if (PN7_STA_SFID(status) != PN7_STA_MFID(status)) {
			sc->vid_to_volts = pn7_mobile_vid_to_volts;
			device_set_desc(dev, "PowerNow! K7");
		} else {
			sc->vid_to_volts = pn7_desktop_vid_to_volts;
			device_set_desc(dev, "Cool`n'Quiet K7");
		}
		break;
-------------------


Cheers,

-- 
--------------------
Maurizio Lombardi




[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]