IDE fixes
PATCH 1/1 IDE fixes
Please pull from:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git/
to receive the following updates:
drivers/ide/ide-dma.c | 4 +++- drivers/ide/ide-proc.c | 2 ++ drivers/ide/pci/atiixp.c | 1 + drivers/ide/pci/serverworks.c | 14 ++++++++++---- include/linux/pci_ids.h | 1 + 5 files changed, 17 insertions(+), 5 deletions(-)
Alan Cox (1):
ide/pci/serverworks.c: Fix corruption/timeouts with MegaIDE
Andrew Morton (1):
ide serverworks warning fixes
Henry Su (1):
add the IDE device ID for ATI SB700
Junio C Hamano (1):
Match DMA blacklist entries between ide-dma.c and libata-core.c
Mika Kukkonen (1):
Add two missing chipsets to drivers/ide/ide-proc.c
drivers/ide/ide-dma.c +3 -1
@@ -119,15 +119,17 @@ static const struct drive_list_entry drive_blacklist [] = { { "HITACHI CDR-8335" , "ALL" }, { "HITACHI CDR-8435" , "ALL" }, { "Toshiba CD-ROM XM-6202B" , "ALL" }, + { "TOSHIBA CD-ROM XM-1702BC", "ALL" }, { "CD-532E-A" , "ALL" }, { "E-IDE CD-ROM CR-840", "ALL" }, { "CD-ROM Drive/F5A", "ALL" }, { "WPI CDD-820", "ALL" }, { "SAMSUNG CD-ROM SC-148C", "ALL" }, { "SAMSUNG CD-ROM SC", "ALL" }, - { "SanDisk SDP3B-64" , "ALL" }, { "ATAPI CD-ROM DRIVE 40X MAXIMUM", "ALL" }, { "_NEC DV5800A", "ALL" }, + { "SAMSUNG CD-ROM SN-124", "N001" }, + { "Seagate STT20000A", "ALL" }, { NULL , NULL } };
drivers/ide/ide-proc.c +2 -0
@@ -67,6 +67,8 @@ static int proc_ide_read_imodelcase ide_4drives: name ="4drives" ;break ;case ide_pmac: name ="mac-io" ;break ;case ide_au1xxx: name ="au1xxx" ;break ; +case ide_etrax100: name ="etrax100" ;break ; +case ide_acorn: name ="acorn" ;break ;default : name ="(unknown)" ;break ; } len =sprintf (page,"%s\n" , name);
drivers/ide/pci/atiixp.c +1 -0
@@ -317,6 +317,7 @@ static struct pci_device_id atiixp_pci_tbl[] = { { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, + { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1}, { 0, }, };MODULE_DEVICE_TABLE (pci, atiixp_pci_tbl);
drivers/ide/pci/serverworks.c +10 -4
@@ -158,6 +158,12 @@ static int svwks_tune_chipset (ide_drive_t *drive, u8 xferspeed)pci_read_config_word (dev,0x4A , &csb5_pio);pci_read_config_byte (dev,0x54 , &ultra_enable); +/* If we are in RAID mode (eg AMI MegaIDE) then we can't it +turns out trust the firmware configuration */ + +if ((dev->class >>8 ) !=PCI_CLASS_STORAGE_IDE ) + goto oem_setup_failed; +/* Per Specified Design by OEM, and ASIC Architect */ if ((dev->device ==PCI_DEVICE_ID_SERVERWORKS_CSB6IDE ) || (dev->device ==PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2 )) {
@@ -173,7 +179,7 @@ dma_pio: ((dma_stat&(1<<(5+unit)))==(1<<(5+unit)))) {u8 dmaspeed = dma_timing; - dma_timing &= ~0xFF ; + dma_timing &= ~0xFFU ;if ((dmaspeed &0x20 ) ==0x20 ) dmaspeed =XFER_MW_DMA_2 ;else if ((dmaspeed &0x21 ) ==0x21 )
@@ -187,7 +193,7 @@ dma_pio: }else if (pio_timing) {u8 piospeed = pio_timing; - pio_timing &= ~0xFF ; + pio_timing &= ~0xFFU ;if ((piospeed &0x20 ) ==0x20 ) piospeed =XFER_PIO_4 ;else if ((piospeed &0x22 ) ==0x22 )
@@ -208,8 +214,8 @@ dma_pio: oem_setup_failed: - pio_timing &= ~0xFF ; - dma_timing &= ~0xFF ; + pio_timing &= ~0xFFU ; + dma_timing &= ~0xFFU ; ultra_timing &= ~(0x0F << (4 *unit)); ultra_enable &= ~(0x01 << drive->dn); csb5_pio &= ~(0x0F << (4 *drive->dn));
include/linux/pci_ids.h +1 -0
@@ -371,6 +371,7 @@#define PCI_DEVICE_ID_ATI_IXP600_SMBUS 0x4385#define PCI_DEVICE_ID_ATI_IXP600_IDE 0x438c#define PCI_DEVICE_ID_ATI_IXP700_SATA 0x4390 +#define PCI_DEVICE_ID_ATI_IXP700_IDE 0x439c#define PCI_VENDOR_ID_VLSI 0x1004#define PCI_DEVICE_ID_VLSI_82C592 0x0005
drivers/ide/pci/serverworks.c dma_pio: · line 182
Quoted 10 lines · Bartlomiej Zolnierkiewicz
drivers/ide/pci/serverworks.c +1
-1@@ -173,7 +179,7 @@ dma_pio: ((dma_stat&(1<<(5+unit)))==(1<<(5+unit)))) {u8 dmaspeed = dma_timing; - dma_timing &= ~0xFF ; + dma_timing &= ~0xFFU ;
This is just crap.
The old code was _also_ crap, but the new code just is worse.
What's the point of this, really?
dma_timing is a 8-bit value, so the above is just a *really* stupid and bad way of saying
dma_timing = 0;
and whoever wrote that code is just terminally confused.
I pulled, but that driver is CRAP. Please don't add new crap blindly like that.
Andrew, that was your change, it appears. Tssk.
Please, we do NOT fix compiler warnings without understanding the code! That's a sure way to just introduce _new_ bugs, rather than fix old ones. So please, please, please, realize that the compiler is _stupid_, and fixing warnings without understanding the code is bad.
In this case, anybody who actually spends 5 seconds looking at the code should have realized that the warning is just another way of saying that the author of the code was on some bad drugs, and the warnings WERE BETTER OFF REMAINING! Because that code _should_ have warnings. Big fat warnings about incompetence!
Linus
Quoted 3 lines · Linus Torvalds
So please, please, please, realize that the compiler is _stupid_, and fixing warnings without understanding the code is bad.
Btw, this is fundamental. If you don't need to understand the code, then the compiler could have just fixed it for you, and there was no need to warn.
So compiler warnings have two cases:
- the compiler is being a complete a**hole, and the warning should exist. It happens.
- it can be fixed, but only by understanding what the code wants to do.
In no case is it ok to just "shut up the warning".
Linus