Subject: [BK PATCHES] ide-2.6 update

Please do a

bk pull bk://bart.bkbits.net/ide-2.6

This will update the following files:

drivers/ide/ide-disk.c | 1 +
drivers/ide/ide-dma.c | 32 ++++++++++++++++++++++++++++++++
drivers/ide/ide-iops.c | 12 ------------
drivers/ide/ide-probe.c | 2 ++
drivers/ide/ide-taskfile.c | 33 ++++-----------------------------
drivers/ide/pci/aec62xx.c | 34 +++++++---------------------------
drivers/ide/pci/amd74xx.c | 4 ++--
drivers/ide/pci/atiixp.c | 34 +++++++---------------------------
drivers/ide/pci/cmd64x.c | 34 +++++++---------------------------
drivers/ide/pci/hpt34x.c | 38 +++++++++-----------------------------
drivers/ide/pci/hpt366.c | 33 +++++++--------------------------
drivers/ide/pci/it8172.c | 34 +++++++---------------------------
drivers/ide/pci/pdc202xx_new.c | 35 +++++++----------------------------
drivers/ide/pci/pdc202xx_old.c | 38 +++++++++-----------------------------
drivers/ide/pci/piix.c | 16 +---------------
drivers/ide/pci/serverworks.c | 36 +++++++-----------------------------
drivers/ide/pci/siimage.c | 33 ++++++---------------------------
drivers/ide/pci/sis5513.c | 34 +++++++---------------------------
drivers/ide/pci/slc90e66.c | 33 ++++++---------------------------
drivers/ide/pci/triflex.c | 25 ++++++++-----------------
include/asm-generic/pci.h | 7 +++++++
include/asm-ppc64/machdep.h | 3 +++
include/asm-ppc64/pci.h | 11 ++++++++++-
include/linux/ide.h | 7 ++-----
24 files changed, 158 insertions(+), 411 deletions(-)

through these ChangeSets:

<bzolnier@trik.(none)> (04/10/26 1.2196)
[ide] remove needless exports from ide-taskfile.c

Also remove unused MAX_DMA define.

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2195)
[ide] add ide_use_dma()

Should prevent bugs like the recent piix one in the future.

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2194)
[ide] add pci_get_legacy_ide_irq()

This patch adds pci_get_legacy_ide_irq() to the PCI layer for dealing
with PCI IDE chipsets that use the "legacy mode" IRQ routing, thus
violating the normal PCI routing. The generic implementation provides
IRQ numbers 14 and 15, and it adds a ppc64 specific one with platform
callbacks so that a plaform can provide different IRQ numbers for "legacy"
IDE. I only fixed the amd7xxx.c driver for now, I expect people using
this interface will slowly fix their drivers (I will fix via soon as I'll
need it too, and maybe a few others).

Signed-off-by: Benjamin Herrenschmidt <[email protected]>
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2193)
[ide] remove unused internal exports from ide core

From: Arjan van de Ven <[email protected]>

ide-iops.c exports a few functions that either have no users or have no
users AND shouldn't be used by drivers; the patch below unexports them.

-EXPORT_SYMBOL(SELECT_INTERRUPT);
-EXPORT_SYMBOL(SELECT_MASK);
-EXPORT_SYMBOL(QUIRK_LIST);
-EXPORT_SYMBOL(ata_vlb_sync);

only used in the core ide code

-EXPORT_SYMBOL(ata_input_data);
-EXPORT_SYMBOL(ata_output_data);

drivers should (and do) use the hwif-> function pointer variant of these,
these functions are internal and used for setting the default hwif->
function pointers only. No need to export, in fact exporting is only asking
for accidents

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2192)
[ide] pdc202xx_old: PDC20267 needs the same LBA48 fixup as PDC20265

From: Krzysztof Chmielewski <[email protected]>

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2191)
[ide] ide-probe: undecoded slave fixup

Undecoded slave fixup is a oneliner patch to ide-probe to
recognize both of my Maxtor drives that appear to have the same
serial number, D3000000.

Signed-off-by: [email protected]
Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

<bzolnier@trik.(none)> (04/10/26 1.2190)
[ide] ide-disk: fix /proc/ide/hd?/smart_thresholds

Add missing ->data_phase assignment.

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>

diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
--- a/drivers/ide/ide-disk.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/ide-disk.c 2004-10-26 23:09:56 +02:00
@@ -815,6 +815,7 @@
args.tfRegister[IDE_HCYL_OFFSET] = SMART_HCYL_PASS;
args.tfRegister[IDE_COMMAND_OFFSET] = WIN_SMART;
args.command_type = IDE_DRIVE_TASK_IN;
+ args.data_phase = TASKFILE_IN;
args.handler = &task_in_intr;
(void) smart_enable(drive);
return ide_raw_taskfile(drive, &args, buf);
diff -Nru a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
--- a/drivers/ide/ide-dma.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/ide-dma.c 2004-10-26 23:09:56 +02:00
@@ -681,6 +681,38 @@

EXPORT_SYMBOL(__ide_dma_good_drive);

+int ide_use_dma(ide_drive_t *drive)
+{
+ struct hd_driveid *id = drive->id;
+ ide_hwif_t *hwif = drive->hwif;
+
+ /* consult the list of known "bad" drives */
+ if (__ide_dma_bad_drive(drive))
+ return 0;
+
+ /* capable of UltraDMA modes */
+ if (id->field_valid & 4) {
+ if (hwif->ultra_mask & id->dma_ultra)
+ return 1;
+ }
+
+ /* capable of regular DMA modes */
+ if (id->field_valid & 2) {
+ if (hwif->mwdma_mask & id->dma_mword)
+ return 1;
+ if (hwif->swdma_mask & id->dma_1word)
+ return 1;
+ }
+
+ /* consult the list of known "good" drives */
+ if (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)
+ return 1;
+
+ return 0;
+}
+
+EXPORT_SYMBOL_GPL(ide_use_dma);
+
void ide_dma_verbose(ide_drive_t *drive)
{
struct hd_driveid *id = drive->id;
diff -Nru a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
--- a/drivers/ide/ide-iops.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/ide-iops.c 2004-10-26 23:09:56 +02:00
@@ -221,24 +221,18 @@
HWIF(drive)->OUTB(drive->ctl|2, IDE_CONTROL_REG);
}

-EXPORT_SYMBOL(SELECT_INTERRUPT);
-
void SELECT_MASK (ide_drive_t *drive, int mask)
{
if (HWIF(drive)->maskproc)
HWIF(drive)->maskproc(drive, mask);
}

-EXPORT_SYMBOL(SELECT_MASK);
-
void QUIRK_LIST (ide_drive_t *drive)
{
if (HWIF(drive)->quirkproc)
drive->quirk_list = HWIF(drive)->quirkproc(drive);
}

-EXPORT_SYMBOL(QUIRK_LIST);
-
/*
* Some localbus EIDE interfaces require a special access sequence
* when using 32-bit I/O instructions to transfer data. We call this
@@ -253,8 +247,6 @@
(void) HWIF(drive)->INB(port);
}

-EXPORT_SYMBOL(ata_vlb_sync);
-
/*
* This is used for most PIO data transfers *from* the IDE interface
*/
@@ -277,8 +269,6 @@
}
}

-EXPORT_SYMBOL(ata_input_data);
-
/*
* This is used for most PIO data transfers *to* the IDE interface
*/
@@ -300,8 +290,6 @@
hwif->OUTSW(IDE_DATA_REG, buffer, wcount<<1);
}
}
-
-EXPORT_SYMBOL(ata_output_data);

