xref: /openbmc/linux/drivers/ata/sata_svw.c (revision 545e4006)
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_port *ap, unsigned int sc_reg, u32 *val)
127 {
128 	if (sc_reg > SCR_CONTROL)
129 		return -EINVAL;
130 	*val = readl(ap->ioaddr.scr_addr + (sc_reg * 4));
131 	return 0;
132 }
133 
134 
135 static int k2_sata_scr_write(struct ata_port *ap, unsigned int sc_reg, u32 val)
136 {
137 	if (sc_reg > SCR_CONTROL)
138 		return -EINVAL;
139 	writel(val, ap->ioaddr.scr_addr + (sc_reg * 4));
140 	return 0;
141 }
142 
143 
144 static void k2_sata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf)
145 {
146 	struct ata_ioports *ioaddr = &ap->ioaddr;
147 	unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR;
148 
149 	if (tf->ctl != ap->last_ctl) {
150 		writeb(tf->ctl, ioaddr->ctl_addr);
151 		ap->last_ctl = tf->ctl;
152 		ata_wait_idle(ap);
153 	}
154 	if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
155 		writew(tf->feature | (((u16)tf->hob_feature) << 8),
156 		       ioaddr->feature_addr);
157 		writew(tf->nsect | (((u16)tf->hob_nsect) << 8),
158 		       ioaddr->nsect_addr);
159 		writew(tf->lbal | (((u16)tf->hob_lbal) << 8),
160 		       ioaddr->lbal_addr);
161 		writew(tf->lbam | (((u16)tf->hob_lbam) << 8),
162 		       ioaddr->lbam_addr);
163 		writew(tf->lbah | (((u16)tf->hob_lbah) << 8),
164 		       ioaddr->lbah_addr);
165 	} else if (is_addr) {
166 		writew(tf->feature, ioaddr->feature_addr);
167 		writew(tf->nsect, ioaddr->nsect_addr);
168 		writew(tf->lbal, ioaddr->lbal_addr);
169 		writew(tf->lbam, ioaddr->lbam_addr);
170 		writew(tf->lbah, ioaddr->lbah_addr);
171 	}
172 
173 	if (tf->flags & ATA_TFLAG_DEVICE)
174 		writeb(tf->device, ioaddr->device_addr);
175 
176 	ata_wait_idle(ap);
177 }
178 
179 
180 static void k2_sata_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
181 {
182 	struct ata_ioports *ioaddr = &ap->ioaddr;
183 	u16 nsect, lbal, lbam, lbah, feature;
184 
185 	tf->command = k2_stat_check_status(ap);
186 	tf->device = readw(ioaddr->device_addr);
187 	feature = readw(ioaddr->error_addr);
188 	nsect = readw(ioaddr->nsect_addr);
189 	lbal = readw(ioaddr->lbal_addr);
190 	lbam = readw(ioaddr->lbam_addr);
191 	lbah = readw(ioaddr->lbah_addr);
192 
193 	tf->feature = feature;
194 	tf->nsect = nsect;
195 	tf->lbal = lbal;
196 	tf->lbam = lbam;
197 	tf->lbah = lbah;
198 
199 	if (tf->flags & ATA_TFLAG_LBA48) {
200 		tf->hob_feature = feature >> 8;
201 		tf->hob_nsect = nsect >> 8;
202 		tf->hob_lbal = lbal >> 8;
203 		tf->hob_lbam = lbam >> 8;
204 		tf->hob_lbah = lbah >> 8;
205 	}
206 }
207 
208 /**
209  *	k2_bmdma_setup_mmio - Set up PCI IDE BMDMA transaction (MMIO)
210  *	@qc: Info associated with this ATA transaction.
211  *
212  *	LOCKING:
213  *	spin_lock_irqsave(host lock)
214  */
215 
216 static void k2_bmdma_setup_mmio(struct ata_queued_cmd *qc)
217 {
218 	struct ata_port *ap = qc->ap;
219 	unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
220 	u8 dmactl;
221 	void __iomem *mmio = ap->ioaddr.bmdma_addr;
222 
223 	/* load PRD table addr. */
224 	mb();	/* make sure PRD table writes are visible to controller */
225 	writel(ap->prd_dma, mmio + ATA_DMA_TABLE_OFS);
226 
227 	/* specify data direction, triple-check start bit is clear */
228 	dmactl = readb(mmio + ATA_DMA_CMD);
229 	dmactl &= ~(ATA_DMA_WR | ATA_DMA_START);
230 	if (!rw)
231 		dmactl |= ATA_DMA_WR;
232 	writeb(dmactl, mmio + ATA_DMA_CMD);
233 
234 	/* issue r/w command if this is not a ATA DMA command*/
235 	if (qc->tf.protocol != ATA_PROT_DMA)
236 		ap->ops->sff_exec_command(ap, &qc->tf);
237 }
238 
239 /**
240  *	k2_bmdma_start_mmio - Start a PCI IDE BMDMA transaction (MMIO)
241  *	@qc: Info associated with this ATA transaction.
242  *
243  *	LOCKING:
244  *	spin_lock_irqsave(host lock)
245  */
246 
247 static void k2_bmdma_start_mmio(struct ata_queued_cmd *qc)
248 {
249 	struct ata_port *ap = qc->ap;
250 	void __iomem *mmio = ap->ioaddr.bmdma_addr;
251 	u8 dmactl;
252 
253 	/* start host DMA transaction */
254 	dmactl = readb(mmio + ATA_DMA_CMD);
255 	writeb(dmactl | ATA_DMA_START, mmio + ATA_DMA_CMD);
256 	/* This works around possible data corruption.
257 
258 	   On certain SATA controllers that can be seen when the r/w
259 	   command is given to the controller before the host DMA is
260 	   started.
261 
262 	   On a Read command, the controller would initiate the
263 	   command to the drive even before it sees the DMA
264 	   start. When there are very fast drives connected to the
265 	   controller, or when the data request hits in the drive
266 	   cache, there is the possibility that the drive returns a
267 	   part or all of the requested data to the controller before
268 	   the DMA start is issued.  In this case, the controller
269 	   would become confused as to what to do with the data.  In
270 	   the worst case when all the data is returned back to the
271 	   controller, the controller could hang. In other cases it
272 	   could return partial data returning in data
273 	   corruption. This problem has been seen in PPC systems and
274 	   can also appear on an system with very fast disks, where
275 	   the SATA controller is sitting behind a number of bridges,
276 	   and hence there is significant latency between the r/w
277 	   command and the start command. */
278 	/* issue r/w command if the access is to ATA */
279 	if (qc->tf.protocol == ATA_PROT_DMA)
280 		ap->ops->sff_exec_command(ap, &qc->tf);
281 }
282 
283 
284 static u8 k2_stat_check_status(struct ata_port *ap)
285 {
286 	return readl(ap->ioaddr.status_addr);
287 }
288 
289 #ifdef CONFIG_PPC_OF
290 /*
291  * k2_sata_proc_info
292  * inout : decides on the direction of the dataflow and the meaning of the
293  *	   variables
294  * buffer: If inout==FALSE data is being written to it else read from it
295  * *start: If inout==FALSE start of the valid data in the buffer
296  * offset: If inout==FALSE offset from the beginning of the imaginary file
297  *	   from which we start writing into the buffer
298  * length: If inout==FALSE max number of bytes to be written into the buffer
299  *	   else number of bytes in the buffer
300  */
301 static int k2_sata_proc_info(struct Scsi_Host *shost, char *page, char **start,
302 			     off_t offset, int count, int inout)
303 {
304 	struct ata_port *ap;
305 	struct device_node *np;
306 	int len, index;
307 
308 	/* Find  the ata_port */
309 	ap = ata_shost_to_port(shost);
310 	if (ap == NULL)
311 		return 0;
312 
313 	/* Find the OF node for the PCI device proper */
314 	np = pci_device_to_OF_node(to_pci_dev(ap->host->dev));
315 	if (np == NULL)
316 		return 0;
317 
318 	/* Match it to a port node */
319 	index = (ap == ap->host->ports[0]) ? 0 : 1;
320 	for (np = np->child; np != NULL; np = np->sibling) {
321 		const u32 *reg = of_get_property(np, "reg", NULL);
322 		if (!reg)
323 			continue;
324 		if (index == *reg)
325 			break;
326 	}
327 	if (np == NULL)
328 		return 0;
329 
330 	len = sprintf(page, "devspec: %s\n", np->full_name);
331 
332 	return len;
333 }
334 #endif /* CONFIG_PPC_OF */
335 
336 
337 static struct scsi_host_template k2_sata_sht = {
338 	ATA_BMDMA_SHT(DRV_NAME),
339 #ifdef CONFIG_PPC_OF
340 	.proc_info		= k2_sata_proc_info,
341 #endif
342 };
343 
344 
345 static struct ata_port_operations k2_sata_ops = {
346 	.inherits		= &ata_bmdma_port_ops,
347 	.sff_tf_load		= k2_sata_tf_load,
348 	.sff_tf_read		= k2_sata_tf_read,
349 	.sff_check_status	= k2_stat_check_status,
350 	.check_atapi_dma	= k2_sata_check_atapi_dma,
351 	.bmdma_setup		= k2_bmdma_setup_mmio,
352 	.bmdma_start		= k2_bmdma_start_mmio,
353 	.scr_read		= k2_sata_scr_read,
354 	.scr_write		= k2_sata_scr_write,
355 };
356 
357 static const struct ata_port_info k2_port_info[] = {
358 	/* chip_svw4 */
359 	{
360 		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
361 				  ATA_FLAG_MMIO | K2_FLAG_NO_ATAPI_DMA,
362 		.pio_mask	= 0x1f,
363 		.mwdma_mask	= 0x07,
364 		.udma_mask	= ATA_UDMA6,
365 		.port_ops	= &k2_sata_ops,
366 	},
367 	/* chip_svw8 */
368 	{
369 		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
370 				  ATA_FLAG_MMIO | K2_FLAG_NO_ATAPI_DMA |
371 				  K2_FLAG_SATA_8_PORTS,
372 		.pio_mask	= 0x1f,
373 		.mwdma_mask	= 0x07,
374 		.udma_mask	= ATA_UDMA6,
375 		.port_ops	= &k2_sata_ops,
376 	},
377 	/* chip_svw42 */
378 	{
379 		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
380 				  ATA_FLAG_MMIO | K2_FLAG_BAR_POS_3,
381 		.pio_mask	= 0x1f,
382 		.mwdma_mask	= 0x07,
383 		.udma_mask	= ATA_UDMA6,
384 		.port_ops	= &k2_sata_ops,
385 	},
386 	/* chip_svw43 */
387 	{
388 		.flags		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
389 				  ATA_FLAG_MMIO,
390 		.pio_mask	= 0x1f,
391 		.mwdma_mask	= 0x07,
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_sff_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);
550