• Home
  • Raw
  • Download

Lines Matching +full:host +full:- +full:port

1 // SPDX-License-Identifier: GPL-2.0-only
59 } port[2]; member
71 const struct portinfo *port[2]; member
80 #define ICS_TYPE_NOTYPE ((unsigned int)-1)
82 /* ---------------- Version 5 PCB Support Functions --------------------- */
88 struct pata_icside_state *state = ec->irq_data; in pata_icside_irqenable_arcin_v5()
90 writeb(0, state->irq_port + ICS_ARCIN_V5_INTROFFSET); in pata_icside_irqenable_arcin_v5()
98 struct pata_icside_state *state = ec->irq_data; in pata_icside_irqdisable_arcin_v5()
100 readb(state->irq_port + ICS_ARCIN_V5_INTROFFSET); in pata_icside_irqdisable_arcin_v5()
109 /* ---------------- Version 6 PCB Support Functions --------------------- */
115 struct pata_icside_state *state = ec->irq_data; in pata_icside_irqenable_arcin_v6()
116 void __iomem *base = state->irq_port; in pata_icside_irqenable_arcin_v6()
118 if (!state->port[0].disabled) in pata_icside_irqenable_arcin_v6()
120 if (!state->port[1].disabled) in pata_icside_irqenable_arcin_v6()
129 struct pata_icside_state *state = ec->irq_data; in pata_icside_irqdisable_arcin_v6()
131 readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_1); in pata_icside_irqdisable_arcin_v6()
132 readb(state->irq_port + ICS_ARCIN_V6_INTROFFSET_2); in pata_icside_irqdisable_arcin_v6()
140 struct pata_icside_state *state = ec->irq_data; in pata_icside_irqpending_arcin_v6()
142 return readb(state->irq_port + ICS_ARCIN_V6_INTRSTAT_1) & 1 || in pata_icside_irqpending_arcin_v6()
143 readb(state->irq_port + ICS_ARCIN_V6_INTRSTAT_2) & 1; in pata_icside_irqpending_arcin_v6()
154 * SG-DMA support.
156 * Similar to the BM-DMA, but we use the RiscPCs IOMD DMA controllers.
183 * Mode Active -- Recovery -- Cycle IOMD type
190 struct pata_icside_state *state = ap->host->private_data; in pata_icside_set_dmamode()
198 if (ata_timing_compute(adev, adev->dma_mode, &t, 1000, 1)) in pata_icside_set_dmamode()
217 state->port[ap->port_no].speed[adev->devno] = cycle; in pata_icside_set_dmamode()
222 struct ata_port *ap = qc->ap; in pata_icside_bmdma_setup()
223 struct pata_icside_state *state = ap->host->private_data; in pata_icside_bmdma_setup()
224 unsigned int write = qc->tf.flags & ATA_TFLAG_WRITE; in pata_icside_bmdma_setup()
230 BUG_ON(dma_channel_active(state->dma)); in pata_icside_bmdma_setup()
235 writeb(state->port[ap->port_no].port_sel, state->ioc_base); in pata_icside_bmdma_setup()
237 set_dma_speed(state->dma, state->port[ap->port_no].speed[qc->dev->devno]); in pata_icside_bmdma_setup()
238 set_dma_sg(state->dma, qc->sg, qc->n_elem); in pata_icside_bmdma_setup()
239 set_dma_mode(state->dma, write ? DMA_MODE_WRITE : DMA_MODE_READ); in pata_icside_bmdma_setup()
242 ap->ops->sff_exec_command(ap, &qc->tf); in pata_icside_bmdma_setup()
247 struct ata_port *ap = qc->ap; in pata_icside_bmdma_start()
248 struct pata_icside_state *state = ap->host->private_data; in pata_icside_bmdma_start()
250 BUG_ON(dma_channel_active(state->dma)); in pata_icside_bmdma_start()
251 enable_dma(state->dma); in pata_icside_bmdma_start()
256 struct ata_port *ap = qc->ap; in pata_icside_bmdma_stop()
257 struct pata_icside_state *state = ap->host->private_data; in pata_icside_bmdma_stop()
259 disable_dma(state->dma); in pata_icside_bmdma_stop()
267 struct pata_icside_state *state = ap->host->private_data; in pata_icside_bmdma_status()
270 irq_port = state->irq_port + (ap->port_no ? ICS_ARCIN_V6_INTRSTAT_2 : in pata_icside_bmdma_status()
278 struct pata_icside_state *state = info->state; in icside_dma_init()
279 struct expansion_card *ec = info->ec; in icside_dma_init()
283 state->port[0].speed[i] = 480; in icside_dma_init()
284 state->port[1].speed[i] = 480; in icside_dma_init()
287 if (ec->dma != NO_DMA && !request_dma(ec->dma, DRV_NAME)) { in icside_dma_init()
288 state->dma = ec->dma; in icside_dma_init()
289 info->mwdma_mask = ATA_MWDMA2; in icside_dma_init()
304 struct ata_port *ap = link->ap; in pata_icside_postreset()
305 struct pata_icside_state *state = ap->host->private_data; in pata_icside_postreset()
310 state->port[ap->port_no].disabled = 1; in pata_icside_postreset()
312 if (state->type == ICS_TYPE_V6) { in pata_icside_postreset()
314 * Disable interrupts from this port, otherwise we in pata_icside_postreset()
318 void __iomem *irq_port = state->irq_port + in pata_icside_postreset()
319 (ap->port_no ? ICS_ARCIN_V6_INTROFFSET_2 : ICS_ARCIN_V6_INTROFFSET_1); in pata_icside_postreset()
343 const struct portinfo *port) in pata_icside_setup_ioaddr() argument
345 struct ata_ioports *ioaddr = &ap->ioaddr; in pata_icside_setup_ioaddr()
346 void __iomem *cmd = base + port->dataoffset; in pata_icside_setup_ioaddr()
348 ioaddr->cmd_addr = cmd; in pata_icside_setup_ioaddr()
349 ioaddr->data_addr = cmd + (ATA_REG_DATA << port->stepping); in pata_icside_setup_ioaddr()
350 ioaddr->error_addr = cmd + (ATA_REG_ERR << port->stepping); in pata_icside_setup_ioaddr()
351 ioaddr->feature_addr = cmd + (ATA_REG_FEATURE << port->stepping); in pata_icside_setup_ioaddr()
352 ioaddr->nsect_addr = cmd + (ATA_REG_NSECT << port->stepping); in pata_icside_setup_ioaddr()
353 ioaddr->lbal_addr = cmd + (ATA_REG_LBAL << port->stepping); in pata_icside_setup_ioaddr()
354 ioaddr->lbam_addr = cmd + (ATA_REG_LBAM << port->stepping); in pata_icside_setup_ioaddr()
355 ioaddr->lbah_addr = cmd + (ATA_REG_LBAH << port->stepping); in pata_icside_setup_ioaddr()
356 ioaddr->device_addr = cmd + (ATA_REG_DEVICE << port->stepping); in pata_icside_setup_ioaddr()
357 ioaddr->status_addr = cmd + (ATA_REG_STATUS << port->stepping); in pata_icside_setup_ioaddr()
358 ioaddr->command_addr = cmd + (ATA_REG_CMD << port->stepping); in pata_icside_setup_ioaddr()
360 ioaddr->ctl_addr = base + port->ctrloffset; in pata_icside_setup_ioaddr()
361 ioaddr->altstatus_addr = ioaddr->ctl_addr; in pata_icside_setup_ioaddr()
364 info->raw_base + port->dataoffset, in pata_icside_setup_ioaddr()
365 info->raw_base + port->ctrloffset); in pata_icside_setup_ioaddr()
367 if (info->raw_ioc_base) in pata_icside_setup_ioaddr()
368 ata_port_desc(ap, "iocbase 0x%lx", info->raw_ioc_base); in pata_icside_setup_ioaddr()
373 struct pata_icside_state *state = info->state; in pata_icside_register_v5()
376 base = ecardm_iomap(info->ec, ECARD_RES_MEMC, 0, 0); in pata_icside_register_v5()
378 return -ENOMEM; in pata_icside_register_v5()
380 state->irq_port = base; in pata_icside_register_v5()
382 info->base = base; in pata_icside_register_v5()
383 info->irqaddr = base + ICS_ARCIN_V5_INTRSTAT; in pata_icside_register_v5()
384 info->irqmask = 1; in pata_icside_register_v5()
385 info->irqops = &pata_icside_ops_arcin_v5; in pata_icside_register_v5()
386 info->nr_ports = 1; in pata_icside_register_v5()
387 info->port[0] = &pata_icside_portinfo_v5; in pata_icside_register_v5()
389 info->raw_base = ecard_resource_start(info->ec, ECARD_RES_MEMC); in pata_icside_register_v5()
396 struct pata_icside_state *state = info->state; in pata_icside_register_v6()
397 struct expansion_card *ec = info->ec; in pata_icside_register_v6()
403 return -ENOMEM; in pata_icside_register_v6()
410 return -ENOMEM; in pata_icside_register_v6()
420 state->irq_port = easi_base; in pata_icside_register_v6()
421 state->ioc_base = ioc_base; in pata_icside_register_v6()
422 state->port[0].port_sel = sel; in pata_icside_register_v6()
423 state->port[1].port_sel = sel | 1; in pata_icside_register_v6()
425 info->base = easi_base; in pata_icside_register_v6()
426 info->irqops = &pata_icside_ops_arcin_v6; in pata_icside_register_v6()
427 info->nr_ports = 2; in pata_icside_register_v6()
428 info->port[0] = &pata_icside_portinfo_v6_1; in pata_icside_register_v6()
429 info->port[1] = &pata_icside_portinfo_v6_2; in pata_icside_register_v6()
431 info->raw_base = ecard_resource_start(ec, ECARD_RES_EASI); in pata_icside_register_v6()
432 info->raw_ioc_base = ecard_resource_start(ec, ECARD_RES_IOCFAST); in pata_icside_register_v6()
439 struct expansion_card *ec = info->ec; in pata_icside_add_ports()
440 struct ata_host *host; in pata_icside_add_ports() local
443 if (info->irqaddr) { in pata_icside_add_ports()
444 ec->irqaddr = info->irqaddr; in pata_icside_add_ports()
445 ec->irqmask = info->irqmask; in pata_icside_add_ports()
447 if (info->irqops) in pata_icside_add_ports()
448 ecard_setirq(ec, info->irqops, info->state); in pata_icside_add_ports()
451 * Be on the safe side - disable interrupts in pata_icside_add_ports()
453 ec->ops->irqdisable(ec, ec->irq); in pata_icside_add_ports()
455 host = ata_host_alloc(&ec->dev, info->nr_ports); in pata_icside_add_ports()
456 if (!host) in pata_icside_add_ports()
457 return -ENOMEM; in pata_icside_add_ports()
459 host->private_data = info->state; in pata_icside_add_ports()
460 host->flags = ATA_HOST_SIMPLEX; in pata_icside_add_ports()
462 for (i = 0; i < info->nr_ports; i++) { in pata_icside_add_ports()
463 struct ata_port *ap = host->ports[i]; in pata_icside_add_ports()
465 ap->pio_mask = ATA_PIO4; in pata_icside_add_ports()
466 ap->mwdma_mask = info->mwdma_mask; in pata_icside_add_ports()
467 ap->flags |= ATA_FLAG_SLAVE_POSS; in pata_icside_add_ports()
468 ap->ops = &pata_icside_port_ops; in pata_icside_add_ports()
470 pata_icside_setup_ioaddr(ap, info->base, info, info->port[i]); in pata_icside_add_ports()
473 return ata_host_activate(host, ec->irq, ata_bmdma_interrupt, 0, in pata_icside_add_ports()
489 state = devm_kzalloc(&ec->dev, sizeof(*state), GFP_KERNEL); in pata_icside_probe()
491 ret = -ENOMEM; in pata_icside_probe()
495 state->type = ICS_TYPE_NOTYPE; in pata_icside_probe()
496 state->dma = NO_DMA; in pata_icside_probe()
508 state->type = type; in pata_icside_probe()
515 switch (state->type) { in pata_icside_probe()
517 dev_warn(&ec->dev, "A3IN unsupported\n"); in pata_icside_probe()
518 ret = -ENODEV; in pata_icside_probe()
522 dev_warn(&ec->dev, "A3USER unsupported\n"); in pata_icside_probe()
523 ret = -ENODEV; in pata_icside_probe()
535 dev_warn(&ec->dev, "unknown interface type\n"); in pata_icside_probe()
536 ret = -ENODEV; in pata_icside_probe()
554 struct ata_host *host = ecard_get_drvdata(ec); in pata_icside_shutdown() local
563 ec->ops->irqdisable(ec, ec->irq); in pata_icside_shutdown()
571 if (host) { in pata_icside_shutdown()
572 struct pata_icside_state *state = host->private_data; in pata_icside_shutdown()
573 if (state->ioc_base) in pata_icside_shutdown()
574 writeb(0, state->ioc_base); in pata_icside_shutdown()
580 struct ata_host *host = ecard_get_drvdata(ec); in pata_icside_remove() local
581 struct pata_icside_state *state = host->private_data; in pata_icside_remove()
583 ata_host_detach(host); in pata_icside_remove()
588 * don't NULL out the drvdata - devres/libata wants it in pata_icside_remove()
591 if (state->dma != NO_DMA) in pata_icside_remove()
592 free_dma(state->dma); in pata_icside_remove()