/*
* The following routines are mainly used by the ATAPI drivers.
diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
--- a/drivers/ide/ide-probe.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/ide-probe.c 2004-10-26 23:09:56 +02:00
@@ -730,6 +730,8 @@
/* And beware of confused Maxtor drives that go "M0000000000"
"The SN# is garbage in the ID block..." [Eric] */
strncmp(drive->id->serial_no, "M0000000000000000000", 20) &&
+ /* Same goes for another set of Maxtor drives that say "D3000000" */
+ strncmp(drive->id->serial_no, "D3000000", 8) &&
strncmp(hwif->drives[0].id->serial_no, drive->id->serial_no, 20) == 0) {
printk(KERN_WARNING "ide-probe: ignoring undecoded slave\n");
drive->present = 0;
diff -Nru a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
--- a/drivers/ide/ide-taskfile.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/ide-taskfile.c 2004-10-26 23:09:56 +02:00
@@ -63,17 +63,14 @@
}
}

-
-void taskfile_input_data (ide_drive_t *drive, void *buffer, u32 wcount)
+static void taskfile_input_data(ide_drive_t *drive, void *buffer, u32 wcount)
{
HWIF(drive)->ata_input_data(drive, buffer, wcount);
if (drive->bswap)
ata_bswap_data(buffer, wcount);
}

-EXPORT_SYMBOL(taskfile_input_data);
-
-void taskfile_output_data (ide_drive_t *drive, void *buffer, u32 wcount)
+static void taskfile_output_data(ide_drive_t *drive, void *buffer, u32 wcount)
{
if (drive->bswap) {
ata_bswap_data(buffer, wcount);
@@ -84,8 +81,6 @@
}
}

-EXPORT_SYMBOL(taskfile_output_data);
-
int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf)
{
ide_task_t args;
@@ -101,8 +96,6 @@
return ide_raw_taskfile(drive, &args, buf);
}

-EXPORT_SYMBOL(taskfile_lib_get_identify);
-
ide_startstop_t do_rw_taskfile (ide_drive_t *drive, ide_task_t *task)
{
ide_hwif_t *hwif = HWIF(drive);
@@ -470,7 +463,7 @@
}
EXPORT_SYMBOL(pre_task_out_intr);

-int ide_diag_taskfile (ide_drive_t *drive, ide_task_t *args, unsigned
long data_size, u8 *buf)
+static int ide_diag_taskfile(ide_drive_t *drive, ide_task_t *args,
unsigned long data_size, u8 *buf)
{
struct request rq;

@@ -507,8 +500,6 @@
return ide_do_drive_cmd(drive, &rq, ide_wait);
}

-EXPORT_SYMBOL(ide_diag_taskfile);
-
int ide_raw_taskfile (ide_drive_t *drive, ide_task_t *args, u8 *buf)
{
return ide_diag_taskfile(drive, args, 0, buf);
@@ -516,10 +507,6 @@

EXPORT_SYMBOL(ide_raw_taskfile);

-#define MAX_DMA (256*SECTOR_WORDS)
-
-ide_startstop_t flagged_taskfile(ide_drive_t *, ide_task_t *);
-
int ide_taskfile_ioctl (ide_drive_t *drive, unsigned int cmd,
unsigned long arg)
{
ide_task_request_t *req_task;
@@ -670,8 +657,6 @@
return err;
}

-EXPORT_SYMBOL(ide_taskfile_ioctl);
-
int ide_wait_cmd (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature,
u8 sectors, u8 *buf)
{
struct request rq;
@@ -689,8 +674,6 @@
return ide_do_drive_cmd(drive, &rq, ide_wait);
}

-EXPORT_SYMBOL(ide_wait_cmd);
-
/*
* FIXME : this needs to map into at taskfile. <[email protected]>
*/
@@ -748,9 +731,7 @@
return err;
}

-EXPORT_SYMBOL(ide_cmd_ioctl);
-
-int ide_wait_cmd_task (ide_drive_t *drive, u8 *buf)
+static int ide_wait_cmd_task(ide_drive_t *drive, u8 *buf)
{
struct request rq;

@@ -760,8 +741,6 @@
return ide_do_drive_cmd(drive, &rq, ide_wait);
}

-EXPORT_SYMBOL(ide_wait_cmd_task);
-
/*
* FIXME : this needs to map into at taskfile. <[email protected]>
*/
@@ -780,8 +759,6 @@
return err;
}

-EXPORT_SYMBOL(ide_task_ioctl);
-
/*
* NOTICE: This is additions from IBM to provide a discrete interface,
* for selective taskregister access operations. Nice JOB Klaus!!!
@@ -902,5 +879,3 @@

return ide_started;
}
-
-EXPORT_SYMBOL(flagged_taskfile);
diff -Nru a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
--- a/drivers/ide/pci/aec62xx.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/aec62xx.c 2004-10-26 23:09:56 +02:00
@@ -189,36 +189,16 @@
struct hd_driveid *id = drive->id;

if ((id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
aec62xx_tune_drive(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
--- a/drivers/ide/pci/amd74xx.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/amd74xx.c 2004-10-26 23:09:56 +02:00
@@ -416,8 +416,8 @@
{
int i;

- if (!hwif->irq)
- hwif->irq = hwif->channel ? 15 : 14;
+ if (hwif->irq == 0) /* 0 is bogus but will do for now */
+ hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel);

hwif->autodma = 0;

diff -Nru a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
--- a/drivers/ide/pci/atiixp.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/atiixp.c 2004-10-26 23:09:56 +02:00
@@ -261,36 +261,16 @@
drive->init_speed = 0;

