aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/pata_icside.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/pata_icside.c')
-rw-r--r--drivers/ata/pata_icside.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/drivers/ata/pata_icside.c b/drivers/ata/pata_icside.c
index 64a711776c45..be30923566c5 100644
--- a/drivers/ata/pata_icside.c
+++ b/drivers/ata/pata_icside.c
@@ -70,6 +70,8 @@ struct pata_icside_info {
70 unsigned int mwdma_mask; 70 unsigned int mwdma_mask;
71 unsigned int nr_ports; 71 unsigned int nr_ports;
72 const struct portinfo *port[2]; 72 const struct portinfo *port[2];
73 unsigned long raw_base;
74 unsigned long raw_ioc_base;
73}; 75};
74 76
75#define ICS_TYPE_A3IN 0 77#define ICS_TYPE_A3IN 0
@@ -357,26 +359,7 @@ static void pata_icside_error_handler(struct ata_port *ap)
357 pata_icside_postreset); 359 pata_icside_postreset);
358} 360}
359 361
360static u8 pata_icside_irq_ack(struct ata_port *ap, unsigned int chk_drq)
361{
362 unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
363 u8 status;
364
365 status = ata_busy_wait(ap, bits, 1000);
366 if (status & bits)
367 if (ata_msg_err(ap))
368 printk(KERN_ERR "abnormal status 0x%X\n", status);
369
370 if (ata_msg_intr(ap))
371 printk(KERN_INFO "%s: irq ack: drv_stat 0x%X\n",
372 __FUNCTION__, status);
373
374 return status;
375}
376
377static struct ata_port_operations pata_icside_port_ops = { 362static struct ata_port_operations pata_icside_port_ops = {
378 .port_disable = ata_port_disable,
379
380 .set_dmamode = pata_icside_set_dmamode, 363 .set_dmamode = pata_icside_set_dmamode,
381 364
382 .tf_load = ata_tf_load, 365 .tf_load = ata_tf_load,
@@ -403,7 +386,6 @@ static struct ata_port_operations pata_icside_port_ops = {
403 386
404 .irq_clear = ata_dummy_noret, 387 .irq_clear = ata_dummy_noret,
405 .irq_on = ata_irq_on, 388 .irq_on = ata_irq_on,
406 .irq_ack = pata_icside_irq_ack,
407 389
408 .port_start = pata_icside_port_start, 390 .port_start = pata_icside_port_start,
409 391
@@ -412,9 +394,10 @@ static struct ata_port_operations pata_icside_port_ops = {
412}; 394};
413 395
414static void __devinit 396static void __devinit
415pata_icside_setup_ioaddr(struct ata_ioports *ioaddr, void __iomem *base, 397pata_icside_setup_ioaddr(struct ata_port *ap, void __iomem *base,
416 const struct portinfo *info) 398 const struct portinfo *info)
417{ 399{
400 struct ata_ioports *ioaddr = &ap->ioaddr;
418 void __iomem *cmd = base + info->dataoffset; 401 void __iomem *cmd = base + info->dataoffset;
419 402
420 ioaddr->cmd_addr = cmd; 403 ioaddr->cmd_addr = cmd;
@@ -431,6 +414,13 @@ pata_icside_setup_ioaddr(struct ata_ioports *ioaddr, void __iomem *base,
431 414
432 ioaddr->ctl_addr = base + info->ctrloffset; 415 ioaddr->ctl_addr = base + info->ctrloffset;
433 ioaddr->altstatus_addr = ioaddr->ctl_addr; 416 ioaddr->altstatus_addr = ioaddr->ctl_addr;
417
418 ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx",
419 info->raw_base + info->dataoffset,
420 info->raw_base + info->ctrloffset);
421
422 if (info->raw_ioc_base)
423 ata_port_desc(ap, "iocbase 0x%lx", info->raw_ioc_base);
434} 424}
435 425
436static int __devinit pata_icside_register_v5(struct pata_icside_info *info) 426static int __devinit pata_icside_register_v5(struct pata_icside_info *info)
@@ -451,6 +441,8 @@ static int __devinit pata_icside_register_v5(struct pata_icside_info *info)
451 info->nr_ports = 1; 441 info->nr_ports = 1;
452 info->port[0] = &pata_icside_portinfo_v5; 442 info->port[0] = &pata_icside_portinfo_v5;
453 443
444 info->raw_base = ecard_resource_start(ec, ECARD_RES_MEMC);
445
454 return 0; 446 return 0;
455} 447}
456 448
@@ -491,6 +483,9 @@ static int __devinit pata_icside_register_v6(struct pata_icside_info *info)
491 info->port[0] = &pata_icside_portinfo_v6_1; 483 info->port[0] = &pata_icside_portinfo_v6_1;
492 info->port[1] = &pata_icside_portinfo_v6_2; 484 info->port[1] = &pata_icside_portinfo_v6_2;
493 485
486 info->raw_base = ecard_resource_start(ec, ECARD_RES_EASI);
487 info->raw_ioc_base = ecard_resource_start(ec, ECARD_RES_IOCFAST);
488
494 return icside_dma_init(info); 489 return icside_dma_init(info);
495} 490}
496 491
@@ -527,7 +522,7 @@ static int __devinit pata_icside_add_ports(struct pata_icside_info *info)
527 ap->flags |= ATA_FLAG_SLAVE_POSS; 522 ap->flags |= ATA_FLAG_SLAVE_POSS;
528 ap->ops = &pata_icside_port_ops; 523 ap->ops = &pata_icside_port_ops;
529 524
530 pata_icside_setup_ioaddr(&ap->ioaddr, info->base, info->port[i]); 525 pata_icside_setup_ioaddr(ap, info->base, info->port[i]);
531 } 526 }
532 527
533 return ata_host_activate(host, ec->irq, ata_interrupt, 0, 528 return ata_host_activate(host, ec->irq, ata_interrupt, 0,