mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev: libata: don't check n_sectors during revalidation if zero pata_via: Add Arima W730-K8 and other rebadgings pata_sis: Add the FSC Amilo and friends pata_pdc2027x: PLL detection fixes libata: fix n_sectors failure handling during revalidation
This commit is contained in:
commit
1a8f46100b
4 changed files with 20 additions and 11 deletions
|
@ -3700,11 +3700,16 @@ int ata_dev_revalidate(struct ata_device *dev, unsigned int readid_flags)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* verify n_sectors hasn't changed */
|
/* verify n_sectors hasn't changed */
|
||||||
if (dev->class == ATA_DEV_ATA && dev->n_sectors != n_sectors) {
|
if (dev->class == ATA_DEV_ATA && n_sectors &&
|
||||||
|
dev->n_sectors != n_sectors) {
|
||||||
ata_dev_printk(dev, KERN_INFO, "n_sectors mismatch "
|
ata_dev_printk(dev, KERN_INFO, "n_sectors mismatch "
|
||||||
"%llu != %llu\n",
|
"%llu != %llu\n",
|
||||||
(unsigned long long)n_sectors,
|
(unsigned long long)n_sectors,
|
||||||
(unsigned long long)dev->n_sectors);
|
(unsigned long long)dev->n_sectors);
|
||||||
|
|
||||||
|
/* restore original n_sectors */
|
||||||
|
dev->n_sectors = n_sectors;
|
||||||
|
|
||||||
rc = -ENODEV;
|
rc = -ENODEV;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -563,13 +563,13 @@ static long pdc_read_counter(struct ata_host *host)
|
||||||
u32 bccrl, bccrh, bccrlv, bccrhv;
|
u32 bccrl, bccrh, bccrlv, bccrhv;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
bccrl = readl(mmio_base + PDC_BYTE_COUNT) & 0xffff;
|
bccrl = readl(mmio_base + PDC_BYTE_COUNT) & 0x7fff;
|
||||||
bccrh = readl(mmio_base + PDC_BYTE_COUNT + 0x100) & 0xffff;
|
bccrh = readl(mmio_base + PDC_BYTE_COUNT + 0x100) & 0x7fff;
|
||||||
rmb();
|
rmb();
|
||||||
|
|
||||||
/* Read the counter values again for verification */
|
/* Read the counter values again for verification */
|
||||||
bccrlv = readl(mmio_base + PDC_BYTE_COUNT) & 0xffff;
|
bccrlv = readl(mmio_base + PDC_BYTE_COUNT) & 0x7fff;
|
||||||
bccrhv = readl(mmio_base + PDC_BYTE_COUNT + 0x100) & 0xffff;
|
bccrhv = readl(mmio_base + PDC_BYTE_COUNT + 0x100) & 0x7fff;
|
||||||
rmb();
|
rmb();
|
||||||
|
|
||||||
counter = (bccrh << 15) | bccrl;
|
counter = (bccrh << 15) | bccrl;
|
||||||
|
@ -692,16 +692,16 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||||
struct timeval start_time, end_time;
|
struct timeval start_time, end_time;
|
||||||
long pll_clock, usec_elapsed;
|
long pll_clock, usec_elapsed;
|
||||||
|
|
||||||
/* Read current counter value */
|
|
||||||
start_count = pdc_read_counter(host);
|
|
||||||
do_gettimeofday(&start_time);
|
|
||||||
|
|
||||||
/* Start the test mode */
|
/* Start the test mode */
|
||||||
scr = readl(mmio_base + PDC_SYS_CTL);
|
scr = readl(mmio_base + PDC_SYS_CTL);
|
||||||
PDPRINTK("scr[%X]\n", scr);
|
PDPRINTK("scr[%X]\n", scr);
|
||||||
writel(scr | (0x01 << 14), mmio_base + PDC_SYS_CTL);
|
writel(scr | (0x01 << 14), mmio_base + PDC_SYS_CTL);
|
||||||
readl(mmio_base + PDC_SYS_CTL); /* flush */
|
readl(mmio_base + PDC_SYS_CTL); /* flush */
|
||||||
|
|
||||||
|
/* Read current counter value */
|
||||||
|
start_count = pdc_read_counter(host);
|
||||||
|
do_gettimeofday(&start_time);
|
||||||
|
|
||||||
/* Let the counter run for 100 ms. */
|
/* Let the counter run for 100 ms. */
|
||||||
mdelay(100);
|
mdelay(100);
|
||||||
|
|
||||||
|
@ -719,7 +719,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||||
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
|
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
|
||||||
(end_time.tv_usec - start_time.tv_usec);
|
(end_time.tv_usec - start_time.tv_usec);
|
||||||
|
|
||||||
pll_clock = (start_count - end_count) / 100 *
|
pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 *
|
||||||
(100000000 / usec_elapsed);
|
(100000000 / usec_elapsed);
|
||||||
|
|
||||||
PDPRINTK("start[%ld] end[%ld] \n", start_count, end_count);
|
PDPRINTK("start[%ld] end[%ld] \n", start_count, end_count);
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct sis_laptop {
|
||||||
static const struct sis_laptop sis_laptop[] = {
|
static const struct sis_laptop sis_laptop[] = {
|
||||||
/* devid, subvendor, subdev */
|
/* devid, subvendor, subdev */
|
||||||
{ 0x5513, 0x1043, 0x1107 }, /* ASUS A6K */
|
{ 0x5513, 0x1043, 0x1107 }, /* ASUS A6K */
|
||||||
|
{ 0x5513, 0x1734, 0x105F }, /* FSC Amilo A1630 */
|
||||||
/* end marker */
|
/* end marker */
|
||||||
{ 0, }
|
{ 0, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
#include <linux/dmi.h>
|
#include <linux/dmi.h>
|
||||||
|
|
||||||
#define DRV_NAME "pata_via"
|
#define DRV_NAME "pata_via"
|
||||||
#define DRV_VERSION "0.3.1"
|
#define DRV_VERSION "0.3.2"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
|
* The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
|
||||||
|
@ -144,6 +144,9 @@ static int via_cable_override(struct pci_dev *pdev)
|
||||||
/* Systems by DMI */
|
/* Systems by DMI */
|
||||||
if (dmi_check_system(cable_dmi_table))
|
if (dmi_check_system(cable_dmi_table))
|
||||||
return 1;
|
return 1;
|
||||||
|
/* Arima W730-K8/Targa Visionary 811/... */
|
||||||
|
if (pdev->subsystem_vendor == 0x161F && pdev->subsystem_device == 0x2032)
|
||||||
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue