34 #include <linux/kernel.h>
35 #include <linux/module.h>
47 #include <mach/platform.h>
49 #define DRV_NAME "ep93xx-ide"
50 #define DRV_VERSION "1.0"
141 static void ep93xx_pata_clear_regs(
void __iomem *base)
158 static bool ep93xx_pata_check_iordy(
void __iomem *base)
177 static int ep93xx_pata_get_wst(
int pio_mode)
183 else if (pio_mode < 3)
191 static void ep93xx_pata_enable_pio(
void __iomem *base,
int pio_mode)
194 ep93xx_pata_get_wst(pio_mode) |
205 static void ep93xx_pata_delay(
unsigned long count)
217 static unsigned long ep93xx_pata_wait_for_iordy(
void __iomem *base,
229 unsigned long start = (1250 + 35) / 25 - t2;
232 while (!ep93xx_pata_check_iordy(base) && counter--)
233 ep93xx_pata_delay(1);
238 static void ep93xx_pata_rw_begin(
void __iomem *base,
unsigned long addr,
242 ep93xx_pata_delay(t1);
246 static void ep93xx_pata_rw_end(
void __iomem *base,
unsigned long addr,
247 bool iordy,
unsigned long t0,
unsigned long t2,
250 ep93xx_pata_delay(t2);
253 t2 += ep93xx_pata_wait_for_iordy(base, t2);
255 if (t0 > t2 && t0 - t2 > t2i)
256 ep93xx_pata_delay(t0 - t2);
258 ep93xx_pata_delay(t2i);
271 ep93xx_pata_rw_begin(base, addr, t->
setup);
277 ep93xx_pata_rw_end(base, addr, drv_data->
iordy, t0, t2, t2i);
285 return ep93xx_pata_read(drv_data, addr,
true);
292 return ep93xx_pata_read(drv_data, addr,
false);
305 ep93xx_pata_rw_begin(base, addr, t->
setup);
312 ep93xx_pata_rw_end(base, addr, drv_data->
iordy, t0, t2, t2i);
319 ep93xx_pata_write(drv_data, value, addr,
true);
326 ep93xx_pata_write(drv_data, value, addr,
false);
329 static void ep93xx_pata_set_piomode(
struct ata_port *ap,
341 unsigned long T = 1000000 / (200 / 5);
352 ep93xx_pata_enable_pio(drv_data->
ide_base,
357 static u8 ep93xx_pata_check_status(
struct ata_port *ap)
364 static u8 ep93xx_pata_check_altstatus(
struct ata_port *ap)
372 static void ep93xx_pata_tf_load(
struct ata_port *ap,
378 if (tf->
ctl != ap->last_ctl) {
380 ap->last_ctl = tf->
ctl;
387 ep93xx_pata_write_reg(drv_data, tf->
hob_nsect,
389 ep93xx_pata_write_reg(drv_data, tf->
hob_lbal,
391 ep93xx_pata_write_reg(drv_data, tf->
hob_lbam,
393 ep93xx_pata_write_reg(drv_data, tf->
hob_lbah,
398 ep93xx_pata_write_reg(drv_data, tf->
feature,
407 ep93xx_pata_write_reg(drv_data, tf->
device,
418 tf->
command = ep93xx_pata_check_status(ap);
427 ep93xx_pata_write_reg(drv_data, tf->
ctl |
ATA_HOB,
431 tf->
hob_nsect = ep93xx_pata_read_reg(drv_data,
433 tf->
hob_lbal = ep93xx_pata_read_reg(drv_data,
435 tf->
hob_lbam = ep93xx_pata_read_reg(drv_data,
437 tf->
hob_lbah = ep93xx_pata_read_reg(drv_data,
440 ap->last_ctl = tf->
ctl;
445 static void ep93xx_pata_exec_command(
struct ata_port *ap,
450 ep93xx_pata_write_reg(drv_data, tf->
command,
456 static void ep93xx_pata_dev_select(
struct ata_port *ap,
unsigned int device)
469 static void ep93xx_pata_set_devctl(
struct ata_port *ap,
u8 ctl)
477 static unsigned int ep93xx_pata_data_xfer(
struct ata_device *adev,
484 unsigned int words = buflen >> 1;
490 ep93xx_pata_read_data(
493 ep93xx_pata_write_data(drv_data,
le16_to_cpu(*data++),
498 unsigned char pad[2] = { };
504 ep93xx_pata_read_data(
509 ep93xx_pata_write_data(drv_data,
le16_to_cpu(*pad),
519 static bool ep93xx_pata_device_is_present(
struct ata_port *ap,
525 ap->
ops->sff_dev_select(ap, device);
539 if ((nsect == 0x55) && (lbal == 0xaa))
546 static int ep93xx_pata_wait_after_reset(
struct ata_link *
link,
547 unsigned int devmask,
548 unsigned long deadline)
552 unsigned int dev0 = devmask & (1 << 0);
553 unsigned int dev1 = devmask & (1 << 1);
574 ap->
ops->sff_dev_select(ap, 1);
581 for (i = 0; i < 2; i++) {
584 nsect = ep93xx_pata_read_reg(drv_data,
586 lbal = ep93xx_pata_read_reg(drv_data,
588 if (nsect == 1 && lbal == 1)
601 ap->
ops->sff_dev_select(ap, 0);
603 ap->
ops->sff_dev_select(ap, 1);
605 ap->
ops->sff_dev_select(ap, 0);
611 static int ep93xx_pata_bus_softreset(
struct ata_port *ap,
unsigned int devmask,
612 unsigned long deadline)
621 ap->last_ctl = ap->ctl;
623 return ep93xx_pata_wait_after_reset(&ap->
link, devmask, deadline);
638 static bool ep93xx_pata_dma_filter(
struct dma_chan *
chan,
void *filter_param)
640 if (ep93xx_dma_chan_is_m2p(chan))
680 memset(&conf, 0,
sizeof(conf));
685 dev_err(&pdev->
dev,
"failed to configure rx dma channel\n");
686 ep93xx_pata_release_dma(drv_data);
691 memset(&conf, 0,
sizeof(conf));
696 dev_err(&pdev->
dev,
"failed to configure tx dma channel\n");
697 ep93xx_pata_release_dma(drv_data);
711 txd = channel->
device->device_prep_slave_sg(channel, qc->
sg,
714 dev_err(qc->
ap->dev,
"failed to prepare slave for sg dma\n");
720 if (dmaengine_submit(txd) < 0) {
721 dev_err(qc->
ap->dev,
"failed to submit dma transfer\n");
724 dma_async_issue_pending(channel);
759 ep93xx_pata_enable_pio(drv_data->
ide_base,
767 qc->
ap->ops->sff_exec_command(qc->
ap, &qc->
tf);
770 static u8 ep93xx_pata_dma_status(
struct ata_port *ap)
803 static int ep93xx_pata_softreset(
struct ata_link *al,
unsigned int *classes,
804 unsigned long deadline)
808 unsigned int devmask = 0;
813 if (ep93xx_pata_device_is_present(ap, 0))
815 if (slave_possible && ep93xx_pata_device_is_present(ap, 1))
819 ap->
ops->sff_dev_select(al->
ap, 0);
822 rc = ep93xx_pata_bus_softreset(ap, devmask, deadline);
833 if (slave_possible && err != 0x81)
835 devmask & (1 << 1), &err);
852 drv_data = ap->
host->private_data;
854 for (count = 0; (ap->
ops->sff_check_status(ap) &
ATA_DRQ)
855 && count < 65536; count += 2)
861 "drained %d bytes to clear DRQ.\n", count);
865 static int ep93xx_pata_port_start(
struct ata_port *ap)
882 .dma_boundary = 0x7fff,
886 .inherits = &ata_bmdma_port_ops,
890 .softreset = ep93xx_pata_softreset,
893 .sff_dev_select = ep93xx_pata_dev_select,
894 .sff_set_devctl = ep93xx_pata_set_devctl,
895 .sff_check_status = ep93xx_pata_check_status,
896 .sff_check_altstatus = ep93xx_pata_check_altstatus,
897 .sff_tf_load = ep93xx_pata_tf_load,
898 .sff_tf_read = ep93xx_pata_tf_read,
899 .sff_exec_command = ep93xx_pata_exec_command,
900 .sff_data_xfer = ep93xx_pata_data_xfer,
901 .sff_drain_fifo = ep93xx_pata_drain_fifo,
904 .set_piomode = ep93xx_pata_set_piomode,
906 .bmdma_setup = ep93xx_pata_dma_setup,
907 .bmdma_start = ep93xx_pata_dma_start,
908 .bmdma_stop = ep93xx_pata_dma_stop,
909 .bmdma_status = ep93xx_pata_dma_status,
912 .port_start = ep93xx_pata_port_start,
954 platform_set_drvdata(pdev, drv_data);
955 drv_data->
pdev = pdev;
959 ep93xx_pata_dma_init(drv_data);
968 ep93xx_pata_clear_regs(ide_base);
974 ap->
ops = &ep93xx_pata_port_ops;
999 ep93xx_pata_enable_pio(ide_base, 0);
1010 ep93xx_pata_release_dma(drv_data);
1018 struct ata_host *host = platform_get_drvdata(pdev);
1022 ep93xx_pata_release_dma(drv_data);
1023 ep93xx_pata_clear_regs(drv_data->
ide_base);
1033 .probe = ep93xx_pata_probe,
1039 MODULE_AUTHOR(
"Alessandro Zummo, Lennert Buytenhek, Joao Ramos, "
1040 "Bartlomiej Zolnierkiewicz, Rafal Prylowski");