ide: convert ide_find_best_mode() users to use ide_max_dma_mode()
PATCH 1/1 ide: convert ide_find_best_mode() users to use ide_max_dma_mode()
ide-timing.h:
* remove handling of DMA modes from ide_find_best_mode() and rename it to ide_find_best_pio_mode()
* drop no longer needed "map" argument from ide_find_best_pio_mode() and delete needless ->id check
* remove no longer needed XFER_SWDMA and XFER_UDMA* defines
au1xxx-ide.c:
* use ide_max_dma_mode() instead of ide_find_best_mode()
* remove needless CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA #ifdef
amd74xx.c:
* store UDMA masks in amd_ide_chip[] and while at it make "base" field to be u8 instead of unsigned long
* convert the driver to use UDMA masks from amd_ide_chip[]
* use ide_max_dma_mode() and ide_find_best_pio_mode() instead of ide_find_best_mode()
* delete stale comment from amd74xx_ide_dma_check()
* remove no longer needed AMD_UDMA* defines
via82cxxx.c:
* remove unused DISPLAY_VIA_TIMINGS define
* store UDMA masks in via_isa_bridges[] and while at it make "flags" field to be u8 instead of u16
* convert the driver to use UDMA masks from via_isa_bridges[]
* use ide_max_dma_mode() and ide_find_best_pio_mode() instead of ide_find_best_mode()
* remove no longer needed VIA_UDMA* defines
pmac.c:
* use ide_max_dma_mode() instead of ide_find_best_mode()
There should be no functionality changes caused by this patch.
--- drivers/ide/ide-timing.h | 56 ----------------- drivers/ide/mips/au1xxx-ide.c | 7 -- drivers/ide/pci/amd74xx.c | 118 +++++++++++++++++-------------------- drivers/ide/pci/via82cxxx.c | 132 +++++++++++++++++++----------------------- drivers/ide/ppc/pmac.c | 25 +------ 5 files changed, 123 insertions(+), 215 deletions(-)
drivers/ide/ide-timing.h +3 -53
@@ -102,66 +102,16 @@ static struct ide_timing ide_timing[] = #define EZ(v,unit) ((v)?ENOUGH(v,unit):0) #define XFER_MODE 0xf0 -#define XFER_UDMA_133 0x48 -#define XFER_UDMA_100 0x44 -#define XFER_UDMA_66 0x42 -#define XFER_UDMA 0x40 #define XFER_MWDMA 0x20 -#define XFER_SWDMA 0x10 #define XFER_EPIO 0x01 #define XFER_PIO 0x00 -static short ide_find_best_mode(ide_drive_t *drive, int map) +static short ide_find_best_pio_mode(ide_drive_t *drive) { struct hd_driveid *id = drive->id; short best = 0; - if (!id) - return XFER_PIO_SLOW; - - if ((map & XFER_UDMA) && (id->field_valid & 4)) { /* Want UDMA and UDMA bitmap valid */ - - if ((map & XFER_UDMA_133) == XFER_UDMA_133) - if ((best = (id->dma_ultra & 0x0040) ? XFER_UDMA_6 : 0)) return best; - - if ((map & XFER_UDMA_100) == XFER_UDMA_100) - if ((best = (id->dma_ultra & 0x0020) ? XFER_UDMA_5 : 0)) return best; - - if ((map & XFER_UDMA_66) == XFER_UDMA_66) - if ((best = (id->dma_ultra & 0x0010) ? XFER_UDMA_4 : - (id->dma_ultra & 0x0008) ? XFER_UDMA_3 : 0)) return best; - - if ((best = (id->dma_ultra & 0x0004) ? XFER_UDMA_2 : - (id->dma_ultra & 0x0002) ? XFER_UDMA_1 : - (id->dma_ultra & 0x0001) ? XFER_UDMA_0 : 0)) return best; - } - - if ((map & XFER_MWDMA) && (id->field_valid & 2)) { /* Want MWDMA and drive has EIDE fields */ - - if ((best = (id->dma_mword & 0x0004) ? XFER_MW_DMA_2 : - (id->dma_mword & 0x0002) ? XFER_MW_DMA_1 : - (id->dma_mword & 0x0001) ? XFER_MW_DMA_0 : 0)) return best; - } - - if (map & XFER_SWDMA) { /* Want SWDMA */ - - if (id->field_valid & 2) { /* EIDE SWDMA */ - - if ((best = (id->dma_1word & 0x0004) ? XFER_SW_DMA_2 : - (id->dma_1word & 0x0002) ? XFER_SW_DMA_1 : - (id->dma_1word & 0x0001) ? XFER_SW_DMA_0 : 0)) return best; - } - - if (id->capability & 1) { /* Pre-EIDE style SWDMA */ - - if ((best = (id->tDMA == 2) ? XFER_SW_DMA_2 : - (id->tDMA == 1) ? XFER_SW_DMA_1 : - (id->tDMA == 0) ? XFER_SW_DMA_0 : 0)) return best; - } - } - - - if ((map & XFER_EPIO) && (id->field_valid & 2)) { /* EIDE PIO modes */ + if (id->field_valid & 2) { /* EIDE PIO modes */ if ((best = (drive->id->eide_pio_modes & 4) ? XFER_PIO_5 : (drive->id->eide_pio_modes & 2) ? XFER_PIO_4 :
@@ -262,7 +212,7 @@ static int ide_timing_compute(ide_drive_*/ if ((speed &XFER_MODE ) !=XFER_PIO ) { -ide_timing_compute (drive,ide_find_best_mode (drive,XFER_PIO |XFER_EPIO ), &p,T ,UT ); +ide_timing_compute (drive,ide_find_best_pio_mode (drive), &p,T ,UT );ide_timing_merge (&p, t, t,IDE_TIMING_ALL ); }
drivers/ide/mips/au1xxx-ide.c +1 -6
@@ -381,9 +381,7 @@ static int auide_dma_setup(ide_drive_t *static int auide_dma_check (ide_drive_t *drive) { -u8 speed; - -#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA +u8 speed =ide_max_dma_mode (drive);if ( dbdma_init_done ==0 ){ auide_hwif.white_list = ide_in_drive_list(drive->id,
@@ -394,7 +392,6 @@ static int auide_dma_check(ide_drive_t *auide_ddma_init (&auide_hwif); dbdma_init_done =1 ; } -#endif /* Is the drive in our DMA black list? */
@@ -409,8 +406,6 @@ static int auide_dma_check(ide_drive_t *else drive->using_dma =1 ; - speed =ide_find_best_mode (drive,XFER_PIO |XFER_MWDMA ); -if (drive->autodma && (speed &XFER_MODE ) !=XFER_PIO )return 0 ;
drivers/ide/pci/amd74xx.c +54 -64
210 lines not on this page · raw message
drivers/ide/pci/via82cxxx.c +61 -71
229 lines not on this page · raw message
drivers/ide/ppc/pmac.c +4 -21
@@ -1821,28 +1821,11 @@ pmac_ide_dma_check(ide_drive_t *drive) enable =0 ;if (enable) { -short mode; - - map =XFER_MWDMA ; -if (pmif->kind == controller_kl_ata4 - || pmif->kind == controller_un_ata6 - || pmif->kind == controller_k2_ata6 - || pmif->kind == controller_sh_ata6) { - map |=XFER_UDMA ; -if (pmif->cable_80) { - map |=XFER_UDMA_66 ; -if (pmif->kind == controller_un_ata6 || - pmif->kind == controller_k2_ata6 || - pmif->kind == controller_sh_ata6) - map |=XFER_UDMA_100 ; -if (pmif->kind == controller_sh_ata6) - map |=XFER_UDMA_133 ; - } - } - mode =ide_find_best_mode (drive, map); -if (mode &XFER_UDMA ) +u8 mode =ide_max_dma_mode (drive); + +if (mode >=XFER_UDMA_0 ) drive->using_dma =pmac_ide_udma_enable (drive, mode); -else if (mode &XFER_MWDMA ) +else if (mode >=XFER_MW_DMA_0 ) drive->using_dma =pmac_ide_mdma_enable (drive, mode); hwif->OUTB (0 ,IDE_CONTROL_REG );/* Apply settings to controller */
Quoted 42 lines · Bartlomiej Zolnierkiewicz
ide-timing.h:* remove handling of DMA modes from
ide_find_best_mode()and rename it toide_find_best_pio_mode()* drop no longer needed "map" argument from
ide_find_best_pio_mode()and delete needless ->id check* remove no longer needed
XFER_SWDMAand XFER_UDMA* defines
au1xxx-ide.c:* use
ide_max_dma_mode()instead ofide_find_best_mode()* remove needless
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA#ifdef
amd74xx.c:* store UDMA masks in amd_ide_chip[] and while at it make "base" field to be u8 instead of unsigned long
* convert the driver to use UDMA masks from amd_ide_chip[]
* use
ide_max_dma_mode()andide_find_best_pio_mode()instead ofide_find_best_mode()* delete stale comment from
amd74xx_ide_dma_check()* remove no longer needed AMD_UDMA* defines
via82cxxx.c:* remove unused
DISPLAY_VIA_TIMINGSdefine* store UDMA masks in via_isa_bridges[] and while at it make "flags" field to be u8 instead of u16
* convert the driver to use UDMA masks from via_isa_bridges[]
* use
ide_max_dma_mode()andide_find_best_pio_mode()instead ofide_find_best_mode()
Quoted 7 lines
* remove no longer needed VIA_UDMA* defines
pmac.c:* use
ide_max_dma_mode()instead ofide_find_best_mode()There should be no functionality changes caused by this patch.
I'm afraid this hasn't been accomplished yet. ;-)
Quoted 7 lines
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>Index:
b/drivers/ide/mips/au1xxx-ide.c
===================================================================
drivers/ide/mips/au1xxx-ide.c static int auide_dma_setup(ide_drive_t * · line 386
Quoted 9 lines
drivers/ide/mips/au1xxx-ide.c +1
-3@@ -381,9 +381,7 @@ static int auide_dma_setup(ide_drive_t *static int auide_dma_check (ide_drive_t *drive) { -u8 speed; - -#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA +u8 speed =ide_max_dma_mode (drive);if ( dbdma_init_done ==0 ){
Ugh, coding style isnn't kosher here. :-)
Quoted 10 lines
drivers/ide/mips/au1xxx-ide.c +0
-1auide_hwif.white_list = ide_in_drive_list(drive->id,@@ -394,7 +392,6 @@ static int auide_dma_check(ide_drive_t *auide_ddma_init (&auide_hwif); dbdma_init_done =1 ; } -#endif /* Is the drive in our DMA black list? */
drivers/ide/mips/au1xxx-ide.c static int auide_dma_check(ide_drive_t * · line 409
Quoted 6 lines
drivers/ide/mips/au1xxx-ide.c +0
-2@@ -409,8 +406,6 @@ static int auide_dma_check(ide_drive_t *else drive->using_dma =1 ; - speed =ide_find_best_mode (drive,XFER_PIO |XFER_MWDMA ); -if (drive->autodma && (speed &XFER_MODE ) !=XFER_PIO )
ide_max_dma_mode() returns 0 if DMA not available, so that if should have
looked this way:
if (drive->autodma && speed)
drivers/ide/mips/au1xxx-ide.c static int auide_dma_check(ide_drive_t * · line 410
Quoted 1 line
drivers/ide/mips/au1xxx-ide.c +0
-0return 0 ;
But is this really equivalent? Why there's no fallback call toide_find_best_pio_mode() like in other cases?
MBR, Sergei
Hi,
Quoted 15 lines · Sergei Shtylyov
Quoted 13 lines · Bartlomiej Zolnierkiewicz
Index:
b/drivers/ide/mips/au1xxx-ide.c
===================================================================drivers/ide/mips/au1xxx-ide.c +1
-3@@ -381,9 +381,7 @@ static int auide_dma_setup(ide_drive_t *static int auide_dma_check (ide_drive_t *drive) { -u8 speed; - -#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA +u8 speed =ide_max_dma_mode (drive);
Quoted 3 lines
drivers/ide/mips/au1xxx-ide.c static int auide_dma_setup(ide_drive_t * · line 386
Quoted 1 line
drivers/ide/mips/au1xxx-ide.c +0
-0if ( dbdma_init_done ==0 ){Ugh, coding style isnn't kosher here. :-)
Ah, indeed I overlooked it.
Now looking at the au1xxx-ide.c I see that there are few other non-kosher places worth fixing... Care to send a patch?
Quoted 13 lines
Quoted 13 lines
drivers/ide/mips/au1xxx-ide.c +0
-1auide_hwif.white_list = ide_in_drive_list(drive->id,@@ -394,7 +392,6 @@ static int auide_dma_check(ide_drive_t *auide_ddma_init (&auide_hwif); dbdma_init_done =1 ; } -#endif /* Is the drive in our DMA black list? */ @@ -409,8 +406,6 @@ static int auide_dma_check(ide_drive_t *else drive->using_dma =1 ;
Quoted 6 lines
drivers/ide/mips/au1xxx-ide.c static int auide_dma_check(ide_drive_t * · line 409
Quoted 3 lines
drivers/ide/mips/au1xxx-ide.c +0
-2- speed =ide_find_best_mode (drive,XFER_PIO |XFER_MWDMA ); -if (drive->autodma && (speed &XFER_MODE ) !=XFER_PIO )
ide_max_dma_mode()returns 0 if DMA not available, so that if should have
looked this way:
XFER_PIO is 0x00 so the patch is correct but
Quoted 1 line
if (drive->autodma && speed)
is of course simpler
I think that it is not worth re-spinning the whole patch just for that (especially since the code in question is an old one and not introduced in this patch). However I'll happilly apply a follow-up fix.
Quoted 4 lines
drivers/ide/mips/au1xxx-ide.c static int auide_dma_check(ide_drive_t * · line 410
Quoted 1 line
drivers/ide/mips/au1xxx-ide.c +0
-0return 0 ;But is this really equivalent? Why there's no fallback call to
ide_find_best_pio_mode()like in other cases?
Because of the
if (drive->autodma && (speed & XFER_MODE) != XFER_PIO)
check.
In other places "speed" is always used, here it is only used if it denotes a DMA mode (XFER_PIO mask was needlessly passed to ide_find_best_mode() call since PIO modes were always filtered out later).
Thanks,
Bart