--- est.c.ORI 2009-07-14 08:57:29.000000000 +0200 +++ est.c 2010-04-15 10:29:11.000000000 +0200 @@ -1207,11 +1207,15 @@ freq = tsc_freq / 1000000; id = msr >> 32; bus = freq / (id >> 8); + if( id & 0x4000 ) + bus = 2 * freq / ( (id >> 7 & 0x7e) + 1 ); device_printf(dev, "Guessed bus clock (high) of %d MHz\n", bus); if (!bus_speed_ok(bus)) { /* We may be running on the low frequency. */ id = msr >> 48; bus = freq / (id >> 8); + if( id & 0x4000 ) + bus = 2 * freq / ( (id >> 7 & 0x7e) + 1 ); device_printf(dev, "Guessed bus clock (low) of %d MHz\n", bus); if (!bus_speed_ok(bus)) return (EOPNOTSUPP); @@ -1219,6 +1223,8 @@ /* Calculate high frequency. */ id = msr >> 32; freq = ((id >> 8) & 0xff) * bus; + if( id & 0x4000 ) + freq =( (id >> 7 & 0x7e) + 1 ) * bus / 2; } /* Fill out a new freq table containing just the high and low freqs. */ @@ -1241,6 +1247,8 @@ /* Second, the low frequency. */ id = msr >> 48; freq = ((id >> 8) & 0xff) * bus; + if( id & 0x4000 ) + freq =( (id >> 7 & 0x7e) + 1 ) * bus / 2; volts = id & 0xff; if (volts != 0) { volts <<= 4;