43 #include <linux/kernel.h>
44 #include <linux/module.h>
45 #include <linux/pci.h>
51 #define DRV_NAME "sata_inic162x"
52 #define DRV_VERSION "0.4"
240 static const int scr_map[] = {
253 static void inic_reset_port(
void __iomem *port_base)
281 addr = scr_addr + scr_map[sc_reg] * 4;
282 *val =
readl(scr_addr + scr_map[sc_reg] * 4);
290 static int inic_scr_write(
struct ata_link *link,
unsigned sc_reg,
u32 val)
297 writel(val, scr_addr + scr_map[sc_reg] * 4);
301 static void inic_stop_idma(
struct ata_port *ap)
303 void __iomem *port_base = inic_port_base(ap);
310 static void inic_host_err_intr(
struct ata_port *ap,
u8 irq_stat,
u16 idma_stat)
319 irq_stat, idma_stat);
325 ata_ehi_hotplugged(ehi);
366 static void inic_host_intr(
struct ata_port *ap)
368 void __iomem *port_base = inic_port_base(ap);
379 inic_host_err_intr(ap, irq_stat, idma_stat);
399 ata_port_warn(ap,
"unhandled interrupt: cmd=0x%x irq_stat=0x%x idma_stat=0x%x\n",
400 qc ? qc->
tf.command : 0xff, irq_stat, idma_stat);
403 static irqreturn_t inic_interrupt(
int irq,
void *dev_instance)
415 spin_lock(&host->
lock);
419 inic_host_intr(host->
ports[i]);
423 spin_unlock(&host->
lock);
451 if (ata_is_dma(qc->
tf.protocol))
471 bool is_atapi = ata_is_atapi(qc->
tf.protocol);
472 bool is_data = ata_is_data(qc->
tf.protocol);
478 cdb_len = qc->
dev->cdb_len;
484 if (is_atapi || is_data)
522 inic_fill_sg(prd, qc);
530 void __iomem *port_base = inic_port_base(ap);
542 void __iomem *port_base = inic_port_base(ap);
565 inic_tf_read(qc->
ap, &
tf);
575 static void inic_freeze(
struct ata_port *ap)
577 void __iomem *port_base = inic_port_base(ap);
583 static void inic_thaw(
struct ata_port *ap)
585 void __iomem *port_base = inic_port_base(ap);
591 static int inic_check_ready(
struct ata_link *link)
593 void __iomem *port_base = inic_port_base(link->
ap);
602 static int inic_hardreset(
struct ata_link *link,
unsigned int *
class,
603 unsigned long deadline)
606 void __iomem *port_base = inic_port_base(ap);
612 inic_reset_port(port_base);
622 "failed to resume link after reset (errno=%d)\n",
636 "device not ready after hardreset (errno=%d)\n",
641 inic_tf_read(ap, &
tf);
648 static void inic_error_handler(
struct ata_port *ap)
650 void __iomem *port_base = inic_port_base(ap);
652 inic_reset_port(port_base);
660 inic_reset_port(inic_port_base(qc->
ap));
663 static void init_port(
struct ata_port *ap)
665 void __iomem *port_base = inic_port_base(ap);
676 static int inic_port_resume(
struct ata_port *ap)
682 static int inic_port_start(
struct ata_port *ap)
712 .check_atapi_dma = inic_check_atapi_dma,
713 .qc_prep = inic_qc_prep,
714 .qc_issue = inic_qc_issue,
715 .qc_fill_rtf = inic_qc_fill_rtf,
717 .freeze = inic_freeze,
719 .hardreset = inic_hardreset,
720 .error_handler = inic_error_handler,
721 .post_internal_cmd = inic_post_internal_cmd,
723 .scr_read = inic_scr_read,
724 .scr_write = inic_scr_write,
726 .port_resume = inic_port_resume,
727 .port_start = inic_port_start,
735 .port_ops = &inic_port_ops
751 for (i = 0; i < 10; i++) {
766 inic_reset_port(port_base);
779 static int inic_pci_device_resume(
struct pci_dev *pdev)
785 rc = ata_pci_device_do_resume(pdev);
795 ata_host_resume(host);
842 ata_port_pbar_desc(ap, mmio_bar, -1,
"mmio");
843 ata_port_pbar_desc(ap, mmio_bar, i *
PORT_SIZE,
"port");
849 dev_err(&pdev->
dev,
"32-bit DMA enable failed\n");
853 rc = pci_set_consistent_dma_mask(pdev,
DMA_BIT_MASK(32));
855 dev_err(&pdev->
dev,
"32-bit consistent DMA enable failed\n");
866 dev_err(&pdev->
dev,
"failed to set the maximum segment size\n");
872 dev_err(&pdev->
dev,
"failed to initialize controller\n");
888 .id_table = inic_pci_tbl,
890 .suspend = ata_pci_device_suspend,
891 .resume = inic_pci_device_resume,
893 .probe = inic_init_one,
894 .remove = ata_pci_remove_one,