Lines Matching refs:drv_data
261 static u16 ep93xx_pata_read(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read() argument
265 void __iomem *base = drv_data->ide_base; in ep93xx_pata_read()
266 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_read()
277 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_read()
282 static u16 ep93xx_pata_read_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_reg() argument
285 return ep93xx_pata_read(drv_data, addr, true); in ep93xx_pata_read_reg()
289 static u16 ep93xx_pata_read_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_read_data() argument
292 return ep93xx_pata_read(drv_data, addr, false); in ep93xx_pata_read_data()
295 static void ep93xx_pata_write(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write() argument
299 void __iomem *base = drv_data->ide_base; in ep93xx_pata_write()
300 const struct ata_timing *t = &drv_data->t; in ep93xx_pata_write()
312 ep93xx_pata_rw_end(base, addr, drv_data->iordy, t0, t2, t2i); in ep93xx_pata_write()
316 static void ep93xx_pata_write_reg(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_reg() argument
319 ep93xx_pata_write(drv_data, value, addr, true); in ep93xx_pata_write_reg()
323 static void ep93xx_pata_write_data(struct ep93xx_pata_data *drv_data, in ep93xx_pata_write_data() argument
326 ep93xx_pata_write(drv_data, value, addr, false); in ep93xx_pata_write_data()
332 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_piomode() local
343 ata_timing_compute(adev, adev->pio_mode, &drv_data->t, T, 0); in ep93xx_pata_set_piomode()
347 ata_timing_merge(&t, &drv_data->t, &drv_data->t, in ep93xx_pata_set_piomode()
350 drv_data->iordy = ata_pio_need_iordy(adev); in ep93xx_pata_set_piomode()
352 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_set_piomode()
359 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_status() local
361 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_STATUS); in ep93xx_pata_check_status()
366 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_check_altstatus() local
368 return ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_ALTSTATUS); in ep93xx_pata_check_altstatus()
375 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_load() local
379 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_load()
385 ep93xx_pata_write_reg(drv_data, tf->hob_feature, in ep93xx_pata_tf_load()
387 ep93xx_pata_write_reg(drv_data, tf->hob_nsect, in ep93xx_pata_tf_load()
389 ep93xx_pata_write_reg(drv_data, tf->hob_lbal, in ep93xx_pata_tf_load()
391 ep93xx_pata_write_reg(drv_data, tf->hob_lbam, in ep93xx_pata_tf_load()
393 ep93xx_pata_write_reg(drv_data, tf->hob_lbah, in ep93xx_pata_tf_load()
398 ep93xx_pata_write_reg(drv_data, tf->feature, in ep93xx_pata_tf_load()
400 ep93xx_pata_write_reg(drv_data, tf->nsect, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_load()
401 ep93xx_pata_write_reg(drv_data, tf->lbal, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_load()
402 ep93xx_pata_write_reg(drv_data, tf->lbam, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_load()
403 ep93xx_pata_write_reg(drv_data, tf->lbah, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_load()
407 ep93xx_pata_write_reg(drv_data, tf->device, in ep93xx_pata_tf_load()
416 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_tf_read() local
419 tf->feature = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_FEATURE); in ep93xx_pata_tf_read()
420 tf->nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_tf_read()
421 tf->lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_tf_read()
422 tf->lbam = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAM); in ep93xx_pata_tf_read()
423 tf->lbah = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAH); in ep93xx_pata_tf_read()
424 tf->device = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DEVICE); in ep93xx_pata_tf_read()
427 ep93xx_pata_write_reg(drv_data, tf->ctl | ATA_HOB, in ep93xx_pata_tf_read()
429 tf->hob_feature = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
431 tf->hob_nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
433 tf->hob_lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
435 tf->hob_lbam = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
437 tf->hob_lbah = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_tf_read()
439 ep93xx_pata_write_reg(drv_data, tf->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_tf_read()
448 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_exec_command() local
450 ep93xx_pata_write_reg(drv_data, tf->command, in ep93xx_pata_exec_command()
458 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dev_select() local
464 ep93xx_pata_write_reg(drv_data, tmp, IDECTRL_ADDR_DEVICE); in ep93xx_pata_dev_select()
471 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_set_devctl() local
473 ep93xx_pata_write_reg(drv_data, ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_set_devctl()
482 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_data_xfer() local
491 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
493 ep93xx_pata_write_data(drv_data, le16_to_cpu(*data++), in ep93xx_pata_data_xfer()
505 drv_data, IDECTRL_ADDR_DATA)); in ep93xx_pata_data_xfer()
509 ep93xx_pata_write_data(drv_data, le16_to_cpu(*pad), in ep93xx_pata_data_xfer()
522 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_device_is_present() local
527 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
528 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
530 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
531 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
533 ep93xx_pata_write_reg(drv_data, 0x55, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
534 ep93xx_pata_write_reg(drv_data, 0xaa, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
536 nsect = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_NSECT); in ep93xx_pata_device_is_present()
537 lbal = ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_LBAL); in ep93xx_pata_device_is_present()
551 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_wait_after_reset() local
584 nsect = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
586 lbal = ep93xx_pata_read_reg(drv_data, in ep93xx_pata_wait_after_reset()
614 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_bus_softreset() local
616 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
618 ep93xx_pata_write_reg(drv_data, ap->ctl | ATA_SRST, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
620 ep93xx_pata_write_reg(drv_data, ap->ctl, IDECTRL_ADDR_CTL); in ep93xx_pata_bus_softreset()
626 static void ep93xx_pata_release_dma(struct ep93xx_pata_data *drv_data) in ep93xx_pata_release_dma() argument
628 if (drv_data->dma_rx_channel) { in ep93xx_pata_release_dma()
629 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_release_dma()
630 drv_data->dma_rx_channel = NULL; in ep93xx_pata_release_dma()
632 if (drv_data->dma_tx_channel) { in ep93xx_pata_release_dma()
633 dma_release_channel(drv_data->dma_tx_channel); in ep93xx_pata_release_dma()
634 drv_data->dma_tx_channel = NULL; in ep93xx_pata_release_dma()
647 static void ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) in ep93xx_pata_dma_init() argument
649 const struct platform_device *pdev = drv_data->pdev; in ep93xx_pata_dma_init()
661 drv_data->dma_rx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
662 drv_data->dma_rx_data.direction = DMA_FROM_DEVICE; in ep93xx_pata_dma_init()
663 drv_data->dma_rx_data.name = "ep93xx-pata-rx"; in ep93xx_pata_dma_init()
664 drv_data->dma_rx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
665 ep93xx_pata_dma_filter, &drv_data->dma_rx_data); in ep93xx_pata_dma_init()
666 if (!drv_data->dma_rx_channel) in ep93xx_pata_dma_init()
669 drv_data->dma_tx_data.port = EP93XX_DMA_IDE; in ep93xx_pata_dma_init()
670 drv_data->dma_tx_data.direction = DMA_TO_DEVICE; in ep93xx_pata_dma_init()
671 drv_data->dma_tx_data.name = "ep93xx-pata-tx"; in ep93xx_pata_dma_init()
672 drv_data->dma_tx_channel = dma_request_channel(mask, in ep93xx_pata_dma_init()
673 ep93xx_pata_dma_filter, &drv_data->dma_tx_data); in ep93xx_pata_dma_init()
674 if (!drv_data->dma_tx_channel) { in ep93xx_pata_dma_init()
675 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_dma_init()
682 conf.src_addr = drv_data->udma_in_phys; in ep93xx_pata_dma_init()
684 if (dmaengine_slave_config(drv_data->dma_rx_channel, &conf)) { in ep93xx_pata_dma_init()
686 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
693 conf.dst_addr = drv_data->udma_out_phys; in ep93xx_pata_dma_init()
695 if (dmaengine_slave_config(drv_data->dma_tx_channel, &conf)) { in ep93xx_pata_dma_init()
697 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
704 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_start() local
705 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_start()
709 ? drv_data->dma_tx_channel : drv_data->dma_rx_channel; in ep93xx_pata_dma_start()
744 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_stop() local
745 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_stop()
748 dmaengine_terminate_all(drv_data->dma_rx_channel); in ep93xx_pata_dma_stop()
749 dmaengine_terminate_all(drv_data->dma_tx_channel); in ep93xx_pata_dma_stop()
759 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_dma_stop()
772 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dma_status() local
773 u32 val = readl(drv_data->ide_base + IDEUDMASTS); in ep93xx_pata_dma_status()
793 if (readl(drv_data->ide_base + IDECTRL) & IDECTRL_INTRQ) in ep93xx_pata_dma_status()
844 struct ep93xx_pata_data *drv_data; in ep93xx_pata_drain_fifo() local
851 drv_data = ap->host->private_data; in ep93xx_pata_drain_fifo()
855 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
941 drv_data = devm_kzalloc(&pdev->dev, sizeof(*drv_data), GFP_KERNEL); in ep93xx_pata_probe()
942 if (!drv_data) { in ep93xx_pata_probe()
947 platform_set_drvdata(pdev, drv_data); in ep93xx_pata_probe()
948 drv_data->pdev = pdev; in ep93xx_pata_probe()
949 drv_data->ide_base = ide_base; in ep93xx_pata_probe()
950 drv_data->udma_in_phys = mem_res->start + IDEUDMADATAIN; in ep93xx_pata_probe()
951 drv_data->udma_out_phys = mem_res->start + IDEUDMADATAOUT; in ep93xx_pata_probe()
952 ep93xx_pata_dma_init(drv_data); in ep93xx_pata_probe()
963 host->private_data = drv_data; in ep93xx_pata_probe()
980 if (drv_data->dma_rx_channel && drv_data->dma_tx_channel) { in ep93xx_pata_probe()
1003 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_probe()
1012 struct ep93xx_pata_data *drv_data = host->private_data; in ep93xx_pata_remove() local
1015 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_remove()
1016 ep93xx_pata_clear_regs(drv_data->ide_base); in ep93xx_pata_remove()