Parent repository is bk://bk.arm.linux.org.uk/linux-2.6-rmk ======== ChangeSet 1.1598 ======== D 1.1598 04/02/28 17:28:36-08:00 akpm@mnm.(none) 37789 37788 0/0/1 P ChangeSet C Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk C into mnm.(none):/usr/src/bk-arm ------------------------------------------------ diff -Nru a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c --- a/drivers/ide/arm/icside.c Sun Feb 29 12:59:22 2004 +++ b/drivers/ide/arm/icside.c Sun Feb 29 12:59:22 2004 @@ -1,13 +1,7 @@ /* * linux/drivers/ide/arm/icside.c * - * Copyright (c) 1996-2002 Russell King. - * - * Changelog: - * 08-Jun-1996 RMK Created - * 12-Sep-1997 RMK Added interrupt enable/disable - * 17-Apr-1999 RMK Added support for V6 EASI - * 22-May-1999 RMK Added support for V6 DMA + * Copyright (c) 1996-2003 Russell King. */ #include @@ -237,7 +231,7 @@ sg->length = rq->nr_sectors * SECTOR_SIZE; nents = 1; } else { - nents = blk_rq_map_sg(&drive->queue, rq, sg); + nents = blk_rq_map_sg(drive->queue, rq, sg); if (rq_data_dir(rq) == READ) hwif->sg_dma_direction = DMA_FROM_DEVICE; @@ -487,33 +481,31 @@ set_dma_sg(hwif->hw.dma, hwif->sg_table, hwif->sg_nents); set_dma_mode(hwif->hw.dma, dma_mode); + drive->waiting_for_dma = 1; + return 0; } static int icside_dma_read(ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - task_ioreg_t cmd = WIN_NOP; + task_ioreg_t cmd; if (icside_dma_common(drive, rq, DMA_MODE_READ)) return 1; - drive->waiting_for_dma = 1; - if (drive->media != ide_disk) return 0; BUG_ON(HWGROUP(drive)->handler != NULL); - ide_set_handler(drive, icside_dmaintr, 2*WAIT_CMD, NULL); - /* * FIX ME to use only ACB ide_task_t args Struct */ #if 0 { ide_task_t *args = rq->special; - command = args->tfRegister[IDE_COMMAND_OFFSET]; + cmd = args->tfRegister[IDE_COMMAND_OFFSET]; } #else if (rq->flags & REQ_DRIVE_TASKFILE) { @@ -526,35 +518,31 @@ } #endif /* issue cmd to drive */ - HWIF(drive)->OUTB(cmd, IDE_COMMAND_REG); + ide_execute_command(drive, cmd, icside_dmaintr, 2*WAIT_CMD, NULL); return icside_dma_begin(drive); } -int icside_dma_write(ide_drive_t *drive) +static int icside_dma_write(ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; - task_ioreg_t cmd = WIN_NOP; + task_ioreg_t cmd; if (icside_dma_common(drive, rq, DMA_MODE_WRITE)) return 1; - drive->waiting_for_dma = 1; - if (drive->media != ide_disk) return 0; BUG_ON(HWGROUP(drive)->handler != NULL); - ide_set_handler(drive, icside_dmaintr, 2*WAIT_CMD, NULL); - /* * FIX ME to use only ACB ide_task_t args Struct */ #if 0 { ide_task_t *args = rq->special; - command = args->tfRegister[IDE_COMMAND_OFFSET]; + cmd = args->tfRegister[IDE_COMMAND_OFFSET]; } #else if (rq->flags & REQ_DRIVE_TASKFILE) { @@ -566,8 +554,9 @@ cmd = WIN_WRITEDMA; } #endif + /* issue cmd to drive */ - HWIF(drive)->OUTB(cmd, IDE_COMMAND_REG); + ide_execute_command(drive, cmd, icside_dmaintr, 2*WAIT_CMD, NULL); return icside_dma_begin(drive); } @@ -787,7 +776,7 @@ state->hwif[0] = hwif; state->hwif[1] = mate; - ec->irq_data = state; + ec->irq_data = state; ec->ops = &icside_ops_arcin_v6; hwif->maskproc = icside_maskproc; @@ -797,7 +786,7 @@ hwif->serialized = 1; hwif->config_data = slot_port; hwif->select_data = sel; - hwif->hw.dma = ec->dma; + hwif->hw.dma = ec->dma; mate->maskproc = icside_maskproc; mate->channel = 1; @@ -806,7 +795,7 @@ mate->serialized = 1; mate->config_data = slot_port; mate->select_data = sel | 1; - mate->hw.dma = ec->dma; + mate->hw.dma = ec->dma; if (ec->dma != NO_DMA && !request_dma(ec->dma, hwif->name)) { icside_dma_init(hwif); diff -Nru a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c --- a/drivers/usb/host/ohci-sa1111.c Sun Feb 29 12:59:22 2004 +++ b/drivers/usb/host/ohci-sa1111.c Sun Feb 29 12:59:22 2004 @@ -120,7 +120,13 @@ } #endif - return usb_hcd_irq(irq, hcd, r); + usb_hcd_irq(irq, hcd, r); + + /* + * SA1111 seems to re-assert its interrupt immediately + * after processing an interrupt. Always return IRQ_HANDLED. + */ + return IRQ_HANDLED; } /*-------------------------------------------------------------------------*/