提交 c65a3500 编写于 作者: L Linus Torvalds

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] linux/libata.h: reorganize ata_device struct members a bit
  ahci: SB600 ahci can't do MSI, blacklist that capability
  libata: More TSSTcorp pain, keep in sync with legacy IDE
  pata_via: Fix 6410 misdetect
  [libata] pata_atiixp: fix PIO timing data misprogramming
...@@ -358,7 +358,7 @@ static const struct ata_port_info ahci_port_info[] = { ...@@ -358,7 +358,7 @@ static const struct ata_port_info ahci_port_info[] = {
/* board_ahci_sb600 */ /* board_ahci_sb600 */
{ {
AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL | AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_32BIT_ONLY | AHCI_HFLAG_NO_MSI |
AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP), AHCI_HFLAG_SECT255 | AHCI_HFLAG_NO_PMP),
.flags = AHCI_FLAG_COMMON, .flags = AHCI_FLAG_COMMON,
.pio_mask = 0x1f, /* pio0-4 */ .pio_mask = 0x1f, /* pio0-4 */
......
...@@ -3933,6 +3933,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { ...@@ -3933,6 +3933,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
/* Devices which get the IVB wrong */ /* Devices which get the IVB wrong */
{ "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, }, { "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
/* Maybe we should just blacklist TSSTcorp... */
{ "TSSTcorp CDDVDW SH-S202H", "SB00", ATA_HORKAGE_IVB, },
{ "TSSTcorp CDDVDW SH-S202H", "SB01", ATA_HORKAGE_IVB, },
{ "TSSTcorp CDDVDW SH-S202J", "SB00", ATA_HORKAGE_IVB, }, { "TSSTcorp CDDVDW SH-S202J", "SB00", ATA_HORKAGE_IVB, },
{ "TSSTcorp CDDVDW SH-S202J", "SB01", ATA_HORKAGE_IVB, }, { "TSSTcorp CDDVDW SH-S202J", "SB01", ATA_HORKAGE_IVB, },
{ "TSSTcorp CDDVDW SH-S202N", "SB00", ATA_HORKAGE_IVB, }, { "TSSTcorp CDDVDW SH-S202N", "SB00", ATA_HORKAGE_IVB, },
......
...@@ -88,8 +88,8 @@ static void atiixp_set_pio_timing(struct ata_port *ap, struct ata_device *adev, ...@@ -88,8 +88,8 @@ static void atiixp_set_pio_timing(struct ata_port *ap, struct ata_device *adev,
pci_write_config_word(pdev, ATIIXP_IDE_PIO_MODE, pio_mode_data); pci_write_config_word(pdev, ATIIXP_IDE_PIO_MODE, pio_mode_data);
pci_read_config_word(pdev, ATIIXP_IDE_PIO_TIMING, &pio_timing_data); pci_read_config_word(pdev, ATIIXP_IDE_PIO_TIMING, &pio_timing_data);
pio_mode_data &= ~(0xFF << timing_shift); pio_timing_data &= ~(0xFF << timing_shift);
pio_mode_data |= (pio_timings[pio] << timing_shift); pio_timing_data |= (pio_timings[pio] << timing_shift);
pci_write_config_word(pdev, ATIIXP_IDE_PIO_TIMING, pio_timing_data); pci_write_config_word(pdev, ATIIXP_IDE_PIO_TIMING, pio_timing_data);
} }
......
...@@ -464,10 +464,11 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -464,10 +464,11 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
} }
pci_dev_put(isa); pci_dev_put(isa);
if (!(config->flags & VIA_NO_ENABLES)) {
/* 0x40 low bits indicate enabled channels */ /* 0x40 low bits indicate enabled channels */
pci_read_config_byte(pdev, 0x40 , &enable); pci_read_config_byte(pdev, 0x40 , &enable);
enable &= 3; enable &= 3;
if (enable == 0) { if (enable == 0)
return -ENODEV; return -ENODEV;
} }
......
...@@ -548,11 +548,6 @@ struct ata_device { ...@@ -548,11 +548,6 @@ struct ata_device {
u64 n_sectors; /* size of device, if ATA */ u64 n_sectors; /* size of device, if ATA */
unsigned int class; /* ATA_DEV_xxx */ unsigned int class; /* ATA_DEV_xxx */
union {
u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
};
u8 pio_mode; u8 pio_mode;
u8 dma_mode; u8 dma_mode;
u8 xfer_mode; u8 xfer_mode;
...@@ -574,8 +569,13 @@ struct ata_device { ...@@ -574,8 +569,13 @@ struct ata_device {
u16 sectors; /* Number of sectors per track */ u16 sectors; /* Number of sectors per track */
/* error history */ /* error history */
struct ata_ering ering;
int spdn_cnt; int spdn_cnt;
struct ata_ering ering;
union {
u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
u32 gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
};
}; };
/* Offset into struct ata_device. Fields above it are maintained /* Offset into struct ata_device. Fields above it are maintained
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册