14 #include <linux/kernel.h>
15 #include <linux/module.h>
20 #include <linux/adb.h>
21 #include <linux/pmu.h>
26 #include <scsi/scsi.h>
33 #include <asm/pci-bridge.h>
34 #include <asm/machdep.h>
39 #define dev_dbgdma(dev, format, arg...) \
40 dev_printk(KERN_DEBUG , dev , format , ## arg)
42 #define dev_dbgdma(dev, format, arg...) \
43 ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
46 #define DRV_NAME "pata_macio"
47 #define DRV_VERSION "0.9"
60 static const char* macio_ata_names[] = {
73 #define IDE_TIMING_CONFIG 0x200
74 #define IDE_INTERRUPT 0x300
77 #define IDE_KAUAI_PIO_CONFIG 0x200
78 #define IDE_KAUAI_ULTRA_CONFIG 0x210
79 #define IDE_KAUAI_POLL_CONFIG 0x220
86 #define SYSCLK_TICKS(t) (((t) + IDE_SYSCLK_NS - 1) / IDE_SYSCLK_NS)
87 #define SYSCLK_TICKS_66(t) (((t) + IDE_SYSCLK_66_NS - 1) / IDE_SYSCLK_66_NS)
88 #define IDE_SYSCLK_NS 30
89 #define IDE_SYSCLK_66_NS 15
96 #define TR_133_PIOREG_PIO_MASK 0xff000fff
97 #define TR_133_PIOREG_MDMA_MASK 0x00fff800
98 #define TR_133_UDMAREG_UDMA_MASK 0x0003ffff
99 #define TR_133_UDMAREG_UDMA_EN 0x00000001
112 #define TR_100_PIO_ADDRSETUP_MASK 0xff000000
113 #define TR_100_PIO_ADDRSETUP_SHIFT 24
114 #define TR_100_MDMA_MASK 0x00fff000
115 #define TR_100_MDMA_RECOVERY_MASK 0x00fc0000
116 #define TR_100_MDMA_RECOVERY_SHIFT 18
117 #define TR_100_MDMA_ACCESS_MASK 0x0003f000
118 #define TR_100_MDMA_ACCESS_SHIFT 12
119 #define TR_100_PIO_MASK 0xff000fff
120 #define TR_100_PIO_RECOVERY_MASK 0x00000fc0
121 #define TR_100_PIO_RECOVERY_SHIFT 6
122 #define TR_100_PIO_ACCESS_MASK 0x0000003f
123 #define TR_100_PIO_ACCESS_SHIFT 0
125 #define TR_100_UDMAREG_UDMA_MASK 0x0000ffff
126 #define TR_100_UDMAREG_UDMA_EN 0x00000001
145 #define TR_66_UDMA_MASK 0xfff00000
146 #define TR_66_UDMA_EN 0x00100000
147 #define TR_66_PIO_ADDRSETUP_MASK 0xe0000000
148 #define TR_66_PIO_ADDRSETUP_SHIFT 29
149 #define TR_66_UDMA_RDY2PAUS_MASK 0x1e000000
150 #define TR_66_UDMA_RDY2PAUS_SHIFT 25
151 #define TR_66_UDMA_WRDATASETUP_MASK 0x01e00000
152 #define TR_66_UDMA_WRDATASETUP_SHIFT 21
153 #define TR_66_MDMA_MASK 0x000ffc00
154 #define TR_66_MDMA_RECOVERY_MASK 0x000f8000
155 #define TR_66_MDMA_RECOVERY_SHIFT 15
156 #define TR_66_MDMA_ACCESS_MASK 0x00007c00
157 #define TR_66_MDMA_ACCESS_SHIFT 10
158 #define TR_66_PIO_MASK 0xe00003ff
159 #define TR_66_PIO_RECOVERY_MASK 0x000003e0
160 #define TR_66_PIO_RECOVERY_SHIFT 5
161 #define TR_66_PIO_ACCESS_MASK 0x0000001f
162 #define TR_66_PIO_ACCESS_SHIFT 0
175 #define TR_33_MDMA_MASK 0x003ff800
176 #define TR_33_MDMA_RECOVERY_MASK 0x001f0000
177 #define TR_33_MDMA_RECOVERY_SHIFT 16
178 #define TR_33_MDMA_ACCESS_MASK 0x0000f800
179 #define TR_33_MDMA_ACCESS_SHIFT 11
180 #define TR_33_MDMA_HALFTICK 0x00200000
181 #define TR_33_PIO_MASK 0x000007ff
182 #define TR_33_PIO_E 0x00000400
183 #define TR_33_PIO_RECOVERY_MASK 0x000003e0
184 #define TR_33_PIO_RECOVERY_SHIFT 5
185 #define TR_33_PIO_ACCESS_MASK 0x0000001f
186 #define TR_33_PIO_ACCESS_SHIFT 0
192 #define IDE_INTR_DMA 0x80000000
193 #define IDE_INTR_DEVICE 0x40000000
198 #define KAUAI_FCR_UATA_MAGIC 0x00000004
199 #define KAUAI_FCR_UATA_RESET_N 0x00000002
200 #define KAUAI_FCR_UATA_ENABLE 0x00000001
204 #define MAX_DCMDS 256
207 #define MAX_DBDMA_SEG 0xff00
222 #define IDE_WAKEUP_DELAY_MS 1000
360 for (i = 0; priv->
timings[
i].mode > 0; i++) {
361 if (priv->
timings[i].mode == mode)
368 static void pata_macio_apply_timings(
struct ata_port *ap,
unsigned int device)
371 void __iomem *rbase = ap->ioaddr.cmd_addr;
382 static void pata_macio_dev_select(
struct ata_port *ap,
unsigned int device)
387 pata_macio_apply_timings(ap, device);
390 static void pata_macio_set_timings(
struct ata_port *ap,
396 dev_dbg(priv->
dev,
"Set timings: DEV=%d,PIO=0x%x (%s),DMA=0x%x (%s)\n",
407 t = pata_macio_find_timing(priv, adev->
pio_mode);
409 dev_warn(priv->
dev,
"Invalid PIO timing requested: 0x%x\n",
419 t = pata_macio_find_timing(priv, adev->
dma_mode);
421 dev_dbg(priv->
dev,
"DMA timing not set yet, using MW_DMA_0\n");
435 pata_macio_apply_timings(ap, adev->
devno);
444 unsigned int value, value2 = 0;
469 priv->
treg[0][1] = priv->
treg[1][1] = value2;
472 static int pata_macio_cable_detect(
struct ata_port *ap)
486 if (cable && !
strncmp(cable,
"80-", 3)) {
491 if (!
strncmp(model,
"PowerBook", 9))
516 struct dbdma_cmd *
table;
519 dev_dbgdma(priv->
dev,
"%s: qc %p flags %lx, write %d dev %d\n",
520 __func__, qc, qc->
flags, write, qc->
dev->devno);
543 st_le16(&table->command, write ? OUTPUT_MORE: INPUT_MORE);
544 st_le16(&table->req_count, len);
545 st_le32(&table->phy_addr, addr);
547 table->xfer_status = 0;
548 table->res_count = 0;
560 st_le16(&table->command, write ? OUTPUT_LAST: INPUT_LAST);
564 memset(table, 0,
sizeof(
struct dbdma_cmd));
565 st_le16(&table->command, DBDMA_STOP);
567 dev_dbgdma(priv->
dev,
"%s: %d DMA list entries\n", __func__, pi);
571 static void pata_macio_freeze(
struct ata_port *ap)
576 unsigned int timeout = 1000000;
580 while (--timeout && (
readl(&dma_regs->status) &
RUN))
592 struct dbdma_regs
__iomem *dma_regs = ap->ioaddr.bmdma_addr;
605 void __iomem *rbase = ap->ioaddr.cmd_addr;
614 ap->
ops->sff_exec_command(ap, &qc->
tf);
621 struct dbdma_regs
__iomem *dma_regs = ap->ioaddr.bmdma_addr;
634 struct dbdma_regs
__iomem *dma_regs = ap->ioaddr.bmdma_addr;
635 unsigned int timeout = 1000000;
641 while (--timeout && (
readl(&dma_regs->status) &
RUN))
645 static u8 pata_macio_bmdma_status(
struct ata_port *ap)
648 struct dbdma_regs
__iomem *dma_regs = ap->ioaddr.bmdma_addr;
650 unsigned long timeout = 0;
652 dstat =
readl(&dma_regs->status);
676 if ((dstat &
ACTIVE) == 0)
679 dev_dbgdma(priv->
dev,
"%s: DMA still active, flushing...\n", __func__);
691 dstat =
readl(&dma_regs->status);
692 if ((dstat &
FLUSH) == 0)
694 if (++timeout > 1000) {
704 static int pata_macio_port_start(
struct ata_port *ap)
708 if (ap->ioaddr.bmdma_addr ==
NULL)
718 (
MAX_DCMDS + 2) *
sizeof(
struct dbdma_cmd),
721 dev_err(priv->
dev,
"Unable to allocate DMA command list\n");
722 ap->ioaddr.bmdma_addr =
NULL;
729 static void pata_macio_irq_clear(
struct ata_port *ap)
740 dev_dbg(priv->
dev,
"Enabling & resetting... \n");
750 ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, priv->
node, 0, 1);
755 rc =
ppc_md.feature_call(PMAC_FTR_IDE_RESET,
757 ppc_md.feature_call(PMAC_FTR_IDE_ENABLE,
762 ppc_md.feature_call(PMAC_FTR_IDE_RESET,
769 if (priv->
pdev && resume) {
776 "Failed to enable device after resume (%d)\n",
794 static int pata_macio_slave_config(
struct scsi_device *sdev)
808 dev = &ap->
link.device[sdev->
id];
842 ata_dev_info(dev,
"K2/Shasta alignment limits applied\n");
855 rc = ata_host_suspend(priv->
host, mesg);
860 pata_macio_default_timings(priv);
888 ppc_md.feature_call(PMAC_FTR_IDE_ENABLE, priv->
node,
897 pata_macio_reset_hw(priv, 1);
900 pata_macio_apply_timings(priv->
host->ports[0], 0);
906 ata_host_resume(priv->
host);
918 .slave_configure = pata_macio_slave_config,
922 .inherits = &ata_bmdma_port_ops,
924 .freeze = pata_macio_freeze,
925 .set_piomode = pata_macio_set_timings,
926 .set_dmamode = pata_macio_set_timings,
927 .cable_detect = pata_macio_cable_detect,
928 .sff_dev_select = pata_macio_dev_select,
929 .qc_prep = pata_macio_qc_prep,
930 .bmdma_setup = pata_macio_bmdma_setup,
931 .bmdma_start = pata_macio_bmdma_start,
932 .bmdma_stop = pata_macio_bmdma_stop,
933 .bmdma_status = pata_macio_bmdma_status,
934 .port_start = pata_macio_port_start,
935 .sff_irq_clear = pata_macio_irq_clear,
945 priv->
timings = pata_macio_shasta_timings;
948 priv->
timings = pata_macio_kauai_timings;
951 priv->
timings = pata_macio_kauai_timings;
955 priv->
timings = pata_macio_kl66_timings;
958 priv->
timings = pata_macio_kl33_timings;
962 priv->
timings = pata_macio_heathrow_timings;
965 priv->
timings = pata_macio_ohare_timings;
979 static void __devinit pata_macio_setup_ios(
struct ata_ioports *ioaddr,
984 ioaddr->cmd_addr = base;
997 ioaddr->altstatus_addr = base + 0x160;
998 ioaddr->ctl_addr = base + 0x160;
999 ioaddr->bmdma_addr =
dma;
1011 while (priv->
timings[i].mode > 0) {
1013 switch(priv->
timings[i].mode & 0xf0) {
1026 dev_dbg(priv->
dev,
"Supported masks: PIO=%lx, MWDMA=%lx, UDMA=%lx\n",
1043 pata_macio_invariants(priv);
1046 pata_macio_default_timings(priv);
1055 pmac_macio_calc_timing_masks(priv, &pinfo);
1062 dev_err(priv->
dev,
"Failed to allocate ATA port structure\n");
1072 dev_err(priv->
dev,
"Failed to map ATA ports\n");
1080 sizeof(
struct dbdma_regs));
1081 if (dma_regs ==
NULL)
1082 dev_warn(priv->
dev,
"Failed to map ATA DMA registers\n");
1089 dev_err(priv->
dev,
"Failed to map ATA FCR register\n");
1095 pata_macio_setup_ios(&priv->
host->ports[0]->ioaddr,
1097 priv->
host->ports[0]->private_data =
priv;
1100 pata_macio_reset_hw(priv, 0);
1101 pata_macio_apply_timings(priv->
host->ports[0], 0);
1104 if (priv->
pdev && dma_regs)
1107 dev_info(priv->
dev,
"Activating pata-macio chipset %s, Apple bus ID %d\n",
1116 static int __devinit pata_macio_attach(
struct macio_dev *mdev,
1125 if (macio_resource_count(mdev) == 0) {
1127 "No addresses for controller\n");
1139 "Failed to allocate private memory\n");
1142 priv->
node = of_node_get(mdev->ofdev.dev.of_node);
1144 priv->
dev = &mdev->ofdev.dev;
1149 "Cannot obtain taskfile resource\n");
1152 tfregs = macio_resource_start(mdev, 0);
1155 if (macio_resource_count(mdev) >= 2) {
1158 "Cannot obtain DMA resource\n");
1160 dmaregs = macio_resource_start(mdev, 1);
1172 if (macio_irq_count(mdev) == 0) {
1174 "No interrupts for controller, using 13\n");
1177 irq = macio_irq(mdev, 0);
1183 rc = pata_macio_common_init(priv,
1193 static int __devexit pata_macio_detach(
struct macio_dev *mdev)
1214 static int pata_macio_suspend(
struct macio_dev *mdev,
pm_message_t mesg)
1218 return pata_macio_do_suspend(host->
private_data, mesg);
1221 static int pata_macio_resume(
struct macio_dev *mdev)
1230 #ifdef CONFIG_PMAC_MEDIABAY
1231 static void pata_macio_mb_event(
struct macio_dev* mdev,
int mb_state)
1237 unsigned long flags;
1241 ap = host->
ports[0];
1243 ehi = &ap->
link.eh_info;
1244 if (mb_state == MB_CD) {
1246 ata_ehi_hotplugged(ehi);
1254 spin_unlock_irqrestore(ap->lock, flags);
1268 np = pci_device_to_OF_node(pdev);
1271 "Cannot find OF device node for controller\n");
1278 "Cannot enable controller PCI device\n");
1287 "Failed to allocate private memory\n");
1290 priv->
node = of_node_get(np);
1297 "Cannot obtain PCI resources\n");
1303 if (pata_macio_common_init(priv,
1326 return pata_macio_do_suspend(host->
private_data, mesg);
1329 static int pata_macio_pci_resume(
struct pci_dev *pdev)
1355 static struct macio_driver pata_macio_driver =
1358 .name =
"pata-macio",
1360 .of_match_table = pata_macio_match,
1362 .probe = pata_macio_attach,
1363 .remove = pata_macio_detach,
1365 .suspend = pata_macio_suspend,
1366 .resume = pata_macio_resume,
1368 #ifdef CONFIG_PMAC_MEDIABAY
1369 .mediabay_event = pata_macio_mb_event,
1373 static const struct pci_device_id pata_macio_pci_match[] = {
1382 static struct pci_driver pata_macio_pci_driver = {
1383 .name =
"pata-pci-macio",
1384 .id_table = pata_macio_pci_match,
1385 .probe = pata_macio_pci_attach,
1386 .remove = pata_macio_pci_detach,
1388 .suspend = pata_macio_pci_suspend,
1389 .resume = pata_macio_pci_resume,
1398 static int __init pata_macio_init(
void)
1402 if (!machine_is(powermac))
1405 rc = pci_register_driver(&pata_macio_pci_driver);
1416 static void __exit pata_macio_exit(
void)