if ((id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- if ((id->field_valid & 2) &&
- (!atiixp_config_drive_for_dma(drive)))
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!atiixp_config_drive_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!atiixp_config_drive_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (atiixp_config_drive_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
tspeed = ide_get_best_pio_mode(drive, 255, 5, NULL);
speed = atiixp_dma_2_pio(XFER_PIO_0 + tspeed) + XFER_PIO_0;
hwif->speedproc(drive, speed);
diff -Nru a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
--- a/drivers/ide/pci/cmd64x.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/cmd64x.c 2004-10-26 23:09:56 +02:00
@@ -441,36 +441,16 @@
struct hd_driveid *id = drive->id;

if ((id != NULL) && ((id->capability & 1) != 0) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if ((id->field_valid & 4) && cmd64x_ratemask(drive)) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
config_chipset_for_pio(drive, 1);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
--- a/drivers/ide/pci/hpt34x.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/hpt34x.c 2004-10-26 23:09:56 +02:00
@@ -130,40 +130,20 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
- }
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
#ifndef CONFIG_HPT34X_AUTODMA
- return hwif->ide_dma_off_quietly(drive);
+ return hwif->ide_dma_off_quietly(drive);
#else
- return hwif->ide_dma_on(drive);
+ return hwif->ide_dma_on(drive);
#endif
+ }
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
hpt34x_tune_drive(drive, 255);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
--- a/drivers/ide/pci/hpt366.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/hpt366.c 2004-10-26 23:09:56 +02:00
@@ -460,35 +460,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if (id->dma_mword & hwif->mwdma_mask) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
hpt3xx_tune_drive(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/it8172.c b/drivers/ide/pci/it8172.c
--- a/drivers/ide/pci/it8172.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/it8172.c 2004-10-26 23:09:56 +02:00
@@ -201,36 +201,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = it8172_config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!it8172_config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!it8172_config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (it8172_config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
it8172_tune_drive(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
--- a/drivers/ide/pci/pdc202xx_new.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/pdc202xx_new.c 2004-10-26 23:09:56 +02:00
@@ -189,37 +189,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- goto no_dma_set;
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
hwif->tuneproc(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
--- a/drivers/ide/pci/pdc202xx_old.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/pdc202xx_old.c 2004-10-26 23:09:56 +02:00
@@ -334,37 +334,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- goto no_dma_set;
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
hwif->tuneproc(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
@@ -585,7 +564,8 @@
struct pci_dev *dev = hwif->pci_dev;

/* PDC20265 has problems with large LBA48 requests */
- if (dev->device == PCI_DEVICE_ID_PROMISE_20265)
+ if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
+ (dev->device == PCI_DEVICE_ID_PROMISE_20265))
hwif->rqsize = 256;

hwif->autodma = 0;
diff -Nru a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
--- a/drivers/ide/pci/piix.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/piix.c 2004-10-26 23:09:56 +02:00
@@ -403,25 +403,11 @@

if ((id->capability & 1) && drive->autodma) {

- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
-
- /**
- * Try to turn DMA on if:
- * - UDMA or EIDE modes are supported or
- * - drive is a known "good" drive
- *
- * Checks for best mode supported are down later by
- * piix_config_drive_for_dma() -> ide_dma_speed()
- */
- if ((id->field_valid & (4 | 2)) ||
- (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)) {
+ if (ide_use_dma(drive)) {
if (piix_config_drive_for_dma(drive))
return hwif->ide_dma_on(drive);
}

- /* For some reason DMA wasn't turned on, so try PIO. */
goto fast_ata_pio;

} else if ((id->capability & 8) || (id->field_valid & 2)) {
diff -Nru a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c
--- a/drivers/ide/pci/serverworks.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/serverworks.c 2004-10-26 23:09:56 +02:00
@@ -305,38 +305,16 @@
drive->init_speed = 0;

if ((id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- } else
- /* UDMA disabled by mask, try other DMA modes */
- goto try_dma_modes;
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto no_dma_set;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
config_chipset_for_pio(drive);
// hwif->tuneproc(drive, 5);
return hwif->ide_dma_off_quietly(drive);
diff -Nru a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
--- a/drivers/ide/pci/siimage.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/siimage.c 2004-10-26 23:09:56 +02:00
@@ -420,37 +420,16 @@
struct hd_driveid *id = drive->id;

if ((id->capability & 1) != 0 && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;

- if ((id->field_valid & 4) && siimage_ratemask(drive)) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
config_chipset_for_pio(drive, 1);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
--- a/drivers/ide/pci/sis5513.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/sis5513.c 2004-10-26 23:09:56 +02:00
@@ -671,36 +671,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;
- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = config_chipset_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!config_chipset_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+
+ if (ide_use_dma(drive)) {
+ if (config_chipset_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
sis5513_tune_drive(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c
--- a/drivers/ide/pci/slc90e66.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/slc90e66.c 2004-10-26 23:09:56 +02:00
@@ -178,37 +178,16 @@
drive->init_speed = 0;

if (id && (id->capability & 1) && drive->autodma) {
- /* Consult the list of known "bad" drives */
- if (__ide_dma_bad_drive(drive))
- goto fast_ata_pio;

- if (id->field_valid & 4) {
- if (id->dma_ultra & hwif->ultra_mask) {
- /* Force if Capable UltraDMA */
- int dma = slc90e66_config_drive_for_dma(drive);
- if ((id->field_valid & 2) && !dma)
- goto try_dma_modes;
- }
- } else if (id->field_valid & 2) {
-try_dma_modes:
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- /* Force if Capable regular DMA modes */
- if (!slc90e66_config_drive_for_dma(drive))
- goto no_dma_set;
- }
- } else if (__ide_dma_good_drive(drive) &&
- (id->eide_dma_time < 150)) {
- /* Consult the list of known "good" drives */
- if (!slc90e66_config_drive_for_dma(drive))
- goto no_dma_set;
- } else {
- goto fast_ata_pio;
+ if (ide_use_dma(drive)) {
+ if (slc90e66_config_drive_for_dma(drive))
+ return hwif->ide_dma_on(drive);
}
- return hwif->ide_dma_on(drive);
+
+ goto fast_ata_pio;
+
} else if ((id->capability & 8) || (id->field_valid & 2)) {
fast_ata_pio:
-no_dma_set:
hwif->tuneproc(drive, 5);
return hwif->ide_dma_off_quietly(drive);
}
diff -Nru a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c
--- a/drivers/ide/pci/triflex.c 2004-10-26 23:09:56 +02:00
+++ b/drivers/ide/pci/triflex.c 2004-10-26 23:09:56 +02:00
@@ -118,25 +118,16 @@
{
ide_hwif_t *hwif = HWIF(drive);
struct hd_driveid *id = drive->id;
-
- if (id && (id->capability & 1) && drive->autodma) {
- if (__ide_dma_bad_drive(drive))
- goto tune_pio;
- if (id->field_valid & 2) {
- if ((id->dma_mword & hwif->mwdma_mask) ||
- (id->dma_1word & hwif->swdma_mask)) {
- if (!triflex_config_drive_for_dma(drive))
- goto tune_pio;
- }
- } else
- goto tune_pio;
- } else {
-tune_pio:
- hwif->tuneproc(drive, 255);
- return hwif->ide_dma_off_quietly(drive);
+
+ if ((id->capability & 1) && drive->autodma) {
+ if (ide_use_dma(drive)) {
+ if (triflex_config_drive_for_dma(drive))
+ return hwif->ide_dma_on(drive);
+ }
}

- return hwif->ide_dma_on(drive);
+ hwif->tuneproc(drive, 255);
+ return hwif->ide_dma_off_quietly(drive);
}

static void __init init_hwif_triflex(ide_hwif_t *hwif)
diff -Nru a/include/asm-generic/pci.h b/include/asm-generic/pci.h
--- a/include/asm-generic/pci.h 2004-10-26 23:09:56 +02:00
+++ b/include/asm-generic/pci.h 2004-10-26 23:09:56 +02:00
@@ -24,4 +24,11 @@

#define pcibios_scan_all_fns(a, b) 0

+#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ return channel ? 15 : 14;
+}
+#endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */
+
#endif
diff -Nru a/include/asm-ppc64/machdep.h b/include/asm-ppc64/machdep.h
--- a/include/asm-ppc64/machdep.h 2004-10-26 23:09:56 +02:00
+++ b/include/asm-ppc64/machdep.h 2004-10-26 23:09:56 +02:00
@@ -119,6 +119,9 @@
/* Check availability of legacy devices like i8042 */
int (*check_legacy_ioport)(unsigned int baseport);

+ /* Get legacy PCI/IDE interrupt mapping */
+ int (*pci_get_legacy_ide_irq)(struct pci_dev *dev, int channel);
+
};

extern struct machdep_calls ppc_md;
diff -Nru a/include/asm-ppc64/pci.h b/include/asm-ppc64/pci.h
--- a/include/asm-ppc64/pci.h 2004-10-26 23:09:56 +02:00
+++ b/include/asm-ppc64/pci.h 2004-10-26 23:09:56 +02:00
@@ -13,6 +13,7 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/dma-mapping.h>
+#include <asm/machdep.h>
#include <asm/scatterlist.h>
#include <asm/io.h>
#include <asm/prom.h>
@@ -20,6 +21,8 @@
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000

+struct pci_dev;
+
#ifdef CONFIG_PPC_ISERIES
#define pcibios_scan_all_fns(a, b) 0
#else
@@ -36,7 +39,13 @@
/* We don't do dynamic PCI IRQ allocation */
}

-struct pci_dev;
+#define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
+{
+ if (ppc_md.pci_get_legacy_ide_irq)
+ return ppc_md.pci_get_legacy_ide_irq(dev, channel);
+ return channel ? 15 : 14;
+}

#define HAVE_ARCH_PCI_MWI 1
static inline int pcibios_prep_mwi(struct pci_dev *dev)
diff -Nru a/include/linux/ide.h b/include/linux/ide.h
--- a/include/linux/ide.h 2004-10-26 23:09:56 +02:00
+++ b/include/linux/ide.h 2004-10-26 23:09:56 +02:00
@@ -1302,9 +1302,6 @@
*/
extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *);

-/* (ide_drive_t *drive, u8 *buf) */
-extern int ide_wait_cmd_task(ide_drive_t *, u8 *);
-
typedef struct ide_task_s {
/*
* struct hd_drive_task_hdr tf;
@@ -1349,8 +1346,6 @@
extern void ata_output_data(ide_drive_t *, void *, u32);
extern void atapi_input_bytes(ide_drive_t *, void *, u32);
extern void atapi_output_bytes(ide_drive_t *, void *, u32);
-extern void taskfile_input_data(ide_drive_t *, void *, u32);
-extern void taskfile_output_data(ide_drive_t *, void *, u32);

extern int drive_is_ready(ide_drive_t *);
extern int wait_for_ready(ide_drive_t *, int /* timeout */);
@@ -1491,6 +1486,7 @@
#ifdef CONFIG_BLK_DEV_IDEDMA
int __ide_dma_bad_drive(ide_drive_t *);
int __ide_dma_good_drive(ide_drive_t *);
+int ide_use_dma(ide_drive_t *);
int __ide_dma_off(ide_drive_t *);
void ide_dma_verbose(ide_drive_t *);

@@ -1516,6 +1512,7 @@
#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */

#else
+static inline int ide_use_dma(ide_drive_t *drive) { return 0; }
static inline int __ide_dma_off(ide_drive_t *drive) { return 0; }
static inline void ide_dma_verbose(ide_drive_t *drive) { ; }
#endif /* CONFIG_BLK_DEV_IDEDMA */


2004-10-27 13:36:45

by CaT

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, Oct 27, 2004 at 03:07:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> <bzolnier@trik.(none)> (04/10/26 1.2192)
> [ide] pdc202xx_old: PDC20267 needs the same LBA48 fixup as PDC20265

What would the symptoms of this bug be? I've got a PDC20267 and I'm
having a few issues transferring from hde to hdh (ie across two ports)
it seems. My work at duplicating things seems to work best when I do a
transfer like that rather then going from say, a totall different
controller to the pdc (hdh) or even from generated input to the pdc (hdh).

--
Red herrings strewn hither and yon.

Subject: Re: [BK PATCHES] ide-2.6 update

http://bugme.osdl.org/show_bug.cgi?id=2494

On Wed, 27 Oct 2004 23:34:31 +1000, CaT <[email protected]> wrote:
> On Wed, Oct 27, 2004 at 03:07:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> > <bzolnier@trik.(none)> (04/10/26 1.2192)
> > [ide] pdc202xx_old: PDC20267 needs the same LBA48 fixup as PDC20265
>
> What would the symptoms of this bug be? I've got a PDC20267 and I'm
> having a few issues transferring from hde to hdh (ie across two ports)
> it seems. My work at duplicating things seems to work best when I do a
> transfer like that rather then going from say, a totall different
> controller to the pdc (hdh) or even from generated input to the pdc (hdh).
>
> --
> Red herrings strewn hither and yon.

2004-10-27 14:29:45

by J.A. Magallon

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update


On 2004.10.27, Bartlomiej Zolnierkiewicz wrote:
> Please do a
>
> bk pull bk://bart.bkbits.net/ide-2.6
>
> This will update the following files:

Watch your mailer, it is wrapping lines...
See:

http://marc.theaimsgroup.com/?l=linux-ide&m=109888304706759&q=raw

and search for 'long data_size'.

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrakelinux release 10.1 (Community) for i586
Linux 2.6.9-jam1 (gcc 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)) #4


2004-10-27 14:34:00

by Mikael Pettersson

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

Bartlomiej Zolnierkiewicz writes:
> http://bugme.osdl.org/show_bug.cgi?id=2494
>
> On Wed, 27 Oct 2004 23:34:31 +1000, CaT <[email protected]> wrote:
> > On Wed, Oct 27, 2004 at 03:07:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> > > <bzolnier@trik.(none)> (04/10/26 1.2192)
> > > [ide] pdc202xx_old: PDC20267 needs the same LBA48 fixup as PDC20265
> >
> > What would the symptoms of this bug be? I've got a PDC20267 and I'm
> > having a few issues transferring from hde to hdh (ie across two ports)
> > it seems. My work at duplicating things seems to work best when I do a
> > transfer like that rather then going from say, a totall different
> > controller to the pdc (hdh) or even from generated input to the pdc (hdh).

I see only one note where someone claims the '67 is affected.
What would trigger it? A large disk or just heavy I/O?
FWIW, my news server has received, stored, manipulated, and sent >500
gigabytes of data using a lowly 20267 add-on card in a 440BX mobo,
and has _never_ had any problems, and I/O is sometimes very heavy.

Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 16:33:26 +0200, Mikael Pettersson <[email protected]> wrote:
> Bartlomiej Zolnierkiewicz writes:
>
>
> > http://bugme.osdl.org/show_bug.cgi?id=2494
> >
> > On Wed, 27 Oct 2004 23:34:31 +1000, CaT <[email protected]> wrote:
> > > On Wed, Oct 27, 2004 at 03:07:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> > > > <bzolnier@trik.(none)> (04/10/26 1.2192)
> > > > [ide] pdc202xx_old: PDC20267 needs the same LBA48 fixup as PDC20265
> > >
> > > What would the symptoms of this bug be? I've got a PDC20267 and I'm
> > > having a few issues transferring from hde to hdh (ie across two ports)
> > > it seems. My work at duplicating things seems to work best when I do a
> > > transfer like that rather then going from say, a totall different
> > > controller to the pdc (hdh) or even from generated input to the pdc (hdh).
>
> I see only one note where someone claims the '67 is affected.
> What would trigger it? A large disk or just heavy I/O?
> FWIW, my news server has received, stored, manipulated, and sent >500
> gigabytes of data using a lowly 20267 add-on card in a 440BX mobo,
> and has _never_ had any problems, and I/O is sometimes very heavy.

request with number of sectors > 256 on LBA48 capable disk
(!= large disk)

Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 14:29:23 +0000, J.A. Magallon <[email protected]> wrote:
>
> On 2004.10.27, Bartlomiej Zolnierkiewicz wrote:
> > Please do a
> >
> > bk pull bk://bart.bkbits.net/ide-2.6
> >
> > This will update the following files:
>
> Watch your mailer, it is wrapping lines...
> See:
>
> http://marc.theaimsgroup.com/?l=linux-ide&m=109888304706759&q=raw
>
> and search for 'long data_size'.

thanks

bye, bye gmail

2004-10-27 16:19:42

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 09:07, Bartlomiej Zolnierkiewicz wrote:
>Please do a
>
> bk pull bk://bart.bkbits.net/ide-2.6
>
>This will update the following files:
>
> drivers/ide/ide-disk.c | 1 +
> drivers/ide/ide-dma.c | 32

Even after fixing the 4 wrapped lines in the patch, I'm not going in
cleanly here:

patching file drivers/ide/ide-dma.c
Hunk #1 FAILED at 681.
1 out of 1 hunk FAILED -- saving rejects to file
drivers/ide/ide-dma.c.rej

The first 'grep' line of the patch is found at an offset of about +180
lines in the original file.

The rest of it seems to have found a home, but at offsets in excess of
159 lines for a few of them.

This was against a 2.6.9 tree, and 2.6.9-mm1 failed in similar
fashion. What src tree is this to be applied to?

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-27 16:19:44

by Chuck Ebbert

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 at 15:07:14 +0200 Bartlomiej Zolnierkiewicz wrote:

>@@ -585,7 +564,8 @@
> struct pci_dev *dev = hwif->pci_dev;
>
> /* PDC20265 has problems with large LBA48 requests */
>- if (dev->device == PCI_DEVICE_ID_PROMISE_20265)
>+ if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
>+ (dev->device == PCI_DEVICE_ID_PROMISE_20265))
> hwif->rqsize = 256;
>
> hwif->autodma = 0;


You forgot to update the comment...


I added this and the smart_thresholds() fix to my 2.6.9-base patches.

Now I have these ide fixes:

- smart_thresholds() fix
- pdc202xx_old LBA48 fix
- accept bad Maxtor drive serial number
- allow drive that reports no geometry

Should anything more really be in there?


--Chuck Ebbert 27-Oct-04 12:04:38

Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 12:15:55 -0400, Gene Heskett
<[email protected]> wrote:
> On Wednesday 27 October 2004 09:07, Bartlomiej Zolnierkiewicz wrote:
> >Please do a
> >
> > bk pull bk://bart.bkbits.net/ide-2.6
> >
> >This will update the following files:
> >
> > drivers/ide/ide-disk.c | 1 +
> > drivers/ide/ide-dma.c | 32
>
> Even after fixing the 4 wrapped lines in the patch, I'm not going in
> cleanly here:
>
> patching file drivers/ide/ide-dma.c
> Hunk #1 FAILED at 681.
> 1 out of 1 hunk FAILED -- saving rejects to file
> drivers/ide/ide-dma.c.rej
>
> The first 'grep' line of the patch is found at an offset of about +180
> lines in the original file.
>
> The rest of it seems to have found a home, but at offsets in excess of
> 159 lines for a few of them.
>
> This was against a 2.6.9 tree, and 2.6.9-mm1 failed in similar
> fashion. What src tree is this to be applied to?

current linus' -bk tree, latest -bk snapshot should also be OK

Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 12:10:50 -0400, Chuck Ebbert
<[email protected]> wrote:
> On Wed, 27 Oct 2004 at 15:07:14 +0200 Bartlomiej Zolnierkiewicz wrote:
>
> >@@ -585,7 +564,8 @@
> > struct pci_dev *dev = hwif->pci_dev;
> >
> > /* PDC20265 has problems with large LBA48 requests */
> >- if (dev->device == PCI_DEVICE_ID_PROMISE_20265)
> >+ if ((dev->device == PCI_DEVICE_ID_PROMISE_20267) ||
> >+ (dev->device == PCI_DEVICE_ID_PROMISE_20265))
> > hwif->rqsize = 256;
> >
> > hwif->autodma = 0;
>
>
> You forgot to update the comment...

ah, care to send a patch?

> I added this and the smart_thresholds() fix to my 2.6.9-base patches.
>
> Now I have these ide fixes:
>
> - smart_thresholds() fix
> - pdc202xx_old LBA48 fix
> - accept bad Maxtor drive serial number
> - allow drive that reports no geometry
>
> Should anything more really be in there?

Nope, looks like you've all critical stuff.

2004-10-27 17:08:01

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 12:22, Bartlomiej Zolnierkiewicz wrote:
>On Wed, 27 Oct 2004 12:15:55 -0400, Gene Heskett
>
><[email protected]> wrote:
>> On Wednesday 27 October 2004 09:07, Bartlomiej Zolnierkiewicz
wrote:
>> >Please do a
>> >
>> > bk pull bk://bart.bkbits.net/ide-2.6
>> >
>> >This will update the following files:
>> >
>> > drivers/ide/ide-disk.c | 1 +
>> > drivers/ide/ide-dma.c | 32
>>
>> Even after fixing the 4 wrapped lines in the patch, I'm not going
>> in cleanly here:
>>
>> patching file drivers/ide/ide-dma.c
>> Hunk #1 FAILED at 681.
>> 1 out of 1 hunk FAILED -- saving rejects to file
>> drivers/ide/ide-dma.c.rej
>>
>> The first 'grep' line of the patch is found at an offset of about
>> +180 lines in the original file.
>>
>> The rest of it seems to have found a home, but at offsets in
>> excess of 159 lines for a few of them.
>>
>> This was against a 2.6.9 tree, and 2.6.9-mm1 failed in similar
>> fashion. What src tree is this to be applied to?
>
>current linus' -bk tree, latest -bk snapshot should also be OK

Drat. I can't afford bitkeeper, either the time or the resources.
So I assume this will be in 2.6.10-rc2 or 3?

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

Subject: Re: [BK PATCHES] ide-2.6 update

On Wed, 27 Oct 2004 13:05:06 -0400, Gene Heskett
<[email protected]> wrote:
> On Wednesday 27 October 2004 12:22, Bartlomiej Zolnierkiewicz wrote:
>
>
> >On Wed, 27 Oct 2004 12:15:55 -0400, Gene Heskett
> >
> ><[email protected]> wrote:
> >> On Wednesday 27 October 2004 09:07, Bartlomiej Zolnierkiewicz
> wrote:
> >> >Please do a
> >> >
> >> > bk pull bk://bart.bkbits.net/ide-2.6
> >> >
> >> >This will update the following files:
> >> >
> >> > drivers/ide/ide-disk.c | 1 +
> >> > drivers/ide/ide-dma.c | 32
> >>
> >> Even after fixing the 4 wrapped lines in the patch, I'm not going
> >> in cleanly here:
> >>
> >> patching file drivers/ide/ide-dma.c
> >> Hunk #1 FAILED at 681.
> >> 1 out of 1 hunk FAILED -- saving rejects to file
> >> drivers/ide/ide-dma.c.rej
> >>
> >> The first 'grep' line of the patch is found at an offset of about
> >> +180 lines in the original file.
> >>
> >> The rest of it seems to have found a home, but at offsets in
> >> excess of 159 lines for a few of them.
> >>
> >> This was against a 2.6.9 tree, and 2.6.9-mm1 failed in similar
> >> fashion. What src tree is this to be applied to?
> >
> >current linus' -bk tree, latest -bk snapshot should also be OK
>
> Drat. I can't afford bitkeeper, either the time or the resources.
> So I assume this will be in 2.6.10-rc2 or 3?

I hope it will be in the next -bk snapshot...

2004-10-27 17:29:28

by Randy.Dunlap

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

Gene Heskett wrote:
> On Wednesday 27 October 2004 12:22, Bartlomiej Zolnierkiewicz wrote:
>
>>On Wed, 27 Oct 2004 12:15:55 -0400, Gene Heskett
>>
>><[email protected]> wrote:
>>
>>>On Wednesday 27 October 2004 09:07, Bartlomiej Zolnierkiewicz
>
> wrote:
>
>>>>Please do a
>>>>
>>>>bk pull bk://bart.bkbits.net/ide-2.6
>>>>
>>>>This will update the following files:
>>>>
>>>>drivers/ide/ide-disk.c | 1 +
>>>>drivers/ide/ide-dma.c | 32
>>>
>>>Even after fixing the 4 wrapped lines in the patch, I'm not going
>>>in cleanly here:
>>>
>>>patching file drivers/ide/ide-dma.c
>>>Hunk #1 FAILED at 681.
>>>1 out of 1 hunk FAILED -- saving rejects to file
>>>drivers/ide/ide-dma.c.rej
>>>
>>>The first 'grep' line of the patch is found at an offset of about
>>>+180 lines in the original file.
>>>
>>>The rest of it seems to have found a home, but at offsets in
>>>excess of 159 lines for a few of them.
>>>
>>>This was against a 2.6.9 tree, and 2.6.9-mm1 failed in similar
>>>fashion. What src tree is this to be applied to?
>>
>>current linus' -bk tree, latest -bk snapshot should also be OK
>
>
> Drat. I can't afford bitkeeper, either the time or the resources.
> So I assume this will be in 2.6.10-rc2 or 3?

Gene,

BK isn't required. Just get the daily snapshot from
http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/
and apply it to 2.6.10-rc1 (or whatever is latest).

--
~Randy
MOTD: Always include version info.
(Again. Sometimes I think ln -s /usr/src/linux/.config .signature)

2004-10-27 17:37:53

by Linus Torvalds

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update



On Wed, 27 Oct 2004, Gene Heskett wrote:
> >
> >current linus' -bk tree, latest -bk snapshot should also be OK
>
> Drat. I can't afford bitkeeper, either the time or the resources.
> So I assume this will be in 2.6.10-rc2 or 3?

You can also just do the the daily snapshots - in
/pub/linux/kernel/v2.6/snapshots.

But yes, I'm also pulling Bartlomiej's tree into the next release, so if
you can wait..

Linus

2004-10-27 18:18:09

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 13:02, Randy.Dunlap wrote:

>Gene,
>
>BK isn't required. Just get the daily snapshot from
>http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/
>and apply it to 2.6.10-rc1 (or whatever is latest).

Ahh, thanks, done.

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-27 17:37:51

by Alan

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Mer, 2004-10-27 at 17:10, Chuck Ebbert wrote:
> - accept bad Maxtor drive serial number

This should not be applied. If your drive is no longer reporting its
serial number then its faulty.

2004-10-27 18:33:04

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 13:20, Linus Torvalds wrote:
>On Wed, 27 Oct 2004, Gene Heskett wrote:
>> >current linus' -bk tree, latest -bk snapshot should also be OK
>>
>> Drat. I can't afford bitkeeper, either the time or the resources.
>> So I assume this will be in 2.6.10-rc2 or 3?
>
>You can also just do the the daily snapshots - in
>/pub/linux/kernel/v2.6/snapshots.
>
>But yes, I'm also pulling Bartlomiej's tree into the next release,
> so if you can wait..
>
> Linus

I don't know for sure if I'm having a problem or not Linus, but I had
to dl fc3rc1's iso's several times to get all good md5sums.
Something was fscking things using mozilla-1.7.3... So I wrote a
script to use wget for FC3rc2 & we'll see if that works in a few
hours when its all here. On a slow (768/128) DSL, and trying to
squeeze an extra character for email in from time to time.

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-27 18:28:59

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 13:15, Bartlomiej Zolnierkiewicz wrote:
>>On Wed, 27 Oct 2004 13:05:06 -0400, Gene Heskett

>> Drat. I can't afford bitkeeper, either the time or the resources.
>> So I assume this will be in 2.6.10-rc2 or 3?
>
>I hope it will be in the next -bk snapshot...

I just grabbed 2.6.10-rc1-bk6. Dated about 3 hours ago if the time
zones are the same.

Thanks

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-27 18:49:13

by Linus Torvalds

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update



On Wed, 27 Oct 2004, Gene Heskett wrote:
>
> I don't know for sure if I'm having a problem or not Linus, but I had
> to dl fc3rc1's iso's several times to get all good md5sums.

I don't think it was your side, I saw it too.

They seem to have replaced the test-rc ISO images in the middle or had
some server trouble, so the md5sums simply didn't match originally.

Linus

2004-10-27 19:24:05

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 12:18, Alan Cox wrote:
>On Mer, 2004-10-27 at 17:10, Chuck Ebbert wrote:
>> - accept bad Maxtor drive serial number
>
>This should not be applied. If your drive is no longer reporting its
>serial number then its faulty.

ISTR he wrote that he had 2 (identical?) drives that were reporting
the same serial number. Somewhat, but not exactly like I have two
different epson printers, both usb driven, and which except for the
reported serial number, return otherwise identical data when queried
by the usb drivers during dmesg. Which I find odd because one is a
C82, 4 color model, and the other is a Photo 820, 6 color model.

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-27 19:32:11

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 14:41, Linus Torvalds wrote:
>On Wed, 27 Oct 2004, Gene Heskett wrote:
>> I don't know for sure if I'm having a problem or not Linus, but I
>> had to dl fc3rc1's iso's several times to get all good md5sums.
>
>I don't think it was your side, I saw it too.
>
>They seem to have replaced the test-rc ISO images in the middle or
> had some server trouble, so the md5sums simply didn't match
> originally.
>
> Linus

Good, so I'm not crazy after all, as someone on the fedora list
accused me of yesterday when I went off topic, at length, responding
to a political rant about the shrub and about freedoms in general.
Thanks, I needed that. :)

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-28 06:51:31

by Gene Heskett

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Wednesday 27 October 2004 13:20, Linus Torvalds wrote:
>On Wed, 27 Oct 2004, Gene Heskett wrote:
>> >current linus' -bk tree, latest -bk snapshot should also be OK
>>
>> Drat. I can't afford bitkeeper, either the time or the resources.
>> So I assume this will be in 2.6.10-rc2 or 3?
>
>You can also just do the the daily snapshots - in
>/pub/linux/kernel/v2.6/snapshots.
>
>But yes, I'm also pulling Bartlomiej's tree into the next release,
> so if you can wait..
>
> Linus

I went after 2.6.10-rc1, and the bk6 patch for it, and its been
running here for about 2 hours, no hits, no runs, no errors so far.
I watched a little tvtime, browsed with FF for an hour or so, and of
course kmail runs full time here. And amanda just finished up. It
feels good, and Just Works(tm).

--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.28% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.

2004-10-28 20:28:03

by Eric D. Mudama

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

One of two things is happening:

1) Two drives are identically corrupted, producing the invalid serial
numbers being reported in the ID block. My belief is that this wasn't
likely, given the low volume of reports. The reported bad SN was
"M0000000000000000000" which based on our firmware, I don't see how it
could happen. A corruption of the config sector (the most likely
cause) *should* be catastrophic to the drive's functionality.

2) There is a code or hardware bug somewhere outside of the drive
itself that is causing this data to become corrupted.

Either way, I believe the best course of action is to RMA the drives
for new ones. I don't think good stuff will come from having the
linux kernel use drives that appear to be broken.

It'd be nice to test these drives on more systems, or with a bus
analyzer, to identify the cause.

--eric






On Wed, 27 Oct 2004 14:58:17 -0400, Gene Heskett
<[email protected]> wrote:
> On Wednesday 27 October 2004 12:18, Alan Cox wrote:
> >On Mer, 2004-10-27 at 17:10, Chuck Ebbert wrote:
> >> - accept bad Maxtor drive serial number
> >
> >This should not be applied. If your drive is no longer reporting its
> >serial number then its faulty.
>
> ISTR he wrote that he had 2 (identical?) drives that were reporting
> the same serial number. Somewhat, but not exactly like I have two
> different epson printers, both usb driven, and which except for the
> reported serial number, return otherwise identical data when queried
> by the usb drivers during dmesg. Which I find odd because one is a
> C82, 4 color model, and the other is a Photo 820, 6 color model.

2004-10-30 03:52:12

by CaT

[permalink] [raw]
Subject: PDC20267 bug and corruption (was: Re: [BK PATCHES] ide-2.6 update)

On Wed, Oct 27, 2004 at 03:51:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> http://bugme.osdl.org/show_bug.cgi?id=2494

Tried it via bk7, wasn't it.

Looks like I have found a bug relating to the pdc driver though.

The situation is such: I have 2 HDs connected to a PDC20267 PCI card,
one on each channel, with a master on the primary channel and a slave on
the secondry channel. Accessing each drive individually causes no
problems at all but accessing them simultaneously (like copying data off
one drive onto the other) causes the IDE layer to go to hell in a hand
basket. I can duplicate this each and every time by doing the following:

1. copying a few gig from hde to hdh
2. dd if=/dev/hde of=/dev/null
dd if=/dev/zero of=/dev/hdh

With method #1 I get the following:

Oct 27 00:37:39 nessie kernel: attempt to access beyond end of device
Oct 27 00:37:39 nessie kernel: hdh1: rw=1, want=3034756264, limit=390716802
Oct 27 00:37:40 nessie kernel: Aborting journal on device hdh1.
Oct 27 00:37:40 nessie kernel: ext3_abort called.
Oct 27 00:37:40 nessie kernel: EXT3-fs error (device hdh1): ext3_journal_start: Detected aborted journal
Oct 27 00:37:40 nessie kernel: Remounting filesystem read-only
Oct 27 00:37:40 nessie kernel: EXT3-fs error (device hdh1) in start_transaction: Journal has aborted

With method #2, a whole lot more fun occurs. The logfile I have is big
(almost 400k) so I've compressed it and included it as an attachment.
This is with kernel 2.6.10-rc1-bk7 (no logs survived from me testing
this with rc1-mm2).

My HDs attached are:

/dev/hde:

ATA device, with non-removable media
powers-up in standby; SET FEATURES subcmd spins-up.
Model Number: IC35L060AVV207-0
Serial Number: VNVB01G2RAK8XH
Firmware Revision: V22OA63A
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 3a
Supported: 6 5 4 3
Configuration:
Logical max current
cylinders 16383 65535
heads 16 1
sectors/track 63 63
--
CHS current addressable sectors: 4128705
LBA user addressable sectors: 120103200
LBA48 user addressable sectors: 120103200
device size with M = 1024*1024: 58644 MBytes
device size with M = 1000*1000: 61492 MBytes (61 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 52 Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Advanced power management level: unknown setting (0x0000)
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* NOP cmd
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
Release interrupt
* Look-ahead
* Write cache
* Power Management feature set
Security Mode feature set
SMART feature set
* FLUSH CACHE EXT command
* Mandatory FLUSH CACHE command
* Device Configuration Overlay feature set
* 48-bit Address feature set
Automatic Acoustic Management feature set
SET MAX security extension
Address Offset Reserved Area Boot
SET FEATURES subcommand required to spinup after power up
Power-Up In Standby feature set
Advanced Power Management feature set
* READ/WRITE DMA QUEUED
* General Purpose Logging feature set
* SMART self-test
* SMART error logging
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
30min for SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct

/dev/hdh:

ATA device, with non-removable media
Model Number: ST3200822A
Serial Number: 3LJ22Y8F
Firmware Revision: 3.01
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 2
Supported: 6 5 4 3
Configuration:
Logical max current
cylinders 16383 65535
heads 16 1
sectors/track 63 63
--
CHS current addressable sectors: 4128705
LBA user addressable sectors: 268435455
LBA48 user addressable sectors: 390721968
device size with M = 1024*1024: 190782 MBytes
device size with M = 1000*1000: 200049 MBytes (200 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 4 Queue depth: 1
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 16
Recommended acoustic management value: 128, current value: 0
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
* Look-ahead
* Write cache
* Power Management feature set
Security Mode feature set
* SMART feature set
* FLUSH CACHE EXT command
* Mandatory FLUSH CACHE command
* Device Configuration Overlay feature set
* 48-bit Address feature set
SET MAX security extension
* DOWNLOAD MICROCODE cmd
* SMART self-test
* SMART error logging
Security:
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
HW reset results:
CBLID- above Vih
Device num = 1 determined by CSEL
Checksum: correct


And lspci -vvv output is:

0000:00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ >SERR- <PERR+
Latency: 64
Region 0: Memory at 44000000 (32-bit, prefetchable) [size=64M]
Capabilities: [a0] AGP version 1.0
Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW- AGP3- Rate=x1,x2
Command: RQ=1 ArqSz=0 Cal=0 SBA- AGP- GART64- 64bit- FW- Rate=<none>

0000:00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B-
Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64
Bus: primary=00, secondary=01, subordinate=01, sec-latency=32
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: 40000000-408fffff
Prefetchable memory behind bridge: 41000000-41ffffff
BridgeCtl: Parity- SERR- NoISA+ VGA+ MAbort- >Reset- FastB2B+

0000:00:0d.0 Unknown mass storage controller: Promise Technology, Inc. PDC20267 (FastTrak100/Ultra100) (rev 02)
Subsystem: Promise Technology, Inc. Ultra100
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64
Interrupt: pin A routed to IRQ 11
Region 0: I/O ports at 10f0 [size=8]
Region 1: I/O ports at 1800 [size=4]
Region 2: I/O ports at 10f8 [size=8]
Region 3: I/O ports at 1804 [size=4]
Region 4: I/O ports at 1080 [size=64]
Region 5: Memory at 42000000 (32-bit, non-prefetchable) [size=128K]
Capabilities: [58] Power Management version 1
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-

0000:00:0e.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX [Cyclone] (rev 30)
Subsystem: 3Com Corporation 3C905B Fast Etherlink XL 10/100
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64 (2500ns min, 2500ns max), Cache Line Size: 0x08 (32 bytes)
Interrupt: pin A routed to IRQ 10
Region 0: I/O ports at 1000 [size=128]
Region 1: Memory at 40900000 (32-bit, non-prefetchable) [size=128]
Capabilities: [dc] Power Management version 1
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-

0000:00:0f.0 Ethernet controller: Lite-On Communications Inc LNE100TX (rev 20)
Subsystem: Netgear FA310TX
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 66
Interrupt: pin A routed to IRQ 9
Region 0: I/O ports at 1400 [size=256]
Region 1: Memory at 42100000 (32-bit, non-prefetchable) [size=256]

0000:00:14.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
Control: I/O+ Mem+ BusMaster+ SpecCycle+ MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 0

0000:00:14.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01) (prog-if 80 [Master])
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64
Region 4: I/O ports at 10c0 [size=16]

0000:00:14.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01) (prog-if 00 [UHCI])
Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64
Interrupt: pin D routed to IRQ 0
Region 4: I/O ports at 1820 [disabled] [size=32]

0000:00:14.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 02)
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin ? routed to IRQ 9

0000:01:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200 AGP (rev 01) (prog-if 00 [VGA])
Subsystem: Matrox Graphics, Inc. Millennium G200 AGP
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 64 (4000ns min, 8000ns max), Cache Line Size: 0x08 (32 bytes)
Interrupt: pin A routed to IRQ 9
Region 0: Memory at 41000000 (32-bit, prefetchable) [size=16M]
Region 1: Memory at 40800000 (32-bit, non-prefetchable) [size=16K]
Region 2: Memory at 40000000 (32-bit, non-prefetchable) [size=8M]
Capabilities: [dc] Power Management version 1
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [f0] AGP version 1.0
Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW- AGP3- Rate=x1,x2
Command: RQ=1 ArqSz=0 Cal=0 SBA- AGP- GART64- 64bit- FW- Rate=<none>

--
Red herrings strewn hither and yon.


Attachments:
(No filename) (10.88 kB)
moo.gz (16.87 kB)
Download all attachments

2004-10-30 15:54:37

by tabris

[permalink] [raw]
Subject: Re: [BK PATCHES] ide-2.6 update

On Thursday 28 October 2004 4:19 pm, Eric Mudama wrote:
> One of two things is happening:
>
> 1) Two drives are identically corrupted, producing the invalid serial
> numbers being reported in the ID block. My belief is that this
> wasn't likely, given the low volume of reports. The reported bad SN
> was "M0000000000000000000" which based on our firmware, I don't see
> how it could happen. A corruption of the config sector (the most
> likely cause) *should* be catastrophic to the drive's functionality.
>
Mine was the "D3000000" serial, not the "M0000000000000000000" serial.
and the drives are not 100% identical, tho they are the same capacity,
hooked to the same PDC20265 IDE bus, on a ASUS A7V266-E.

I'd submit the /proc/ide/hd[gh]/identify but atm /proc seems to be
blocking on that request. I'd submitted it before anyway.

> 2) There is a code or hardware bug somewhere outside of the drive
> itself that is causing this data to become corrupted.
>
> Either way, I believe the best course of action is to RMA the drives
> for new ones. I don't think good stuff will come from having the
> linux kernel use drives that appear to be broken.
The drives worked previously before the ide-probe patch, and have not
been a problem before. and as I believe they only have a 1 year Maxtor
warranty, i'm not sure i can RMA them, tho i'll keep it in mind.
>
> It'd be nice to test these drives on more systems, or with a bus
> analyzer, to identify the cause.
Well... if i can't RMA them, and I do replace them, I offer to send
them to you via UPS or FedEx.
>
> --eric
>
>
>
>
>
>
> On Wed, 27 Oct 2004 14:58:17 -0400, Gene Heskett
>
> <[email protected]> wrote:
> > On Wednesday 27 October 2004 12:18, Alan Cox wrote:
> > >On Mer, 2004-10-27 at 17:10, Chuck Ebbert wrote:
> > >> - accept bad Maxtor drive serial number
> > >
> > >This should not be applied. If your drive is no longer reporting
> > > its serial number then its faulty.
> >
> > ISTR he wrote that he had 2 (identical?) drives that were reporting
> > the same serial number. Somewhat, but not exactly like I have two
> > different epson printers, both usb driven, and which except for the
> > reported serial number, return otherwise identical data when
> > queried by the usb drivers during dmesg. Which I find odd because
> > one is a C82, 4 color model, and the other is a Photo 820, 6 color
> > model.
>
> -
> To unsubscribe from this list: send the line "unsubscribe
> linux-kernel" in the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

--
Windows 95 is crash compatible with Windows 1.0, 2.x, and 3.x.

Subject: Re: PDC20267 bug and corruption (was: Re: [BK PATCHES] ide-2.6 update)

On Sat, 30 Oct 2004 13:47:45 +1000, CaT <[email protected]> wrote:
> On Wed, Oct 27, 2004 at 03:51:14PM +0200, Bartlomiej Zolnierkiewicz wrote:
> > http://bugme.osdl.org/show_bug.cgi?id=2494
>
> Tried it via bk7, wasn't it.
>
> Looks like I have found a bug relating to the pdc driver though.
>
> The situation is such: I have 2 HDs connected to a PDC20267 PCI card,
> one on each channel, with a master on the primary channel and a slave on
> the secondry channel. Accessing each drive individually causes no
> problems at all but accessing them simultaneously (like copying data off
> one drive onto the other) causes the IDE layer to go to hell in a hand
> basket. I can duplicate this each and every time by doing the following:
>
> 1. copying a few gig from hde to hdh
> 2. dd if=/dev/hde of=/dev/null
> dd if=/dev/zero of=/dev/hdh
>
> With method #1 I get the following:
>
> Oct 27 00:37:39 nessie kernel: attempt to access beyond end of device
> Oct 27 00:37:39 nessie kernel: hdh1: rw=1, want=3034756264, limit=390716802
> Oct 27 00:37:40 nessie kernel: Aborting journal on device hdh1.
> Oct 27 00:37:40 nessie kernel: ext3_abort called.
> Oct 27 00:37:40 nessie kernel: EXT3-fs error (device hdh1): ext3_journal_start: Detected aborted journal
> Oct 27 00:37:40 nessie kernel: Remounting filesystem read-only
> Oct 27 00:37:40 nessie kernel: EXT3-fs error (device hdh1) in start_transaction: Journal has aborted

This comes from the block layer, generic_make_request(),
request is screwed up before it hits IDE layer.

> With method #2, a whole lot more fun occurs. The logfile I have is big
> (almost 400k) so I've compressed it and included it as an attachment.
> This is with kernel 2.6.10-rc1-bk7 (no logs survived from me testing
> this with rc1-mm2).

Indeed, this is a lot more fun. ;)

Is this bug new/old?

Is it pdc202xx_old specific? Does the same havoc happen
if you connect drives to the on-board Intel IDE controller?

Please post /proc identify data for both drives and PCI config
space dump for PDC20267 so someone can verify them.

2004-10-30 23:50:53

by CaT

[permalink] [raw]
Subject: Re: PDC20267 bug and corruption (was: Re: [BK PATCHES] ide-2.6 update)

On Sat, Oct 30, 2004 at 08:06:11PM +0200, Bartlomiej Zolnierkiewicz wrote:
> On Sat, 30 Oct 2004 13:47:45 +1000, CaT <[email protected]> wrote:
> > 2. dd if=/dev/hde of=/dev/null
> > dd if=/dev/zero of=/dev/hdh
...
> > With method #2, a whole lot more fun occurs. The logfile I have is big
> > (almost 400k) so I've compressed it and included it as an attachment.
> > This is with kernel 2.6.10-rc1-bk7 (no logs survived from me testing
> > this with rc1-mm2).
>
> Indeed, this is a lot more fun. ;)

