linux/drivers
Mikael Pettersson 78c4af0b43 pata_pdc2027x: PLL detection fixes
Previously I reported that the pata_pdc2027x PLL detection changes
in kernel 2.6.22 broke the driver on my PowerMac:

>pata_pdc2027x: Invalid PLL input clock 1691742kHz, give up!

This is followed by a number of errors and speed reduction
steps on the affected ports.

There are two bugs in pata_pdc2027x's PLL detection code:

1. The PLL counter's start value is read before the chip is
   put in "test mode". Outside of test mode the counter is
   halted, and on the PowerMac the counter is zero because
   the chip hasn't been initialised by its BIOS.

   The fix is to move the read of the start value to after
   test mode is started, but before the mdelay() in test mode.
   This also improves the precision of the PLL detection.

2. The code to compute the number of PLL decrements during the
   mdelay() in test mode fails to consider that the PLL counter
   only is 30 bits wide. If there is a wraparound, it will compute
   an incorrect and much too large value. On the PowerMac, the
   start count is zero, the end count is a large 30-bit value, so
   wraparound occurs and an out of bounds PLL clock is detected.

   The fix is to mask the (start - end) computation to 30 bits.

While debugging this I also noticed that pdc_read_counter()
reads the two halves of the 30-bit PLL counter as 16-bit values,
and then combines them as if the halves only are 15 bits wide.
To avoid confusion, the halves should be read as 15-bit values.

This patch implements all three changes. It fixes the PLL detection
failure on my PowerMac, and doesn't cause any regressions on an x86
with an identical card.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-08-23 05:32:07 -04:00
..
acorn/char Remove the arm26 port 2007-07-31 15:39:39 -07:00
acpi ACPI: EC: Fix "no battery" regression 2007-08-14 01:03:42 -04:00
amba
ata pata_pdc2027x: PLL detection fixes 2007-08-23 05:32:07 -04:00
atm Add some help texts to recently-introduced kconfig items 2007-08-18 09:52:50 -07:00
auxdisplay cfag12864b fix 2007-08-22 19:52:46 -07:00
base CPU online file permission 2007-07-31 15:39:39 -07:00
block Introduce CONFIG_CHECK_SIGNATURE 2007-08-22 19:52:45 -07:00
bluetooth
cdrom [BLOCK] Get rid of request_queue_t typedef 2007-07-24 09:28:11 +02:00
char synclink_gt fix module reference 2007-08-22 19:52:46 -07:00
clocksource x86_64: fix typo in acpi_pm.c 2007-07-21 18:37:12 -07:00
connector
cpufreq
crypto Add some help texts to recently-introduced kconfig items 2007-08-18 09:52:50 -07:00
dio
dma [IOAT]: Remove redundant struct member to avoid descriptor cache miss 2007-08-14 17:36:31 -07:00
edac drivers/edac: fix pasemi kconfig depends 2007-07-26 11:35:18 -07:00
eisa
fc4
firewire firewire: fw-core: make two variables static 2007-08-02 20:34:17 +02:00
firmware
hid Add some help texts to recently-introduced kconfig items 2007-08-18 09:52:50 -07:00
hwmon hwmon: (smsc47m1) restore missing name attribute 2007-08-12 14:39:44 -04:00
i2c i2c-s3c2410: Build fix 2007-08-14 18:37:15 +02:00
ide ide-disk: workaround for buggy HPA support on ST340823A (take 3) 2007-08-20 22:42:57 +02:00
ieee1394 ieee1394: sbp2: more correct Kconfig dependencies 2007-08-02 20:34:16 +02:00
infiniband IB/mlx4: Incorrect semicolon after if statement 2007-08-15 20:24:06 -07:00
input Introduce CONFIG_CHECK_SIGNATURE 2007-08-22 19:52:45 -07:00
isdn hisax: update hfc_usb driver 2007-08-21 10:14:28 -07:00
kvm KVM: Avoid calling smp_call_function_single() with interrupts disabled 2007-08-19 10:13:49 -07:00
leds
lguest i386: Make patching more robust, fix paravirt issue 2007-08-11 15:58:13 -07:00
macintosh m68k/mac: Make mac_hid_mouse_emulate_buttons() declaration visible 2007-08-22 19:52:45 -07:00
mca
md md: correctly update sysfs when a raid1 is reshaped 2007-08-22 19:52:46 -07:00
media V4L/DVB (6028): Turn an unnecessary mdelay() into msleep(). 2007-08-20 12:18:05 -03:00
message Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6 2007-08-06 17:48:34 -07:00
mfd
misc Add some help texts to recently-introduced kconfig items 2007-08-18 09:52:50 -07:00
mmc mmc: at91_mci: remove whitespace at the end of lines 2007-08-09 16:13:44 +02:00
mtd mtdchar build fix 2007-08-11 15:47:41 -07:00
net [PPP]: Fix output buffer size in ppp_decompress_frame(). 2007-08-21 20:59:35 -07:00
nubus
of Create drivers/of/platform.c 2007-07-20 14:25:51 +10:00
oprofile [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs 2007-07-20 21:42:24 +02:00
parisc
parport parport_pc locking fix 2007-07-31 15:39:37 -07:00
pci pci: rename __pci_reenable_device() to pci_reenable_device() 2007-08-01 10:00:56 -04:00
pcmcia pcmcia: give socket time to power down 2007-07-31 15:39:38 -07:00
pnp ACPI: restore CONFIG_ACPI_SLEEP 2007-07-29 16:53:59 -07:00
power Don't compile the PMU power driver on 64-bit PowerPC 2007-07-23 12:42:45 +01:00
ps3
rapidio
rtc rtc-max6902 minor fixes 2007-08-22 19:52:47 -07:00
s390 [S390] vmur: fix reference counting for vmur device structure 2007-08-22 13:51:48 +02:00
sbus Videopix Frame Grabber: Fix unreleased lock in vfc_debug() 2007-07-31 15:39:43 -07:00
scsi Introduce CONFIG_CHECK_SIGNATURE 2007-08-22 19:52:45 -07:00
serial serial: add pci ids for PA Semi PWRficient onchip uarts 2007-08-22 19:52:46 -07:00
sh
sn
spi spidev warning fix 2007-08-11 15:47:42 -07:00
tc
telephony
uio
usb Revert "USB: EHCI cpufreq fix" 2007-08-20 23:38:44 -07:00
video au1100fb: move au1100fb_fb_blank() beforce au1100fb_setmode() 2007-08-22 19:52:47 -07:00
w1 w1: fix w1_remove_master_device() searching 2007-08-22 19:52:46 -07:00
xen xenbus_xs.c: fix a use-after-free 2007-07-26 11:35:17 -07:00
zorro zorro: Make sysfs config attribute read-only 2007-08-22 19:52:45 -07:00
Kconfig Begin to consolidate of_device.c 2007-07-20 13:39:59 +10:00
Makefile [WATCHDOG] Fix pcwd_init_module crash 2007-07-29 18:58:39 +00:00