libata: remove ATA_FLAG_MMIO
[pandora-kernel.git] / drivers / ata / sata_svw.c
1 /*
2  *  sata_svw.c - ServerWorks / Apple K2 SATA
3  *
4  *  Maintained by: Benjamin Herrenschmidt <benh@kernel.crashing.org> and
5  *                 Jeff Garzik <jgarzik@pobox.com>
6  *                  Please ALWAYS copy linux-ide@vger.kernel.org
7  *                  on emails.
8  *
9  *  Copyright 2003 Benjamin Herrenschmidt <benh@kernel.crashing.org>
10  *
11  *  Bits from Jeff Garzik, Copyright RedHat, Inc.
12  *
13  *  This driver probably works with non-Apple versions of the
14  *  Broadcom chipset...
15  *
16  *
17  *  This program is free software; you can redistribute it and/or modify
18  *  it under the terms of the GNU General Public License as published by
19  *  the Free Software Foundation; either version 2, or (at your option)
20  *  any later version.
21  *
22  *  This program is distributed in the hope that it will be useful,
23  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
24  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25  *  GNU General Public License for more details.
26  *
27  *  You should have received a copy of the GNU General Public License
28  *  along with this program; see the file COPYING.  If not, write to
29  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
30  *
31  *
32  *  libata documentation is available via 'make {ps|pdf}docs',
33  *  as Documentation/DocBook/libata.*
34  *
35  *  Hardware documentation available under NDA.
36  *
37  */
38
39 #include <linux/kernel.h>
40 #include <linux/module.h>
41 #include <linux/pci.h>
42 #include <linux/init.h>
43 #include <linux/blkdev.h>
44 #include <linux/delay.h>
45 #include <linux/interrupt.h>
46 #include <linux/device.h>
47 #include <scsi/scsi_host.h>
48 #include <scsi/scsi_cmnd.h>
49 #include <scsi/scsi.h>
50 #include <linux/libata.h>
51
52 #ifdef CONFIG_PPC_OF
53 #include <asm/prom.h>
54 #include <asm/pci-bridge.h>
55 #endif /* CONFIG_PPC_OF */
56
57 #define DRV_NAME        "sata_svw"
58 #define DRV_VERSION     "2.3"
59
60 enum {
61         /* ap->flags bits */
62         K2_FLAG_SATA_8_PORTS            = (1 << 24),
63         K2_FLAG_NO_ATAPI_DMA            = (1 << 25),
64         K2_FLAG_BAR_POS_3                       = (1 << 26),
65
66         /* Taskfile registers offsets */
67         K2_SATA_TF_CMD_OFFSET           = 0x00,
68         K2_SATA_TF_DATA_OFFSET          = 0x00,
69         K2_SATA_TF_ERROR_OFFSET         = 0x04,
70         K2_SATA_TF_NSECT_OFFSET         = 0x08,
71         K2_SATA_TF_LBAL_OFFSET          = 0x0c,
72         K2_SATA_TF_LBAM_OFFSET          = 0x10,
73         K2_SATA_TF_LBAH_OFFSET          = 0x14,
74         K2_SATA_TF_DEVICE_OFFSET        = 0x18,
75         K2_SATA_TF_CMDSTAT_OFFSET       = 0x1c,
76         K2_SATA_TF_CTL_OFFSET           = 0x20,
77
78         /* DMA base */
79         K2_SATA_DMA_CMD_OFFSET          = 0x30,
80
81         /* SCRs base */
82         K2_SATA_SCR_STATUS_OFFSET       = 0x40,
83         K2_SATA_SCR_ERROR_OFFSET        = 0x44,
84         K2_SATA_SCR_CONTROL_OFFSET      = 0x48,
85
86         /* Others */
87         K2_SATA_SICR1_OFFSET            = 0x80,
88         K2_SATA_SICR2_OFFSET            = 0x84,
89         K2_SATA_SIM_OFFSET              = 0x88,
90
91         /* Port stride */
92         K2_SATA_PORT_OFFSET             = 0x100,
93
94         chip_svw4                       = 0,
95         chip_svw8                       = 1,
96         chip_svw42                      = 2,    /* bar 3 */
97         chip_svw43                      = 3,    /* bar 5 */
98 };
99
100 static u8 k2_stat_check_status(struct ata_port *ap);
101
102
103 static int k2_sata_check_atapi_dma(struct ata_queued_cmd *qc)
104 {
105         u8 cmnd = qc->scsicmd->cmnd[0];
106
107         if (qc->ap->flags & K2_FLAG_NO_ATAPI_DMA)
108                 return -1;      /* ATAPI DMA not supported */
109         else {
110                 switch (cmnd) {
111                 case READ_10:
112                 case READ_12:
113                 case READ_16:
114                 case WRITE_10:
115                 case WRITE_12:
116                 case WRITE_16:
117                         return 0;
118
119                 default:
120                         return -1;
121                 }
122
123         }
124 }
125
126 static int k2_sata_scr_read(struct ata_link *link,
127                             unsigned int sc_reg, u32 *val)
128 {
129         if (sc_reg > SCR_CONTROL)
130                 return -EINVAL;
131         *val = readl(link->ap->ioaddr.scr_addr + (sc_reg * 4));
132         return 0;
133 }
134
135
136 static int k2_sata_scr_write(struct ata_link *link,
137                              unsigned int sc_reg, u32 val)
138 {
139         if (sc_reg > SCR_CONTROL)
140                 return -EINVAL;
141         writel(val, link->ap->ioaddr.scr_addr + (sc_reg * 4));
142         return 0;
143 }
144
145
146 static void k2_sata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
147 {
148         struct ata_ioports *ioaddr = &ap->ioaddr;
149         unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR;
150
151         if (tf->ctl != ap->last_ctl) {
152                 writeb(tf->ctl, ioaddr->ctl_addr);
153                 ap->last_ctl = tf->ctl;
154                 ata_wait_idle(ap);
155         }
156         if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
157                 writew(tf->feature | (((u16)tf->hob_feature) << 8),
158                        ioaddr->feature_addr);
159                 writew(tf->nsect | (((u16)tf->hob_nsect) << 8),
160                        ioaddr->nsect_addr);
161                 writew(tf->lbal | (((u16)tf->hob_lbal) << 8),
162                        ioaddr->lbal_addr);
163                 writew(tf->lbam | (((u16)tf->hob_lbam) << 8),
164                        ioaddr->lbam_addr);
165                 writew(tf->lbah | (((u16)tf->hob_lbah) << 8),
166                        ioaddr->lbah_addr);
167         } else if (is_addr) {
168                 writew(tf->feature, ioaddr->feature_addr);
169                 writew(tf->nsect, ioaddr->nsect_addr);
170                 writew(tf->lbal, ioaddr->lbal_addr);
171                 writew(tf->lbam, ioaddr->lbam_addr);
172                 writew(tf->lbah, ioaddr->lbah_addr);
173         }
174
175         if (tf->flags & ATA_TFLAG_DEVICE)
176                 writeb(tf->device, ioaddr->device_addr);
177
178         ata_wait_idle(ap);
179 }
180
181
182 static void k2_sata_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
183 {
184         struct ata_ioports *ioaddr = &ap->ioaddr;
185         u16 nsect, lbal, lbam, lbah, feature;
186
187         tf->command = k2_stat_check_status(ap);
188         tf->device = readw(ioaddr->device_addr);
189         feature = readw(ioaddr->error_addr);
190         nsect = readw(ioaddr->nsect_addr);
191         lbal = readw(ioaddr->lbal_addr);
192         lbam = readw(ioaddr->lbam_addr);
193         lbah = readw(ioaddr->lbah_addr);
194
195         tf->feature = feature;
196         tf->nsect = nsect;
197         tf->lbal = lbal;
198         tf->lbam = lbam;
199         tf->lbah = lbah;
200
201         if (tf->flags & ATA_TFLAG_LBA48) {
202                 tf->hob_feature = feature >> 8;
203                 tf->hob_nsect = nsect >> 8;
204                 tf->hob_lbal = lbal >> 8;
205                 tf->hob_lbam = lbam >> 8;
206                 tf->hob_lbah = lbah >> 8;
207         }
208 }
209
210 /**
211  *      k2_bmdma_setup_mmio - Set up PCI IDE BMDMA transaction (MMIO)
212  *      @qc: Info associated with this ATA transaction.
213  *
214  *      LOCKING:
215  *      spin_lock_irqsave(host lock)
216  */
217
218 static void k2_bmdma_setup_mmio(struct ata_queued_cmd *qc)
219 {
220         struct ata_port *ap = qc->ap;
221         unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
222         u8 dmactl;
223         void __iomem *mmio = ap->ioaddr.bmdma_addr;
224
225         /* load PRD table addr. */
226         mb();   /* make sure PRD table writes are visible to controller */
227         writel(ap->bmdma_prd_dma, mmio + ATA_DMA_TABLE_OFS);
228
229         /* specify data direction, triple-check start bit is clear */
230         dmactl = readb(mmio + ATA_DMA_CMD);
231         dmactl &= ~(ATA_DMA_WR | ATA_DMA_START);
232         if (!rw)
233                 dmactl |= ATA_DMA_WR;
234         writeb(dmactl, mmio + ATA_DMA_CMD);
235
236         /* issue r/w command if this is not a ATA DMA command*/
237         if (qc->tf.protocol != ATA_PROT_DMA)
238                 ap->ops->sff_exec_command(ap, &qc->tf);
239 }
240
241 /**
242  *      k2_bmdma_start_mmio - Start a PCI IDE BMDMA transaction (MMIO)
243  *      @qc: Info associated with this ATA transaction.
244  *
245  *      LOCKING:
246  *      spin_lock_irqsave(host lock)
247  */
248
249 static void k2_bmdma_start_mmio(struct ata_queued_cmd *qc)
250 {
251         struct ata_port *ap = qc->ap;
252         void __iomem *mmio = ap->ioaddr.bmdma_addr;
253         u8 dmactl;
254
255         /* start host DMA transaction */
256         dmactl = readb(mmio + ATA_DMA_CMD);
257         writeb(dmactl | ATA_DMA_START, mmio + ATA_DMA_CMD);
258         /* This works around possible data corruption.
259
260            On certain SATA controllers that can be seen when the r/w
261            command is given to the controller before the host DMA is
262            started.
263
264            On a Read command, the controller would initiate the
265            command to the drive even before it sees the DMA
266            start. When there are very fast drives connected to the
267            controller, or when the data request hits in the drive
268            cache, there is the possibility that the drive returns a
269            part or all of the requested data to the controller before
270            the DMA start is issued.  In this case, the controller
271            would become confused as to what to do with the data.  In
272            the worst case when all the data is returned back to the
273            controller, the controller could hang. In other cases it
274            could return partial data returning in data
275            corruption. This problem has been seen in PPC systems and
276            can also appear on an system with very fast disks, where
277            the SATA controller is sitting behind a number of bridges,
278            and hence there is significant latency between the r/w
279            command and the start command. */
280         /* issue r/w command if the access is to ATA */
281         if (qc->tf.protocol == ATA_PROT_DMA)
282                 ap->ops->sff_exec_command(ap, &qc->tf);
283 }
284
285
286 static u8 k2_stat_check_status(struct ata_port *ap)
287 {
288         return readl(ap->ioaddr.status_addr);
289 }
290
291 #ifdef CONFIG_PPC_OF
292 /*
293  * k2_sata_proc_info
294  * inout : decides on the direction of the dataflow and the meaning of the
295  *         variables
296  * buffer: If inout==FALSE data is being written to it else read from it
297  * *start: If inout==FALSE start of the valid data in the buffer
298  * offset: If inout==FALSE offset from the beginning of the imaginary file
299  *         from which we start writing into the buffer
300  * length: If inout==FALSE max number of bytes to be written into the buffer
301  *         else number of bytes in the buffer
302  */
303 static int k2_sata_proc_info(struct Scsi_Host *shost, char *page, char **start,
304                              off_t offset, int count, int inout)
305 {
306         struct ata_port *ap;
307         struct device_node *np;
308         int len, index;
309
310         /* Find  the ata_port */
311         ap = ata_shost_to_port(shost);
312         if (ap == NULL)
313                 return 0;
314
315         /* Find the OF node for the PCI device proper */
316         np = pci_device_to_OF_node(to_pci_dev(ap->host->dev));
317         if (np == NULL)
318                 return 0;
319
320         /* Match it to a port node */
321         index = (ap == ap->host->ports[0]) ? 0 : 1;
322         for (np = np->child; np != NULL; np = np->sibling) {
323                 const u32 *reg = of_get_property(np, "reg", NULL);
324                 if (!reg)
325                         continue;
326                 if (index == *reg)
327                         break;
328         }
329         if (np == NULL)
330                 return 0;
331
332         len = sprintf(page, "devspec: %s\n", np->full_name);
333
334         return len;
335 }
336 #endif /* CONFIG_PPC_OF */
337
338
339 static struct scsi_host_template k2_sata_sht = {
340         ATA_BMDMA_SHT(DRV_NAME),
341 #ifdef CONFIG_PPC_OF
342         .proc_info              = k2_sata_proc_info,
343 #endif
344 };
345
346
347 static struct ata_port_operations k2_sata_ops = {
348         .inherits               = &ata_bmdma_port_ops,
349         .sff_tf_load            = k2_sata_tf_load,
350         .sff_tf_read            = k2_sata_tf_read,
351         .sff_check_status       = k2_stat_check_status,
352         .check_atapi_dma        = k2_sata_check_atapi_dma,
353         .bmdma_setup            = k2_bmdma_setup_mmio,
354         .bmdma_start            = k2_bmdma_start_mmio,
355         .scr_read               = k2_sata_scr_read,
356         .scr_write              = k2_sata_scr_write,
357 };
358
359 static const struct ata_port_info k2_port_info[] = {
360         /* chip_svw4 */
361         {
362                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
363                                   K2_FLAG_NO_ATAPI_DMA,
364                 .pio_mask       = ATA_PIO4,
365                 .mwdma_mask     = ATA_MWDMA2,
366                 .udma_mask      = ATA_UDMA6,
367                 .port_ops       = &k2_sata_ops,
368         },
369         /* chip_svw8 */
370         {
371                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
372                                   K2_FLAG_NO_ATAPI_DMA | K2_FLAG_SATA_8_PORTS,
373                 .pio_mask       = ATA_PIO4,
374                 .mwdma_mask     = ATA_MWDMA2,
375                 .udma_mask      = ATA_UDMA6,
376                 .port_ops       = &k2_sata_ops,
377         },
378         /* chip_svw42 */
379         {
380                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
381                                   K2_FLAG_BAR_POS_3,
382                 .pio_mask       = ATA_PIO4,
383                 .mwdma_mask     = ATA_MWDMA2,
384                 .udma_mask      = ATA_UDMA6,
385                 .port_ops       = &k2_sata_ops,
386         },
387         /* chip_svw43 */
388         {
389                 .flags          = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY,
390                 .pio_mask       = ATA_PIO4,
391                 .mwdma_mask     = ATA_MWDMA2,
392                 .udma_mask      = ATA_UDMA6,
393                 .port_ops       = &k2_sata_ops,
394         },
395 };
396
397 static void k2_sata_setup_port(struct ata_ioports *port, void __iomem *base)
398 {
399         port->cmd_addr          = base + K2_SATA_TF_CMD_OFFSET;
400         port->data_addr         = base + K2_SATA_TF_DATA_OFFSET;
401         port->feature_addr      =
402         port->error_addr        = base + K2_SATA_TF_ERROR_OFFSET;
403         port->nsect_addr        = base + K2_SATA_TF_NSECT_OFFSET;
404         port->lbal_addr         = base + K2_SATA_TF_LBAL_OFFSET;
405         port->lbam_addr         = base + K2_SATA_TF_LBAM_OFFSET;
406         port->lbah_addr         = base + K2_SATA_TF_LBAH_OFFSET;
407         port->device_addr       = base + K2_SATA_TF_DEVICE_OFFSET;
408         port->command_addr      =
409         port->status_addr       = base + K2_SATA_TF_CMDSTAT_OFFSET;
410         port->altstatus_addr    =
411         port->ctl_addr          = base + K2_SATA_TF_CTL_OFFSET;
412         port->bmdma_addr        = base + K2_SATA_DMA_CMD_OFFSET;
413         port->scr_addr          = base + K2_SATA_SCR_STATUS_OFFSET;
414 }
415
416
417 static int k2_sata_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
418 {
419         static int printed_version;
420         const struct ata_port_info *ppi[] =
421                 { &k2_port_info[ent->driver_data], NULL };
422         struct ata_host *host;
423         void __iomem *mmio_base;
424         int n_ports, i, rc, bar_pos;
425
426         if (!printed_version++)
427                 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
428
429         /* allocate host */
430         n_ports = 4;
431         if (ppi[0]->flags & K2_FLAG_SATA_8_PORTS)
432                 n_ports = 8;
433
434         host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
435         if (!host)
436                 return -ENOMEM;
437
438         bar_pos = 5;
439         if (ppi[0]->flags & K2_FLAG_BAR_POS_3)
440                 bar_pos = 3;
441         /*
442          * If this driver happens to only be useful on Apple's K2, then
443          * we should check that here as it has a normal Serverworks ID
444          */
445         rc = pcim_enable_device(pdev);
446         if (rc)
447                 return rc;
448
449         /*
450          * Check if we have resources mapped at all (second function may
451          * have been disabled by firmware)
452          */
453         if (pci_resource_len(pdev, bar_pos) == 0) {
454                 /* In IDE mode we need to pin the device to ensure that
455                         pcim_release does not clear the busmaster bit in config
456                         space, clearing causes busmaster DMA to fail on
457                         ports 3 & 4 */
458                 pcim_pin_device(pdev);
459                 return -ENODEV;
460         }
461
462         /* Request and iomap PCI regions */
463         rc = pcim_iomap_regions(pdev, 1 << bar_pos, DRV_NAME);
464         if (rc == -EBUSY)
465                 pcim_pin_device(pdev);
466         if (rc)
467                 return rc;
468         host->iomap = pcim_iomap_table(pdev);
469         mmio_base = host->iomap[bar_pos];
470
471         /* different controllers have different number of ports - currently 4 or 8 */
472         /* All ports are on the same function. Multi-function device is no
473          * longer available. This should not be seen in any system. */
474         for (i = 0; i < host->n_ports; i++) {
475                 struct ata_port *ap = host->ports[i];
476                 unsigned int offset = i * K2_SATA_PORT_OFFSET;
477
478                 k2_sata_setup_port(&ap->ioaddr, mmio_base + offset);
479
480                 ata_port_pbar_desc(ap, 5, -1, "mmio");
481                 ata_port_pbar_desc(ap, 5, offset, "port");
482         }
483
484         rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
485         if (rc)
486                 return rc;
487         rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
488         if (rc)
489                 return rc;
490
491         /* Clear a magic bit in SCR1 according to Darwin, those help
492          * some funky seagate drives (though so far, those were already
493          * set by the firmware on the machines I had access to)
494          */
495         writel(readl(mmio_base + K2_SATA_SICR1_OFFSET) & ~0x00040000,
496                mmio_base + K2_SATA_SICR1_OFFSET);
497
498         /* Clear SATA error & interrupts we don't use */
499         writel(0xffffffff, mmio_base + K2_SATA_SCR_ERROR_OFFSET);
500         writel(0x0, mmio_base + K2_SATA_SIM_OFFSET);
501
502         pci_set_master(pdev);
503         return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt,
504                                  IRQF_SHARED, &k2_sata_sht);
505 }
506
507 /* 0x240 is device ID for Apple K2 device
508  * 0x241 is device ID for Serverworks Frodo4
509  * 0x242 is device ID for Serverworks Frodo8
510  * 0x24a is device ID for BCM5785 (aka HT1000) HT southbridge integrated SATA
511  * controller
512  * */
513 static const struct pci_device_id k2_sata_pci_tbl[] = {
514         { PCI_VDEVICE(SERVERWORKS, 0x0240), chip_svw4 },
515         { PCI_VDEVICE(SERVERWORKS, 0x0241), chip_svw8 },
516         { PCI_VDEVICE(SERVERWORKS, 0x0242), chip_svw4 },
517         { PCI_VDEVICE(SERVERWORKS, 0x024a), chip_svw4 },
518         { PCI_VDEVICE(SERVERWORKS, 0x024b), chip_svw4 },
519         { PCI_VDEVICE(SERVERWORKS, 0x0410), chip_svw42 },
520         { PCI_VDEVICE(SERVERWORKS, 0x0411), chip_svw43 },
521
522         { }
523 };
524
525 static struct pci_driver k2_sata_pci_driver = {
526         .name                   = DRV_NAME,
527         .id_table               = k2_sata_pci_tbl,
528         .probe                  = k2_sata_init_one,
529         .remove                 = ata_pci_remove_one,
530 };
531
532 static int __init k2_sata_init(void)
533 {
534         return pci_register_driver(&k2_sata_pci_driver);
535 }
536
537 static void __exit k2_sata_exit(void)
538 {
539         pci_unregister_driver(&k2_sata_pci_driver);
540 }
541
542 MODULE_AUTHOR("Benjamin Herrenschmidt");
543 MODULE_DESCRIPTION("low-level driver for K2 SATA controller");
544 MODULE_LICENSE("GPL");
545 MODULE_DEVICE_TABLE(pci, k2_sata_pci_tbl);
546 MODULE_VERSION(DRV_VERSION);
547
548 module_init(k2_sata_init);
549 module_exit(k2_sata_exit);