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->error = 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()
638 static int ep93xx_pata_dma_init(struct ep93xx_pata_data *drv_data) in ep93xx_pata_dma_init() argument
640 struct platform_device *pdev = drv_data->pdev; in ep93xx_pata_dma_init()
654 drv_data->dma_rx_channel = dma_request_chan(dev, "rx"); in ep93xx_pata_dma_init()
655 if (IS_ERR(drv_data->dma_rx_channel)) in ep93xx_pata_dma_init()
656 return dev_err_probe(dev, PTR_ERR(drv_data->dma_rx_channel), in ep93xx_pata_dma_init()
659 drv_data->dma_tx_channel = dma_request_chan(&pdev->dev, "tx"); in ep93xx_pata_dma_init()
660 if (IS_ERR(drv_data->dma_tx_channel)) { in ep93xx_pata_dma_init()
661 ret = dev_err_probe(dev, PTR_ERR(drv_data->dma_tx_channel), in ep93xx_pata_dma_init()
669 conf.src_addr = drv_data->udma_in_phys; in ep93xx_pata_dma_init()
671 ret = dmaengine_slave_config(drv_data->dma_rx_channel, &conf); in ep93xx_pata_dma_init()
680 conf.dst_addr = drv_data->udma_out_phys; in ep93xx_pata_dma_init()
682 ret = dmaengine_slave_config(drv_data->dma_tx_channel, &conf); in ep93xx_pata_dma_init()
691 dma_release_channel(drv_data->dma_rx_channel); in ep93xx_pata_dma_init()
693 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_dma_init()
701 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_start() local
702 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_start()
706 ? drv_data->dma_tx_channel : drv_data->dma_rx_channel; in ep93xx_pata_dma_start()
741 struct ep93xx_pata_data *drv_data = qc->ap->host->private_data; in ep93xx_pata_dma_stop() local
742 void __iomem *base = drv_data->ide_base; in ep93xx_pata_dma_stop()
745 dmaengine_terminate_all(drv_data->dma_rx_channel); in ep93xx_pata_dma_stop()
746 dmaengine_terminate_all(drv_data->dma_tx_channel); in ep93xx_pata_dma_stop()
756 ep93xx_pata_enable_pio(drv_data->ide_base, in ep93xx_pata_dma_stop()
769 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_dma_status() local
770 u32 val = readl(drv_data->ide_base + IDEUDMASTS); in ep93xx_pata_dma_status()
790 if (readl(drv_data->ide_base + IDECTRL) & IDECTRL_INTRQ) in ep93xx_pata_dma_status()
841 struct ep93xx_pata_data *drv_data; in ep93xx_pata_drain_fifo() local
848 drv_data = ap->host->private_data; in ep93xx_pata_drain_fifo()
852 ep93xx_pata_read_reg(drv_data, IDECTRL_ADDR_DATA); in ep93xx_pata_drain_fifo()
861 struct ep93xx_pata_data *drv_data = ap->host->private_data; in ep93xx_pata_port_start() local
867 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
932 drv_data = devm_kzalloc(&pdev->dev, sizeof(*drv_data), GFP_KERNEL); in ep93xx_pata_probe()
933 if (!drv_data) in ep93xx_pata_probe()
936 drv_data->pdev = pdev; in ep93xx_pata_probe()
937 drv_data->ide_base = ide_base; in ep93xx_pata_probe()
938 drv_data->udma_in_phys = mem_res->start + IDEUDMADATAIN; in ep93xx_pata_probe()
939 drv_data->udma_out_phys = mem_res->start + IDEUDMADATAOUT; in ep93xx_pata_probe()
940 err = ep93xx_pata_dma_init(drv_data); in ep93xx_pata_probe()
953 host->private_data = drv_data; in ep93xx_pata_probe()
970 if (drv_data->dma_rx_channel && drv_data->dma_tx_channel) { in ep93xx_pata_probe()
992 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_probe()
999 struct ep93xx_pata_data *drv_data = host->private_data; in ep93xx_pata_remove() local
1002 ep93xx_pata_release_dma(drv_data); in ep93xx_pata_remove()
1003 ep93xx_pata_clear_regs(drv_data->ide_base); in ep93xx_pata_remove()