diff options
Diffstat (limited to 'drivers/ata/pata_icside.c')
-rw-r--r-- | drivers/ata/pata_icside.c | 39 |
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 | ||
360 | static 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 | |||
377 | static struct ata_port_operations pata_icside_port_ops = { | 362 | static 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 | ||
414 | static void __devinit | 396 | static void __devinit |
415 | pata_icside_setup_ioaddr(struct ata_ioports *ioaddr, void __iomem *base, | 397 | pata_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 | ||
436 | static int __devinit pata_icside_register_v5(struct pata_icside_info *info) | 426 | static 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, |