Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: libata: set queue DMA alignment to sector size for ATAPI too libata: DVR-212D can't do SETXFER DVD-RW DVR-212D ahci: add HFLAG_YES_FBS and apply it to 88SE9128 pata_hpt37x: inherit prereset() method for HPT374 ahci: AHCI mode SATA patch for Intel DH89xxCC DeviceIDs pata_hpt37x: fold 'if' statement into 'switch' pata_hpt{37x|3x2n}: use pr_*(DRV_NAME ...) instead of printk(KERN_* ...) pata_hpt{366|37x}: use pr_warning(...) instead of printk(KERN_WARNING ...) pata_mpc52xx: inherit from ata_bmdma_port_ops
This commit is contained in:
commit
f9a3d1d74b
|
@ -260,6 +260,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
|
{ PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
|
||||||
{ PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
|
{ PCI_VDEVICE(INTEL, 0x1d04), board_ahci }, /* PBG RAID */
|
||||||
{ PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
|
{ PCI_VDEVICE(INTEL, 0x1d06), board_ahci }, /* PBG RAID */
|
||||||
|
{ PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
|
||||||
|
|
||||||
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
||||||
{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||||
|
@ -379,6 +380,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
|
{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
|
||||||
{ PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv }, /* 6121 */
|
{ PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv }, /* 6121 */
|
||||||
{ PCI_DEVICE(0x1b4b, 0x9123),
|
{ PCI_DEVICE(0x1b4b, 0x9123),
|
||||||
|
.class = PCI_CLASS_STORAGE_SATA_AHCI,
|
||||||
|
.class_mask = 0xffffff,
|
||||||
.driver_data = board_ahci_yes_fbs }, /* 88se9128 */
|
.driver_data = board_ahci_yes_fbs }, /* 88se9128 */
|
||||||
|
|
||||||
/* Promise */
|
/* Promise */
|
||||||
|
|
|
@ -4138,6 +4138,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||||
* device and controller are SATA.
|
* device and controller are SATA.
|
||||||
*/
|
*/
|
||||||
{ "PIONEER DVD-RW DVRTD08", "1.00", ATA_HORKAGE_NOSETXFER },
|
{ "PIONEER DVD-RW DVRTD08", "1.00", ATA_HORKAGE_NOSETXFER },
|
||||||
|
{ "PIONEER DVD-RW DVR-212D", "1.28", ATA_HORKAGE_NOSETXFER },
|
||||||
|
|
||||||
/* End Marker */
|
/* End Marker */
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -1099,9 +1099,9 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
|
||||||
struct request_queue *q = sdev->request_queue;
|
struct request_queue *q = sdev->request_queue;
|
||||||
void *buf;
|
void *buf;
|
||||||
|
|
||||||
/* set the min alignment and padding */
|
sdev->sector_size = ATA_SECT_SIZE;
|
||||||
blk_queue_update_dma_alignment(sdev->request_queue,
|
|
||||||
ATA_DMA_PAD_SZ - 1);
|
/* set DMA padding */
|
||||||
blk_queue_update_dma_pad(sdev->request_queue,
|
blk_queue_update_dma_pad(sdev->request_queue,
|
||||||
ATA_DMA_PAD_SZ - 1);
|
ATA_DMA_PAD_SZ - 1);
|
||||||
|
|
||||||
|
@ -1115,13 +1115,25 @@ static int ata_scsi_dev_config(struct scsi_device *sdev,
|
||||||
|
|
||||||
blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
|
blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
|
||||||
} else {
|
} else {
|
||||||
/* ATA devices must be sector aligned */
|
|
||||||
sdev->sector_size = ata_id_logical_sector_size(dev->id);
|
sdev->sector_size = ata_id_logical_sector_size(dev->id);
|
||||||
blk_queue_update_dma_alignment(sdev->request_queue,
|
|
||||||
sdev->sector_size - 1);
|
|
||||||
sdev->manage_start_stop = 1;
|
sdev->manage_start_stop = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ata_pio_sectors() expects buffer for each sector to not cross
|
||||||
|
* page boundary. Enforce it by requiring buffers to be sector
|
||||||
|
* aligned, which works iff sector_size is not larger than
|
||||||
|
* PAGE_SIZE. ATAPI devices also need the alignment as
|
||||||
|
* IDENTIFY_PACKET is executed as ATA_PROT_PIO.
|
||||||
|
*/
|
||||||
|
if (sdev->sector_size > PAGE_SIZE)
|
||||||
|
ata_dev_printk(dev, KERN_WARNING,
|
||||||
|
"sector_size=%u > PAGE_SIZE, PIO may malfunction\n",
|
||||||
|
sdev->sector_size);
|
||||||
|
|
||||||
|
blk_queue_update_dma_alignment(sdev->request_queue,
|
||||||
|
sdev->sector_size - 1);
|
||||||
|
|
||||||
if (dev->flags & ATA_DFLAG_AN)
|
if (dev->flags & ATA_DFLAG_AN)
|
||||||
set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
|
set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
|
||||||
#define DRV_NAME "pata_hpt366"
|
#define DRV_NAME "pata_hpt366"
|
||||||
#define DRV_VERSION "0.6.9"
|
#define DRV_VERSION "0.6.10"
|
||||||
|
|
||||||
struct hpt_clock {
|
struct hpt_clock {
|
||||||
u8 xfer_mode;
|
u8 xfer_mode;
|
||||||
|
@ -160,8 +160,8 @@ static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr,
|
||||||
|
|
||||||
while (list[i] != NULL) {
|
while (list[i] != NULL) {
|
||||||
if (!strcmp(list[i], model_num)) {
|
if (!strcmp(list[i], model_num)) {
|
||||||
printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n",
|
pr_warning(DRV_NAME ": %s is not supported for %s.\n",
|
||||||
modestr, list[i]);
|
modestr, list[i]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
|
||||||
#define DRV_NAME "pata_hpt37x"
|
#define DRV_NAME "pata_hpt37x"
|
||||||
#define DRV_VERSION "0.6.18"
|
#define DRV_VERSION "0.6.22"
|
||||||
|
|
||||||
struct hpt_clock {
|
struct hpt_clock {
|
||||||
u8 xfer_speed;
|
u8 xfer_speed;
|
||||||
|
@ -229,8 +229,8 @@ static int hpt_dma_blacklisted(const struct ata_device *dev, char *modestr,
|
||||||
|
|
||||||
while (list[i] != NULL) {
|
while (list[i] != NULL) {
|
||||||
if (!strcmp(list[i], model_num)) {
|
if (!strcmp(list[i], model_num)) {
|
||||||
printk(KERN_WARNING DRV_NAME ": %s is not supported for %s.\n",
|
pr_warning(DRV_NAME ": %s is not supported for %s.\n",
|
||||||
modestr, list[i]);
|
modestr, list[i]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
@ -642,7 +642,6 @@ static struct ata_port_operations hpt372_port_ops = {
|
||||||
static struct ata_port_operations hpt374_fn1_port_ops = {
|
static struct ata_port_operations hpt374_fn1_port_ops = {
|
||||||
.inherits = &hpt372_port_ops,
|
.inherits = &hpt372_port_ops,
|
||||||
.cable_detect = hpt374_fn1_cable_detect,
|
.cable_detect = hpt374_fn1_cable_detect,
|
||||||
.prereset = hpt37x_pre_reset,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -803,7 +802,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
.udma_mask = ATA_UDMA6,
|
.udma_mask = ATA_UDMA6,
|
||||||
.port_ops = &hpt302_port_ops
|
.port_ops = &hpt302_port_ops
|
||||||
};
|
};
|
||||||
/* HPT374 - UDMA100, function 1 uses different prereset method */
|
/* HPT374 - UDMA100, function 1 uses different cable_detect method */
|
||||||
static const struct ata_port_info info_hpt374_fn0 = {
|
static const struct ata_port_info info_hpt374_fn0 = {
|
||||||
.flags = ATA_FLAG_SLAVE_POSS,
|
.flags = ATA_FLAG_SLAVE_POSS,
|
||||||
.pio_mask = ATA_PIO4,
|
.pio_mask = ATA_PIO4,
|
||||||
|
@ -838,7 +837,8 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
if (dev->device == PCI_DEVICE_ID_TTI_HPT366) {
|
switch (dev->device) {
|
||||||
|
case PCI_DEVICE_ID_TTI_HPT366:
|
||||||
/* May be a later chip in disguise. Check */
|
/* May be a later chip in disguise. Check */
|
||||||
/* Older chips are in the HPT366 driver. Ignore them */
|
/* Older chips are in the HPT366 driver. Ignore them */
|
||||||
if (rev < 3)
|
if (rev < 3)
|
||||||
|
@ -863,54 +863,50 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
chip_table = &hpt372;
|
chip_table = &hpt372;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "pata_hpt37x: Unknown HPT366 subtype, "
|
pr_err(DRV_NAME ": Unknown HPT366 subtype, "
|
||||||
"please report (%d).\n", rev);
|
"please report (%d).\n", rev);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
} else {
|
break;
|
||||||
switch (dev->device) {
|
case PCI_DEVICE_ID_TTI_HPT372:
|
||||||
case PCI_DEVICE_ID_TTI_HPT372:
|
/* 372N if rev >= 2 */
|
||||||
/* 372N if rev >= 2 */
|
if (rev >= 2)
|
||||||
if (rev >= 2)
|
return -ENODEV;
|
||||||
return -ENODEV;
|
ppi[0] = &info_hpt372;
|
||||||
ppi[0] = &info_hpt372;
|
chip_table = &hpt372a;
|
||||||
chip_table = &hpt372a;
|
break;
|
||||||
break;
|
case PCI_DEVICE_ID_TTI_HPT302:
|
||||||
case PCI_DEVICE_ID_TTI_HPT302:
|
/* 302N if rev > 1 */
|
||||||
/* 302N if rev > 1 */
|
if (rev > 1)
|
||||||
if (rev > 1)
|
return -ENODEV;
|
||||||
return -ENODEV;
|
ppi[0] = &info_hpt302;
|
||||||
ppi[0] = &info_hpt302;
|
/* Check this */
|
||||||
/* Check this */
|
chip_table = &hpt302;
|
||||||
chip_table = &hpt302;
|
break;
|
||||||
break;
|
case PCI_DEVICE_ID_TTI_HPT371:
|
||||||
case PCI_DEVICE_ID_TTI_HPT371:
|
if (rev > 1)
|
||||||
if (rev > 1)
|
return -ENODEV;
|
||||||
return -ENODEV;
|
ppi[0] = &info_hpt302;
|
||||||
ppi[0] = &info_hpt302;
|
chip_table = &hpt371;
|
||||||
chip_table = &hpt371;
|
/*
|
||||||
/*
|
* Single channel device, master is not present but the BIOS
|
||||||
* Single channel device, master is not present
|
* (or us for non x86) must mark it absent
|
||||||
* but the BIOS (or us for non x86) must mark it
|
*/
|
||||||
* absent
|
pci_read_config_byte(dev, 0x50, &mcr1);
|
||||||
*/
|
mcr1 &= ~0x04;
|
||||||
pci_read_config_byte(dev, 0x50, &mcr1);
|
pci_write_config_byte(dev, 0x50, mcr1);
|
||||||
mcr1 &= ~0x04;
|
break;
|
||||||
pci_write_config_byte(dev, 0x50, mcr1);
|
case PCI_DEVICE_ID_TTI_HPT374:
|
||||||
break;
|
chip_table = &hpt374;
|
||||||
case PCI_DEVICE_ID_TTI_HPT374:
|
if (!(PCI_FUNC(dev->devfn) & 1))
|
||||||
chip_table = &hpt374;
|
*ppi = &info_hpt374_fn0;
|
||||||
if (!(PCI_FUNC(dev->devfn) & 1))
|
else
|
||||||
*ppi = &info_hpt374_fn0;
|
*ppi = &info_hpt374_fn1;
|
||||||
else
|
break;
|
||||||
*ppi = &info_hpt374_fn1;
|
default:
|
||||||
break;
|
pr_err(DRV_NAME ": PCI table is bogus, please report (%d).\n",
|
||||||
default:
|
dev->device);
|
||||||
printk(KERN_ERR
|
return -ENODEV;
|
||||||
"pata_hpt37x: PCI table is bogus, please report (%d).\n",
|
|
||||||
dev->device);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* Ok so this is a chip we support */
|
/* Ok so this is a chip we support */
|
||||||
|
|
||||||
|
@ -957,8 +953,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
u8 sr;
|
u8 sr;
|
||||||
u32 total = 0;
|
u32 total = 0;
|
||||||
|
|
||||||
printk(KERN_WARNING
|
pr_warning(DRV_NAME ": BIOS has not set timing clocks.\n");
|
||||||
"pata_hpt37x: BIOS has not set timing clocks.\n");
|
|
||||||
|
|
||||||
/* This is the process the HPT371 BIOS is reported to use */
|
/* This is the process the HPT371 BIOS is reported to use */
|
||||||
for (i = 0; i < 128; i++) {
|
for (i = 0; i < 128; i++) {
|
||||||
|
@ -1014,7 +1009,7 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
(f_high << 16) | f_low | 0x100);
|
(f_high << 16) | f_low | 0x100);
|
||||||
}
|
}
|
||||||
if (adjust == 8) {
|
if (adjust == 8) {
|
||||||
printk(KERN_ERR "pata_hpt37x: DPLL did not stabilize!\n");
|
pr_err(DRV_NAME ": DPLL did not stabilize!\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
if (dpll == 3)
|
if (dpll == 3)
|
||||||
|
@ -1022,8 +1017,8 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
else
|
else
|
||||||
private_data = (void *)hpt37x_timings_50;
|
private_data = (void *)hpt37x_timings_50;
|
||||||
|
|
||||||
printk(KERN_INFO "pata_hpt37x: bus clock %dMHz, using %dMHz DPLL.\n",
|
pr_info(DRV_NAME ": bus clock %dMHz, using %dMHz DPLL.\n",
|
||||||
MHz[clock_slot], MHz[dpll]);
|
MHz[clock_slot], MHz[dpll]);
|
||||||
} else {
|
} else {
|
||||||
private_data = (void *)chip_table->clocks[clock_slot];
|
private_data = (void *)chip_table->clocks[clock_slot];
|
||||||
/*
|
/*
|
||||||
|
@ -1036,8 +1031,9 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
ppi[0] = &info_hpt370_33;
|
ppi[0] = &info_hpt370_33;
|
||||||
if (clock_slot < 2 && ppi[0] == &info_hpt370a)
|
if (clock_slot < 2 && ppi[0] == &info_hpt370a)
|
||||||
ppi[0] = &info_hpt370a_33;
|
ppi[0] = &info_hpt370a_33;
|
||||||
printk(KERN_INFO "pata_hpt37x: %s using %dMHz bus clock.\n",
|
|
||||||
chip_table->name, MHz[clock_slot]);
|
pr_info(DRV_NAME ": %s using %dMHz bus clock.\n",
|
||||||
|
chip_table->name, MHz[clock_slot]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now kick off ATA set up */
|
/* Now kick off ATA set up */
|
||||||
|
|
|
@ -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.13"
|
#define DRV_VERSION "0.3.14"
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
HPT_PCI_FAST = (1 << 31),
|
HPT_PCI_FAST = (1 << 31),
|
||||||
|
@ -418,7 +418,7 @@ static int hpt3x2n_pci_clock(struct pci_dev *pdev)
|
||||||
u16 sr;
|
u16 sr;
|
||||||
u32 total = 0;
|
u32 total = 0;
|
||||||
|
|
||||||
printk(KERN_WARNING "pata_hpt3x2n: BIOS clock data not set.\n");
|
pr_warning(DRV_NAME ": BIOS clock data not set.\n");
|
||||||
|
|
||||||
/* This is the process the HPT371 BIOS is reported to use */
|
/* This is the process the HPT371 BIOS is reported to use */
|
||||||
for (i = 0; i < 128; i++) {
|
for (i = 0; i < 128; i++) {
|
||||||
|
@ -528,8 +528,7 @@ hpt372n:
|
||||||
ppi[0] = &info_hpt372n;
|
ppi[0] = &info_hpt372n;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR
|
pr_err(DRV_NAME ": PCI table is bogus, please report (%d).\n",
|
||||||
"pata_hpt3x2n: PCI table is bogus please report (%d).\n",
|
|
||||||
dev->device);
|
dev->device);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
@ -579,12 +578,11 @@ hpt372n:
|
||||||
pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low);
|
pci_write_config_dword(dev, 0x5C, (f_high << 16) | f_low);
|
||||||
}
|
}
|
||||||
if (adjust == 8) {
|
if (adjust == 8) {
|
||||||
printk(KERN_ERR "pata_hpt3x2n: DPLL did not stabilize!\n");
|
pr_err(DRV_NAME ": DPLL did not stabilize!\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "pata_hpt37x: bus clock %dMHz, using 66MHz DPLL.\n",
|
pr_info(DRV_NAME ": bus clock %dMHz, using 66MHz DPLL.\n", pci_mhz);
|
||||||
pci_mhz);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set our private data up. We only need a few flags
|
* Set our private data up. We only need a few flags
|
||||||
|
|
|
@ -610,7 +610,7 @@ static struct scsi_host_template mpc52xx_ata_sht = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_operations mpc52xx_ata_port_ops = {
|
static struct ata_port_operations mpc52xx_ata_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_bmdma_port_ops,
|
||||||
.sff_dev_select = mpc52xx_ata_dev_select,
|
.sff_dev_select = mpc52xx_ata_dev_select,
|
||||||
.set_piomode = mpc52xx_ata_set_piomode,
|
.set_piomode = mpc52xx_ata_set_piomode,
|
||||||
.set_dmamode = mpc52xx_ata_set_dmamode,
|
.set_dmamode = mpc52xx_ata_set_dmamode,
|
||||||
|
|
Loading…
Reference in New Issue