Lines Matching refs:drv_data

262 static u16 ep93xx_pata_read(struct ep93xx_pata_data *drv_data,  in ep93xx_pata_read()  argument
266 void __iomem *base = drv_data->ide_base; in ep93xx_pata_read()
267 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_read()
278 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_read()
283 static u16 ep93xx_pata_read_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_reg() argument
286 return ep93xx_pata_read(drv_data, addr, true); in ep93xx_pata_read_reg()
290 static u16 ep93xx_pata_read_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_data() argument
293 return ep93xx_pata_read(drv_data, addr, false); in ep93xx_pata_read_data()
296 static void ep93xx_pata_write(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write() argument
300 void __iomem *base = drv_data->ide_base; in ep93xx_pata_write()
301 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_write()
313 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_write()
317 static void ep93xx_pata_write_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_reg() argument
320 ep93xx_pata_write(drv_data, value, addr, true); in ep93xx_pata_write_reg()
324 static void ep93xx_pata_write_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_data() argument
327 ep93xx_pata_write(drv_data, value, addr, false); in ep93xx_pata_write_data()
333 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_piomode() local
344 ata_timing_compute(adev, adev->pio_mode, &drv_data->t, T, 0); in ep93xx_pata_set_piomode()
348 ata_timing_merge(&t, &drv_data->t, &drv_data->t, in ep93xx_pata_set_piomode()
351 drv_data->iordy = ata_pio_need_iordy(adev); in ep93xx_pata_set_piomode()
353 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_set_piomode()
360 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_status() local
362 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_STATUS); in ep93xx_pata_check_status()
367 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_altstatus() local
369 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_ALTSTATUS); in ep93xx_pata_check_altstatus()
376 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_load() local
380 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_load()
386 ep93xx_pata_write_reg(drv_data, tf->hob_feature, in ep93xx_pata_tf_load()
388 ep93xx_pata_write_reg(drv_data, tf->hob_nsect, in ep93xx_pata_tf_load()
390 ep93xx_pata_write_reg(drv_data, tf->hob_lbal, in ep93xx_pata_tf_load()
392 ep93xx_pata_write_reg(drv_data, tf->hob_lbam, in ep93xx_pata_tf_load()
394 ep93xx_pata_write_reg(drv_data, tf->hob_lbah, in ep93xx_pata_tf_load()
399 ep93xx_pata_write_reg(drv_data, tf->feature, in ep93xx_pata_tf_load()
401 ep93xx_pata_write_reg(drv_data, tf->nsect, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_load()
402 ep93xx_pata_write_reg(drv_data, tf->lbal, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_load()
403 ep93xx_pata_write_reg(drv_data, tf->lbam, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_load()
404 ep93xx_pata_write_reg(drv_data, tf->lbah, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_load()
408 ep93xx_pata_write_reg(drv_data, tf->device, in ep93xx_pata_tf_load()
417 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_read() local
420 tf->error = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_FEATURE); in ep93xx_pata_tf_read()
421 tf->nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_read()
422 tf->lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_read()
423 tf->lbam = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_read()
424 tf->lbah = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_read()
425 tf->device = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DEVICE); in ep93xx_pata_tf_read()
428 ep93xx_pata_write_reg(drv_data, tf->ctl | ATA_HOB, in ep93xx_pata_tf_read()
430 tf->hob_feature = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
432 tf->hob_nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
434 tf->hob_lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
436 tf->hob_lbam = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
438 tf->hob_lbah = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
440 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_read()
449 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_exec_command() local
451 ep93xx_pata_write_reg(drv_data, tf->command, in ep93xx_pata_exec_command()
459 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dev_select() local
465 ep93xx_pata_write_reg(drv_data, tmp, IDECTRL_ADDR_DEVICE); in ep93xx_pata_dev_select()
472 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_devctl() local
474 ep93xx_pata_write_reg(drv_data, ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_set_devctl()
483 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_data_xfer() local
492 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
494 ep93xx_pata_write_data(drv_data, le16_to_cpu(*data++), in ep93xx_pata_data_xfer()
506 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
510 ep93xx_pata_write_data(drv_data, le16_to_cpu(*pad), in ep93xx_pata_data_xfer()
523 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_device_is_present() local
528 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
529 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
531 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
532 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
534 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
535 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
537 nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
538 lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
552 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_wait_after_reset() local
585 nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
587 lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
615 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_bus_softreset() local
617 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
619 ep93xx_pata_write_reg(drv_data, ap->ctl | ATA_SRST, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
621 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
627 static void ep93xx_pata_release_dma(struct ep93xx_pata_data *drv_data) in ep93xx_pata_release_dma() argument
629 if (drv_data->dma_rx_channel) { in ep93xx_pata_release_dma()
630 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_release_dma()
631 drv_data->dma_rx_channel = NULL; in ep93xx_pata_release_dma()
633 if (drv_data->dma_tx_channel) { in ep93xx_pata_release_dma()
634 dma_release_channel(drv_data->dma_tx_channel); in ep93xx_pata_release_dma()
635 drv_data->dma_tx_channel = NULL; in ep93xx_pata_release_dma()
648 static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) in ep93xx_pata_dma_init() argument
650 const struct platform_device *pdev = drv_data->pdev; in ep93xx_pata_dma_init()
662 drv_data->dma_rx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
663 drv_data->dma_rx_data.direction = DMA_DEV_TO_MEM; in ep93xx_pata_dma_init()
664 drv_data->dma_rx_data.name = "ep93xx-pata-rx"; in ep93xx_pata_dma_init()
665 drv_data->dma_rx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
666 ep93xx_pata_dma_filter, &drv_data->dma_rx_data); in ep93xx_pata_dma_init()
667 if (!drv_data->dma_rx_channel) in ep93xx_pata_dma_init()
670 drv_data->dma_tx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
671 drv_data->dma_tx_data.direction = DMA_MEM_TO_DEV; in ep93xx_pata_dma_init()
672 drv_data->dma_tx_data.name = "ep93xx-pata-tx"; in ep93xx_pata_dma_init()
673 drv_data->dma_tx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
674 ep93xx_pata_dma_filter, &drv_data->dma_tx_data); in ep93xx_pata_dma_init()
675 if (!drv_data->dma_tx_channel) { in ep93xx_pata_dma_init()
676 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_dma_init()
683 conf.src_addr = drv_data->udma_in_phys; in ep93xx_pata_dma_init()
685 if (dmaengine_slave_config(drv_data->dma_rx_channel, &conf)) { in ep93xx_pata_dma_init()
687 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
694 conf.dst_addr = drv_data->udma_out_phys; in ep93xx_pata_dma_init()
696 if (dmaengine_slave_config(drv_data->dma_tx_channel, &conf)) { in ep93xx_pata_dma_init()
698 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
705 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_start() local
706 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_start()
710 ? drv_data->dma_tx_channel : drv_data->dma_rx_channel; in ep93xx_pata_dma_start()
745 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_stop() local
746 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_stop()
749 dmaengine_terminate_all(drv_data->dma_rx_channel); in ep93xx_pata_dma_stop()
750 dmaengine_terminate_all(drv_data->dma_tx_channel); in ep93xx_pata_dma_stop()
760 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_dma_stop()
773 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dma_status() local
774 u32 val = readl(drv_data->ide_base + IDEUDMASTS); in ep93xx_pata_dma_status()
794 if (readl(drv_data->ide_base + IDECTRL) & IDECTRL_INTRQ) in ep93xx_pata_dma_status()
845 struct ep93xx_pata_data *drv_data; in ep93xx_pata_drain_fifo() local
852 drv_data = ap->host->private_data; in ep93xx_pata_drain_fifo()
856 ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DATA); in ep93xx_pata_drain_fifo()
865 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_port_start() local
871 drv_data->t = *ata_timing_find_mode(XFER_PIO_0); in ep93xx_pata_port_start()
915 struct ep93xx_pata_data *drv_data; in ep93xx_pata_probe() local
940 drv_data = devm_kzalloc(&pdev->dev, sizeof(*drv_data), GFP_KERNEL); in ep93xx_pata_probe()
941 if (!drv_data) { in ep93xx_pata_probe()
946 drv_data->pdev = pdev; in ep93xx_pata_probe()
947 drv_data->ide_base = ide_base; in ep93xx_pata_probe()
948 drv_data->udma_in_phys = mem_res->start + IDEUDMADATAIN; in ep93xx_pata_probe()
949 drv_data->udma_out_phys = mem_res->start + IDEUDMADATAOUT; in ep93xx_pata_probe()
950 ep93xx_pata_dma_init(drv_data); in ep93xx_pata_probe()
961 host->private_data = drv_data; in ep93xx_pata_probe()
978 if (drv_data->dma_rx_channel && drv_data->dma_tx_channel) { in ep93xx_pata_probe()
1001 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_probe()
1010 struct ep93xx_pata_data *drv_data = host->private_data; in ep93xx_pata_remove() local
1013 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_remove()
1014 ep93xx_pata_clear_regs(drv_data->ide_base); in ep93xx_pata_remove()