:)

> Is this bug new/old?

old.

> Is it pdc202xx_old specific? Does the same havoc happen

Can I use new with the 20267? According to config help and the source
code I looked at the 20267 is not listed as one of the devices for new.

> if you connect drives to the on-board Intel IDE controller?

I haven't tried that yet (mainly cos it's a bit of a pain - I have 3
devs connected to it, inc boot stuff - and i didn't know if it'd be
really useful info) but I will if need be. Just shout.

I have tried going fron hdd to hdh but nothing bad happened. It's only
when going from hde to hdh that fun occurs.

> Please post /proc identify data for both drives and PCI config

hde:
045a 3fff 37c8 0010 0000 0000 003f 0000
0000 0000 2020 2020 2020 564e 5642 3031
4732 5241 4b38 5848 0003 0e3b 0034 5632
324f 4136 3341 4943 3335 4c30 3630 4156
5632 3037 2d30 2020 2020 2020 2020 2020
2020 2020 2020 2020 2020 2020 2020 8010
0000 2f00 4000 0200 0200 0007 ffff 0001
003f ffc1 003e 0110 a120 0728 0000 0007
0003 0078 0078 00f0 0078 0000 0000 0000
0000 0000 0000 001f 0000 0000 0000 0000
007c 0019 74eb 7fea 4023 7468 3c02 4023
203f 000f 0000 0000 fffe 600b 80fe 0000
0000 0000 0000 0000 a120 0728 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0001 000b 0000 0000 0000 001b 0000 0000
4000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 8000 0000
424f 0000 0000 0182 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 74a5

