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