]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/ata/sata_mv.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen...
[linux-2.6-omap-h63xx.git] / drivers / ata / sata_mv.c
1 /*
2  * sata_mv.c - Marvell SATA support
3  *
4  * Copyright 2008: Marvell Corporation, all rights reserved.
5  * Copyright 2005: EMC Corporation, all rights reserved.
6  * Copyright 2005 Red Hat, Inc.  All rights reserved.
7  *
8  * Please ALWAYS copy linux-ide@vger.kernel.org on emails.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; version 2 of the License.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  *
23  */
24
25 /*
26   sata_mv TODO list:
27
28   1) Needs a full errata audit for all chipsets.  I implemented most
29   of the errata workarounds found in the Marvell vendor driver, but
30   I distinctly remember a couple workarounds (one related to PCI-X)
31   are still needed.
32
33   2) Improve/fix IRQ and error handling sequences.
34
35   3) ATAPI support (Marvell claims the 60xx/70xx chips can do it).
36
37   4) Think about TCQ support here, and for libata in general
38   with controllers that suppport it via host-queuing hardware
39   (a software-only implementation could be a nightmare).
40
41   5) Investigate problems with PCI Message Signalled Interrupts (MSI).
42
43   6) Cache frequently-accessed registers in mv_port_priv to reduce overhead.
44
45   7) Fix/reenable hot plug/unplug (should happen as a side-effect of (2) above).
46
47   8) Develop a low-power-consumption strategy, and implement it.
48
49   9) [Experiment, low priority] See if ATAPI can be supported using
50   "unknown FIS" or "vendor-specific FIS" support, or something creative
51   like that.
52
53   10) [Experiment, low priority] Investigate interrupt coalescing.
54   Quite often, especially with PCI Message Signalled Interrupts (MSI),
55   the overhead reduced by interrupt mitigation is quite often not
56   worth the latency cost.
57
58   11) [Experiment, Marvell value added] Is it possible to use target
59   mode to cross-connect two Linux boxes with Marvell cards?  If so,
60   creating LibATA target mode support would be very interesting.
61
62   Target mode, for those without docs, is the ability to directly
63   connect two SATA controllers.
64
65 */
66
67 #include <linux/kernel.h>
68 #include <linux/module.h>
69 #include <linux/pci.h>
70 #include <linux/init.h>
71 #include <linux/blkdev.h>
72 #include <linux/delay.h>
73 #include <linux/interrupt.h>
74 #include <linux/dmapool.h>
75 #include <linux/dma-mapping.h>
76 #include <linux/device.h>
77 #include <linux/platform_device.h>
78 #include <linux/ata_platform.h>
79 #include <scsi/scsi_host.h>
80 #include <scsi/scsi_cmnd.h>
81 #include <scsi/scsi_device.h>
82 #include <linux/libata.h>
83
84 #define DRV_NAME        "sata_mv"
85 #define DRV_VERSION     "1.20"
86
87 enum {
88         /* BAR's are enumerated in terms of pci_resource_start() terms */
89         MV_PRIMARY_BAR          = 0,    /* offset 0x10: memory space */
90         MV_IO_BAR               = 2,    /* offset 0x18: IO space */
91         MV_MISC_BAR             = 3,    /* offset 0x1c: FLASH, NVRAM, SRAM */
92
93         MV_MAJOR_REG_AREA_SZ    = 0x10000,      /* 64KB */
94         MV_MINOR_REG_AREA_SZ    = 0x2000,       /* 8KB */
95
96         MV_PCI_REG_BASE         = 0,
97         MV_IRQ_COAL_REG_BASE    = 0x18000,      /* 6xxx part only */
98         MV_IRQ_COAL_CAUSE               = (MV_IRQ_COAL_REG_BASE + 0x08),
99         MV_IRQ_COAL_CAUSE_LO            = (MV_IRQ_COAL_REG_BASE + 0x88),
100         MV_IRQ_COAL_CAUSE_HI            = (MV_IRQ_COAL_REG_BASE + 0x8c),
101         MV_IRQ_COAL_THRESHOLD           = (MV_IRQ_COAL_REG_BASE + 0xcc),
102         MV_IRQ_COAL_TIME_THRESHOLD      = (MV_IRQ_COAL_REG_BASE + 0xd0),
103
104         MV_SATAHC0_REG_BASE     = 0x20000,
105         MV_FLASH_CTL            = 0x1046c,
106         MV_GPIO_PORT_CTL        = 0x104f0,
107         MV_RESET_CFG            = 0x180d8,
108
109         MV_PCI_REG_SZ           = MV_MAJOR_REG_AREA_SZ,
110         MV_SATAHC_REG_SZ        = MV_MAJOR_REG_AREA_SZ,
111         MV_SATAHC_ARBTR_REG_SZ  = MV_MINOR_REG_AREA_SZ,         /* arbiter */
112         MV_PORT_REG_SZ          = MV_MINOR_REG_AREA_SZ,
113
114         MV_MAX_Q_DEPTH          = 32,
115         MV_MAX_Q_DEPTH_MASK     = MV_MAX_Q_DEPTH - 1,
116
117         /* CRQB needs alignment on a 1KB boundary. Size == 1KB
118          * CRPB needs alignment on a 256B boundary. Size == 256B
119          * ePRD (SG) entries need alignment on a 16B boundary. Size == 16B
120          */
121         MV_CRQB_Q_SZ            = (32 * MV_MAX_Q_DEPTH),
122         MV_CRPB_Q_SZ            = (8 * MV_MAX_Q_DEPTH),
123         MV_MAX_SG_CT            = 256,
124         MV_SG_TBL_SZ            = (16 * MV_MAX_SG_CT),
125
126         MV_PORTS_PER_HC         = 4,
127         /* == (port / MV_PORTS_PER_HC) to determine HC from 0-7 port */
128         MV_PORT_HC_SHIFT        = 2,
129         /* == (port % MV_PORTS_PER_HC) to determine hard port from 0-7 port */
130         MV_PORT_MASK            = 3,
131
132         /* Host Flags */
133         MV_FLAG_DUAL_HC         = (1 << 30),  /* two SATA Host Controllers */
134         MV_FLAG_IRQ_COALESCE    = (1 << 29),  /* IRQ coalescing capability */
135         /* SoC integrated controllers, no PCI interface */
136         MV_FLAG_SOC             = (1 << 28),
137
138         MV_COMMON_FLAGS         = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
139                                   ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI |
140                                   ATA_FLAG_PIO_POLLING,
141         MV_6XXX_FLAGS           = MV_FLAG_IRQ_COALESCE,
142
143         CRQB_FLAG_READ          = (1 << 0),
144         CRQB_TAG_SHIFT          = 1,
145         CRQB_IOID_SHIFT         = 6,    /* CRQB Gen-II/IIE IO Id shift */
146         CRQB_PMP_SHIFT          = 12,   /* CRQB Gen-II/IIE PMP shift */
147         CRQB_HOSTQ_SHIFT        = 17,   /* CRQB Gen-II/IIE HostQueTag shift */
148         CRQB_CMD_ADDR_SHIFT     = 8,
149         CRQB_CMD_CS             = (0x2 << 11),
150         CRQB_CMD_LAST           = (1 << 15),
151
152         CRPB_FLAG_STATUS_SHIFT  = 8,
153         CRPB_IOID_SHIFT_6       = 5,    /* CRPB Gen-II IO Id shift */
154         CRPB_IOID_SHIFT_7       = 7,    /* CRPB Gen-IIE IO Id shift */
155
156         EPRD_FLAG_END_OF_TBL    = (1 << 31),
157
158         /* PCI interface registers */
159
160         PCI_COMMAND_OFS         = 0xc00,
161
162         PCI_MAIN_CMD_STS_OFS    = 0xd30,
163         STOP_PCI_MASTER         = (1 << 2),
164         PCI_MASTER_EMPTY        = (1 << 3),
165         GLOB_SFT_RST            = (1 << 4),
166
167         MV_PCI_MODE             = 0xd00,
168         MV_PCI_EXP_ROM_BAR_CTL  = 0xd2c,
169         MV_PCI_DISC_TIMER       = 0xd04,
170         MV_PCI_MSI_TRIGGER      = 0xc38,
171         MV_PCI_SERR_MASK        = 0xc28,
172         MV_PCI_XBAR_TMOUT       = 0x1d04,
173         MV_PCI_ERR_LOW_ADDRESS  = 0x1d40,
174         MV_PCI_ERR_HIGH_ADDRESS = 0x1d44,
175         MV_PCI_ERR_ATTRIBUTE    = 0x1d48,
176         MV_PCI_ERR_COMMAND      = 0x1d50,
177
178         PCI_IRQ_CAUSE_OFS       = 0x1d58,
179         PCI_IRQ_MASK_OFS        = 0x1d5c,
180         PCI_UNMASK_ALL_IRQS     = 0x7fffff,     /* bits 22-0 */
181
182         PCIE_IRQ_CAUSE_OFS      = 0x1900,
183         PCIE_IRQ_MASK_OFS       = 0x1910,
184         PCIE_UNMASK_ALL_IRQS    = 0x40a,        /* assorted bits */
185
186         HC_MAIN_IRQ_CAUSE_OFS   = 0x1d60,
187         HC_MAIN_IRQ_MASK_OFS    = 0x1d64,
188         HC_SOC_MAIN_IRQ_CAUSE_OFS = 0x20020,
189         HC_SOC_MAIN_IRQ_MASK_OFS = 0x20024,
190         PORT0_ERR               = (1 << 0),     /* shift by port # */
191         PORT0_DONE              = (1 << 1),     /* shift by port # */
192         HC0_IRQ_PEND            = 0x1ff,        /* bits 0-8 = HC0's ports */
193         HC_SHIFT                = 9,            /* bits 9-17 = HC1's ports */
194         PCI_ERR                 = (1 << 18),
195         TRAN_LO_DONE            = (1 << 19),    /* 6xxx: IRQ coalescing */
196         TRAN_HI_DONE            = (1 << 20),    /* 6xxx: IRQ coalescing */
197         PORTS_0_3_COAL_DONE     = (1 << 8),
198         PORTS_4_7_COAL_DONE     = (1 << 17),
199         PORTS_0_7_COAL_DONE     = (1 << 21),    /* 6xxx: IRQ coalescing */
200         GPIO_INT                = (1 << 22),
201         SELF_INT                = (1 << 23),
202         TWSI_INT                = (1 << 24),
203         HC_MAIN_RSVD            = (0x7f << 25), /* bits 31-25 */
204         HC_MAIN_RSVD_5          = (0x1fff << 19), /* bits 31-19 */
205         HC_MAIN_RSVD_SOC        = (0x3fffffb << 6),     /* bits 31-9, 7-6 */
206         HC_MAIN_MASKED_IRQS     = (TRAN_LO_DONE | TRAN_HI_DONE |
207                                    PORTS_0_7_COAL_DONE | GPIO_INT | TWSI_INT |
208                                    HC_MAIN_RSVD),
209         HC_MAIN_MASKED_IRQS_5   = (PORTS_0_3_COAL_DONE | PORTS_4_7_COAL_DONE |
210                                    HC_MAIN_RSVD_5),
211         HC_MAIN_MASKED_IRQS_SOC = (PORTS_0_3_COAL_DONE | HC_MAIN_RSVD_SOC),
212
213         /* SATAHC registers */
214         HC_CFG_OFS              = 0,
215
216         HC_IRQ_CAUSE_OFS        = 0x14,
217         CRPB_DMA_DONE           = (1 << 0),     /* shift by port # */
218         HC_IRQ_COAL             = (1 << 4),     /* IRQ coalescing */
219         DEV_IRQ                 = (1 << 8),     /* shift by port # */
220
221         /* Shadow block registers */
222         SHD_BLK_OFS             = 0x100,
223         SHD_CTL_AST_OFS         = 0x20,         /* ofs from SHD_BLK_OFS */
224
225         /* SATA registers */
226         SATA_STATUS_OFS         = 0x300,  /* ctrl, err regs follow status */
227         SATA_ACTIVE_OFS         = 0x350,
228         SATA_FIS_IRQ_CAUSE_OFS  = 0x364,
229
230         LTMODE_OFS              = 0x30c,
231         LTMODE_BIT8             = (1 << 8),     /* unknown, but necessary */
232
233         PHY_MODE3               = 0x310,
234         PHY_MODE4               = 0x314,
235         PHY_MODE2               = 0x330,
236         SATA_IFCTL_OFS          = 0x344,
237         SATA_IFSTAT_OFS         = 0x34c,
238         VENDOR_UNIQUE_FIS_OFS   = 0x35c,
239
240         FIS_CFG_OFS             = 0x360,
241         FIS_CFG_SINGLE_SYNC     = (1 << 16),    /* SYNC on DMA activation */
242
243         MV5_PHY_MODE            = 0x74,
244         MV5_LT_MODE             = 0x30,
245         MV5_PHY_CTL             = 0x0C,
246         SATA_INTERFACE_CFG      = 0x050,
247
248         MV_M2_PREAMP_MASK       = 0x7e0,
249
250         /* Port registers */
251         EDMA_CFG_OFS            = 0,
252         EDMA_CFG_Q_DEPTH        = 0x1f,         /* max device queue depth */
253         EDMA_CFG_NCQ            = (1 << 5),     /* for R/W FPDMA queued */
254         EDMA_CFG_NCQ_GO_ON_ERR  = (1 << 14),    /* continue on error */
255         EDMA_CFG_RD_BRST_EXT    = (1 << 11),    /* read burst 512B */
256         EDMA_CFG_WR_BUFF_LEN    = (1 << 13),    /* write buffer 512B */
257         EDMA_CFG_EDMA_FBS       = (1 << 16),    /* EDMA FIS-Based Switching */
258         EDMA_CFG_FBS            = (1 << 26),    /* FIS-Based Switching */
259
260         EDMA_ERR_IRQ_CAUSE_OFS  = 0x8,
261         EDMA_ERR_IRQ_MASK_OFS   = 0xc,
262         EDMA_ERR_D_PAR          = (1 << 0),     /* UDMA data parity err */
263         EDMA_ERR_PRD_PAR        = (1 << 1),     /* UDMA PRD parity err */
264         EDMA_ERR_DEV            = (1 << 2),     /* device error */
265         EDMA_ERR_DEV_DCON       = (1 << 3),     /* device disconnect */
266         EDMA_ERR_DEV_CON        = (1 << 4),     /* device connected */
267         EDMA_ERR_SERR           = (1 << 5),     /* SError bits [WBDST] raised */
268         EDMA_ERR_SELF_DIS       = (1 << 7),     /* Gen II/IIE self-disable */
269         EDMA_ERR_SELF_DIS_5     = (1 << 8),     /* Gen I self-disable */
270         EDMA_ERR_BIST_ASYNC     = (1 << 8),     /* BIST FIS or Async Notify */
271         EDMA_ERR_TRANS_IRQ_7    = (1 << 8),     /* Gen IIE transprt layer irq */
272         EDMA_ERR_CRQB_PAR       = (1 << 9),     /* CRQB parity error */
273         EDMA_ERR_CRPB_PAR       = (1 << 10),    /* CRPB parity error */
274         EDMA_ERR_INTRL_PAR      = (1 << 11),    /* internal parity error */
275         EDMA_ERR_IORDY          = (1 << 12),    /* IORdy timeout */
276
277         EDMA_ERR_LNK_CTRL_RX    = (0xf << 13),  /* link ctrl rx error */
278         EDMA_ERR_LNK_CTRL_RX_0  = (1 << 13),    /* transient: CRC err */
279         EDMA_ERR_LNK_CTRL_RX_1  = (1 << 14),    /* transient: FIFO err */
280         EDMA_ERR_LNK_CTRL_RX_2  = (1 << 15),    /* fatal: caught SYNC */
281         EDMA_ERR_LNK_CTRL_RX_3  = (1 << 16),    /* transient: FIS rx err */
282
283         EDMA_ERR_LNK_DATA_RX    = (0xf << 17),  /* link data rx error */
284
285         EDMA_ERR_LNK_CTRL_TX    = (0x1f << 21), /* link ctrl tx error */
286         EDMA_ERR_LNK_CTRL_TX_0  = (1 << 21),    /* transient: CRC err */
287         EDMA_ERR_LNK_CTRL_TX_1  = (1 << 22),    /* transient: FIFO err */
288         EDMA_ERR_LNK_CTRL_TX_2  = (1 << 23),    /* transient: caught SYNC */
289         EDMA_ERR_LNK_CTRL_TX_3  = (1 << 24),    /* transient: caught DMAT */
290         EDMA_ERR_LNK_CTRL_TX_4  = (1 << 25),    /* transient: FIS collision */
291
292         EDMA_ERR_LNK_DATA_TX    = (0x1f << 26), /* link data tx error */
293
294         EDMA_ERR_TRANS_PROTO    = (1 << 31),    /* transport protocol error */
295         EDMA_ERR_OVERRUN_5      = (1 << 5),
296         EDMA_ERR_UNDERRUN_5     = (1 << 6),
297
298         EDMA_ERR_IRQ_TRANSIENT  = EDMA_ERR_LNK_CTRL_RX_0 |
299                                   EDMA_ERR_LNK_CTRL_RX_1 |
300                                   EDMA_ERR_LNK_CTRL_RX_3 |
301                                   EDMA_ERR_LNK_CTRL_TX |
302                                  /* temporary, until we fix hotplug: */
303                                  (EDMA_ERR_DEV_DCON | EDMA_ERR_DEV_CON),
304
305         EDMA_EH_FREEZE          = EDMA_ERR_D_PAR |
306                                   EDMA_ERR_PRD_PAR |
307                                   EDMA_ERR_DEV_DCON |
308                                   EDMA_ERR_DEV_CON |
309                                   EDMA_ERR_SERR |
310                                   EDMA_ERR_SELF_DIS |
311                                   EDMA_ERR_CRQB_PAR |
312                                   EDMA_ERR_CRPB_PAR |
313                                   EDMA_ERR_INTRL_PAR |
314                                   EDMA_ERR_IORDY |
315                                   EDMA_ERR_LNK_CTRL_RX_2 |
316                                   EDMA_ERR_LNK_DATA_RX |
317                                   EDMA_ERR_LNK_DATA_TX |
318                                   EDMA_ERR_TRANS_PROTO,
319
320         EDMA_EH_FREEZE_5        = EDMA_ERR_D_PAR |
321                                   EDMA_ERR_PRD_PAR |
322                                   EDMA_ERR_DEV_DCON |
323                                   EDMA_ERR_DEV_CON |
324                                   EDMA_ERR_OVERRUN_5 |
325                                   EDMA_ERR_UNDERRUN_5 |
326                                   EDMA_ERR_SELF_DIS_5 |
327                                   EDMA_ERR_CRQB_PAR |
328                                   EDMA_ERR_CRPB_PAR |
329                                   EDMA_ERR_INTRL_PAR |
330                                   EDMA_ERR_IORDY,
331
332         EDMA_REQ_Q_BASE_HI_OFS  = 0x10,
333         EDMA_REQ_Q_IN_PTR_OFS   = 0x14,         /* also contains BASE_LO */
334
335         EDMA_REQ_Q_OUT_PTR_OFS  = 0x18,
336         EDMA_REQ_Q_PTR_SHIFT    = 5,
337
338         EDMA_RSP_Q_BASE_HI_OFS  = 0x1c,
339         EDMA_RSP_Q_IN_PTR_OFS   = 0x20,
340         EDMA_RSP_Q_OUT_PTR_OFS  = 0x24,         /* also contains BASE_LO */
341         EDMA_RSP_Q_PTR_SHIFT    = 3,
342
343         EDMA_CMD_OFS            = 0x28,         /* EDMA command register */
344         EDMA_EN                 = (1 << 0),     /* enable EDMA */
345         EDMA_DS                 = (1 << 1),     /* disable EDMA; self-negated */
346         ATA_RST                 = (1 << 2),     /* reset trans/link/phy */
347
348         EDMA_IORDY_TMOUT        = 0x34,
349         EDMA_ARB_CFG            = 0x38,
350
351         /* Host private flags (hp_flags) */
352         MV_HP_FLAG_MSI          = (1 << 0),
353         MV_HP_ERRATA_50XXB0     = (1 << 1),
354         MV_HP_ERRATA_50XXB2     = (1 << 2),
355         MV_HP_ERRATA_60X1B2     = (1 << 3),
356         MV_HP_ERRATA_60X1C0     = (1 << 4),
357         MV_HP_ERRATA_XX42A0     = (1 << 5),
358         MV_HP_GEN_I             = (1 << 6),     /* Generation I: 50xx */
359         MV_HP_GEN_II            = (1 << 7),     /* Generation II: 60xx */
360         MV_HP_GEN_IIE           = (1 << 8),     /* Generation IIE: 6042/7042 */
361         MV_HP_PCIE              = (1 << 9),     /* PCIe bus/regs: 7042 */
362
363         /* Port private flags (pp_flags) */
364         MV_PP_FLAG_EDMA_EN      = (1 << 0),     /* is EDMA engine enabled? */
365         MV_PP_FLAG_NCQ_EN       = (1 << 1),     /* is EDMA set up for NCQ? */
366 };
367
368 #define IS_GEN_I(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_I)
369 #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II)
370 #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE)
371 #define HAS_PCI(host) (!((host)->ports[0]->flags & MV_FLAG_SOC))
372
373 enum {
374         /* DMA boundary 0xffff is required by the s/g splitting
375          * we need on /length/ in mv_fill-sg().
376          */
377         MV_DMA_BOUNDARY         = 0xffffU,
378
379         /* mask of register bits containing lower 32 bits
380          * of EDMA request queue DMA address
381          */
382         EDMA_REQ_Q_BASE_LO_MASK = 0xfffffc00U,
383
384         /* ditto, for response queue */
385         EDMA_RSP_Q_BASE_LO_MASK = 0xffffff00U,
386 };
387
388 enum chip_type {
389         chip_504x,
390         chip_508x,
391         chip_5080,
392         chip_604x,
393         chip_608x,
394         chip_6042,
395         chip_7042,
396         chip_soc,
397 };
398
399 /* Command ReQuest Block: 32B */
400 struct mv_crqb {
401         __le32                  sg_addr;
402         __le32                  sg_addr_hi;
403         __le16                  ctrl_flags;
404         __le16                  ata_cmd[11];
405 };
406
407 struct mv_crqb_iie {
408         __le32                  addr;
409         __le32                  addr_hi;
410         __le32                  flags;
411         __le32                  len;
412         __le32                  ata_cmd[4];
413 };
414
415 /* Command ResPonse Block: 8B */
416 struct mv_crpb {
417         __le16                  id;
418         __le16                  flags;
419         __le32                  tmstmp;
420 };
421
422 /* EDMA Physical Region Descriptor (ePRD); A.K.A. SG */
423 struct mv_sg {
424         __le32                  addr;
425         __le32                  flags_size;
426         __le32                  addr_hi;
427         __le32                  reserved;
428 };
429
430 struct mv_port_priv {
431         struct mv_crqb          *crqb;
432         dma_addr_t              crqb_dma;
433         struct mv_crpb          *crpb;
434         dma_addr_t              crpb_dma;
435         struct mv_sg            *sg_tbl[MV_MAX_Q_DEPTH];
436         dma_addr_t              sg_tbl_dma[MV_MAX_Q_DEPTH];
437
438         unsigned int            req_idx;
439         unsigned int            resp_idx;
440
441         u32                     pp_flags;
442 };
443
444 struct mv_port_signal {
445         u32                     amps;
446         u32                     pre;
447 };
448
449 struct mv_host_priv {
450         u32                     hp_flags;
451         struct mv_port_signal   signal[8];
452         const struct mv_hw_ops  *ops;
453         int                     n_ports;
454         void __iomem            *base;
455         void __iomem            *main_cause_reg_addr;
456         void __iomem            *main_mask_reg_addr;
457         u32                     irq_cause_ofs;
458         u32                     irq_mask_ofs;
459         u32                     unmask_all_irqs;
460         /*
461          * These consistent DMA memory pools give us guaranteed
462          * alignment for hardware-accessed data structures,
463          * and less memory waste in accomplishing the alignment.
464          */
465         struct dma_pool         *crqb_pool;
466         struct dma_pool         *crpb_pool;
467         struct dma_pool         *sg_tbl_pool;
468 };
469
470 struct mv_hw_ops {
471         void (*phy_errata)(struct mv_host_priv *hpriv, void __iomem *mmio,
472                            unsigned int port);
473         void (*enable_leds)(struct mv_host_priv *hpriv, void __iomem *mmio);
474         void (*read_preamp)(struct mv_host_priv *hpriv, int idx,
475                            void __iomem *mmio);
476         int (*reset_hc)(struct mv_host_priv *hpriv, void __iomem *mmio,
477                         unsigned int n_hc);
478         void (*reset_flash)(struct mv_host_priv *hpriv, void __iomem *mmio);
479         void (*reset_bus)(struct ata_host *host, void __iomem *mmio);
480 };
481
482 static int mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val);
483 static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
484 static int mv5_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val);
485 static int mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
486 static int mv_port_start(struct ata_port *ap);
487 static void mv_port_stop(struct ata_port *ap);
488 static void mv_qc_prep(struct ata_queued_cmd *qc);
489 static void mv_qc_prep_iie(struct ata_queued_cmd *qc);
490 static unsigned int mv_qc_issue(struct ata_queued_cmd *qc);
491 static int mv_hardreset(struct ata_link *link, unsigned int *class,
492                         unsigned long deadline);
493 static void mv_eh_freeze(struct ata_port *ap);
494 static void mv_eh_thaw(struct ata_port *ap);
495 static void mv6_dev_config(struct ata_device *dev);
496
497 static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
498                            unsigned int port);
499 static void mv5_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio);
500 static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx,
501                            void __iomem *mmio);
502 static int mv5_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
503                         unsigned int n_hc);
504 static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio);
505 static void mv5_reset_bus(struct ata_host *host, void __iomem *mmio);
506
507 static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
508                            unsigned int port);
509 static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio);
510 static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
511                            void __iomem *mmio);
512 static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
513                         unsigned int n_hc);
514 static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio);
515 static void mv_soc_enable_leds(struct mv_host_priv *hpriv,
516                                       void __iomem *mmio);
517 static void mv_soc_read_preamp(struct mv_host_priv *hpriv, int idx,
518                                       void __iomem *mmio);
519 static int mv_soc_reset_hc(struct mv_host_priv *hpriv,
520                                   void __iomem *mmio, unsigned int n_hc);
521 static void mv_soc_reset_flash(struct mv_host_priv *hpriv,
522                                       void __iomem *mmio);
523 static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio);
524 static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio);
525 static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
526                              unsigned int port_no);
527 static int mv_stop_edma(struct ata_port *ap);
528 static int mv_stop_edma_engine(void __iomem *port_mmio);
529 static void mv_edma_cfg(struct ata_port *ap, int want_ncq);
530
531 static void mv_pmp_select(struct ata_port *ap, int pmp);
532 static int mv_pmp_hardreset(struct ata_link *link, unsigned int *class,
533                                 unsigned long deadline);
534 static int  mv_softreset(struct ata_link *link, unsigned int *class,
535                                 unsigned long deadline);
536
537 /* .sg_tablesize is (MV_MAX_SG_CT / 2) in the structures below
538  * because we have to allow room for worst case splitting of
539  * PRDs for 64K boundaries in mv_fill_sg().
540  */
541 static struct scsi_host_template mv5_sht = {
542         ATA_BASE_SHT(DRV_NAME),
543         .sg_tablesize           = MV_MAX_SG_CT / 2,
544         .dma_boundary           = MV_DMA_BOUNDARY,
545 };
546
547 static struct scsi_host_template mv6_sht = {
548         ATA_NCQ_SHT(DRV_NAME),
549         .can_queue              = MV_MAX_Q_DEPTH - 1,
550         .sg_tablesize           = MV_MAX_SG_CT / 2,
551         .dma_boundary           = MV_DMA_BOUNDARY,
552 };
553
554 static struct ata_port_operations mv5_ops = {
555         .inherits               = &ata_sff_port_ops,
556
557         .qc_prep                = mv_qc_prep,
558         .qc_issue               = mv_qc_issue,
559
560         .freeze                 = mv_eh_freeze,
561         .thaw                   = mv_eh_thaw,
562         .hardreset              = mv_hardreset,
563         .error_handler          = ata_std_error_handler, /* avoid SFF EH */
564         .post_internal_cmd      = ATA_OP_NULL,
565
566         .scr_read               = mv5_scr_read,
567         .scr_write              = mv5_scr_write,
568
569         .port_start             = mv_port_start,
570         .port_stop              = mv_port_stop,
571 };
572
573 static struct ata_port_operations mv6_ops = {
574         .inherits               = &mv5_ops,
575         .qc_defer               = sata_pmp_qc_defer_cmd_switch,
576         .dev_config             = mv6_dev_config,
577         .scr_read               = mv_scr_read,
578         .scr_write              = mv_scr_write,
579
580         .pmp_hardreset          = mv_pmp_hardreset,
581         .pmp_softreset          = mv_softreset,
582         .softreset              = mv_softreset,
583         .error_handler          = sata_pmp_error_handler,
584 };
585
586 static struct ata_port_operations mv_iie_ops = {
587         .inherits               = &mv6_ops,
588         .qc_defer               = ata_std_qc_defer, /* FIS-based switching */
589         .dev_config             = ATA_OP_NULL,
590         .qc_prep                = mv_qc_prep_iie,
591 };
592
593 static const struct ata_port_info mv_port_info[] = {
594         {  /* chip_504x */
595                 .flags          = MV_COMMON_FLAGS,
596                 .pio_mask       = 0x1f, /* pio0-4 */
597                 .udma_mask      = ATA_UDMA6,
598                 .port_ops       = &mv5_ops,
599         },
600         {  /* chip_508x */
601                 .flags          = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC,
602                 .pio_mask       = 0x1f, /* pio0-4 */
603                 .udma_mask      = ATA_UDMA6,
604                 .port_ops       = &mv5_ops,
605         },
606         {  /* chip_5080 */
607                 .flags          = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC,
608                 .pio_mask       = 0x1f, /* pio0-4 */
609                 .udma_mask      = ATA_UDMA6,
610                 .port_ops       = &mv5_ops,
611         },
612         {  /* chip_604x */
613                 .flags          = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
614                                   ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
615                                   ATA_FLAG_NCQ,
616                 .pio_mask       = 0x1f, /* pio0-4 */
617                 .udma_mask      = ATA_UDMA6,
618                 .port_ops       = &mv6_ops,
619         },
620         {  /* chip_608x */
621                 .flags          = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
622                                   ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
623                                   ATA_FLAG_NCQ | MV_FLAG_DUAL_HC,
624                 .pio_mask       = 0x1f, /* pio0-4 */
625                 .udma_mask      = ATA_UDMA6,
626                 .port_ops       = &mv6_ops,
627         },
628         {  /* chip_6042 */
629                 .flags          = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
630                                   ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
631                                   ATA_FLAG_NCQ,
632                 .pio_mask       = 0x1f, /* pio0-4 */
633                 .udma_mask      = ATA_UDMA6,
634                 .port_ops       = &mv_iie_ops,
635         },
636         {  /* chip_7042 */
637                 .flags          = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
638                                   ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
639                                   ATA_FLAG_NCQ,
640                 .pio_mask       = 0x1f, /* pio0-4 */
641                 .udma_mask      = ATA_UDMA6,
642                 .port_ops       = &mv_iie_ops,
643         },
644         {  /* chip_soc */
645                 .flags          = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
646                                   ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA |
647                                   ATA_FLAG_NCQ | MV_FLAG_SOC,
648                 .pio_mask       = 0x1f, /* pio0-4 */
649                 .udma_mask      = ATA_UDMA6,
650                 .port_ops       = &mv_iie_ops,
651         },
652 };
653
654 static const struct pci_device_id mv_pci_tbl[] = {
655         { PCI_VDEVICE(MARVELL, 0x5040), chip_504x },
656         { PCI_VDEVICE(MARVELL, 0x5041), chip_504x },
657         { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 },
658         { PCI_VDEVICE(MARVELL, 0x5081), chip_508x },
659         /* RocketRAID 1740/174x have different identifiers */
660         { PCI_VDEVICE(TTI, 0x1740), chip_508x },
661         { PCI_VDEVICE(TTI, 0x1742), chip_508x },
662
663         { PCI_VDEVICE(MARVELL, 0x6040), chip_604x },
664         { PCI_VDEVICE(MARVELL, 0x6041), chip_604x },
665         { PCI_VDEVICE(MARVELL, 0x6042), chip_6042 },
666         { PCI_VDEVICE(MARVELL, 0x6080), chip_608x },
667         { PCI_VDEVICE(MARVELL, 0x6081), chip_608x },
668
669         { PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x },
670
671         /* Adaptec 1430SA */
672         { PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 },
673
674         /* Marvell 7042 support */
675         { PCI_VDEVICE(MARVELL, 0x7042), chip_7042 },
676
677         /* Highpoint RocketRAID PCIe series */
678         { PCI_VDEVICE(TTI, 0x2300), chip_7042 },
679         { PCI_VDEVICE(TTI, 0x2310), chip_7042 },
680
681         { }                     /* terminate list */
682 };
683
684 static const struct mv_hw_ops mv5xxx_ops = {
685         .phy_errata             = mv5_phy_errata,
686         .enable_leds            = mv5_enable_leds,
687         .read_preamp            = mv5_read_preamp,
688         .reset_hc               = mv5_reset_hc,
689         .reset_flash            = mv5_reset_flash,
690         .reset_bus              = mv5_reset_bus,
691 };
692
693 static const struct mv_hw_ops mv6xxx_ops = {
694         .phy_errata             = mv6_phy_errata,
695         .enable_leds            = mv6_enable_leds,
696         .read_preamp            = mv6_read_preamp,
697         .reset_hc               = mv6_reset_hc,
698         .reset_flash            = mv6_reset_flash,
699         .reset_bus              = mv_reset_pci_bus,
700 };
701
702 static const struct mv_hw_ops mv_soc_ops = {
703         .phy_errata             = mv6_phy_errata,
704         .enable_leds            = mv_soc_enable_leds,
705         .read_preamp            = mv_soc_read_preamp,
706         .reset_hc               = mv_soc_reset_hc,
707         .reset_flash            = mv_soc_reset_flash,
708         .reset_bus              = mv_soc_reset_bus,
709 };
710
711 /*
712  * Functions
713  */
714
715 static inline void writelfl(unsigned long data, void __iomem *addr)
716 {
717         writel(data, addr);
718         (void) readl(addr);     /* flush to avoid PCI posted write */
719 }
720
721 static inline void __iomem *mv_hc_base(void __iomem *base, unsigned int hc)
722 {
723         return (base + MV_SATAHC0_REG_BASE + (hc * MV_SATAHC_REG_SZ));
724 }
725
726 static inline unsigned int mv_hc_from_port(unsigned int port)
727 {
728         return port >> MV_PORT_HC_SHIFT;
729 }
730
731 static inline unsigned int mv_hardport_from_port(unsigned int port)
732 {
733         return port & MV_PORT_MASK;
734 }
735
736 static inline void __iomem *mv_hc_base_from_port(void __iomem *base,
737                                                  unsigned int port)
738 {
739         return mv_hc_base(base, mv_hc_from_port(port));
740 }
741
742 static inline void __iomem *mv_port_base(void __iomem *base, unsigned int port)
743 {
744         return  mv_hc_base_from_port(base, port) +
745                 MV_SATAHC_ARBTR_REG_SZ +
746                 (mv_hardport_from_port(port) * MV_PORT_REG_SZ);
747 }
748
749 static void __iomem *mv5_phy_base(void __iomem *mmio, unsigned int port)
750 {
751         void __iomem *hc_mmio = mv_hc_base_from_port(mmio, port);
752         unsigned long ofs = (mv_hardport_from_port(port) + 1) * 0x100UL;
753
754         return hc_mmio + ofs;
755 }
756
757 static inline void __iomem *mv_host_base(struct ata_host *host)
758 {
759         struct mv_host_priv *hpriv = host->private_data;
760         return hpriv->base;
761 }
762
763 static inline void __iomem *mv_ap_base(struct ata_port *ap)
764 {
765         return mv_port_base(mv_host_base(ap->host), ap->port_no);
766 }
767
768 static inline int mv_get_hc_count(unsigned long port_flags)
769 {
770         return ((port_flags & MV_FLAG_DUAL_HC) ? 2 : 1);
771 }
772
773 static void mv_set_edma_ptrs(void __iomem *port_mmio,
774                              struct mv_host_priv *hpriv,
775                              struct mv_port_priv *pp)
776 {
777         u32 index;
778
779         /*
780          * initialize request queue
781          */
782         index = (pp->req_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_REQ_Q_PTR_SHIFT;
783
784         WARN_ON(pp->crqb_dma & 0x3ff);
785         writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS);
786         writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index,
787                  port_mmio + EDMA_REQ_Q_IN_PTR_OFS);
788
789         if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0)
790                 writelfl((pp->crqb_dma & 0xffffffff) | index,
791                          port_mmio + EDMA_REQ_Q_OUT_PTR_OFS);
792         else
793                 writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS);
794
795         /*
796          * initialize response queue
797          */
798         index = (pp->resp_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_RSP_Q_PTR_SHIFT;
799
800         WARN_ON(pp->crpb_dma & 0xff);
801         writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS);
802
803         if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0)
804                 writelfl((pp->crpb_dma & 0xffffffff) | index,
805                          port_mmio + EDMA_RSP_Q_IN_PTR_OFS);
806         else
807                 writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS);
808
809         writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index,
810                  port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
811 }
812
813 /**
814  *      mv_start_dma - Enable eDMA engine
815  *      @base: port base address
816  *      @pp: port private data
817  *
818  *      Verify the local cache of the eDMA state is accurate with a
819  *      WARN_ON.
820  *
821  *      LOCKING:
822  *      Inherited from caller.
823  */
824 static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio,
825                          struct mv_port_priv *pp, u8 protocol)
826 {
827         int want_ncq = (protocol == ATA_PROT_NCQ);
828
829         if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
830                 int using_ncq = ((pp->pp_flags & MV_PP_FLAG_NCQ_EN) != 0);
831                 if (want_ncq != using_ncq)
832                         mv_stop_edma(ap);
833         }
834         if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN)) {
835                 struct mv_host_priv *hpriv = ap->host->private_data;
836                 int hard_port = mv_hardport_from_port(ap->port_no);
837                 void __iomem *hc_mmio = mv_hc_base_from_port(
838                                         mv_host_base(ap->host), hard_port);
839                 u32 hc_irq_cause, ipending;
840
841                 /* clear EDMA event indicators, if any */
842                 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
843
844                 /* clear EDMA interrupt indicator, if any */
845                 hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
846                 ipending = (DEV_IRQ << hard_port) |
847                                 (CRPB_DMA_DONE << hard_port);
848                 if (hc_irq_cause & ipending) {
849                         writelfl(hc_irq_cause & ~ipending,
850                                  hc_mmio + HC_IRQ_CAUSE_OFS);
851                 }
852
853                 mv_edma_cfg(ap, want_ncq);
854
855                 /* clear FIS IRQ Cause */
856                 writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS);
857
858                 mv_set_edma_ptrs(port_mmio, hpriv, pp);
859
860                 writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS);
861                 pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
862         }
863         WARN_ON(!(EDMA_EN & readl(port_mmio + EDMA_CMD_OFS)));
864 }
865
866 /**
867  *      mv_stop_edma_engine - Disable eDMA engine
868  *      @port_mmio: io base address
869  *
870  *      LOCKING:
871  *      Inherited from caller.
872  */
873 static int mv_stop_edma_engine(void __iomem *port_mmio)
874 {
875         int i;
876
877         /* Disable eDMA.  The disable bit auto clears. */
878         writelfl(EDMA_DS, port_mmio + EDMA_CMD_OFS);
879
880         /* Wait for the chip to confirm eDMA is off. */
881         for (i = 10000; i > 0; i--) {
882                 u32 reg = readl(port_mmio + EDMA_CMD_OFS);
883                 if (!(reg & EDMA_EN))
884                         return 0;
885                 udelay(10);
886         }
887         return -EIO;
888 }
889
890 static int mv_stop_edma(struct ata_port *ap)
891 {
892         void __iomem *port_mmio = mv_ap_base(ap);
893         struct mv_port_priv *pp = ap->private_data;
894
895         if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN))
896                 return 0;
897         pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
898         if (mv_stop_edma_engine(port_mmio)) {
899                 ata_port_printk(ap, KERN_ERR, "Unable to stop eDMA\n");
900                 return -EIO;
901         }
902         return 0;
903 }
904
905 #ifdef ATA_DEBUG
906 static void mv_dump_mem(void __iomem *start, unsigned bytes)
907 {
908         int b, w;
909         for (b = 0; b < bytes; ) {
910                 DPRINTK("%p: ", start + b);
911                 for (w = 0; b < bytes && w < 4; w++) {
912                         printk("%08x ", readl(start + b));
913                         b += sizeof(u32);
914                 }
915                 printk("\n");
916         }
917 }
918 #endif
919
920 static void mv_dump_pci_cfg(struct pci_dev *pdev, unsigned bytes)
921 {
922 #ifdef ATA_DEBUG
923         int b, w;
924         u32 dw;
925         for (b = 0; b < bytes; ) {
926                 DPRINTK("%02x: ", b);
927                 for (w = 0; b < bytes && w < 4; w++) {
928                         (void) pci_read_config_dword(pdev, b, &dw);
929                         printk("%08x ", dw);
930                         b += sizeof(u32);
931                 }
932                 printk("\n");
933         }
934 #endif
935 }
936 static void mv_dump_all_regs(void __iomem *mmio_base, int port,
937                              struct pci_dev *pdev)
938 {
939 #ifdef ATA_DEBUG
940         void __iomem *hc_base = mv_hc_base(mmio_base,
941                                            port >> MV_PORT_HC_SHIFT);
942         void __iomem *port_base;
943         int start_port, num_ports, p, start_hc, num_hcs, hc;
944
945         if (0 > port) {
946                 start_hc = start_port = 0;
947                 num_ports = 8;          /* shld be benign for 4 port devs */
948                 num_hcs = 2;
949         } else {
950                 start_hc = port >> MV_PORT_HC_SHIFT;
951                 start_port = port;
952                 num_ports = num_hcs = 1;
953         }
954         DPRINTK("All registers for port(s) %u-%u:\n", start_port,
955                 num_ports > 1 ? num_ports - 1 : start_port);
956
957         if (NULL != pdev) {
958                 DPRINTK("PCI config space regs:\n");
959                 mv_dump_pci_cfg(pdev, 0x68);
960         }
961         DPRINTK("PCI regs:\n");
962         mv_dump_mem(mmio_base+0xc00, 0x3c);
963         mv_dump_mem(mmio_base+0xd00, 0x34);
964         mv_dump_mem(mmio_base+0xf00, 0x4);
965         mv_dump_mem(mmio_base+0x1d00, 0x6c);
966         for (hc = start_hc; hc < start_hc + num_hcs; hc++) {
967                 hc_base = mv_hc_base(mmio_base, hc);
968                 DPRINTK("HC regs (HC %i):\n", hc);
969                 mv_dump_mem(hc_base, 0x1c);
970         }
971         for (p = start_port; p < start_port + num_ports; p++) {
972                 port_base = mv_port_base(mmio_base, p);
973                 DPRINTK("EDMA regs (port %i):\n", p);
974                 mv_dump_mem(port_base, 0x54);
975                 DPRINTK("SATA regs (port %i):\n", p);
976                 mv_dump_mem(port_base+0x300, 0x60);
977         }
978 #endif
979 }
980
981 static unsigned int mv_scr_offset(unsigned int sc_reg_in)
982 {
983         unsigned int ofs;
984
985         switch (sc_reg_in) {
986         case SCR_STATUS:
987         case SCR_CONTROL:
988         case SCR_ERROR:
989                 ofs = SATA_STATUS_OFS + (sc_reg_in * sizeof(u32));
990                 break;
991         case SCR_ACTIVE:
992                 ofs = SATA_ACTIVE_OFS;   /* active is not with the others */
993                 break;
994         default:
995                 ofs = 0xffffffffU;
996                 break;
997         }
998         return ofs;
999 }
1000
1001 static int mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val)
1002 {
1003         unsigned int ofs = mv_scr_offset(sc_reg_in);
1004
1005         if (ofs != 0xffffffffU) {
1006                 *val = readl(mv_ap_base(ap) + ofs);
1007                 return 0;
1008         } else
1009                 return -EINVAL;
1010 }
1011
1012 static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
1013 {
1014         unsigned int ofs = mv_scr_offset(sc_reg_in);
1015
1016         if (ofs != 0xffffffffU) {
1017                 writelfl(val, mv_ap_base(ap) + ofs);
1018                 return 0;
1019         } else
1020                 return -EINVAL;
1021 }
1022
1023 static void mv6_dev_config(struct ata_device *adev)
1024 {
1025         /*
1026          * Deal with Gen-II ("mv6") hardware quirks/restrictions:
1027          *
1028          * Gen-II does not support NCQ over a port multiplier
1029          *  (no FIS-based switching).
1030          *
1031          * We don't have hob_nsect when doing NCQ commands on Gen-II.
1032          * See mv_qc_prep() for more info.
1033          */
1034         if (adev->flags & ATA_DFLAG_NCQ) {
1035                 if (sata_pmp_attached(adev->link->ap))
1036                         adev->flags &= ~ATA_DFLAG_NCQ;
1037                 else if (adev->max_sectors > ATA_MAX_SECTORS)
1038                         adev->max_sectors = ATA_MAX_SECTORS;
1039         }
1040 }
1041
1042 static void mv_config_fbs(void __iomem *port_mmio, int enable_fbs)
1043 {
1044         u32 old_fcfg, new_fcfg, old_ltmode, new_ltmode;
1045         /*
1046          * Various bit settings required for operation
1047          * in FIS-based switching (fbs) mode on GenIIe:
1048          */
1049         old_fcfg   = readl(port_mmio + FIS_CFG_OFS);
1050         old_ltmode = readl(port_mmio + LTMODE_OFS);
1051         if (enable_fbs) {
1052                 new_fcfg   = old_fcfg   |  FIS_CFG_SINGLE_SYNC;
1053                 new_ltmode = old_ltmode |  LTMODE_BIT8;
1054         } else { /* disable fbs */
1055                 new_fcfg   = old_fcfg   & ~FIS_CFG_SINGLE_SYNC;
1056                 new_ltmode = old_ltmode & ~LTMODE_BIT8;
1057         }
1058         if (new_fcfg != old_fcfg)
1059                 writelfl(new_fcfg, port_mmio + FIS_CFG_OFS);
1060         if (new_ltmode != old_ltmode)
1061                 writelfl(new_ltmode, port_mmio + LTMODE_OFS);
1062 }
1063
1064 static void mv_edma_cfg(struct ata_port *ap, int want_ncq)
1065 {
1066         u32 cfg;
1067         struct mv_port_priv *pp    = ap->private_data;
1068         struct mv_host_priv *hpriv = ap->host->private_data;
1069         void __iomem *port_mmio    = mv_ap_base(ap);
1070
1071         /* set up non-NCQ EDMA configuration */
1072         cfg = EDMA_CFG_Q_DEPTH;         /* always 0x1f for *all* chips */
1073
1074         if (IS_GEN_I(hpriv))
1075                 cfg |= (1 << 8);        /* enab config burst size mask */
1076
1077         else if (IS_GEN_II(hpriv))
1078                 cfg |= EDMA_CFG_RD_BRST_EXT | EDMA_CFG_WR_BUFF_LEN;
1079
1080         else if (IS_GEN_IIE(hpriv)) {
1081                 cfg |= (1 << 23);       /* do not mask PM field in rx'd FIS */
1082                 cfg |= (1 << 22);       /* enab 4-entry host queue cache */
1083                 cfg |= (1 << 18);       /* enab early completion */
1084                 cfg |= (1 << 17);       /* enab cut-through (dis stor&forwrd) */
1085
1086                 if (want_ncq && sata_pmp_attached(ap)) {
1087                         cfg |= EDMA_CFG_EDMA_FBS; /* FIS-based switching */
1088                         mv_config_fbs(port_mmio, 1);
1089                 } else {
1090                         mv_config_fbs(port_mmio, 0);
1091                 }
1092         }
1093
1094         if (want_ncq) {
1095                 cfg |= EDMA_CFG_NCQ;
1096                 pp->pp_flags |=  MV_PP_FLAG_NCQ_EN;
1097         } else
1098                 pp->pp_flags &= ~MV_PP_FLAG_NCQ_EN;
1099
1100         writelfl(cfg, port_mmio + EDMA_CFG_OFS);
1101 }
1102
1103 static void mv_port_free_dma_mem(struct ata_port *ap)
1104 {
1105         struct mv_host_priv *hpriv = ap->host->private_data;
1106         struct mv_port_priv *pp = ap->private_data;
1107         int tag;
1108
1109         if (pp->crqb) {
1110                 dma_pool_free(hpriv->crqb_pool, pp->crqb, pp->crqb_dma);
1111                 pp->crqb = NULL;
1112         }
1113         if (pp->crpb) {
1114                 dma_pool_free(hpriv->crpb_pool, pp->crpb, pp->crpb_dma);
1115                 pp->crpb = NULL;
1116         }
1117         /*
1118          * For GEN_I, there's no NCQ, so we have only a single sg_tbl.
1119          * For later hardware, we have one unique sg_tbl per NCQ tag.
1120          */
1121         for (tag = 0; tag < MV_MAX_Q_DEPTH; ++tag) {
1122                 if (pp->sg_tbl[tag]) {
1123                         if (tag == 0 || !IS_GEN_I(hpriv))
1124                                 dma_pool_free(hpriv->sg_tbl_pool,
1125                                               pp->sg_tbl[tag],
1126                                               pp->sg_tbl_dma[tag]);
1127                         pp->sg_tbl[tag] = NULL;
1128                 }
1129         }
1130 }
1131
1132 /**
1133  *      mv_port_start - Port specific init/start routine.
1134  *      @ap: ATA channel to manipulate
1135  *
1136  *      Allocate and point to DMA memory, init port private memory,
1137  *      zero indices.
1138  *
1139  *      LOCKING:
1140  *      Inherited from caller.
1141  */
1142 static int mv_port_start(struct ata_port *ap)
1143 {
1144         struct device *dev = ap->host->dev;
1145         struct mv_host_priv *hpriv = ap->host->private_data;
1146         struct mv_port_priv *pp;
1147         int tag;
1148
1149         pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1150         if (!pp)
1151                 return -ENOMEM;
1152         ap->private_data = pp;
1153
1154         pp->crqb = dma_pool_alloc(hpriv->crqb_pool, GFP_KERNEL, &pp->crqb_dma);
1155         if (!pp->crqb)
1156                 return -ENOMEM;
1157         memset(pp->crqb, 0, MV_CRQB_Q_SZ);
1158
1159         pp->crpb = dma_pool_alloc(hpriv->crpb_pool, GFP_KERNEL, &pp->crpb_dma);
1160         if (!pp->crpb)
1161                 goto out_port_free_dma_mem;
1162         memset(pp->crpb, 0, MV_CRPB_Q_SZ);
1163
1164         /*
1165          * For GEN_I, there's no NCQ, so we only allocate a single sg_tbl.
1166          * For later hardware, we need one unique sg_tbl per NCQ tag.
1167          */
1168         for (tag = 0; tag < MV_MAX_Q_DEPTH; ++tag) {
1169                 if (tag == 0 || !IS_GEN_I(hpriv)) {
1170                         pp->sg_tbl[tag] = dma_pool_alloc(hpriv->sg_tbl_pool,
1171                                               GFP_KERNEL, &pp->sg_tbl_dma[tag]);
1172                         if (!pp->sg_tbl[tag])
1173                                 goto out_port_free_dma_mem;
1174                 } else {
1175                         pp->sg_tbl[tag]     = pp->sg_tbl[0];
1176                         pp->sg_tbl_dma[tag] = pp->sg_tbl_dma[0];
1177                 }
1178         }
1179         return 0;
1180
1181 out_port_free_dma_mem:
1182         mv_port_free_dma_mem(ap);
1183         return -ENOMEM;
1184 }
1185
1186 /**
1187  *      mv_port_stop - Port specific cleanup/stop routine.
1188  *      @ap: ATA channel to manipulate
1189  *
1190  *      Stop DMA, cleanup port memory.
1191  *
1192  *      LOCKING:
1193  *      This routine uses the host lock to protect the DMA stop.
1194  */
1195 static void mv_port_stop(struct ata_port *ap)
1196 {
1197         mv_stop_edma(ap);
1198         mv_port_free_dma_mem(ap);
1199 }
1200
1201 /**
1202  *      mv_fill_sg - Fill out the Marvell ePRD (scatter gather) entries
1203  *      @qc: queued command whose SG list to source from
1204  *
1205  *      Populate the SG list and mark the last entry.
1206  *
1207  *      LOCKING:
1208  *      Inherited from caller.
1209  */
1210 static void mv_fill_sg(struct ata_queued_cmd *qc)
1211 {
1212         struct mv_port_priv *pp = qc->ap->private_data;
1213         struct scatterlist *sg;
1214         struct mv_sg *mv_sg, *last_sg = NULL;
1215         unsigned int si;
1216
1217         mv_sg = pp->sg_tbl[qc->tag];
1218         for_each_sg(qc->sg, sg, qc->n_elem, si) {
1219                 dma_addr_t addr = sg_dma_address(sg);
1220                 u32 sg_len = sg_dma_len(sg);
1221
1222                 while (sg_len) {
1223                         u32 offset = addr & 0xffff;
1224                         u32 len = sg_len;
1225
1226                         if ((offset + sg_len > 0x10000))
1227                                 len = 0x10000 - offset;
1228
1229                         mv_sg->addr = cpu_to_le32(addr & 0xffffffff);
1230                         mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16);
1231                         mv_sg->flags_size = cpu_to_le32(len & 0xffff);
1232
1233                         sg_len -= len;
1234                         addr += len;
1235
1236                         last_sg = mv_sg;
1237                         mv_sg++;
1238                 }
1239         }
1240
1241         if (likely(last_sg))
1242                 last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);
1243 }
1244
1245 static void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last)
1246 {
1247         u16 tmp = data | (addr << CRQB_CMD_ADDR_SHIFT) | CRQB_CMD_CS |
1248                 (last ? CRQB_CMD_LAST : 0);
1249         *cmdw = cpu_to_le16(tmp);
1250 }
1251
1252 /**
1253  *      mv_qc_prep - Host specific command preparation.
1254  *      @qc: queued command to prepare
1255  *
1256  *      This routine simply redirects to the general purpose routine
1257  *      if command is not DMA.  Else, it handles prep of the CRQB
1258  *      (command request block), does some sanity checking, and calls
1259  *      the SG load routine.
1260  *
1261  *      LOCKING:
1262  *      Inherited from caller.
1263  */
1264 static void mv_qc_prep(struct ata_queued_cmd *qc)
1265 {
1266         struct ata_port *ap = qc->ap;
1267         struct mv_port_priv *pp = ap->private_data;
1268         __le16 *cw;
1269         struct ata_taskfile *tf;
1270         u16 flags = 0;
1271         unsigned in_index;
1272
1273         if ((qc->tf.protocol != ATA_PROT_DMA) &&
1274             (qc->tf.protocol != ATA_PROT_NCQ))
1275                 return;
1276
1277         /* Fill in command request block
1278          */
1279         if (!(qc->tf.flags & ATA_TFLAG_WRITE))
1280                 flags |= CRQB_FLAG_READ;
1281         WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
1282         flags |= qc->tag << CRQB_TAG_SHIFT;
1283         flags |= (qc->dev->link->pmp & 0xf) << CRQB_PMP_SHIFT;
1284
1285         /* get current queue index from software */
1286         in_index = pp->req_idx & MV_MAX_Q_DEPTH_MASK;
1287
1288         pp->crqb[in_index].sg_addr =
1289                 cpu_to_le32(pp->sg_tbl_dma[qc->tag] & 0xffffffff);
1290         pp->crqb[in_index].sg_addr_hi =
1291                 cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16);
1292         pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags);
1293
1294         cw = &pp->crqb[in_index].ata_cmd[0];
1295         tf = &qc->tf;
1296
1297         /* Sadly, the CRQB cannot accomodate all registers--there are
1298          * only 11 bytes...so we must pick and choose required
1299          * registers based on the command.  So, we drop feature and
1300          * hob_feature for [RW] DMA commands, but they are needed for
1301          * NCQ.  NCQ will drop hob_nsect.
1302          */
1303         switch (tf->command) {
1304         case ATA_CMD_READ:
1305         case ATA_CMD_READ_EXT:
1306         case ATA_CMD_WRITE:
1307         case ATA_CMD_WRITE_EXT:
1308         case ATA_CMD_WRITE_FUA_EXT:
1309                 mv_crqb_pack_cmd(cw++, tf->hob_nsect, ATA_REG_NSECT, 0);
1310                 break;
1311         case ATA_CMD_FPDMA_READ:
1312         case ATA_CMD_FPDMA_WRITE:
1313                 mv_crqb_pack_cmd(cw++, tf->hob_feature, ATA_REG_FEATURE, 0);
1314                 mv_crqb_pack_cmd(cw++, tf->feature, ATA_REG_FEATURE, 0);
1315                 break;
1316         default:
1317                 /* The only other commands EDMA supports in non-queued and
1318                  * non-NCQ mode are: [RW] STREAM DMA and W DMA FUA EXT, none
1319                  * of which are defined/used by Linux.  If we get here, this
1320                  * driver needs work.
1321                  *
1322                  * FIXME: modify libata to give qc_prep a return value and
1323                  * return error here.
1324                  */
1325                 BUG_ON(tf->command);
1326                 break;
1327         }
1328         mv_crqb_pack_cmd(cw++, tf->nsect, ATA_REG_NSECT, 0);
1329         mv_crqb_pack_cmd(cw++, tf->hob_lbal, ATA_REG_LBAL, 0);
1330         mv_crqb_pack_cmd(cw++, tf->lbal, ATA_REG_LBAL, 0);
1331         mv_crqb_pack_cmd(cw++, tf->hob_lbam, ATA_REG_LBAM, 0);
1332         mv_crqb_pack_cmd(cw++, tf->lbam, ATA_REG_LBAM, 0);
1333         mv_crqb_pack_cmd(cw++, tf->hob_lbah, ATA_REG_LBAH, 0);
1334         mv_crqb_pack_cmd(cw++, tf->lbah, ATA_REG_LBAH, 0);
1335         mv_crqb_pack_cmd(cw++, tf->device, ATA_REG_DEVICE, 0);
1336         mv_crqb_pack_cmd(cw++, tf->command, ATA_REG_CMD, 1);    /* last */
1337
1338         if (!(qc->flags & ATA_QCFLAG_DMAMAP))
1339                 return;
1340         mv_fill_sg(qc);
1341 }
1342
1343 /**
1344  *      mv_qc_prep_iie - Host specific command preparation.
1345  *      @qc: queued command to prepare
1346  *
1347  *      This routine simply redirects to the general purpose routine
1348  *      if command is not DMA.  Else, it handles prep of the CRQB
1349  *      (command request block), does some sanity checking, and calls
1350  *      the SG load routine.
1351  *
1352  *      LOCKING:
1353  *      Inherited from caller.
1354  */
1355 static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
1356 {
1357         struct ata_port *ap = qc->ap;
1358         struct mv_port_priv *pp = ap->private_data;
1359         struct mv_crqb_iie *crqb;
1360         struct ata_taskfile *tf;
1361         unsigned in_index;
1362         u32 flags = 0;
1363
1364         if ((qc->tf.protocol != ATA_PROT_DMA) &&
1365             (qc->tf.protocol != ATA_PROT_NCQ))
1366                 return;
1367
1368         /* Fill in Gen IIE command request block */
1369         if (!(qc->tf.flags & ATA_TFLAG_WRITE))
1370                 flags |= CRQB_FLAG_READ;
1371
1372         WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
1373         flags |= qc->tag << CRQB_TAG_SHIFT;
1374         flags |= qc->tag << CRQB_HOSTQ_SHIFT;
1375         flags |= (qc->dev->link->pmp & 0xf) << CRQB_PMP_SHIFT;
1376
1377         /* get current queue index from software */
1378         in_index = pp->req_idx & MV_MAX_Q_DEPTH_MASK;
1379
1380         crqb = (struct mv_crqb_iie *) &pp->crqb[in_index];
1381         crqb->addr = cpu_to_le32(pp->sg_tbl_dma[qc->tag] & 0xffffffff);
1382         crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma[qc->tag] >> 16) >> 16);
1383         crqb->flags = cpu_to_le32(flags);
1384
1385         tf = &qc->tf;
1386         crqb->ata_cmd[0] = cpu_to_le32(
1387                         (tf->command << 16) |
1388                         (tf->feature << 24)
1389                 );
1390         crqb->ata_cmd[1] = cpu_to_le32(
1391                         (tf->lbal << 0) |
1392                         (tf->lbam << 8) |
1393                         (tf->lbah << 16) |
1394                         (tf->device << 24)
1395                 );
1396         crqb->ata_cmd[2] = cpu_to_le32(
1397                         (tf->hob_lbal << 0) |
1398                         (tf->hob_lbam << 8) |
1399                         (tf->hob_lbah << 16) |
1400                         (tf->hob_feature << 24)
1401                 );
1402         crqb->ata_cmd[3] = cpu_to_le32(
1403                         (tf->nsect << 0) |
1404                         (tf->hob_nsect << 8)
1405                 );
1406
1407         if (!(qc->flags & ATA_QCFLAG_DMAMAP))
1408                 return;
1409         mv_fill_sg(qc);
1410 }
1411
1412 /**
1413  *      mv_qc_issue - Initiate a command to the host
1414  *      @qc: queued command to start
1415  *
1416  *      This routine simply redirects to the general purpose routine
1417  *      if command is not DMA.  Else, it sanity checks our local
1418  *      caches of the request producer/consumer indices then enables
1419  *      DMA and bumps the request producer index.
1420  *
1421  *      LOCKING:
1422  *      Inherited from caller.
1423  */
1424 static unsigned int mv_qc_issue(struct ata_queued_cmd *qc)
1425 {
1426         struct ata_port *ap = qc->ap;
1427         void __iomem *port_mmio = mv_ap_base(ap);
1428         struct mv_port_priv *pp = ap->private_data;
1429         u32 in_index;
1430
1431         if ((qc->tf.protocol != ATA_PROT_DMA) &&
1432             (qc->tf.protocol != ATA_PROT_NCQ)) {
1433                 /*
1434                  * We're about to send a non-EDMA capable command to the
1435                  * port.  Turn off EDMA so there won't be problems accessing
1436                  * shadow block, etc registers.
1437                  */
1438                 mv_stop_edma(ap);
1439                 mv_pmp_select(ap, qc->dev->link->pmp);
1440                 return ata_sff_qc_issue(qc);
1441         }
1442
1443         mv_start_dma(ap, port_mmio, pp, qc->tf.protocol);
1444
1445         pp->req_idx++;
1446
1447         in_index = (pp->req_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_REQ_Q_PTR_SHIFT;
1448
1449         /* and write the request in pointer to kick the EDMA to life */
1450         writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index,
1451                  port_mmio + EDMA_REQ_Q_IN_PTR_OFS);
1452
1453         return 0;
1454 }
1455
1456 /**
1457  *      mv_err_intr - Handle error interrupts on the port
1458  *      @ap: ATA channel to manipulate
1459  *      @reset_allowed: bool: 0 == don't trigger from reset here
1460  *
1461  *      In most cases, just clear the interrupt and move on.  However,
1462  *      some cases require an eDMA reset, which also performs a COMRESET.
1463  *      The SERR case requires a clear of pending errors in the SATA
1464  *      SERROR register.  Finally, if the port disabled DMA,
1465  *      update our cached copy to match.
1466  *
1467  *      LOCKING:
1468  *      Inherited from caller.
1469  */
1470 static void mv_err_intr(struct ata_port *ap, struct ata_queued_cmd *qc)
1471 {
1472         void __iomem *port_mmio = mv_ap_base(ap);
1473         u32 edma_err_cause, eh_freeze_mask, serr = 0;
1474         struct mv_port_priv *pp = ap->private_data;
1475         struct mv_host_priv *hpriv = ap->host->private_data;
1476         unsigned int edma_enabled = (pp->pp_flags & MV_PP_FLAG_EDMA_EN);
1477         unsigned int action = 0, err_mask = 0;
1478         struct ata_eh_info *ehi = &ap->link.eh_info;
1479
1480         ata_ehi_clear_desc(ehi);
1481
1482         if (!edma_enabled) {
1483                 /* just a guess: do we need to do this? should we
1484                  * expand this, and do it in all cases?
1485                  */
1486                 sata_scr_read(&ap->link, SCR_ERROR, &serr);
1487                 sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
1488         }
1489
1490         edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1491
1492         ata_ehi_push_desc(ehi, "edma_err 0x%08x", edma_err_cause);
1493
1494         /*
1495          * all generations share these EDMA error cause bits
1496          */
1497
1498         if (edma_err_cause & EDMA_ERR_DEV)
1499                 err_mask |= AC_ERR_DEV;
1500         if (edma_err_cause & (EDMA_ERR_D_PAR | EDMA_ERR_PRD_PAR |
1501                         EDMA_ERR_CRQB_PAR | EDMA_ERR_CRPB_PAR |
1502                         EDMA_ERR_INTRL_PAR)) {
1503                 err_mask |= AC_ERR_ATA_BUS;
1504                 action |= ATA_EH_RESET;
1505                 ata_ehi_push_desc(ehi, "parity error");
1506         }
1507         if (edma_err_cause & (EDMA_ERR_DEV_DCON | EDMA_ERR_DEV_CON)) {
1508                 ata_ehi_hotplugged(ehi);
1509                 ata_ehi_push_desc(ehi, edma_err_cause & EDMA_ERR_DEV_DCON ?
1510                         "dev disconnect" : "dev connect");
1511                 action |= ATA_EH_RESET;
1512         }
1513
1514         if (IS_GEN_I(hpriv)) {
1515                 eh_freeze_mask = EDMA_EH_FREEZE_5;
1516
1517                 if (edma_err_cause & EDMA_ERR_SELF_DIS_5) {
1518                         pp = ap->private_data;
1519                         pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
1520                         ata_ehi_push_desc(ehi, "EDMA self-disable");
1521                 }
1522         } else {
1523                 eh_freeze_mask = EDMA_EH_FREEZE;
1524
1525                 if (edma_err_cause & EDMA_ERR_SELF_DIS) {
1526                         pp = ap->private_data;
1527                         pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
1528                         ata_ehi_push_desc(ehi, "EDMA self-disable");
1529                 }
1530
1531                 if (edma_err_cause & EDMA_ERR_SERR) {
1532                         sata_scr_read(&ap->link, SCR_ERROR, &serr);
1533                         sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
1534                         err_mask = AC_ERR_ATA_BUS;
1535                         action |= ATA_EH_RESET;
1536                 }
1537         }
1538
1539         /* Clear EDMA now that SERR cleanup done */
1540         writelfl(~edma_err_cause, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1541
1542         if (!err_mask) {
1543                 err_mask = AC_ERR_OTHER;
1544                 action |= ATA_EH_RESET;
1545         }
1546
1547         ehi->serror |= serr;
1548         ehi->action |= action;
1549
1550         if (qc)
1551                 qc->err_mask |= err_mask;
1552         else
1553                 ehi->err_mask |= err_mask;
1554
1555         if (edma_err_cause & eh_freeze_mask)
1556                 ata_port_freeze(ap);
1557         else
1558                 ata_port_abort(ap);
1559 }
1560
1561 static void mv_intr_pio(struct ata_port *ap)
1562 {
1563         struct ata_queued_cmd *qc;
1564         u8 ata_status;
1565
1566         /* ignore spurious intr if drive still BUSY */
1567         ata_status = readb(ap->ioaddr.status_addr);
1568         if (unlikely(ata_status & ATA_BUSY))
1569                 return;
1570
1571         /* get active ATA command */
1572         qc = ata_qc_from_tag(ap, ap->link.active_tag);
1573         if (unlikely(!qc))                      /* no active tag */
1574                 return;
1575         if (qc->tf.flags & ATA_TFLAG_POLLING)   /* polling; we don't own qc */
1576                 return;
1577
1578         /* and finally, complete the ATA command */
1579         qc->err_mask |= ac_err_mask(ata_status);
1580         ata_qc_complete(qc);
1581 }
1582
1583 static void mv_intr_edma(struct ata_port *ap)
1584 {
1585         void __iomem *port_mmio = mv_ap_base(ap);
1586         struct mv_host_priv *hpriv = ap->host->private_data;
1587         struct mv_port_priv *pp = ap->private_data;
1588         struct ata_queued_cmd *qc;
1589         u32 out_index, in_index;
1590         bool work_done = false;
1591
1592         /* get h/w response queue pointer */
1593         in_index = (readl(port_mmio + EDMA_RSP_Q_IN_PTR_OFS)
1594                         >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
1595
1596         while (1) {
1597                 u16 status;
1598                 unsigned int tag;
1599
1600                 /* get s/w response queue last-read pointer, and compare */
1601                 out_index = pp->resp_idx & MV_MAX_Q_DEPTH_MASK;
1602                 if (in_index == out_index)
1603                         break;
1604
1605                 /* 50xx: get active ATA command */
1606                 if (IS_GEN_I(hpriv))
1607                         tag = ap->link.active_tag;
1608
1609                 /* Gen II/IIE: get active ATA command via tag, to enable
1610                  * support for queueing.  this works transparently for
1611                  * queued and non-queued modes.
1612                  */
1613                 else
1614                         tag = le16_to_cpu(pp->crpb[out_index].id) & 0x1f;
1615
1616                 qc = ata_qc_from_tag(ap, tag);
1617
1618                 /* For non-NCQ mode, the lower 8 bits of status
1619                  * are from EDMA_ERR_IRQ_CAUSE_OFS,
1620                  * which should be zero if all went well.
1621                  */
1622                 status = le16_to_cpu(pp->crpb[out_index].flags);
1623                 if ((status & 0xff) && !(pp->pp_flags & MV_PP_FLAG_NCQ_EN)) {
1624                         mv_err_intr(ap, qc);
1625                         return;
1626                 }
1627
1628                 /* and finally, complete the ATA command */
1629                 if (qc) {
1630                         qc->err_mask |=
1631                                 ac_err_mask(status >> CRPB_FLAG_STATUS_SHIFT);
1632                         ata_qc_complete(qc);
1633                 }
1634
1635                 /* advance software response queue pointer, to
1636                  * indicate (after the loop completes) to hardware
1637                  * that we have consumed a response queue entry.
1638                  */
1639                 work_done = true;
1640                 pp->resp_idx++;
1641         }
1642
1643         if (work_done)
1644                 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) |
1645                          (out_index << EDMA_RSP_Q_PTR_SHIFT),
1646                          port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
1647 }
1648
1649 /**
1650  *      mv_host_intr - Handle all interrupts on the given host controller
1651  *      @host: host specific structure
1652  *      @relevant: port error bits relevant to this host controller
1653  *      @hc: which host controller we're to look at
1654  *
1655  *      Read then write clear the HC interrupt status then walk each
1656  *      port connected to the HC and see if it needs servicing.  Port
1657  *      success ints are reported in the HC interrupt status reg, the
1658  *      port error ints are reported in the higher level main
1659  *      interrupt status register and thus are passed in via the
1660  *      'relevant' argument.
1661  *
1662  *      LOCKING:
1663  *      Inherited from caller.
1664  */
1665 static void mv_host_intr(struct ata_host *host, u32 relevant, unsigned int hc)
1666 {
1667         struct mv_host_priv *hpriv = host->private_data;
1668         void __iomem *mmio = hpriv->base;
1669         void __iomem *hc_mmio = mv_hc_base(mmio, hc);
1670         u32 hc_irq_cause;
1671         int port, port0, last_port;
1672
1673         if (hc == 0)
1674                 port0 = 0;
1675         else
1676                 port0 = MV_PORTS_PER_HC;
1677
1678         if (HAS_PCI(host))
1679                 last_port = port0 + MV_PORTS_PER_HC;
1680         else
1681                 last_port = port0 + hpriv->n_ports;
1682         /* we'll need the HC success int register in most cases */
1683         hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
1684         if (!hc_irq_cause)
1685                 return;
1686
1687         writelfl(~hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS);
1688
1689         VPRINTK("ENTER, hc%u relevant=0x%08x HC IRQ cause=0x%08x\n",
1690                 hc, relevant, hc_irq_cause);
1691
1692         for (port = port0; port < last_port; port++) {
1693                 struct ata_port *ap = host->ports[port];
1694                 struct mv_port_priv *pp;
1695                 int have_err_bits, hard_port, shift;
1696
1697                 if ((!ap) || (ap->flags & ATA_FLAG_DISABLED))
1698                         continue;
1699
1700                 pp = ap->private_data;
1701
1702                 shift = port << 1;              /* (port * 2) */
1703                 if (port >= MV_PORTS_PER_HC)
1704                         shift++;        /* skip bit 8 in the HC Main IRQ reg */
1705
1706                 have_err_bits = ((PORT0_ERR << shift) & relevant);
1707
1708                 if (unlikely(have_err_bits)) {
1709                         struct ata_queued_cmd *qc;
1710
1711                         qc = ata_qc_from_tag(ap, ap->link.active_tag);
1712                         if (qc && (qc->tf.flags & ATA_TFLAG_POLLING))
1713                                 continue;
1714
1715                         mv_err_intr(ap, qc);
1716                         continue;
1717                 }
1718
1719                 hard_port = mv_hardport_from_port(port); /* range 0..3 */
1720
1721                 if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
1722                         if ((CRPB_DMA_DONE << hard_port) & hc_irq_cause)
1723                                 mv_intr_edma(ap);
1724                 } else {
1725                         if ((DEV_IRQ << hard_port) & hc_irq_cause)
1726                                 mv_intr_pio(ap);
1727                 }
1728         }
1729         VPRINTK("EXIT\n");
1730 }
1731
1732 static void mv_pci_error(struct ata_host *host, void __iomem *mmio)
1733 {
1734         struct mv_host_priv *hpriv = host->private_data;
1735         struct ata_port *ap;
1736         struct ata_queued_cmd *qc;
1737         struct ata_eh_info *ehi;
1738         unsigned int i, err_mask, printed = 0;
1739         u32 err_cause;
1740
1741         err_cause = readl(mmio + hpriv->irq_cause_ofs);
1742
1743         dev_printk(KERN_ERR, host->dev, "PCI ERROR; PCI IRQ cause=0x%08x\n",
1744                    err_cause);
1745
1746         DPRINTK("All regs @ PCI error\n");
1747         mv_dump_all_regs(mmio, -1, to_pci_dev(host->dev));
1748
1749         writelfl(0, mmio + hpriv->irq_cause_ofs);
1750
1751         for (i = 0; i < host->n_ports; i++) {
1752                 ap = host->ports[i];
1753                 if (!ata_link_offline(&ap->link)) {
1754                         ehi = &ap->link.eh_info;
1755                         ata_ehi_clear_desc(ehi);
1756                         if (!printed++)
1757                                 ata_ehi_push_desc(ehi,
1758                                         "PCI err cause 0x%08x", err_cause);
1759                         err_mask = AC_ERR_HOST_BUS;
1760                         ehi->action = ATA_EH_RESET;
1761                         qc = ata_qc_from_tag(ap, ap->link.active_tag);
1762                         if (qc)
1763                                 qc->err_mask |= err_mask;
1764                         else
1765                                 ehi->err_mask |= err_mask;
1766
1767                         ata_port_freeze(ap);
1768                 }
1769         }
1770 }
1771
1772 /**
1773  *      mv_interrupt - Main interrupt event handler
1774  *      @irq: unused
1775  *      @dev_instance: private data; in this case the host structure
1776  *
1777  *      Read the read only register to determine if any host
1778  *      controllers have pending interrupts.  If so, call lower level
1779  *      routine to handle.  Also check for PCI errors which are only
1780  *      reported here.
1781  *
1782  *      LOCKING:
1783  *      This routine holds the host lock while processing pending
1784  *      interrupts.
1785  */
1786 static irqreturn_t mv_interrupt(int irq, void *dev_instance)
1787 {
1788         struct ata_host *host = dev_instance;
1789         struct mv_host_priv *hpriv = host->private_data;
1790         unsigned int hc, handled = 0, n_hcs;
1791         void __iomem *mmio = hpriv->base;
1792         u32 irq_stat, irq_mask;
1793
1794         /* Note to self: &host->lock == &ap->host->lock == ap->lock */
1795         spin_lock(&host->lock);
1796
1797         irq_stat = readl(hpriv->main_cause_reg_addr);
1798         irq_mask = readl(hpriv->main_mask_reg_addr);
1799
1800         /* check the cases where we either have nothing pending or have read
1801          * a bogus register value which can indicate HW removal or PCI fault
1802          */
1803         if (!(irq_stat & irq_mask) || (0xffffffffU == irq_stat))
1804                 goto out_unlock;
1805
1806         n_hcs = mv_get_hc_count(host->ports[0]->flags);
1807
1808         if (unlikely((irq_stat & PCI_ERR) && HAS_PCI(host))) {
1809                 mv_pci_error(host, mmio);
1810                 handled = 1;
1811                 goto out_unlock;        /* skip all other HC irq handling */
1812         }
1813
1814         for (hc = 0; hc < n_hcs; hc++) {
1815                 u32 relevant = irq_stat & (HC0_IRQ_PEND << (hc * HC_SHIFT));
1816                 if (relevant) {
1817                         mv_host_intr(host, relevant, hc);
1818                         handled = 1;
1819                 }
1820         }
1821
1822 out_unlock:
1823         spin_unlock(&host->lock);
1824
1825         return IRQ_RETVAL(handled);
1826 }
1827
1828 static unsigned int mv5_scr_offset(unsigned int sc_reg_in)
1829 {
1830         unsigned int ofs;
1831
1832         switch (sc_reg_in) {
1833         case SCR_STATUS:
1834         case SCR_ERROR:
1835         case SCR_CONTROL:
1836                 ofs = sc_reg_in * sizeof(u32);
1837                 break;
1838         default:
1839                 ofs = 0xffffffffU;
1840                 break;
1841         }
1842         return ofs;
1843 }
1844
1845 static int mv5_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val)
1846 {
1847         struct mv_host_priv *hpriv = ap->host->private_data;
1848         void __iomem *mmio = hpriv->base;
1849         void __iomem *addr = mv5_phy_base(mmio, ap->port_no);
1850         unsigned int ofs = mv5_scr_offset(sc_reg_in);
1851
1852         if (ofs != 0xffffffffU) {
1853                 *val = readl(addr + ofs);
1854                 return 0;
1855         } else
1856                 return -EINVAL;
1857 }
1858
1859 static int mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
1860 {
1861         struct mv_host_priv *hpriv = ap->host->private_data;
1862         void __iomem *mmio = hpriv->base;
1863         void __iomem *addr = mv5_phy_base(mmio, ap->port_no);
1864         unsigned int ofs = mv5_scr_offset(sc_reg_in);
1865
1866         if (ofs != 0xffffffffU) {
1867                 writelfl(val, addr + ofs);
1868                 return 0;
1869         } else
1870                 return -EINVAL;
1871 }
1872
1873 static void mv5_reset_bus(struct ata_host *host, void __iomem *mmio)
1874 {
1875         struct pci_dev *pdev = to_pci_dev(host->dev);
1876         int early_5080;
1877
1878         early_5080 = (pdev->device == 0x5080) && (pdev->revision == 0);
1879
1880         if (!early_5080) {
1881                 u32 tmp = readl(mmio + MV_PCI_EXP_ROM_BAR_CTL);
1882                 tmp |= (1 << 0);
1883                 writel(tmp, mmio + MV_PCI_EXP_ROM_BAR_CTL);
1884         }
1885
1886         mv_reset_pci_bus(host, mmio);
1887 }
1888
1889 static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
1890 {
1891         writel(0x0fcfffff, mmio + MV_FLASH_CTL);
1892 }
1893
1894 static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx,
1895                            void __iomem *mmio)
1896 {
1897         void __iomem *phy_mmio = mv5_phy_base(mmio, idx);
1898         u32 tmp;
1899
1900         tmp = readl(phy_mmio + MV5_PHY_MODE);
1901
1902         hpriv->signal[idx].pre = tmp & 0x1800;  /* bits 12:11 */
1903         hpriv->signal[idx].amps = tmp & 0xe0;   /* bits 7:5 */
1904 }
1905
1906 static void mv5_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
1907 {
1908         u32 tmp;
1909
1910         writel(0, mmio + MV_GPIO_PORT_CTL);
1911
1912         /* FIXME: handle MV_HP_ERRATA_50XXB2 errata */
1913
1914         tmp = readl(mmio + MV_PCI_EXP_ROM_BAR_CTL);
1915         tmp |= ~(1 << 0);
1916         writel(tmp, mmio + MV_PCI_EXP_ROM_BAR_CTL);
1917 }
1918
1919 static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
1920                            unsigned int port)
1921 {
1922         void __iomem *phy_mmio = mv5_phy_base(mmio, port);
1923         const u32 mask = (1<<12) | (1<<11) | (1<<7) | (1<<6) | (1<<5);
1924         u32 tmp;
1925         int fix_apm_sq = (hpriv->hp_flags & MV_HP_ERRATA_50XXB0);
1926
1927         if (fix_apm_sq) {
1928                 tmp = readl(phy_mmio + MV5_LT_MODE);
1929                 tmp |= (1 << 19);
1930                 writel(tmp, phy_mmio + MV5_LT_MODE);
1931
1932                 tmp = readl(phy_mmio + MV5_PHY_CTL);
1933                 tmp &= ~0x3;
1934                 tmp |= 0x1;
1935                 writel(tmp, phy_mmio + MV5_PHY_CTL);
1936         }
1937
1938         tmp = readl(phy_mmio + MV5_PHY_MODE);
1939         tmp &= ~mask;
1940         tmp |= hpriv->signal[port].pre;
1941         tmp |= hpriv->signal[port].amps;
1942         writel(tmp, phy_mmio + MV5_PHY_MODE);
1943 }
1944
1945
1946 #undef ZERO
1947 #define ZERO(reg) writel(0, port_mmio + (reg))
1948 static void mv5_reset_hc_port(struct mv_host_priv *hpriv, void __iomem *mmio,
1949                              unsigned int port)
1950 {
1951         void __iomem *port_mmio = mv_port_base(mmio, port);
1952
1953         /*
1954          * The datasheet warns against setting ATA_RST when EDMA is active
1955          * (but doesn't say what the problem might be).  So we first try
1956          * to disable the EDMA engine before doing the ATA_RST operation.
1957          */
1958         mv_reset_channel(hpriv, mmio, port);
1959
1960         ZERO(0x028);    /* command */
1961         writel(0x11f, port_mmio + EDMA_CFG_OFS);
1962         ZERO(0x004);    /* timer */
1963         ZERO(0x008);    /* irq err cause */
1964         ZERO(0x00c);    /* irq err mask */
1965         ZERO(0x010);    /* rq bah */
1966         ZERO(0x014);    /* rq inp */
1967         ZERO(0x018);    /* rq outp */
1968         ZERO(0x01c);    /* respq bah */
1969         ZERO(0x024);    /* respq outp */
1970         ZERO(0x020);    /* respq inp */
1971         ZERO(0x02c);    /* test control */
1972         writel(0xbc, port_mmio + EDMA_IORDY_TMOUT);
1973 }
1974 #undef ZERO
1975
1976 #define ZERO(reg) writel(0, hc_mmio + (reg))
1977 static void mv5_reset_one_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
1978                         unsigned int hc)
1979 {
1980         void __iomem *hc_mmio = mv_hc_base(mmio, hc);
1981         u32 tmp;
1982
1983         ZERO(0x00c);
1984         ZERO(0x010);
1985         ZERO(0x014);
1986         ZERO(0x018);
1987
1988         tmp = readl(hc_mmio + 0x20);
1989         tmp &= 0x1c1c1c1c;
1990         tmp |= 0x03030303;
1991         writel(tmp, hc_mmio + 0x20);
1992 }
1993 #undef ZERO
1994
1995 static int mv5_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
1996                         unsigned int n_hc)
1997 {
1998         unsigned int hc, port;
1999
2000         for (hc = 0; hc < n_hc; hc++) {
2001                 for (port = 0; port < MV_PORTS_PER_HC; port++)
2002                         mv5_reset_hc_port(hpriv, mmio,
2003                                           (hc * MV_PORTS_PER_HC) + port);
2004
2005                 mv5_reset_one_hc(hpriv, mmio, hc);
2006         }
2007
2008         return 0;
2009 }
2010
2011 #undef ZERO
2012 #define ZERO(reg) writel(0, mmio + (reg))
2013 static void mv_reset_pci_bus(struct ata_host *host, void __iomem *mmio)
2014 {
2015         struct mv_host_priv *hpriv = host->private_data;
2016         u32 tmp;
2017
2018         tmp = readl(mmio + MV_PCI_MODE);
2019         tmp &= 0xff00ffff;
2020         writel(tmp, mmio + MV_PCI_MODE);
2021
2022         ZERO(MV_PCI_DISC_TIMER);
2023         ZERO(MV_PCI_MSI_TRIGGER);
2024         writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT);
2025         ZERO(HC_MAIN_IRQ_MASK_OFS);
2026         ZERO(MV_PCI_SERR_MASK);
2027         ZERO(hpriv->irq_cause_ofs);
2028         ZERO(hpriv->irq_mask_ofs);
2029         ZERO(MV_PCI_ERR_LOW_ADDRESS);
2030         ZERO(MV_PCI_ERR_HIGH_ADDRESS);
2031         ZERO(MV_PCI_ERR_ATTRIBUTE);
2032         ZERO(MV_PCI_ERR_COMMAND);
2033 }
2034 #undef ZERO
2035
2036 static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
2037 {
2038         u32 tmp;
2039
2040         mv5_reset_flash(hpriv, mmio);
2041
2042         tmp = readl(mmio + MV_GPIO_PORT_CTL);
2043         tmp &= 0x3;
2044         tmp |= (1 << 5) | (1 << 6);
2045         writel(tmp, mmio + MV_GPIO_PORT_CTL);
2046 }
2047
2048 /**
2049  *      mv6_reset_hc - Perform the 6xxx global soft reset
2050  *      @mmio: base address of the HBA
2051  *
2052  *      This routine only applies to 6xxx parts.
2053  *
2054  *      LOCKING:
2055  *      Inherited from caller.
2056  */
2057 static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
2058                         unsigned int n_hc)
2059 {
2060         void __iomem *reg = mmio + PCI_MAIN_CMD_STS_OFS;
2061         int i, rc = 0;
2062         u32 t;
2063
2064         /* Following procedure defined in PCI "main command and status
2065          * register" table.
2066          */
2067         t = readl(reg);
2068         writel(t | STOP_PCI_MASTER, reg);
2069
2070         for (i = 0; i < 1000; i++) {
2071                 udelay(1);
2072                 t = readl(reg);
2073                 if (PCI_MASTER_EMPTY & t)
2074                         break;
2075         }
2076         if (!(PCI_MASTER_EMPTY & t)) {
2077                 printk(KERN_ERR DRV_NAME ": PCI master won't flush\n");
2078                 rc = 1;
2079                 goto done;
2080         }
2081
2082         /* set reset */
2083         i = 5;
2084         do {
2085                 writel(t | GLOB_SFT_RST, reg);
2086                 t = readl(reg);
2087                 udelay(1);
2088         } while (!(GLOB_SFT_RST & t) && (i-- > 0));
2089
2090         if (!(GLOB_SFT_RST & t)) {
2091                 printk(KERN_ERR DRV_NAME ": can't set global reset\n");
2092                 rc = 1;
2093                 goto done;
2094         }
2095
2096         /* clear reset and *reenable the PCI master* (not mentioned in spec) */
2097         i = 5;
2098         do {
2099                 writel(t & ~(GLOB_SFT_RST | STOP_PCI_MASTER), reg);
2100                 t = readl(reg);
2101                 udelay(1);
2102         } while ((GLOB_SFT_RST & t) && (i-- > 0));
2103
2104         if (GLOB_SFT_RST & t) {
2105                 printk(KERN_ERR DRV_NAME ": can't clear global reset\n");
2106                 rc = 1;
2107         }
2108         /*
2109          * Temporary: wait 3 seconds before port-probing can happen,
2110          * so that we don't miss finding sleepy SilXXXX port-multipliers.
2111          * This can go away once hotplug is fully/correctly implemented.
2112          */
2113         if (rc == 0)
2114                 msleep(3000);
2115 done:
2116         return rc;
2117 }
2118
2119 static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
2120                            void __iomem *mmio)
2121 {
2122         void __iomem *port_mmio;
2123         u32 tmp;
2124
2125         tmp = readl(mmio + MV_RESET_CFG);
2126         if ((tmp & (1 << 0)) == 0) {
2127                 hpriv->signal[idx].amps = 0x7 << 8;
2128                 hpriv->signal[idx].pre = 0x1 << 5;
2129                 return;
2130         }
2131
2132         port_mmio = mv_port_base(mmio, idx);
2133         tmp = readl(port_mmio + PHY_MODE2);
2134
2135         hpriv->signal[idx].amps = tmp & 0x700;  /* bits 10:8 */
2136         hpriv->signal[idx].pre = tmp & 0xe0;    /* bits 7:5 */
2137 }
2138
2139 static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
2140 {
2141         writel(0x00000060, mmio + MV_GPIO_PORT_CTL);
2142 }
2143
2144 static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
2145                            unsigned int port)
2146 {
2147         void __iomem *port_mmio = mv_port_base(mmio, port);
2148
2149         u32 hp_flags = hpriv->hp_flags;
2150         int fix_phy_mode2 =
2151                 hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0);
2152         int fix_phy_mode4 =
2153                 hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0);
2154         u32 m2, tmp;
2155
2156         if (fix_phy_mode2) {
2157                 m2 = readl(port_mmio + PHY_MODE2);
2158                 m2 &= ~(1 << 16);
2159                 m2 |= (1 << 31);
2160                 writel(m2, port_mmio + PHY_MODE2);
2161
2162                 udelay(200);
2163
2164                 m2 = readl(port_mmio + PHY_MODE2);
2165                 m2 &= ~((1 << 16) | (1 << 31));
2166                 writel(m2, port_mmio + PHY_MODE2);
2167
2168                 udelay(200);
2169         }
2170
2171         /* who knows what this magic does */
2172         tmp = readl(port_mmio + PHY_MODE3);
2173         tmp &= ~0x7F800000;
2174         tmp |= 0x2A800000;
2175         writel(tmp, port_mmio + PHY_MODE3);
2176
2177         if (fix_phy_mode4) {
2178                 u32 m4;
2179
2180                 m4 = readl(port_mmio + PHY_MODE4);
2181
2182                 if (hp_flags & MV_HP_ERRATA_60X1B2)
2183                         tmp = readl(port_mmio + PHY_MODE3);
2184
2185                 /* workaround for errata FEr SATA#10 (part 1) */
2186                 m4 = (m4 & ~(1 << 1)) | (1 << 0);
2187
2188                 writel(m4, port_mmio + PHY_MODE4);
2189
2190                 if (hp_flags & MV_HP_ERRATA_60X1B2)
2191                         writel(tmp, port_mmio + PHY_MODE3);
2192         }
2193
2194         /* Revert values of pre-emphasis and signal amps to the saved ones */
2195         m2 = readl(port_mmio + PHY_MODE2);
2196
2197         m2 &= ~MV_M2_PREAMP_MASK;
2198         m2 |= hpriv->signal[port].amps;
2199         m2 |= hpriv->signal[port].pre;
2200         m2 &= ~(1 << 16);
2201
2202         /* according to mvSata 3.6.1, some IIE values are fixed */
2203         if (IS_GEN_IIE(hpriv)) {
2204                 m2 &= ~0xC30FF01F;
2205                 m2 |= 0x0000900F;
2206         }
2207
2208         writel(m2, port_mmio + PHY_MODE2);
2209 }
2210
2211 /* TODO: use the generic LED interface to configure the SATA Presence */
2212 /* & Acitivy LEDs on the board */
2213 static void mv_soc_enable_leds(struct mv_host_priv *hpriv,
2214                                       void __iomem *mmio)
2215 {
2216         return;
2217 }
2218
2219 static void mv_soc_read_preamp(struct mv_host_priv *hpriv, int idx,
2220                            void __iomem *mmio)
2221 {
2222         void __iomem *port_mmio;
2223         u32 tmp;
2224
2225         port_mmio = mv_port_base(mmio, idx);
2226         tmp = readl(port_mmio + PHY_MODE2);
2227
2228         hpriv->signal[idx].amps = tmp & 0x700;  /* bits 10:8 */
2229         hpriv->signal[idx].pre = tmp & 0xe0;    /* bits 7:5 */
2230 }
2231
2232 #undef ZERO
2233 #define ZERO(reg) writel(0, port_mmio + (reg))
2234 static void mv_soc_reset_hc_port(struct mv_host_priv *hpriv,
2235                                         void __iomem *mmio, unsigned int port)
2236 {
2237         void __iomem *port_mmio = mv_port_base(mmio, port);
2238
2239         /*
2240          * The datasheet warns against setting ATA_RST when EDMA is active
2241          * (but doesn't say what the problem might be).  So we first try
2242          * to disable the EDMA engine before doing the ATA_RST operation.
2243          */
2244         mv_reset_channel(hpriv, mmio, port);
2245
2246         ZERO(0x028);            /* command */
2247         writel(0x101f, port_mmio + EDMA_CFG_OFS);
2248         ZERO(0x004);            /* timer */
2249         ZERO(0x008);            /* irq err cause */
2250         ZERO(0x00c);            /* irq err mask */
2251         ZERO(0x010);            /* rq bah */
2252         ZERO(0x014);            /* rq inp */
2253         ZERO(0x018);            /* rq outp */
2254         ZERO(0x01c);            /* respq bah */
2255         ZERO(0x024);            /* respq outp */
2256         ZERO(0x020);            /* respq inp */
2257         ZERO(0x02c);            /* test control */
2258         writel(0xbc, port_mmio + EDMA_IORDY_TMOUT);
2259 }
2260
2261 #undef ZERO
2262
2263 #define ZERO(reg) writel(0, hc_mmio + (reg))
2264 static void mv_soc_reset_one_hc(struct mv_host_priv *hpriv,
2265                                        void __iomem *mmio)
2266 {
2267         void __iomem *hc_mmio = mv_hc_base(mmio, 0);
2268
2269         ZERO(0x00c);
2270         ZERO(0x010);
2271         ZERO(0x014);
2272
2273 }
2274
2275 #undef ZERO
2276
2277 static int mv_soc_reset_hc(struct mv_host_priv *hpriv,
2278                                   void __iomem *mmio, unsigned int n_hc)
2279 {
2280         unsigned int port;
2281
2282         for (port = 0; port < hpriv->n_ports; port++)
2283                 mv_soc_reset_hc_port(hpriv, mmio, port);
2284
2285         mv_soc_reset_one_hc(hpriv, mmio);
2286
2287         return 0;
2288 }
2289
2290 static void mv_soc_reset_flash(struct mv_host_priv *hpriv,
2291                                       void __iomem *mmio)
2292 {
2293         return;
2294 }
2295
2296 static void mv_soc_reset_bus(struct ata_host *host, void __iomem *mmio)
2297 {
2298         return;
2299 }
2300
2301 static void mv_setup_ifctl(void __iomem *port_mmio, int want_gen2i)
2302 {
2303         u32 ifctl = readl(port_mmio + SATA_INTERFACE_CFG);
2304
2305         ifctl = (ifctl & 0xf7f) | 0x9b1000;     /* from chip spec */
2306         if (want_gen2i)
2307                 ifctl |= (1 << 7);              /* enable gen2i speed */
2308         writelfl(ifctl, port_mmio + SATA_INTERFACE_CFG);
2309 }
2310
2311 /*
2312  * Caller must ensure that EDMA is not active,
2313  * by first doing mv_stop_edma() where needed.
2314  */
2315 static void mv_reset_channel(struct mv_host_priv *hpriv, void __iomem *mmio,
2316                              unsigned int port_no)
2317 {
2318         void __iomem *port_mmio = mv_port_base(mmio, port_no);
2319
2320         mv_stop_edma_engine(port_mmio);
2321         writelfl(ATA_RST, port_mmio + EDMA_CMD_OFS);
2322
2323         if (!IS_GEN_I(hpriv)) {
2324                 /* Enable 3.0gb/s link speed */
2325                 mv_setup_ifctl(port_mmio, 1);
2326         }
2327         /*
2328          * Strobing ATA_RST here causes a hard reset of the SATA transport,
2329          * link, and physical layers.  It resets all SATA interface registers
2330          * (except for SATA_INTERFACE_CFG), and issues a COMRESET to the dev.
2331          */
2332         writelfl(ATA_RST, port_mmio + EDMA_CMD_OFS);
2333         udelay(25);     /* allow reset propagation */
2334         writelfl(0, port_mmio + EDMA_CMD_OFS);
2335
2336         hpriv->ops->phy_errata(hpriv, mmio, port_no);
2337
2338         if (IS_GEN_I(hpriv))
2339                 mdelay(1);
2340 }
2341
2342 static void mv_pmp_select(struct ata_port *ap, int pmp)
2343 {
2344         if (sata_pmp_supported(ap)) {
2345                 void __iomem *port_mmio = mv_ap_base(ap);
2346                 u32 reg = readl(port_mmio + SATA_IFCTL_OFS);
2347                 int old = reg & 0xf;
2348
2349                 if (old != pmp) {
2350                         reg = (reg & ~0xf) | pmp;
2351                         writelfl(reg, port_mmio + SATA_IFCTL_OFS);
2352                 }
2353         }
2354 }
2355
2356 static int mv_pmp_hardreset(struct ata_link *link, unsigned int *class,
2357                                 unsigned long deadline)
2358 {
2359         mv_pmp_select(link->ap, sata_srst_pmp(link));
2360         return sata_std_hardreset(link, class, deadline);
2361 }
2362
2363 static int mv_softreset(struct ata_link *link, unsigned int *class,
2364                                 unsigned long deadline)
2365 {
2366         mv_pmp_select(link->ap, sata_srst_pmp(link));
2367         return ata_sff_softreset(link, class, deadline);
2368 }
2369
2370 static int mv_hardreset(struct ata_link *link, unsigned int *class,
2371                         unsigned long deadline)
2372 {
2373         struct ata_port *ap = link->ap;
2374         struct mv_host_priv *hpriv = ap->host->private_data;
2375         struct mv_port_priv *pp = ap->private_data;
2376         void __iomem *mmio = hpriv->base;
2377         int rc, attempts = 0, extra = 0;
2378         u32 sstatus;
2379         bool online;
2380
2381         mv_reset_channel(hpriv, mmio, ap->port_no);
2382         pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
2383
2384         /* Workaround for errata FEr SATA#10 (part 2) */
2385         do {
2386                 const unsigned long *timing =
2387                                 sata_ehc_deb_timing(&link->eh_context);
2388
2389                 rc = sata_link_hardreset(link, timing, deadline + extra,
2390                                          &online, NULL);
2391                 if (rc)
2392                         return rc;
2393                 sata_scr_read(link, SCR_STATUS, &sstatus);
2394                 if (!IS_GEN_I(hpriv) && ++attempts >= 5 && sstatus == 0x121) {
2395                         /* Force 1.5gb/s link speed and try again */
2396                         mv_setup_ifctl(mv_ap_base(ap), 0);
2397                         if (time_after(jiffies + HZ, deadline))
2398                                 extra = HZ; /* only extend it once, max */
2399                 }
2400         } while (sstatus != 0x0 && sstatus != 0x113 && sstatus != 0x123);
2401
2402         return rc;
2403 }
2404
2405 static void mv_eh_freeze(struct ata_port *ap)
2406 {
2407         struct mv_host_priv *hpriv = ap->host->private_data;
2408         unsigned int hc = (ap->port_no > 3) ? 1 : 0;
2409         u32 tmp, mask;
2410         unsigned int shift;
2411
2412         /* FIXME: handle coalescing completion events properly */
2413
2414         shift = ap->port_no * 2;
2415         if (hc > 0)
2416                 shift++;
2417
2418         mask = 0x3 << shift;
2419
2420         /* disable assertion of portN err, done events */
2421         tmp = readl(hpriv->main_mask_reg_addr);
2422         writelfl(tmp & ~mask, hpriv->main_mask_reg_addr);
2423 }
2424
2425 static void mv_eh_thaw(struct ata_port *ap)
2426 {
2427         struct mv_host_priv *hpriv = ap->host->private_data;
2428         void __iomem *mmio = hpriv->base;
2429         unsigned int hc = (ap->port_no > 3) ? 1 : 0;
2430         void __iomem *hc_mmio = mv_hc_base(mmio, hc);
2431         void __iomem *port_mmio = mv_ap_base(ap);
2432         u32 tmp, mask, hc_irq_cause;
2433         unsigned int shift, hc_port_no = ap->port_no;
2434
2435         /* FIXME: handle coalescing completion events properly */
2436
2437         shift = ap->port_no * 2;
2438         if (hc > 0) {
2439                 shift++;
2440                 hc_port_no -= 4;
2441         }
2442
2443         mask = 0x3 << shift;
2444
2445         /* clear EDMA errors on this port */
2446         writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
2447
2448         /* clear pending irq events */
2449         hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
2450         hc_irq_cause &= ~(1 << hc_port_no);     /* clear CRPB-done */
2451         hc_irq_cause &= ~(1 << (hc_port_no + 8)); /* clear Device int */
2452         writel(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS);
2453
2454         /* enable assertion of portN err, done events */
2455         tmp = readl(hpriv->main_mask_reg_addr);
2456         writelfl(tmp | mask, hpriv->main_mask_reg_addr);
2457 }
2458
2459 /**
2460  *      mv_port_init - Perform some early initialization on a single port.
2461  *      @port: libata data structure storing shadow register addresses
2462  *      @port_mmio: base address of the port
2463  *
2464  *      Initialize shadow register mmio addresses, clear outstanding
2465  *      interrupts on the port, and unmask interrupts for the future
2466  *      start of the port.
2467  *
2468  *      LOCKING:
2469  *      Inherited from caller.
2470  */
2471 static void mv_port_init(struct ata_ioports *port,  void __iomem *port_mmio)
2472 {
2473         void __iomem *shd_base = port_mmio + SHD_BLK_OFS;
2474         unsigned serr_ofs;
2475
2476         /* PIO related setup
2477          */
2478         port->data_addr = shd_base + (sizeof(u32) * ATA_REG_DATA);
2479         port->error_addr =
2480                 port->feature_addr = shd_base + (sizeof(u32) * ATA_REG_ERR);
2481         port->nsect_addr = shd_base + (sizeof(u32) * ATA_REG_NSECT);
2482         port->lbal_addr = shd_base + (sizeof(u32) * ATA_REG_LBAL);
2483         port->lbam_addr = shd_base + (sizeof(u32) * ATA_REG_LBAM);
2484         port->lbah_addr = shd_base + (sizeof(u32) * ATA_REG_LBAH);
2485         port->device_addr = shd_base + (sizeof(u32) * ATA_REG_DEVICE);
2486         port->status_addr =
2487                 port->command_addr = shd_base + (sizeof(u32) * ATA_REG_STATUS);
2488         /* special case: control/altstatus doesn't have ATA_REG_ address */
2489         port->altstatus_addr = port->ctl_addr = shd_base + SHD_CTL_AST_OFS;
2490
2491         /* unused: */
2492         port->cmd_addr = port->bmdma_addr = port->scr_addr = NULL;
2493
2494         /* Clear any currently outstanding port interrupt conditions */
2495         serr_ofs = mv_scr_offset(SCR_ERROR);
2496         writelfl(readl(port_mmio + serr_ofs), port_mmio + serr_ofs);
2497         writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
2498
2499         /* unmask all non-transient EDMA error interrupts */
2500         writelfl(~EDMA_ERR_IRQ_TRANSIENT, port_mmio + EDMA_ERR_IRQ_MASK_OFS);
2501
2502         VPRINTK("EDMA cfg=0x%08x EDMA IRQ err cause/mask=0x%08x/0x%08x\n",
2503                 readl(port_mmio + EDMA_CFG_OFS),
2504                 readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS),
2505                 readl(port_mmio + EDMA_ERR_IRQ_MASK_OFS));
2506 }
2507
2508 static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
2509 {
2510         struct pci_dev *pdev = to_pci_dev(host->dev);
2511         struct mv_host_priv *hpriv = host->private_data;
2512         u32 hp_flags = hpriv->hp_flags;
2513
2514         switch (board_idx) {
2515         case chip_5080:
2516                 hpriv->ops = &mv5xxx_ops;
2517                 hp_flags |= MV_HP_GEN_I;
2518
2519                 switch (pdev->revision) {
2520                 case 0x1:
2521                         hp_flags |= MV_HP_ERRATA_50XXB0;
2522                         break;
2523                 case 0x3:
2524                         hp_flags |= MV_HP_ERRATA_50XXB2;
2525                         break;
2526                 default:
2527                         dev_printk(KERN_WARNING, &pdev->dev,
2528                            "Applying 50XXB2 workarounds to unknown rev\n");
2529                         hp_flags |= MV_HP_ERRATA_50XXB2;
2530                         break;
2531                 }
2532                 break;
2533
2534         case chip_504x:
2535         case chip_508x:
2536                 hpriv->ops = &mv5xxx_ops;
2537                 hp_flags |= MV_HP_GEN_I;
2538
2539                 switch (pdev->revision) {
2540                 case 0x0:
2541                         hp_flags |= MV_HP_ERRATA_50XXB0;
2542                         break;
2543                 case 0x3:
2544                         hp_flags |= MV_HP_ERRATA_50XXB2;
2545                         break;
2546                 default:
2547                         dev_printk(KERN_WARNING, &pdev->dev,
2548                            "Applying B2 workarounds to unknown rev\n");
2549                         hp_flags |= MV_HP_ERRATA_50XXB2;
2550                         break;
2551                 }
2552                 break;
2553
2554         case chip_604x:
2555         case chip_608x:
2556                 hpriv->ops = &mv6xxx_ops;
2557                 hp_flags |= MV_HP_GEN_II;
2558
2559                 switch (pdev->revision) {
2560                 case 0x7:
2561                         hp_flags |= MV_HP_ERRATA_60X1B2;
2562                         break;
2563                 case 0x9:
2564                         hp_flags |= MV_HP_ERRATA_60X1C0;
2565                         break;
2566                 default:
2567                         dev_printk(KERN_WARNING, &pdev->dev,
2568                                    "Applying B2 workarounds to unknown rev\n");
2569                         hp_flags |= MV_HP_ERRATA_60X1B2;
2570                         break;
2571                 }
2572                 break;
2573
2574         case chip_7042:
2575                 hp_flags |= MV_HP_PCIE;
2576                 if (pdev->vendor == PCI_VENDOR_ID_TTI &&
2577                     (pdev->device == 0x2300 || pdev->device == 0x2310))
2578                 {
2579                         /*
2580                          * Highpoint RocketRAID PCIe 23xx series cards:
2581                          *
2582                          * Unconfigured drives are treated as "Legacy"
2583                          * by the BIOS, and it overwrites sector 8 with
2584                          * a "Lgcy" metadata block prior to Linux boot.
2585                          *
2586                          * Configured drives (RAID or JBOD) leave sector 8
2587                          * alone, but instead overwrite a high numbered
2588                          * sector for the RAID metadata.  This sector can
2589                          * be determined exactly, by truncating the physical
2590                          * drive capacity to a nice even GB value.
2591                          *
2592                          * RAID metadata is at: (dev->n_sectors & ~0xfffff)
2593                          *
2594                          * Warn the user, lest they think we're just buggy.
2595                          */
2596                         printk(KERN_WARNING DRV_NAME ": Highpoint RocketRAID"
2597                                 " BIOS CORRUPTS DATA on all attached drives,"
2598                                 " regardless of if/how they are configured."
2599                                 " BEWARE!\n");
2600                         printk(KERN_WARNING DRV_NAME ": For data safety, do not"
2601                                 " use sectors 8-9 on \"Legacy\" drives,"
2602                                 " and avoid the final two gigabytes on"
2603                                 " all RocketRAID BIOS initialized drives.\n");
2604                 }
2605         case chip_6042:
2606                 hpriv->ops = &mv6xxx_ops;
2607                 hp_flags |= MV_HP_GEN_IIE;
2608
2609                 switch (pdev->revision) {
2610                 case 0x0:
2611                         hp_flags |= MV_HP_ERRATA_XX42A0;
2612                         break;
2613                 case 0x1:
2614                         hp_flags |= MV_HP_ERRATA_60X1C0;
2615                         break;
2616                 default:
2617                         dev_printk(KERN_WARNING, &pdev->dev,
2618                            "Applying 60X1C0 workarounds to unknown rev\n");
2619                         hp_flags |= MV_HP_ERRATA_60X1C0;
2620                         break;
2621                 }
2622                 break;
2623         case chip_soc:
2624                 hpriv->ops = &mv_soc_ops;
2625                 hp_flags |= MV_HP_ERRATA_60X1C0;
2626                 break;
2627
2628         default:
2629                 dev_printk(KERN_ERR, host->dev,
2630                            "BUG: invalid board index %u\n", board_idx);
2631                 return 1;
2632         }
2633
2634         hpriv->hp_flags = hp_flags;
2635         if (hp_flags & MV_HP_PCIE) {
2636                 hpriv->irq_cause_ofs    = PCIE_IRQ_CAUSE_OFS;
2637                 hpriv->irq_mask_ofs     = PCIE_IRQ_MASK_OFS;
2638                 hpriv->unmask_all_irqs  = PCIE_UNMASK_ALL_IRQS;
2639         } else {
2640                 hpriv->irq_cause_ofs    = PCI_IRQ_CAUSE_OFS;
2641                 hpriv->irq_mask_ofs     = PCI_IRQ_MASK_OFS;
2642                 hpriv->unmask_all_irqs  = PCI_UNMASK_ALL_IRQS;
2643         }
2644
2645         return 0;
2646 }
2647
2648 /**
2649  *      mv_init_host - Perform some early initialization of the host.
2650  *      @host: ATA host to initialize
2651  *      @board_idx: controller index
2652  *
2653  *      If possible, do an early global reset of the host.  Then do
2654  *      our port init and clear/unmask all/relevant host interrupts.
2655  *
2656  *      LOCKING:
2657  *      Inherited from caller.
2658  */
2659 static int mv_init_host(struct ata_host *host, unsigned int board_idx)
2660 {
2661         int rc = 0, n_hc, port, hc;
2662         struct mv_host_priv *hpriv = host->private_data;
2663         void __iomem *mmio = hpriv->base;
2664
2665         rc = mv_chip_id(host, board_idx);
2666         if (rc)
2667         goto done;
2668
2669         if (HAS_PCI(host)) {
2670                 hpriv->main_cause_reg_addr = hpriv->base +
2671                   HC_MAIN_IRQ_CAUSE_OFS;
2672                 hpriv->main_mask_reg_addr = hpriv->base + HC_MAIN_IRQ_MASK_OFS;
2673         } else {
2674                 hpriv->main_cause_reg_addr = hpriv->base +
2675                   HC_SOC_MAIN_IRQ_CAUSE_OFS;
2676                 hpriv->main_mask_reg_addr = hpriv->base +
2677                   HC_SOC_MAIN_IRQ_MASK_OFS;
2678         }
2679         /* global interrupt mask */
2680         writel(0, hpriv->main_mask_reg_addr);
2681
2682         n_hc = mv_get_hc_count(host->ports[0]->flags);
2683
2684         for (port = 0; port < host->n_ports; port++)
2685                 hpriv->ops->read_preamp(hpriv, port, mmio);
2686
2687         rc = hpriv->ops->reset_hc(hpriv, mmio, n_hc);
2688         if (rc)
2689                 goto done;
2690
2691         hpriv->ops->reset_flash(hpriv, mmio);
2692         hpriv->ops->reset_bus(host, mmio);
2693         hpriv->ops->enable_leds(hpriv, mmio);
2694
2695         for (port = 0; port < host->n_ports; port++) {
2696                 struct ata_port *ap = host->ports[port];
2697                 void __iomem *port_mmio = mv_port_base(mmio, port);
2698
2699                 mv_port_init(&ap->ioaddr, port_mmio);
2700
2701 #ifdef CONFIG_PCI
2702                 if (HAS_PCI(host)) {
2703                         unsigned int offset = port_mmio - mmio;
2704                         ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio");
2705                         ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port");
2706                 }
2707 #endif
2708         }
2709
2710         for (hc = 0; hc < n_hc; hc++) {
2711                 void __iomem *hc_mmio = mv_hc_base(mmio, hc);
2712
2713                 VPRINTK("HC%i: HC config=0x%08x HC IRQ cause "
2714                         "(before clear)=0x%08x\n", hc,
2715                         readl(hc_mmio + HC_CFG_OFS),
2716                         readl(hc_mmio + HC_IRQ_CAUSE_OFS));
2717
2718                 /* Clear any currently outstanding hc interrupt conditions */
2719                 writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS);
2720         }
2721
2722         if (HAS_PCI(host)) {
2723                 /* Clear any currently outstanding host interrupt conditions */
2724                 writelfl(0, mmio + hpriv->irq_cause_ofs);
2725
2726                 /* and unmask interrupt generation for host regs */
2727                 writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs);
2728                 if (IS_GEN_I(hpriv))
2729                         writelfl(~HC_MAIN_MASKED_IRQS_5,
2730                                  hpriv->main_mask_reg_addr);
2731                 else
2732                         writelfl(~HC_MAIN_MASKED_IRQS,
2733                                  hpriv->main_mask_reg_addr);
2734
2735                 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
2736                         "PCI int cause/mask=0x%08x/0x%08x\n",
2737                         readl(hpriv->main_cause_reg_addr),
2738                         readl(hpriv->main_mask_reg_addr),
2739                         readl(mmio + hpriv->irq_cause_ofs),
2740                         readl(mmio + hpriv->irq_mask_ofs));
2741         } else {
2742                 writelfl(~HC_MAIN_MASKED_IRQS_SOC,
2743                          hpriv->main_mask_reg_addr);
2744                 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x\n",
2745                         readl(hpriv->main_cause_reg_addr),
2746                         readl(hpriv->main_mask_reg_addr));
2747         }
2748 done:
2749         return rc;
2750 }
2751
2752 static int mv_create_dma_pools(struct mv_host_priv *hpriv, struct device *dev)
2753 {
2754         hpriv->crqb_pool   = dmam_pool_create("crqb_q", dev, MV_CRQB_Q_SZ,
2755                                                              MV_CRQB_Q_SZ, 0);
2756         if (!hpriv->crqb_pool)
2757                 return -ENOMEM;
2758
2759         hpriv->crpb_pool   = dmam_pool_create("crpb_q", dev, MV_CRPB_Q_SZ,
2760                                                              MV_CRPB_Q_SZ, 0);
2761         if (!hpriv->crpb_pool)
2762                 return -ENOMEM;
2763
2764         hpriv->sg_tbl_pool = dmam_pool_create("sg_tbl", dev, MV_SG_TBL_SZ,
2765                                                              MV_SG_TBL_SZ, 0);
2766         if (!hpriv->sg_tbl_pool)
2767                 return -ENOMEM;
2768
2769         return 0;
2770 }
2771
2772 /**
2773  *      mv_platform_probe - handle a positive probe of an soc Marvell
2774  *      host
2775  *      @pdev: platform device found
2776  *
2777  *      LOCKING:
2778  *      Inherited from caller.
2779  */
2780 static int mv_platform_probe(struct platform_device *pdev)
2781 {
2782         static int printed_version;
2783         const struct mv_sata_platform_data *mv_platform_data;
2784         const struct ata_port_info *ppi[] =
2785             { &mv_port_info[chip_soc], NULL };
2786         struct ata_host *host;
2787         struct mv_host_priv *hpriv;
2788         struct resource *res;
2789         int n_ports, rc;
2790
2791         if (!printed_version++)
2792                 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
2793
2794         /*
2795          * Simple resource validation ..
2796          */
2797         if (unlikely(pdev->num_resources != 2)) {
2798                 dev_err(&pdev->dev, "invalid number of resources\n");
2799                 return -EINVAL;
2800         }
2801
2802         /*
2803          * Get the register base first
2804          */
2805         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2806         if (res == NULL)
2807                 return -EINVAL;
2808
2809         /* allocate host */
2810         mv_platform_data = pdev->dev.platform_data;
2811         n_ports = mv_platform_data->n_ports;
2812
2813         host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
2814         hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
2815
2816         if (!host || !hpriv)
2817                 return -ENOMEM;
2818         host->private_data = hpriv;
2819         hpriv->n_ports = n_ports;
2820
2821         host->iomap = NULL;
2822         hpriv->base = devm_ioremap(&pdev->dev, res->start,
2823                                    res->end - res->start + 1);
2824         hpriv->base -= MV_SATAHC0_REG_BASE;
2825
2826         rc = mv_create_dma_pools(hpriv, &pdev->dev);
2827         if (rc)
2828                 return rc;
2829
2830         /* initialize adapter */
2831         rc = mv_init_host(host, chip_soc);
2832         if (rc)
2833                 return rc;
2834
2835         dev_printk(KERN_INFO, &pdev->dev,
2836                    "slots %u ports %d\n", (unsigned)MV_MAX_Q_DEPTH,
2837                    host->n_ports);
2838
2839         return ata_host_activate(host, platform_get_irq(pdev, 0), mv_interrupt,
2840                                  IRQF_SHARED, &mv6_sht);
2841 }
2842
2843 /*
2844  *
2845  *      mv_platform_remove    -       unplug a platform interface
2846  *      @pdev: platform device
2847  *
2848  *      A platform bus SATA device has been unplugged. Perform the needed
2849  *      cleanup. Also called on module unload for any active devices.
2850  */
2851 static int __devexit mv_platform_remove(struct platform_device *pdev)
2852 {
2853         struct device *dev = &pdev->dev;
2854         struct ata_host *host = dev_get_drvdata(dev);
2855
2856         ata_host_detach(host);
2857         return 0;
2858 }
2859
2860 static struct platform_driver mv_platform_driver = {
2861         .probe                  = mv_platform_probe,
2862         .remove                 = __devexit_p(mv_platform_remove),
2863         .driver                 = {
2864                                    .name = DRV_NAME,
2865                                    .owner = THIS_MODULE,
2866                                   },
2867 };
2868
2869
2870 #ifdef CONFIG_PCI
2871 static int mv_pci_init_one(struct pci_dev *pdev,
2872                            const struct pci_device_id *ent);
2873
2874
2875 static struct pci_driver mv_pci_driver = {
2876         .name                   = DRV_NAME,
2877         .id_table               = mv_pci_tbl,
2878         .probe                  = mv_pci_init_one,
2879         .remove                 = ata_pci_remove_one,
2880 };
2881
2882 /*
2883  * module options
2884  */
2885 static int msi;       /* Use PCI msi; either zero (off, default) or non-zero */
2886
2887
2888 /* move to PCI layer or libata core? */
2889 static int pci_go_64(struct pci_dev *pdev)
2890 {
2891         int rc;
2892
2893         if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
2894                 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
2895                 if (rc) {
2896                         rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
2897                         if (rc) {
2898                                 dev_printk(KERN_ERR, &pdev->dev,
2899                                            "64-bit DMA enable failed\n");
2900                                 return rc;
2901                         }
2902                 }
2903         } else {
2904                 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
2905                 if (rc) {
2906                         dev_printk(KERN_ERR, &pdev->dev,
2907                                    "32-bit DMA enable failed\n");
2908                         return rc;
2909                 }
2910                 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
2911                 if (rc) {
2912                         dev_printk(KERN_ERR, &pdev->dev,
2913                                    "32-bit consistent DMA enable failed\n");
2914                         return rc;
2915                 }
2916         }
2917
2918         return rc;
2919 }
2920
2921 /**
2922  *      mv_print_info - Dump key info to kernel log for perusal.
2923  *      @host: ATA host to print info about
2924  *
2925  *      FIXME: complete this.
2926  *
2927  *      LOCKING:
2928  *      Inherited from caller.
2929  */
2930 static void mv_print_info(struct ata_host *host)
2931 {
2932         struct pci_dev *pdev = to_pci_dev(host->dev);
2933         struct mv_host_priv *hpriv = host->private_data;
2934         u8 scc;
2935         const char *scc_s, *gen;
2936
2937         /* Use this to determine the HW stepping of the chip so we know
2938          * what errata to workaround
2939          */
2940         pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &scc);
2941         if (scc == 0)
2942                 scc_s = "SCSI";
2943         else if (scc == 0x01)
2944                 scc_s = "RAID";
2945         else
2946                 scc_s = "?";
2947
2948         if (IS_GEN_I(hpriv))
2949                 gen = "I";
2950         else if (IS_GEN_II(hpriv))
2951                 gen = "II";
2952         else if (IS_GEN_IIE(hpriv))
2953                 gen = "IIE";
2954         else
2955                 gen = "?";
2956
2957         dev_printk(KERN_INFO, &pdev->dev,
2958                "Gen-%s %u slots %u ports %s mode IRQ via %s\n",
2959                gen, (unsigned)MV_MAX_Q_DEPTH, host->n_ports,
2960                scc_s, (MV_HP_FLAG_MSI & hpriv->hp_flags) ? "MSI" : "INTx");
2961 }
2962
2963 /**
2964  *      mv_pci_init_one - handle a positive probe of a PCI Marvell host
2965  *      @pdev: PCI device found
2966  *      @ent: PCI device ID entry for the matched host
2967  *
2968  *      LOCKING:
2969  *      Inherited from caller.
2970  */
2971 static int mv_pci_init_one(struct pci_dev *pdev,
2972                            const struct pci_device_id *ent)
2973 {
2974         static int printed_version;
2975         unsigned int board_idx = (unsigned int)ent->driver_data;
2976         const struct ata_port_info *ppi[] = { &mv_port_info[board_idx], NULL };
2977         struct ata_host *host;
2978         struct mv_host_priv *hpriv;
2979         int n_ports, rc;
2980
2981         if (!printed_version++)
2982                 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
2983
2984         /* allocate host */
2985         n_ports = mv_get_hc_count(ppi[0]->flags) * MV_PORTS_PER_HC;
2986
2987         host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
2988         hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
2989         if (!host || !hpriv)
2990                 return -ENOMEM;
2991         host->private_data = hpriv;
2992         hpriv->n_ports = n_ports;
2993
2994         /* acquire resources */
2995         rc = pcim_enable_device(pdev);
2996         if (rc)
2997                 return rc;
2998
2999         rc = pcim_iomap_regions(pdev, 1 << MV_PRIMARY_BAR, DRV_NAME);
3000         if (rc == -EBUSY)
3001                 pcim_pin_device(pdev);
3002         if (rc)
3003                 return rc;
3004         host->iomap = pcim_iomap_table(pdev);
3005         hpriv->base = host->iomap[MV_PRIMARY_BAR];
3006
3007         rc = pci_go_64(pdev);
3008         if (rc)
3009                 return rc;
3010
3011         rc = mv_create_dma_pools(hpriv, &pdev->dev);
3012         if (rc)
3013                 return rc;
3014
3015         /* initialize adapter */
3016         rc = mv_init_host(host, board_idx);
3017         if (rc)
3018                 return rc;
3019
3020         /* Enable interrupts */
3021         if (msi && pci_enable_msi(pdev))
3022                 pci_intx(pdev, 1);
3023
3024         mv_dump_pci_cfg(pdev, 0x68);
3025         mv_print_info(host);
3026
3027         pci_set_master(pdev);
3028         pci_try_set_mwi(pdev);
3029         return ata_host_activate(host, pdev->irq, mv_interrupt, IRQF_SHARED,
3030                                  IS_GEN_I(hpriv) ? &mv5_sht : &mv6_sht);
3031 }
3032 #endif
3033
3034 static int mv_platform_probe(struct platform_device *pdev);
3035 static int __devexit mv_platform_remove(struct platform_device *pdev);
3036
3037 static int __init mv_init(void)
3038 {
3039         int rc = -ENODEV;
3040 #ifdef CONFIG_PCI
3041         rc = pci_register_driver(&mv_pci_driver);
3042         if (rc < 0)
3043                 return rc;
3044 #endif
3045         rc = platform_driver_register(&mv_platform_driver);
3046
3047 #ifdef CONFIG_PCI
3048         if (rc < 0)
3049                 pci_unregister_driver(&mv_pci_driver);
3050 #endif
3051         return rc;
3052 }
3053
3054 static void __exit mv_exit(void)
3055 {
3056 #ifdef CONFIG_PCI
3057         pci_unregister_driver(&mv_pci_driver);
3058 #endif
3059         platform_driver_unregister(&mv_platform_driver);
3060 }
3061
3062 MODULE_AUTHOR("Brett Russ");
3063 MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
3064 MODULE_LICENSE("GPL");
3065 MODULE_DEVICE_TABLE(pci, mv_pci_tbl);
3066 MODULE_VERSION(DRV_VERSION);
3067 MODULE_ALIAS("platform:" DRV_NAME);
3068
3069 #ifdef CONFIG_PCI
3070 module_param(msi, int, 0444);
3071 MODULE_PARM_DESC(msi, "Enable use of PCI MSI (0=off, 1=on)");
3072 #endif
3073
3074 module_init(mv_init);
3075 module_exit(mv_exit);