hdh:
0c5a 3fff c837 0010 0000 0000 003f 0000
0000 0000 2020 2020 2020 2020 2020 2020
334c 4a32 3259 3846 0000 4000 0004 332e
3031 2020 2020 5354 3332 3030 3832 3241
2020 2020 2020 2020 2020 2020 2020 2020
2020 2020 2020 2020 2020 2020 2020 8010
0000 2f00 4000 0200 0200 0007 ffff 0001
003f ffc1 003e 0110 ffff 0fff 0000 0007
0003 0078 0078 00f0 0078 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
007e 001b 346b 7d01 4003 3469 3c01 4003
203f 0000 0000 fefe 0000 6d00 8000 0000
0000 0000 0000 0000 f1b0 1749 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0001 f1b0 1749 f1b0 1749 2020 0002 42b6
0000 008a 3c06 3c0a 0000 07c6 0100 0800
10f0 1000 0002 0030 0000 0000 0000 fe06
0000 fe03 0000 0000 0000 0000 00e3 000b
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 d8a5

> space dump for PDC20267 so someone can verify them.

0000:00:0d.0 Unknown mass storage controller: Promise Technology, Inc. PDC20267 (FastTrak100/Ultra100) (rev 02)
00: 5a 10 30 4d 07 00 10 02 02 00 80 01 00 40 00 00
10: f1 10 00 00 01 18 00 00 f9 10 00 00 05 18 00 00
20: 81 10 00 00 00 00 00 42 00 00 00 00 5a 10 33 4d
30: 00 00 00 00 58 00 00 00 00 00 00 00 0b 01 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: ce 33 00 00 00 00 00 00 01 00 01 00 00 00 00 00
60: f1 24 41 00 c4 f3 4f 00 04 f3 4f 00 31 24 41 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

--
Red herrings strewn hither and yon.