sgiioc4: use ->init_dma method
PATCH 5/7 sgiioc4: use ->init_dma method
* Move dma_base check from sgiioc4_ide_setup_pci_device() to ide_dma_sgiioc4().
* Replace ide_dma_sgiioc4() 'unsigned long dma_base' argument by 'const struct ide_port_info *d'.
* Move hwif->INB setup from ide_init_sgiioc4() to
sgiioc4_ide_setup_pci_device().
* Move ide_init_sgiioc4() call from sgiioc4_ide_setup_pci_device() to ide_dma_sgiioc4().
* Convert the driver to use ->init_dma method.
--- drivers/ide/pci/sgiioc4.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-)
drivers/ide/pci/sgiioc4.c +12 -17
@@ -327,15 +327,21 @@ sgiioc4_INB(unsigned long port)return reg; } +static void __devinit ide_init_sgiioc4 (ide_hwif_t *); +/* Creates a dma map for the scatter-gather list entries */ static int __devinit -ide_dma_sgiioc4 (ide_hwif_t * hwif,unsigned long dma_base) +ide_dma_sgiioc4 (ide_hwif_t *hwif,const struct ide_port_info *d) {struct pci_dev *dev =to_pci_dev (hwif->dev); +unsigned long dma_base =pci_resource_start (dev,0 ) +IOC4_DMA_OFFSET ;void __iomem *virt_dma_base;int num_ports =sizeof (ioc4_dma_regs_t);void *pad; +if (dma_base ==0 ) +return -1 ; +printk (KERN_INFO "%s: BM-DMA at 0x%04lx-0x%04lx\n" , hwif->name, dma_base, dma_base + num_ports -1 );
@@ -371,6 +377,7 @@ ide_dma_sgiioc4(ide_hwif_t * hwif, unsigif (pad) {ide_set_hwifdata (hwif, pad); +ide_init_sgiioc4 (hwif);return 0 ; }
@@ -551,11 +558,6 @@ static int sgiioc4_ide_dma_setup(ide_dristatic void __devinit ide_init_sgiioc4 (ide_hwif_t * hwif) { - hwif->INB = &sgiioc4_INB; - -if (hwif->dma_base ==0 ) -return ; - hwif->dma_host_set = &sgiioc4_dma_host_set; hwif->dma_setup = &sgiioc4_ide_dma_setup; hwif->dma_start = &sgiioc4_ide_dma_start;
@@ -575,16 +577,16 @@ static const struct ide_port_ops sgiioc4static const struct ide_port_info sgiioc4_port_info__devinitdata = { .chipset = ide_pci, + .init_dma = ide_dma_sgiioc4, .port_ops = &sgiioc4_port_ops, - .host_flags =IDE_HFLAG_NO_DMA |/* no SFF-style DMA */ -IDE_HFLAG_NO_AUTOTUNE , + .host_flags =IDE_HFLAG_NO_AUTOTUNE , .mwdma_mask =ATA_MWDMA2_ONLY , };static int __devinit sgiioc4_ide_setup_pci_device (struct pci_dev *dev) { -unsigned long cmd_base, dma_base, irqport; +unsigned long cmd_base, irqport;unsigned long bar0, cmd_phys_base, ctl;void __iomem *virt_base;ide_hwif_t *hwif;
@@ -610,7 +612,6 @@ sgiioc4_ide_setup_pci_device(struct pci_ cmd_base = (unsigned long ) virt_base +IOC4_CMD_OFFSET ; ctl = (unsigned long ) virt_base +IOC4_CTRL_OFFSET ; irqport = (unsigned long ) virt_base +IOC4_INTR_OFFSET ; - dma_base =pci_resource_start (dev,0 ) +IOC4_DMA_OFFSET ; cmd_phys_base = bar0 +IOC4_CMD_OFFSET ; if (!request_mem_region(cmd_phys_base, IOC4_CMD_CTL_BLK_SIZE,
@@ -639,13 +640,7 @@ sgiioc4_ide_setup_pci_device(struct pci_/* Initializing chipset IRQ Registers */ writel (0x03 , (void __iomem *)(irqport +IOC4_INTR_SET *4 )); -if (dma_base ==0 ||ide_dma_sgiioc4 (hwif, dma_base)) { -printk (KERN_INFO "%s: %s Bus-Master DMA disabled\n" , - hwif->name,DRV_NAME ); - d.mwdma_mask =0 ; - } - -ide_init_sgiioc4 (hwif); + hwif->INB = &sgiioc4_INB; idx[0 ] = hwif->index;
Quoted 2 lines · Bartlomiej Zolnierkiewicz
* Move
dma_basecheck fromsgiioc4_ide_setup_pci_device()toide_dma_sgiioc4().
This check should've been thrown out -- it's never true.
Quoted 28 lines
* Replace
ide_dma_sgiioc4()'unsigned longdma_base' argument by 'const structide_port_info*d'.* Move
hwif->INBsetup fromide_init_sgiioc4()to
sgiioc4_ide_setup_pci_device().* Move
ide_init_sgiioc4()call fromsgiioc4_ide_setup_pci_device()toide_dma_sgiioc4().* Convert the driver to use ->init_dma method.
Cc Jeremy Higdon <[email protected]>Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>Index:
b/drivers/ide/pci/sgiioc4.c
===================================================================drivers/ide/pci/sgiioc4.c +3
-1@@ -327,15 +327,21 @@ sgiioc4_INB(unsigned long port)return reg; } +static void __devinit ide_init_sgiioc4 (ide_hwif_t *); +/* Creates a dma map for the scatter-gather list entries */ static int __devinit -ide_dma_sgiioc4 (ide_hwif_t * hwif,unsigned long dma_base) +ide_dma_sgiioc4 (ide_hwif_t *hwif,const struct ide_port_info *d)
drivers/ide/pci/sgiioc4.c sgiioc4_INB(unsigned long port) · line 344
Quoted 10 lines
drivers/ide/pci/sgiioc4.c +4
-0{struct pci_dev *dev =to_pci_dev (hwif->dev); +unsigned long dma_base =pci_resource_start (dev,0 ) +IOC4_DMA_OFFSET ;void __iomem *virt_dma_base;int num_ports =sizeof (ioc4_dma_regs_t);void *pad; +if (dma_base ==0 ) +return -1 ; +
It should be quite obvious that 'dma_base' will never be 0 sinceIOC4_DMA_OFFSET == 0x140.
drivers/ide/pci/sgiioc4.c sgiioc4_INB(unsigned long port) · line 346
Quoted 2 lines
drivers/ide/pci/sgiioc4.c +0
-0printk (KERN_INFO "%s: BM-DMA at 0x%04lx-0x%04lx\n" , hwif->name, dma_base, dma_base + num_ports -1 );
It should print "MMIO-DMA" since the registers are memory-mapped.
Making another notch...
MBR, Sergei