mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-14 16:23:51 +08:00
pata_hpt3x2n: calculate average f_CNT
Allow hpt3x2n_pci_clock() to calculate the average f_CNT register value iff HighPoint BIOS hasn't saved one, just like the 'pata_hpt37x' driver (reading the full 16-bit register, unlike what that driver does), so that this driver would work correctly on e.g. non-x86 machine with 66 MHz PCI. I'm not sure why Alan has only done this in one driver and not the other... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
0ca646db68
commit
dfc7e3e37d
@ -25,7 +25,7 @@
|
|||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
|
||||||
#define DRV_NAME "pata_hpt3x2n"
|
#define DRV_NAME "pata_hpt3x2n"
|
||||||
#define DRV_VERSION "0.3.11"
|
#define DRV_VERSION "0.3.12"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
HPT_PCI_FAST = (1 << 31),
|
HPT_PCI_FAST = (1 << 31),
|
||||||
@ -413,8 +413,19 @@ static int hpt3x2n_pci_clock(struct pci_dev *pdev)
|
|||||||
|
|
||||||
fcnt = inl(iobase + 0x90); /* Not PCI readable for some chips */
|
fcnt = inl(iobase + 0x90); /* Not PCI readable for some chips */
|
||||||
if ((fcnt >> 12) != 0xABCDE) {
|
if ((fcnt >> 12) != 0xABCDE) {
|
||||||
printk(KERN_WARNING "hpt3xn: BIOS clock data not set.\n");
|
int i;
|
||||||
return 33; /* Not BIOS set */
|
u16 sr;
|
||||||
|
u32 total = 0;
|
||||||
|
|
||||||
|
printk(KERN_WARNING "pata_hpt3x2n: BIOS clock data not set.\n");
|
||||||
|
|
||||||
|
/* This is the process the HPT371 BIOS is reported to use */
|
||||||
|
for (i = 0; i < 128; i++) {
|
||||||
|
pci_read_config_word(pdev, 0x78, &sr);
|
||||||
|
total += sr & 0x1FF;
|
||||||
|
udelay(15);
|
||||||
|
}
|
||||||
|
fcnt = total / 128;
|
||||||
}
|
}
|
||||||
fcnt &= 0x1FF;
|
fcnt &= 0x1FF;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user