blob: 82adaf02887fb51c79b85686f297405637e3d7a5 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
2 * sata_sil.c - Silicon Image SATA
3 *
4 * Maintained by: Tejun Heo <tj@kernel.org>
5 * Please ALWAYS copy linux-ide@vger.kernel.org
6 * on emails.
7 *
8 * Copyright 2003-2005 Red Hat, Inc.
9 * Copyright 2003 Benjamin Herrenschmidt
10 *
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2, or (at your option)
15 * any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; see the file COPYING. If not, write to
24 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25 *
26 *
27 * libata documentation is available via 'make {ps|pdf}docs',
28 * as Documentation/driver-api/libata.rst
29 *
30 * Documentation for SiI 3112:
31 * http://gkernel.sourceforge.net/specs/sii/3112A_SiI-DS-0095-B2.pdf.bz2
32 *
33 * Other errata and documentation available under NDA.
34 *
35 */
36
37#include <linux/kernel.h>
38#include <linux/module.h>
39#include <linux/pci.h>
40#include <linux/blkdev.h>
41#include <linux/delay.h>
42#include <linux/interrupt.h>
43#include <linux/device.h>
44#include <scsi/scsi_host.h>
45#include <linux/libata.h>
46#include <linux/dmi.h>
47
48#define DRV_NAME "sata_sil"
49#define DRV_VERSION "2.4"
50
51#define SIL_DMA_BOUNDARY 0x7fffffffUL
52
53enum {
54 SIL_MMIO_BAR = 5,
55
56 /*
57 * host flags
58 */
59 SIL_FLAG_NO_SATA_IRQ = (1 << 28),
60 SIL_FLAG_RERR_ON_DMA_ACT = (1 << 29),
61 SIL_FLAG_MOD15WRITE = (1 << 30),
62
63 SIL_DFL_PORT_FLAGS = ATA_FLAG_SATA,
64
65 /*
66 * Controller IDs
67 */
68 sil_3112 = 0,
69 sil_3112_no_sata_irq = 1,
70 sil_3512 = 2,
71 sil_3114 = 3,
72
73 /*
74 * Register offsets
75 */
76 SIL_SYSCFG = 0x48,
77
78 /*
79 * Register bits
80 */
81 /* SYSCFG */
82 SIL_MASK_IDE0_INT = (1 << 22),
83 SIL_MASK_IDE1_INT = (1 << 23),
84 SIL_MASK_IDE2_INT = (1 << 24),
85 SIL_MASK_IDE3_INT = (1 << 25),
86 SIL_MASK_2PORT = SIL_MASK_IDE0_INT | SIL_MASK_IDE1_INT,
87 SIL_MASK_4PORT = SIL_MASK_2PORT |
88 SIL_MASK_IDE2_INT | SIL_MASK_IDE3_INT,
89
90 /* BMDMA/BMDMA2 */
91 SIL_INTR_STEERING = (1 << 1),
92
93 SIL_DMA_ENABLE = (1 << 0), /* DMA run switch */
94 SIL_DMA_RDWR = (1 << 3), /* DMA Rd-Wr */
95 SIL_DMA_SATA_IRQ = (1 << 4), /* OR of all SATA IRQs */
96 SIL_DMA_ACTIVE = (1 << 16), /* DMA running */
97 SIL_DMA_ERROR = (1 << 17), /* PCI bus error */
98 SIL_DMA_COMPLETE = (1 << 18), /* cmd complete / IRQ pending */
99 SIL_DMA_N_SATA_IRQ = (1 << 6), /* SATA_IRQ for the next channel */
100 SIL_DMA_N_ACTIVE = (1 << 24), /* ACTIVE for the next channel */
101 SIL_DMA_N_ERROR = (1 << 25), /* ERROR for the next channel */
102 SIL_DMA_N_COMPLETE = (1 << 26), /* COMPLETE for the next channel */
103
104 /* SIEN */
105 SIL_SIEN_N = (1 << 16), /* triggered by SError.N */
106
107 /*
108 * Others
109 */
110 SIL_QUIRK_MOD15WRITE = (1 << 0),
111 SIL_QUIRK_UDMA5MAX = (1 << 1),
112};
113
114static int sil_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
115#ifdef CONFIG_PM_SLEEP
116static int sil_pci_device_resume(struct pci_dev *pdev);
117#endif
118static void sil_dev_config(struct ata_device *dev);
119static int sil_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
120static int sil_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
121static int sil_set_mode(struct ata_link *link, struct ata_device **r_failed);
122static enum ata_completion_errors sil_qc_prep(struct ata_queued_cmd *qc);
123static void sil_bmdma_setup(struct ata_queued_cmd *qc);
124static void sil_bmdma_start(struct ata_queued_cmd *qc);
125static void sil_bmdma_stop(struct ata_queued_cmd *qc);
126static void sil_freeze(struct ata_port *ap);
127static void sil_thaw(struct ata_port *ap);
128
129
130static const struct pci_device_id sil_pci_tbl[] = {
131 { PCI_VDEVICE(CMD, 0x3112), sil_3112 },
132 { PCI_VDEVICE(CMD, 0x0240), sil_3112 },
133 { PCI_VDEVICE(CMD, 0x3512), sil_3512 },
134 { PCI_VDEVICE(CMD, 0x3114), sil_3114 },
135 { PCI_VDEVICE(ATI, 0x436e), sil_3112 },
136 { PCI_VDEVICE(ATI, 0x4379), sil_3112_no_sata_irq },
137 { PCI_VDEVICE(ATI, 0x437a), sil_3112_no_sata_irq },
138
139 { } /* terminate list */
140};
141
142
143/* TODO firmware versions should be added - eric */
144static const struct sil_drivelist {
145 const char *product;
146 unsigned int quirk;
147} sil_blacklist [] = {
148 { "ST320012AS", SIL_QUIRK_MOD15WRITE },
149 { "ST330013AS", SIL_QUIRK_MOD15WRITE },
150 { "ST340017AS", SIL_QUIRK_MOD15WRITE },
151 { "ST360015AS", SIL_QUIRK_MOD15WRITE },
152 { "ST380023AS", SIL_QUIRK_MOD15WRITE },
153 { "ST3120023AS", SIL_QUIRK_MOD15WRITE },
154 { "ST340014ASL", SIL_QUIRK_MOD15WRITE },
155 { "ST360014ASL", SIL_QUIRK_MOD15WRITE },
156 { "ST380011ASL", SIL_QUIRK_MOD15WRITE },
157 { "ST3120022ASL", SIL_QUIRK_MOD15WRITE },
158 { "ST3160021ASL", SIL_QUIRK_MOD15WRITE },
159 { "TOSHIBA MK2561GSYN", SIL_QUIRK_MOD15WRITE },
160 { "Maxtor 4D060H3", SIL_QUIRK_UDMA5MAX },
161 { }
162};
163
164static struct pci_driver sil_pci_driver = {
165 .name = DRV_NAME,
166 .id_table = sil_pci_tbl,
167 .probe = sil_init_one,
168 .remove = ata_pci_remove_one,
169#ifdef CONFIG_PM_SLEEP
170 .suspend = ata_pci_device_suspend,
171 .resume = sil_pci_device_resume,
172#endif
173};
174
175static struct scsi_host_template sil_sht = {
176 ATA_BASE_SHT(DRV_NAME),
177 /** These controllers support Large Block Transfer which allows
178 transfer chunks up to 2GB and which cross 64KB boundaries,
179 therefore the DMA limits are more relaxed than standard ATA SFF. */
180 .dma_boundary = SIL_DMA_BOUNDARY,
181 .sg_tablesize = ATA_MAX_PRD
182};
183
184static struct ata_port_operations sil_ops = {
185 .inherits = &ata_bmdma32_port_ops,
186 .dev_config = sil_dev_config,
187 .set_mode = sil_set_mode,
188 .bmdma_setup = sil_bmdma_setup,
189 .bmdma_start = sil_bmdma_start,
190 .bmdma_stop = sil_bmdma_stop,
191 .qc_prep = sil_qc_prep,
192 .freeze = sil_freeze,
193 .thaw = sil_thaw,
194 .scr_read = sil_scr_read,
195 .scr_write = sil_scr_write,
196};
197
198static const struct ata_port_info sil_port_info[] = {
199 /* sil_3112 */
200 {
201 .flags = SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE,
202 .pio_mask = ATA_PIO4,
203 .mwdma_mask = ATA_MWDMA2,
204 .udma_mask = ATA_UDMA5,
205 .port_ops = &sil_ops,
206 },
207 /* sil_3112_no_sata_irq */
208 {
209 .flags = SIL_DFL_PORT_FLAGS | SIL_FLAG_MOD15WRITE |
210 SIL_FLAG_NO_SATA_IRQ,
211 .pio_mask = ATA_PIO4,
212 .mwdma_mask = ATA_MWDMA2,
213 .udma_mask = ATA_UDMA5,
214 .port_ops = &sil_ops,
215 },
216 /* sil_3512 */
217 {
218 .flags = SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
219 .pio_mask = ATA_PIO4,
220 .mwdma_mask = ATA_MWDMA2,
221 .udma_mask = ATA_UDMA5,
222 .port_ops = &sil_ops,
223 },
224 /* sil_3114 */
225 {
226 .flags = SIL_DFL_PORT_FLAGS | SIL_FLAG_RERR_ON_DMA_ACT,
227 .pio_mask = ATA_PIO4,
228 .mwdma_mask = ATA_MWDMA2,
229 .udma_mask = ATA_UDMA5,
230 .port_ops = &sil_ops,
231 },
232};
233
234/* per-port register offsets */
235/* TODO: we can probably calculate rather than use a table */
236static const struct {
237 unsigned long tf; /* ATA taskfile register block */
238 unsigned long ctl; /* ATA control/altstatus register block */
239 unsigned long bmdma; /* DMA register block */
240 unsigned long bmdma2; /* DMA register block #2 */
241 unsigned long fifo_cfg; /* FIFO Valid Byte Count and Control */
242 unsigned long scr; /* SATA control register block */
243 unsigned long sien; /* SATA Interrupt Enable register */
244 unsigned long xfer_mode;/* data transfer mode register */
245 unsigned long sfis_cfg; /* SATA FIS reception config register */
246} sil_port[] = {
247 /* port 0 ... */
248 /* tf ctl bmdma bmdma2 fifo scr sien mode sfis */
249 { 0x80, 0x8A, 0x0, 0x10, 0x40, 0x100, 0x148, 0xb4, 0x14c },
250 { 0xC0, 0xCA, 0x8, 0x18, 0x44, 0x180, 0x1c8, 0xf4, 0x1cc },
251 { 0x280, 0x28A, 0x200, 0x210, 0x240, 0x300, 0x348, 0x2b4, 0x34c },
252 { 0x2C0, 0x2CA, 0x208, 0x218, 0x244, 0x380, 0x3c8, 0x2f4, 0x3cc },
253 /* ... port 3 */
254};
255
256MODULE_AUTHOR("Jeff Garzik");
257MODULE_DESCRIPTION("low-level driver for Silicon Image SATA controller");
258MODULE_LICENSE("GPL");
259MODULE_DEVICE_TABLE(pci, sil_pci_tbl);
260MODULE_VERSION(DRV_VERSION);
261
262static int slow_down;
263module_param(slow_down, int, 0444);
264MODULE_PARM_DESC(slow_down, "Sledgehammer used to work around random problems, by limiting commands to 15 sectors (0=off, 1=on)");
265
266
267static void sil_bmdma_stop(struct ata_queued_cmd *qc)
268{
269 struct ata_port *ap = qc->ap;
270 void __iomem *mmio_base = ap->host->iomap[SIL_MMIO_BAR];
271 void __iomem *bmdma2 = mmio_base + sil_port[ap->port_no].bmdma2;
272
273 /* clear start/stop bit - can safely always write 0 */
274 iowrite8(0, bmdma2);
275
276 /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */
277 ata_sff_dma_pause(ap);
278}
279
280static void sil_bmdma_setup(struct ata_queued_cmd *qc)
281{
282 struct ata_port *ap = qc->ap;
283 void __iomem *bmdma = ap->ioaddr.bmdma_addr;
284
285 /* load PRD table addr. */
286 iowrite32(ap->bmdma_prd_dma, bmdma + ATA_DMA_TABLE_OFS);
287
288 /* issue r/w command */
289 ap->ops->sff_exec_command(ap, &qc->tf);
290}
291
292static void sil_bmdma_start(struct ata_queued_cmd *qc)
293{
294 unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
295 struct ata_port *ap = qc->ap;
296 void __iomem *mmio_base = ap->host->iomap[SIL_MMIO_BAR];
297 void __iomem *bmdma2 = mmio_base + sil_port[ap->port_no].bmdma2;
298 u8 dmactl = ATA_DMA_START;
299
300 /* set transfer direction, start host DMA transaction
301 Note: For Large Block Transfer to work, the DMA must be started
302 using the bmdma2 register. */
303 if (!rw)
304 dmactl |= ATA_DMA_WR;
305 iowrite8(dmactl, bmdma2);
306}
307
308/* The way God intended PCI IDE scatter/gather lists to look and behave... */
309static void sil_fill_sg(struct ata_queued_cmd *qc)
310{
311 struct scatterlist *sg;
312 struct ata_port *ap = qc->ap;
313 struct ata_bmdma_prd *prd, *last_prd = NULL;
314 unsigned int si;
315
316 prd = &ap->bmdma_prd[0];
317 for_each_sg(qc->sg, sg, qc->n_elem, si) {
318 /* Note h/w doesn't support 64-bit, so we unconditionally
319 * truncate dma_addr_t to u32.
320 */
321 u32 addr = (u32) sg_dma_address(sg);
322 u32 sg_len = sg_dma_len(sg);
323
324 prd->addr = cpu_to_le32(addr);
325 prd->flags_len = cpu_to_le32(sg_len);
326 VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", si, addr, sg_len);
327
328 last_prd = prd;
329 prd++;
330 }
331
332 if (likely(last_prd))
333 last_prd->flags_len |= cpu_to_le32(ATA_PRD_EOT);
334}
335
336static enum ata_completion_errors sil_qc_prep(struct ata_queued_cmd *qc)
337{
338 if (!(qc->flags & ATA_QCFLAG_DMAMAP))
339 return AC_ERR_OK;
340
341 sil_fill_sg(qc);
342
343 return AC_ERR_OK;
344}
345
346static unsigned char sil_get_device_cache_line(struct pci_dev *pdev)
347{
348 u8 cache_line = 0;
349 pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache_line);
350 return cache_line;
351}
352
353/**
354 * sil_set_mode - wrap set_mode functions
355 * @link: link to set up
356 * @r_failed: returned device when we fail
357 *
358 * Wrap the libata method for device setup as after the setup we need
359 * to inspect the results and do some configuration work
360 */
361
362static int sil_set_mode(struct ata_link *link, struct ata_device **r_failed)
363{
364 struct ata_port *ap = link->ap;
365 void __iomem *mmio_base = ap->host->iomap[SIL_MMIO_BAR];
366 void __iomem *addr = mmio_base + sil_port[ap->port_no].xfer_mode;
367 struct ata_device *dev;
368 u32 tmp, dev_mode[2] = { };
369 int rc;
370
371 rc = ata_do_set_mode(link, r_failed);
372 if (rc)
373 return rc;
374
375 ata_for_each_dev(dev, link, ALL) {
376 if (!ata_dev_enabled(dev))
377 dev_mode[dev->devno] = 0; /* PIO0/1/2 */
378 else if (dev->flags & ATA_DFLAG_PIO)
379 dev_mode[dev->devno] = 1; /* PIO3/4 */
380 else
381 dev_mode[dev->devno] = 3; /* UDMA */
382 /* value 2 indicates MDMA */
383 }
384
385 tmp = readl(addr);
386 tmp &= ~((1<<5) | (1<<4) | (1<<1) | (1<<0));
387 tmp |= dev_mode[0];
388 tmp |= (dev_mode[1] << 4);
389 writel(tmp, addr);
390 readl(addr); /* flush */
391 return 0;
392}
393
394static inline void __iomem *sil_scr_addr(struct ata_port *ap,
395 unsigned int sc_reg)
396{
397 void __iomem *offset = ap->ioaddr.scr_addr;
398
399 switch (sc_reg) {
400 case SCR_STATUS:
401 return offset + 4;
402 case SCR_ERROR:
403 return offset + 8;
404 case SCR_CONTROL:
405 return offset;
406 default:
407 /* do nothing */
408 break;
409 }
410
411 return NULL;
412}
413
414static int sil_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val)
415{
416 void __iomem *mmio = sil_scr_addr(link->ap, sc_reg);
417
418 if (mmio) {
419 *val = readl(mmio);
420 return 0;
421 }
422 return -EINVAL;
423}
424
425static int sil_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val)
426{
427 void __iomem *mmio = sil_scr_addr(link->ap, sc_reg);
428
429 if (mmio) {
430 writel(val, mmio);
431 return 0;
432 }
433 return -EINVAL;
434}
435
436static void sil_host_intr(struct ata_port *ap, u32 bmdma2)
437{
438 struct ata_eh_info *ehi = &ap->link.eh_info;
439 struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag);
440 u8 status;
441
442 if (unlikely(bmdma2 & SIL_DMA_SATA_IRQ)) {
443 u32 serror = 0xffffffff;
444
445 /* SIEN doesn't mask SATA IRQs on some 3112s. Those
446 * controllers continue to assert IRQ as long as
447 * SError bits are pending. Clear SError immediately.
448 */
449 sil_scr_read(&ap->link, SCR_ERROR, &serror);
450 sil_scr_write(&ap->link, SCR_ERROR, serror);
451
452 /* Sometimes spurious interrupts occur, double check
453 * it's PHYRDY CHG.
454 */
455 if (serror & SERR_PHYRDY_CHG) {
456 ap->link.eh_info.serror |= serror;
457 goto freeze;
458 }
459
460 if (!(bmdma2 & SIL_DMA_COMPLETE))
461 return;
462 }
463
464 if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) {
465 /* this sometimes happens, just clear IRQ */
466 ap->ops->sff_check_status(ap);
467 return;
468 }
469
470 /* Check whether we are expecting interrupt in this state */
471 switch (ap->hsm_task_state) {
472 case HSM_ST_FIRST:
473 /* Some pre-ATAPI-4 devices assert INTRQ
474 * at this state when ready to receive CDB.
475 */
476
477 /* Check the ATA_DFLAG_CDB_INTR flag is enough here.
478 * The flag was turned on only for atapi devices. No
479 * need to check ata_is_atapi(qc->tf.protocol) again.
480 */
481 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
482 goto err_hsm;
483 break;
484 case HSM_ST_LAST:
485 if (ata_is_dma(qc->tf.protocol)) {
486 /* clear DMA-Start bit */
487 ap->ops->bmdma_stop(qc);
488
489 if (bmdma2 & SIL_DMA_ERROR) {
490 qc->err_mask |= AC_ERR_HOST_BUS;
491 ap->hsm_task_state = HSM_ST_ERR;
492 }
493 }
494 break;
495 case HSM_ST:
496 break;
497 default:
498 goto err_hsm;
499 }
500
501 /* check main status, clearing INTRQ */
502 status = ap->ops->sff_check_status(ap);
503 if (unlikely(status & ATA_BUSY))
504 goto err_hsm;
505
506 /* ack bmdma irq events */
507 ata_bmdma_irq_clear(ap);
508
509 /* kick HSM in the ass */
510 ata_sff_hsm_move(ap, qc, status, 0);
511
512 if (unlikely(qc->err_mask) && ata_is_dma(qc->tf.protocol))
513 ata_ehi_push_desc(ehi, "BMDMA2 stat 0x%x", bmdma2);
514
515 return;
516
517 err_hsm:
518 qc->err_mask |= AC_ERR_HSM;
519 freeze:
520 ata_port_freeze(ap);
521}
522
523static irqreturn_t sil_interrupt(int irq, void *dev_instance)
524{
525 struct ata_host *host = dev_instance;
526 void __iomem *mmio_base = host->iomap[SIL_MMIO_BAR];
527 int handled = 0;
528 int i;
529
530 spin_lock(&host->lock);
531
532 for (i = 0; i < host->n_ports; i++) {
533 struct ata_port *ap = host->ports[i];
534 u32 bmdma2 = readl(mmio_base + sil_port[ap->port_no].bmdma2);
535
536 /* turn off SATA_IRQ if not supported */
537 if (ap->flags & SIL_FLAG_NO_SATA_IRQ)
538 bmdma2 &= ~SIL_DMA_SATA_IRQ;
539
540 if (bmdma2 == 0xffffffff ||
541 !(bmdma2 & (SIL_DMA_COMPLETE | SIL_DMA_SATA_IRQ)))
542 continue;
543
544 sil_host_intr(ap, bmdma2);
545 handled = 1;
546 }
547
548 spin_unlock(&host->lock);
549
550 return IRQ_RETVAL(handled);
551}
552
553static void sil_freeze(struct ata_port *ap)
554{
555 void __iomem *mmio_base = ap->host->iomap[SIL_MMIO_BAR];
556 u32 tmp;
557
558 /* global IRQ mask doesn't block SATA IRQ, turn off explicitly */
559 writel(0, mmio_base + sil_port[ap->port_no].sien);
560
561 /* plug IRQ */
562 tmp = readl(mmio_base + SIL_SYSCFG);
563 tmp |= SIL_MASK_IDE0_INT << ap->port_no;
564 writel(tmp, mmio_base + SIL_SYSCFG);
565 readl(mmio_base + SIL_SYSCFG); /* flush */
566
567 /* Ensure DMA_ENABLE is off.
568 *
569 * This is because the controller will not give us access to the
570 * taskfile registers while a DMA is in progress
571 */
572 iowrite8(ioread8(ap->ioaddr.bmdma_addr) & ~SIL_DMA_ENABLE,
573 ap->ioaddr.bmdma_addr);
574
575 /* According to ata_bmdma_stop, an HDMA transition requires
576 * on PIO cycle. But we can't read a taskfile register.
577 */
578 ioread8(ap->ioaddr.bmdma_addr);
579}
580
581static void sil_thaw(struct ata_port *ap)
582{
583 void __iomem *mmio_base = ap->host->iomap[SIL_MMIO_BAR];
584 u32 tmp;
585
586 /* clear IRQ */
587 ap->ops->sff_check_status(ap);
588 ata_bmdma_irq_clear(ap);
589
590 /* turn on SATA IRQ if supported */
591 if (!(ap->flags & SIL_FLAG_NO_SATA_IRQ))
592 writel(SIL_SIEN_N, mmio_base + sil_port[ap->port_no].sien);
593
594 /* turn on IRQ */
595 tmp = readl(mmio_base + SIL_SYSCFG);
596 tmp &= ~(SIL_MASK_IDE0_INT << ap->port_no);
597 writel(tmp, mmio_base + SIL_SYSCFG);
598}
599
600/**
601 * sil_dev_config - Apply device/host-specific errata fixups
602 * @dev: Device to be examined
603 *
604 * After the IDENTIFY [PACKET] DEVICE step is complete, and a
605 * device is known to be present, this function is called.
606 * We apply two errata fixups which are specific to Silicon Image,
607 * a Seagate and a Maxtor fixup.
608 *
609 * For certain Seagate devices, we must limit the maximum sectors
610 * to under 8K.
611 *
612 * For certain Maxtor devices, we must not program the drive
613 * beyond udma5.
614 *
615 * Both fixups are unfairly pessimistic. As soon as I get more
616 * information on these errata, I will create a more exhaustive
617 * list, and apply the fixups to only the specific
618 * devices/hosts/firmwares that need it.
619 *
620 * 20040111 - Seagate drives affected by the Mod15Write bug are blacklisted
621 * The Maxtor quirk is in the blacklist, but I'm keeping the original
622 * pessimistic fix for the following reasons...
623 * - There seems to be less info on it, only one device gleaned off the
624 * Windows driver, maybe only one is affected. More info would be greatly
625 * appreciated.
626 * - But then again UDMA5 is hardly anything to complain about
627 */
628static void sil_dev_config(struct ata_device *dev)
629{
630 struct ata_port *ap = dev->link->ap;
631 int print_info = ap->link.eh_context.i.flags & ATA_EHI_PRINTINFO;
632 unsigned int n, quirks = 0;
633 unsigned char model_num[ATA_ID_PROD_LEN + 1];
634
635 /* This controller doesn't support trim */
636 dev->horkage |= ATA_HORKAGE_NOTRIM;
637
638 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
639
640 for (n = 0; sil_blacklist[n].product; n++)
641 if (!strcmp(sil_blacklist[n].product, model_num)) {
642 quirks = sil_blacklist[n].quirk;
643 break;
644 }
645
646 /* limit requests to 15 sectors */
647 if (slow_down ||
648 ((ap->flags & SIL_FLAG_MOD15WRITE) &&
649 (quirks & SIL_QUIRK_MOD15WRITE))) {
650 if (print_info)
651 ata_dev_info(dev,
652 "applying Seagate errata fix (mod15write workaround)\n");
653 dev->max_sectors = 15;
654 return;
655 }
656
657 /* limit to udma5 */
658 if (quirks & SIL_QUIRK_UDMA5MAX) {
659 if (print_info)
660 ata_dev_info(dev, "applying Maxtor errata fix %s\n",
661 model_num);
662 dev->udma_mask &= ATA_UDMA5;
663 return;
664 }
665}
666
667static void sil_init_controller(struct ata_host *host)
668{
669 struct pci_dev *pdev = to_pci_dev(host->dev);
670 void __iomem *mmio_base = host->iomap[SIL_MMIO_BAR];
671 u8 cls;
672 u32 tmp;
673 int i;
674
675 /* Initialize FIFO PCI bus arbitration */
676 cls = sil_get_device_cache_line(pdev);
677 if (cls) {
678 cls >>= 3;
679 cls++; /* cls = (line_size/8)+1 */
680 for (i = 0; i < host->n_ports; i++)
681 writew(cls << 8 | cls,
682 mmio_base + sil_port[i].fifo_cfg);
683 } else
684 dev_warn(&pdev->dev,
685 "cache line size not set. Driver may not function\n");
686
687 /* Apply R_ERR on DMA activate FIS errata workaround */
688 if (host->ports[0]->flags & SIL_FLAG_RERR_ON_DMA_ACT) {
689 int cnt;
690
691 for (i = 0, cnt = 0; i < host->n_ports; i++) {
692 tmp = readl(mmio_base + sil_port[i].sfis_cfg);
693 if ((tmp & 0x3) != 0x01)
694 continue;
695 if (!cnt)
696 dev_info(&pdev->dev,
697 "Applying R_ERR on DMA activate FIS errata fix\n");
698 writel(tmp & ~0x3, mmio_base + sil_port[i].sfis_cfg);
699 cnt++;
700 }
701 }
702
703 if (host->n_ports == 4) {
704 /* flip the magic "make 4 ports work" bit */
705 tmp = readl(mmio_base + sil_port[2].bmdma);
706 if ((tmp & SIL_INTR_STEERING) == 0)
707 writel(tmp | SIL_INTR_STEERING,
708 mmio_base + sil_port[2].bmdma);
709 }
710}
711
712static bool sil_broken_system_poweroff(struct pci_dev *pdev)
713{
714 static const struct dmi_system_id broken_systems[] = {
715 {
716 .ident = "HP Compaq nx6325",
717 .matches = {
718 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
719 DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq nx6325"),
720 },
721 /* PCI slot number of the controller */
722 .driver_data = (void *)0x12UL,
723 },
724
725 { } /* terminate list */
726 };
727 const struct dmi_system_id *dmi = dmi_first_match(broken_systems);
728
729 if (dmi) {
730 unsigned long slot = (unsigned long)dmi->driver_data;
731 /* apply the quirk only to on-board controllers */
732 return slot == PCI_SLOT(pdev->devfn);
733 }
734
735 return false;
736}
737
738static int sil_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
739{
740 int board_id = ent->driver_data;
741 struct ata_port_info pi = sil_port_info[board_id];
742 const struct ata_port_info *ppi[] = { &pi, NULL };
743 struct ata_host *host;
744 void __iomem *mmio_base;
745 int n_ports, rc;
746 unsigned int i;
747
748 ata_print_version_once(&pdev->dev, DRV_VERSION);
749
750 /* allocate host */
751 n_ports = 2;
752 if (board_id == sil_3114)
753 n_ports = 4;
754
755 if (sil_broken_system_poweroff(pdev)) {
756 pi.flags |= ATA_FLAG_NO_POWEROFF_SPINDOWN |
757 ATA_FLAG_NO_HIBERNATE_SPINDOWN;
758 dev_info(&pdev->dev, "quirky BIOS, skipping spindown "
759 "on poweroff and hibernation\n");
760 }
761
762 host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
763 if (!host)
764 return -ENOMEM;
765
766 /* acquire resources and fill host */
767 rc = pcim_enable_device(pdev);
768 if (rc)
769 return rc;
770
771 rc = pcim_iomap_regions(pdev, 1 << SIL_MMIO_BAR, DRV_NAME);
772 if (rc == -EBUSY)
773 pcim_pin_device(pdev);
774 if (rc)
775 return rc;
776 host->iomap = pcim_iomap_table(pdev);
777
778 rc = dma_set_mask(&pdev->dev, ATA_DMA_MASK);
779 if (rc)
780 return rc;
781 rc = dma_set_coherent_mask(&pdev->dev, ATA_DMA_MASK);
782 if (rc)
783 return rc;
784
785 mmio_base = host->iomap[SIL_MMIO_BAR];
786
787 for (i = 0; i < host->n_ports; i++) {
788 struct ata_port *ap = host->ports[i];
789 struct ata_ioports *ioaddr = &ap->ioaddr;
790
791 ioaddr->cmd_addr = mmio_base + sil_port[i].tf;
792 ioaddr->altstatus_addr =
793 ioaddr->ctl_addr = mmio_base + sil_port[i].ctl;
794 ioaddr->bmdma_addr = mmio_base + sil_port[i].bmdma;
795 ioaddr->scr_addr = mmio_base + sil_port[i].scr;
796 ata_sff_std_ports(ioaddr);
797
798 ata_port_pbar_desc(ap, SIL_MMIO_BAR, -1, "mmio");
799 ata_port_pbar_desc(ap, SIL_MMIO_BAR, sil_port[i].tf, "tf");
800 }
801
802 /* initialize and activate */
803 sil_init_controller(host);
804
805 pci_set_master(pdev);
806 return ata_host_activate(host, pdev->irq, sil_interrupt, IRQF_SHARED,
807 &sil_sht);
808}
809
810#ifdef CONFIG_PM_SLEEP
811static int sil_pci_device_resume(struct pci_dev *pdev)
812{
813 struct ata_host *host = pci_get_drvdata(pdev);
814 int rc;
815
816 rc = ata_pci_device_do_resume(pdev);
817 if (rc)
818 return rc;
819
820 sil_init_controller(host);
821 ata_host_resume(host);
822
823 return 0;
824}
825#endif
826
827module_pci_driver(sil_pci_driver);