mmc: use common byte swap macros
[linux-2.6/libata-dev.git] / drivers / ata / sata_mv.c
blobb39648f0914b023f9bedd8d3b7c206d8a5fc3fbd
1 /*
2 * sata_mv.c - Marvell SATA support
4 * Copyright 2005: EMC Corporation, all rights reserved.
5 * Copyright 2005 Red Hat, Inc. All rights reserved.
7 * Please ALWAYS copy linux-ide@vger.kernel.org on emails.
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; version 2 of the License.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 sata_mv TODO list:
27 1) Needs a full errata audit for all chipsets. I implemented most
28 of the errata workarounds found in the Marvell vendor driver, but
29 I distinctly remember a couple workarounds (one related to PCI-X)
30 are still needed.
32 4) Add NCQ support (easy to intermediate, once new-EH support appears)
34 5) Investigate problems with PCI Message Signalled Interrupts (MSI).
36 6) Add port multiplier support (intermediate)
38 8) Develop a low-power-consumption strategy, and implement it.
40 9) [Experiment, low priority] See if ATAPI can be supported using
41 "unknown FIS" or "vendor-specific FIS" support, or something creative
42 like that.
44 10) [Experiment, low priority] Investigate interrupt coalescing.
45 Quite often, especially with PCI Message Signalled Interrupts (MSI),
46 the overhead reduced by interrupt mitigation is quite often not
47 worth the latency cost.
49 11) [Experiment, Marvell value added] Is it possible to use target
50 mode to cross-connect two Linux boxes with Marvell cards? If so,
51 creating LibATA target mode support would be very interesting.
53 Target mode, for those without docs, is the ability to directly
54 connect two SATA controllers.
56 13) Verify that 7042 is fully supported. I only have a 6042.
61 #include <linux/kernel.h>
62 #include <linux/module.h>
63 #include <linux/pci.h>
64 #include <linux/init.h>
65 #include <linux/blkdev.h>
66 #include <linux/delay.h>
67 #include <linux/interrupt.h>
68 #include <linux/dma-mapping.h>
69 #include <linux/device.h>
70 #include <scsi/scsi_host.h>
71 #include <scsi/scsi_cmnd.h>
72 #include <scsi/scsi_device.h>
73 #include <linux/libata.h>
75 #define DRV_NAME "sata_mv"
76 #define DRV_VERSION "1.01"
78 enum {
79 /* BAR's are enumerated in terms of pci_resource_start() terms */
80 MV_PRIMARY_BAR = 0, /* offset 0x10: memory space */
81 MV_IO_BAR = 2, /* offset 0x18: IO space */
82 MV_MISC_BAR = 3, /* offset 0x1c: FLASH, NVRAM, SRAM */
84 MV_MAJOR_REG_AREA_SZ = 0x10000, /* 64KB */
85 MV_MINOR_REG_AREA_SZ = 0x2000, /* 8KB */
87 MV_PCI_REG_BASE = 0,
88 MV_IRQ_COAL_REG_BASE = 0x18000, /* 6xxx part only */
89 MV_IRQ_COAL_CAUSE = (MV_IRQ_COAL_REG_BASE + 0x08),
90 MV_IRQ_COAL_CAUSE_LO = (MV_IRQ_COAL_REG_BASE + 0x88),
91 MV_IRQ_COAL_CAUSE_HI = (MV_IRQ_COAL_REG_BASE + 0x8c),
92 MV_IRQ_COAL_THRESHOLD = (MV_IRQ_COAL_REG_BASE + 0xcc),
93 MV_IRQ_COAL_TIME_THRESHOLD = (MV_IRQ_COAL_REG_BASE + 0xd0),
95 MV_SATAHC0_REG_BASE = 0x20000,
96 MV_FLASH_CTL = 0x1046c,
97 MV_GPIO_PORT_CTL = 0x104f0,
98 MV_RESET_CFG = 0x180d8,
100 MV_PCI_REG_SZ = MV_MAJOR_REG_AREA_SZ,
101 MV_SATAHC_REG_SZ = MV_MAJOR_REG_AREA_SZ,
102 MV_SATAHC_ARBTR_REG_SZ = MV_MINOR_REG_AREA_SZ, /* arbiter */
103 MV_PORT_REG_SZ = MV_MINOR_REG_AREA_SZ,
105 MV_MAX_Q_DEPTH = 32,
106 MV_MAX_Q_DEPTH_MASK = MV_MAX_Q_DEPTH - 1,
108 /* CRQB needs alignment on a 1KB boundary. Size == 1KB
109 * CRPB needs alignment on a 256B boundary. Size == 256B
110 * SG count of 176 leads to MV_PORT_PRIV_DMA_SZ == 4KB
111 * ePRD (SG) entries need alignment on a 16B boundary. Size == 16B
113 MV_CRQB_Q_SZ = (32 * MV_MAX_Q_DEPTH),
114 MV_CRPB_Q_SZ = (8 * MV_MAX_Q_DEPTH),
115 MV_MAX_SG_CT = 176,
116 MV_SG_TBL_SZ = (16 * MV_MAX_SG_CT),
117 MV_PORT_PRIV_DMA_SZ = (MV_CRQB_Q_SZ + MV_CRPB_Q_SZ + MV_SG_TBL_SZ),
119 MV_PORTS_PER_HC = 4,
120 /* == (port / MV_PORTS_PER_HC) to determine HC from 0-7 port */
121 MV_PORT_HC_SHIFT = 2,
122 /* == (port % MV_PORTS_PER_HC) to determine hard port from 0-7 port */
123 MV_PORT_MASK = 3,
125 /* Host Flags */
126 MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */
127 MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */
128 MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
129 ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI |
130 ATA_FLAG_PIO_POLLING,
131 MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE,
133 CRQB_FLAG_READ = (1 << 0),
134 CRQB_TAG_SHIFT = 1,
135 CRQB_IOID_SHIFT = 6, /* CRQB Gen-II/IIE IO Id shift */
136 CRQB_HOSTQ_SHIFT = 17, /* CRQB Gen-II/IIE HostQueTag shift */
137 CRQB_CMD_ADDR_SHIFT = 8,
138 CRQB_CMD_CS = (0x2 << 11),
139 CRQB_CMD_LAST = (1 << 15),
141 CRPB_FLAG_STATUS_SHIFT = 8,
142 CRPB_IOID_SHIFT_6 = 5, /* CRPB Gen-II IO Id shift */
143 CRPB_IOID_SHIFT_7 = 7, /* CRPB Gen-IIE IO Id shift */
145 EPRD_FLAG_END_OF_TBL = (1 << 31),
147 /* PCI interface registers */
149 PCI_COMMAND_OFS = 0xc00,
151 PCI_MAIN_CMD_STS_OFS = 0xd30,
152 STOP_PCI_MASTER = (1 << 2),
153 PCI_MASTER_EMPTY = (1 << 3),
154 GLOB_SFT_RST = (1 << 4),
156 MV_PCI_MODE = 0xd00,
157 MV_PCI_EXP_ROM_BAR_CTL = 0xd2c,
158 MV_PCI_DISC_TIMER = 0xd04,
159 MV_PCI_MSI_TRIGGER = 0xc38,
160 MV_PCI_SERR_MASK = 0xc28,
161 MV_PCI_XBAR_TMOUT = 0x1d04,
162 MV_PCI_ERR_LOW_ADDRESS = 0x1d40,
163 MV_PCI_ERR_HIGH_ADDRESS = 0x1d44,
164 MV_PCI_ERR_ATTRIBUTE = 0x1d48,
165 MV_PCI_ERR_COMMAND = 0x1d50,
167 PCI_IRQ_CAUSE_OFS = 0x1d58,
168 PCI_IRQ_MASK_OFS = 0x1d5c,
169 PCI_UNMASK_ALL_IRQS = 0x7fffff, /* bits 22-0 */
171 HC_MAIN_IRQ_CAUSE_OFS = 0x1d60,
172 HC_MAIN_IRQ_MASK_OFS = 0x1d64,
173 PORT0_ERR = (1 << 0), /* shift by port # */
174 PORT0_DONE = (1 << 1), /* shift by port # */
175 HC0_IRQ_PEND = 0x1ff, /* bits 0-8 = HC0's ports */
176 HC_SHIFT = 9, /* bits 9-17 = HC1's ports */
177 PCI_ERR = (1 << 18),
178 TRAN_LO_DONE = (1 << 19), /* 6xxx: IRQ coalescing */
179 TRAN_HI_DONE = (1 << 20), /* 6xxx: IRQ coalescing */
180 PORTS_0_3_COAL_DONE = (1 << 8),
181 PORTS_4_7_COAL_DONE = (1 << 17),
182 PORTS_0_7_COAL_DONE = (1 << 21), /* 6xxx: IRQ coalescing */
183 GPIO_INT = (1 << 22),
184 SELF_INT = (1 << 23),
185 TWSI_INT = (1 << 24),
186 HC_MAIN_RSVD = (0x7f << 25), /* bits 31-25 */
187 HC_MAIN_RSVD_5 = (0x1fff << 19), /* bits 31-19 */
188 HC_MAIN_MASKED_IRQS = (TRAN_LO_DONE | TRAN_HI_DONE |
189 PORTS_0_7_COAL_DONE | GPIO_INT | TWSI_INT |
190 HC_MAIN_RSVD),
191 HC_MAIN_MASKED_IRQS_5 = (PORTS_0_3_COAL_DONE | PORTS_4_7_COAL_DONE |
192 HC_MAIN_RSVD_5),
194 /* SATAHC registers */
195 HC_CFG_OFS = 0,
197 HC_IRQ_CAUSE_OFS = 0x14,
198 CRPB_DMA_DONE = (1 << 0), /* shift by port # */
199 HC_IRQ_COAL = (1 << 4), /* IRQ coalescing */
200 DEV_IRQ = (1 << 8), /* shift by port # */
202 /* Shadow block registers */
203 SHD_BLK_OFS = 0x100,
204 SHD_CTL_AST_OFS = 0x20, /* ofs from SHD_BLK_OFS */
206 /* SATA registers */
207 SATA_STATUS_OFS = 0x300, /* ctrl, err regs follow status */
208 SATA_ACTIVE_OFS = 0x350,
209 PHY_MODE3 = 0x310,
210 PHY_MODE4 = 0x314,
211 PHY_MODE2 = 0x330,
212 MV5_PHY_MODE = 0x74,
213 MV5_LT_MODE = 0x30,
214 MV5_PHY_CTL = 0x0C,
215 SATA_INTERFACE_CTL = 0x050,
217 MV_M2_PREAMP_MASK = 0x7e0,
219 /* Port registers */
220 EDMA_CFG_OFS = 0,
221 EDMA_CFG_Q_DEPTH = 0, /* queueing disabled */
222 EDMA_CFG_NCQ = (1 << 5),
223 EDMA_CFG_NCQ_GO_ON_ERR = (1 << 14), /* continue on error */
224 EDMA_CFG_RD_BRST_EXT = (1 << 11), /* read burst 512B */
225 EDMA_CFG_WR_BUFF_LEN = (1 << 13), /* write buffer 512B */
227 EDMA_ERR_IRQ_CAUSE_OFS = 0x8,
228 EDMA_ERR_IRQ_MASK_OFS = 0xc,
229 EDMA_ERR_D_PAR = (1 << 0), /* UDMA data parity err */
230 EDMA_ERR_PRD_PAR = (1 << 1), /* UDMA PRD parity err */
231 EDMA_ERR_DEV = (1 << 2), /* device error */
232 EDMA_ERR_DEV_DCON = (1 << 3), /* device disconnect */
233 EDMA_ERR_DEV_CON = (1 << 4), /* device connected */
234 EDMA_ERR_SERR = (1 << 5), /* SError bits [WBDST] raised */
235 EDMA_ERR_SELF_DIS = (1 << 7), /* Gen II/IIE self-disable */
236 EDMA_ERR_SELF_DIS_5 = (1 << 8), /* Gen I self-disable */
237 EDMA_ERR_BIST_ASYNC = (1 << 8), /* BIST FIS or Async Notify */
238 EDMA_ERR_TRANS_IRQ_7 = (1 << 8), /* Gen IIE transprt layer irq */
239 EDMA_ERR_CRQB_PAR = (1 << 9), /* CRQB parity error */
240 EDMA_ERR_CRPB_PAR = (1 << 10), /* CRPB parity error */
241 EDMA_ERR_INTRL_PAR = (1 << 11), /* internal parity error */
242 EDMA_ERR_IORDY = (1 << 12), /* IORdy timeout */
243 EDMA_ERR_LNK_CTRL_RX = (0xf << 13), /* link ctrl rx error */
244 EDMA_ERR_LNK_CTRL_RX_2 = (1 << 15),
245 EDMA_ERR_LNK_DATA_RX = (0xf << 17), /* link data rx error */
246 EDMA_ERR_LNK_CTRL_TX = (0x1f << 21), /* link ctrl tx error */
247 EDMA_ERR_LNK_DATA_TX = (0x1f << 26), /* link data tx error */
248 EDMA_ERR_TRANS_PROTO = (1 << 31), /* transport protocol error */
249 EDMA_ERR_OVERRUN_5 = (1 << 5),
250 EDMA_ERR_UNDERRUN_5 = (1 << 6),
251 EDMA_EH_FREEZE = EDMA_ERR_D_PAR |
252 EDMA_ERR_PRD_PAR |
253 EDMA_ERR_DEV_DCON |
254 EDMA_ERR_DEV_CON |
255 EDMA_ERR_SERR |
256 EDMA_ERR_SELF_DIS |
257 EDMA_ERR_CRQB_PAR |
258 EDMA_ERR_CRPB_PAR |
259 EDMA_ERR_INTRL_PAR |
260 EDMA_ERR_IORDY |
261 EDMA_ERR_LNK_CTRL_RX_2 |
262 EDMA_ERR_LNK_DATA_RX |
263 EDMA_ERR_LNK_DATA_TX |
264 EDMA_ERR_TRANS_PROTO,
265 EDMA_EH_FREEZE_5 = EDMA_ERR_D_PAR |
266 EDMA_ERR_PRD_PAR |
267 EDMA_ERR_DEV_DCON |
268 EDMA_ERR_DEV_CON |
269 EDMA_ERR_OVERRUN_5 |
270 EDMA_ERR_UNDERRUN_5 |
271 EDMA_ERR_SELF_DIS_5 |
272 EDMA_ERR_CRQB_PAR |
273 EDMA_ERR_CRPB_PAR |
274 EDMA_ERR_INTRL_PAR |
275 EDMA_ERR_IORDY,
277 EDMA_REQ_Q_BASE_HI_OFS = 0x10,
278 EDMA_REQ_Q_IN_PTR_OFS = 0x14, /* also contains BASE_LO */
280 EDMA_REQ_Q_OUT_PTR_OFS = 0x18,
281 EDMA_REQ_Q_PTR_SHIFT = 5,
283 EDMA_RSP_Q_BASE_HI_OFS = 0x1c,
284 EDMA_RSP_Q_IN_PTR_OFS = 0x20,
285 EDMA_RSP_Q_OUT_PTR_OFS = 0x24, /* also contains BASE_LO */
286 EDMA_RSP_Q_PTR_SHIFT = 3,
288 EDMA_CMD_OFS = 0x28, /* EDMA command register */
289 EDMA_EN = (1 << 0), /* enable EDMA */
290 EDMA_DS = (1 << 1), /* disable EDMA; self-negated */
291 ATA_RST = (1 << 2), /* reset trans/link/phy */
293 EDMA_IORDY_TMOUT = 0x34,
294 EDMA_ARB_CFG = 0x38,
296 /* Host private flags (hp_flags) */
297 MV_HP_FLAG_MSI = (1 << 0),
298 MV_HP_ERRATA_50XXB0 = (1 << 1),
299 MV_HP_ERRATA_50XXB2 = (1 << 2),
300 MV_HP_ERRATA_60X1B2 = (1 << 3),
301 MV_HP_ERRATA_60X1C0 = (1 << 4),
302 MV_HP_ERRATA_XX42A0 = (1 << 5),
303 MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */
304 MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */
305 MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */
307 /* Port private flags (pp_flags) */
308 MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */
309 MV_PP_FLAG_HAD_A_RESET = (1 << 2), /* 1st hard reset complete? */
312 #define IS_GEN_I(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_I)
313 #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II)
314 #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE)
316 enum {
317 /* DMA boundary 0xffff is required by the s/g splitting
318 * we need on /length/ in mv_fill-sg().
320 MV_DMA_BOUNDARY = 0xffffU,
322 /* mask of register bits containing lower 32 bits
323 * of EDMA request queue DMA address
325 EDMA_REQ_Q_BASE_LO_MASK = 0xfffffc00U,
327 /* ditto, for response queue */
328 EDMA_RSP_Q_BASE_LO_MASK = 0xffffff00U,
331 enum chip_type {
332 chip_504x,
333 chip_508x,
334 chip_5080,
335 chip_604x,
336 chip_608x,
337 chip_6042,
338 chip_7042,
341 /* Command ReQuest Block: 32B */
342 struct mv_crqb {
343 __le32 sg_addr;
344 __le32 sg_addr_hi;
345 __le16 ctrl_flags;
346 __le16 ata_cmd[11];
349 struct mv_crqb_iie {
350 __le32 addr;
351 __le32 addr_hi;
352 __le32 flags;
353 __le32 len;
354 __le32 ata_cmd[4];
357 /* Command ResPonse Block: 8B */
358 struct mv_crpb {
359 __le16 id;
360 __le16 flags;
361 __le32 tmstmp;
364 /* EDMA Physical Region Descriptor (ePRD); A.K.A. SG */
365 struct mv_sg {
366 __le32 addr;
367 __le32 flags_size;
368 __le32 addr_hi;
369 __le32 reserved;
372 struct mv_port_priv {
373 struct mv_crqb *crqb;
374 dma_addr_t crqb_dma;
375 struct mv_crpb *crpb;
376 dma_addr_t crpb_dma;
377 struct mv_sg *sg_tbl;
378 dma_addr_t sg_tbl_dma;
380 unsigned int req_idx;
381 unsigned int resp_idx;
383 u32 pp_flags;
386 struct mv_port_signal {
387 u32 amps;
388 u32 pre;
391 struct mv_host_priv;
392 struct mv_hw_ops {
393 void (*phy_errata)(struct mv_host_priv *hpriv, void __iomem *mmio,
394 unsigned int port);
395 void (*enable_leds)(struct mv_host_priv *hpriv, void __iomem *mmio);
396 void (*read_preamp)(struct mv_host_priv *hpriv, int idx,
397 void __iomem *mmio);
398 int (*reset_hc)(struct mv_host_priv *hpriv, void __iomem *mmio,
399 unsigned int n_hc);
400 void (*reset_flash)(struct mv_host_priv *hpriv, void __iomem *mmio);
401 void (*reset_bus)(struct pci_dev *pdev, void __iomem *mmio);
404 struct mv_host_priv {
405 u32 hp_flags;
406 struct mv_port_signal signal[8];
407 const struct mv_hw_ops *ops;
410 static void mv_irq_clear(struct ata_port *ap);
411 static int mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val);
412 static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
413 static int mv5_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val);
414 static int mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
415 static int mv_port_start(struct ata_port *ap);
416 static void mv_port_stop(struct ata_port *ap);
417 static void mv_qc_prep(struct ata_queued_cmd *qc);
418 static void mv_qc_prep_iie(struct ata_queued_cmd *qc);
419 static unsigned int mv_qc_issue(struct ata_queued_cmd *qc);
420 static void mv_error_handler(struct ata_port *ap);
421 static void mv_post_int_cmd(struct ata_queued_cmd *qc);
422 static void mv_eh_freeze(struct ata_port *ap);
423 static void mv_eh_thaw(struct ata_port *ap);
424 static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
426 static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
427 unsigned int port);
428 static void mv5_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio);
429 static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx,
430 void __iomem *mmio);
431 static int mv5_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
432 unsigned int n_hc);
433 static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio);
434 static void mv5_reset_bus(struct pci_dev *pdev, void __iomem *mmio);
436 static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
437 unsigned int port);
438 static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio);
439 static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
440 void __iomem *mmio);
441 static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
442 unsigned int n_hc);
443 static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio);
444 static void mv_reset_pci_bus(struct pci_dev *pdev, void __iomem *mmio);
445 static void mv_channel_reset(struct mv_host_priv *hpriv, void __iomem *mmio,
446 unsigned int port_no);
448 static struct scsi_host_template mv5_sht = {
449 .module = THIS_MODULE,
450 .name = DRV_NAME,
451 .ioctl = ata_scsi_ioctl,
452 .queuecommand = ata_scsi_queuecmd,
453 .can_queue = ATA_DEF_QUEUE,
454 .this_id = ATA_SHT_THIS_ID,
455 .sg_tablesize = MV_MAX_SG_CT / 2,
456 .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
457 .emulated = ATA_SHT_EMULATED,
458 .use_clustering = 1,
459 .proc_name = DRV_NAME,
460 .dma_boundary = MV_DMA_BOUNDARY,
461 .slave_configure = ata_scsi_slave_config,
462 .slave_destroy = ata_scsi_slave_destroy,
463 .bios_param = ata_std_bios_param,
466 static struct scsi_host_template mv6_sht = {
467 .module = THIS_MODULE,
468 .name = DRV_NAME,
469 .ioctl = ata_scsi_ioctl,
470 .queuecommand = ata_scsi_queuecmd,
471 .can_queue = ATA_DEF_QUEUE,
472 .this_id = ATA_SHT_THIS_ID,
473 .sg_tablesize = MV_MAX_SG_CT / 2,
474 .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
475 .emulated = ATA_SHT_EMULATED,
476 .use_clustering = 1,
477 .proc_name = DRV_NAME,
478 .dma_boundary = MV_DMA_BOUNDARY,
479 .slave_configure = ata_scsi_slave_config,
480 .slave_destroy = ata_scsi_slave_destroy,
481 .bios_param = ata_std_bios_param,
484 static const struct ata_port_operations mv5_ops = {
485 .tf_load = ata_tf_load,
486 .tf_read = ata_tf_read,
487 .check_status = ata_check_status,
488 .exec_command = ata_exec_command,
489 .dev_select = ata_std_dev_select,
491 .cable_detect = ata_cable_sata,
493 .qc_prep = mv_qc_prep,
494 .qc_issue = mv_qc_issue,
495 .data_xfer = ata_data_xfer,
497 .irq_clear = mv_irq_clear,
498 .irq_on = ata_irq_on,
500 .error_handler = mv_error_handler,
501 .post_internal_cmd = mv_post_int_cmd,
502 .freeze = mv_eh_freeze,
503 .thaw = mv_eh_thaw,
505 .scr_read = mv5_scr_read,
506 .scr_write = mv5_scr_write,
508 .port_start = mv_port_start,
509 .port_stop = mv_port_stop,
512 static const struct ata_port_operations mv6_ops = {
513 .tf_load = ata_tf_load,
514 .tf_read = ata_tf_read,
515 .check_status = ata_check_status,
516 .exec_command = ata_exec_command,
517 .dev_select = ata_std_dev_select,
519 .cable_detect = ata_cable_sata,
521 .qc_prep = mv_qc_prep,
522 .qc_issue = mv_qc_issue,
523 .data_xfer = ata_data_xfer,
525 .irq_clear = mv_irq_clear,
526 .irq_on = ata_irq_on,
528 .error_handler = mv_error_handler,
529 .post_internal_cmd = mv_post_int_cmd,
530 .freeze = mv_eh_freeze,
531 .thaw = mv_eh_thaw,
533 .scr_read = mv_scr_read,
534 .scr_write = mv_scr_write,
536 .port_start = mv_port_start,
537 .port_stop = mv_port_stop,
540 static const struct ata_port_operations mv_iie_ops = {
541 .tf_load = ata_tf_load,
542 .tf_read = ata_tf_read,
543 .check_status = ata_check_status,
544 .exec_command = ata_exec_command,
545 .dev_select = ata_std_dev_select,
547 .cable_detect = ata_cable_sata,
549 .qc_prep = mv_qc_prep_iie,
550 .qc_issue = mv_qc_issue,
551 .data_xfer = ata_data_xfer,
553 .irq_clear = mv_irq_clear,
554 .irq_on = ata_irq_on,
556 .error_handler = mv_error_handler,
557 .post_internal_cmd = mv_post_int_cmd,
558 .freeze = mv_eh_freeze,
559 .thaw = mv_eh_thaw,
561 .scr_read = mv_scr_read,
562 .scr_write = mv_scr_write,
564 .port_start = mv_port_start,
565 .port_stop = mv_port_stop,
568 static const struct ata_port_info mv_port_info[] = {
569 { /* chip_504x */
570 .flags = MV_COMMON_FLAGS,
571 .pio_mask = 0x1f, /* pio0-4 */
572 .udma_mask = ATA_UDMA6,
573 .port_ops = &mv5_ops,
575 { /* chip_508x */
576 .flags = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC,
577 .pio_mask = 0x1f, /* pio0-4 */
578 .udma_mask = ATA_UDMA6,
579 .port_ops = &mv5_ops,
581 { /* chip_5080 */
582 .flags = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC,
583 .pio_mask = 0x1f, /* pio0-4 */
584 .udma_mask = ATA_UDMA6,
585 .port_ops = &mv5_ops,
587 { /* chip_604x */
588 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS,
589 .pio_mask = 0x1f, /* pio0-4 */
590 .udma_mask = ATA_UDMA6,
591 .port_ops = &mv6_ops,
593 { /* chip_608x */
594 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS |
595 MV_FLAG_DUAL_HC,
596 .pio_mask = 0x1f, /* pio0-4 */
597 .udma_mask = ATA_UDMA6,
598 .port_ops = &mv6_ops,
600 { /* chip_6042 */
601 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS,
602 .pio_mask = 0x1f, /* pio0-4 */
603 .udma_mask = ATA_UDMA6,
604 .port_ops = &mv_iie_ops,
606 { /* chip_7042 */
607 .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS,
608 .pio_mask = 0x1f, /* pio0-4 */
609 .udma_mask = ATA_UDMA6,
610 .port_ops = &mv_iie_ops,
614 static const struct pci_device_id mv_pci_tbl[] = {
615 { PCI_VDEVICE(MARVELL, 0x5040), chip_504x },
616 { PCI_VDEVICE(MARVELL, 0x5041), chip_504x },
617 { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 },
618 { PCI_VDEVICE(MARVELL, 0x5081), chip_508x },
619 /* RocketRAID 1740/174x have different identifiers */
620 { PCI_VDEVICE(TTI, 0x1740), chip_508x },
621 { PCI_VDEVICE(TTI, 0x1742), chip_508x },
623 { PCI_VDEVICE(MARVELL, 0x6040), chip_604x },
624 { PCI_VDEVICE(MARVELL, 0x6041), chip_604x },
625 { PCI_VDEVICE(MARVELL, 0x6042), chip_6042 },
626 { PCI_VDEVICE(MARVELL, 0x6080), chip_608x },
627 { PCI_VDEVICE(MARVELL, 0x6081), chip_608x },
629 { PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x },
631 /* Adaptec 1430SA */
632 { PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 },
634 { PCI_VDEVICE(TTI, 0x2310), chip_7042 },
636 /* add Marvell 7042 support */
637 { PCI_VDEVICE(MARVELL, 0x7042), chip_7042 },
639 { } /* terminate list */
642 static struct pci_driver mv_pci_driver = {
643 .name = DRV_NAME,
644 .id_table = mv_pci_tbl,
645 .probe = mv_init_one,
646 .remove = ata_pci_remove_one,
649 static const struct mv_hw_ops mv5xxx_ops = {
650 .phy_errata = mv5_phy_errata,
651 .enable_leds = mv5_enable_leds,
652 .read_preamp = mv5_read_preamp,
653 .reset_hc = mv5_reset_hc,
654 .reset_flash = mv5_reset_flash,
655 .reset_bus = mv5_reset_bus,
658 static const struct mv_hw_ops mv6xxx_ops = {
659 .phy_errata = mv6_phy_errata,
660 .enable_leds = mv6_enable_leds,
661 .read_preamp = mv6_read_preamp,
662 .reset_hc = mv6_reset_hc,
663 .reset_flash = mv6_reset_flash,
664 .reset_bus = mv_reset_pci_bus,
668 * module options
670 static int msi; /* Use PCI msi; either zero (off, default) or non-zero */
673 /* move to PCI layer or libata core? */
674 static int pci_go_64(struct pci_dev *pdev)
676 int rc;
678 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
679 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
680 if (rc) {
681 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
682 if (rc) {
683 dev_printk(KERN_ERR, &pdev->dev,
684 "64-bit DMA enable failed\n");
685 return rc;
688 } else {
689 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
690 if (rc) {
691 dev_printk(KERN_ERR, &pdev->dev,
692 "32-bit DMA enable failed\n");
693 return rc;
695 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
696 if (rc) {
697 dev_printk(KERN_ERR, &pdev->dev,
698 "32-bit consistent DMA enable failed\n");
699 return rc;
703 return rc;
707 * Functions
710 static inline void writelfl(unsigned long data, void __iomem *addr)
712 writel(data, addr);
713 (void) readl(addr); /* flush to avoid PCI posted write */
716 static inline void __iomem *mv_hc_base(void __iomem *base, unsigned int hc)
718 return (base + MV_SATAHC0_REG_BASE + (hc * MV_SATAHC_REG_SZ));
721 static inline unsigned int mv_hc_from_port(unsigned int port)
723 return port >> MV_PORT_HC_SHIFT;
726 static inline unsigned int mv_hardport_from_port(unsigned int port)
728 return port & MV_PORT_MASK;
731 static inline void __iomem *mv_hc_base_from_port(void __iomem *base,
732 unsigned int port)
734 return mv_hc_base(base, mv_hc_from_port(port));
737 static inline void __iomem *mv_port_base(void __iomem *base, unsigned int port)
739 return mv_hc_base_from_port(base, port) +
740 MV_SATAHC_ARBTR_REG_SZ +
741 (mv_hardport_from_port(port) * MV_PORT_REG_SZ);
744 static inline void __iomem *mv_ap_base(struct ata_port *ap)
746 return mv_port_base(ap->host->iomap[MV_PRIMARY_BAR], ap->port_no);
749 static inline int mv_get_hc_count(unsigned long port_flags)
751 return ((port_flags & MV_FLAG_DUAL_HC) ? 2 : 1);
754 static void mv_irq_clear(struct ata_port *ap)
758 static void mv_set_edma_ptrs(void __iomem *port_mmio,
759 struct mv_host_priv *hpriv,
760 struct mv_port_priv *pp)
762 u32 index;
765 * initialize request queue
767 index = (pp->req_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_REQ_Q_PTR_SHIFT;
769 WARN_ON(pp->crqb_dma & 0x3ff);
770 writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS);
771 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index,
772 port_mmio + EDMA_REQ_Q_IN_PTR_OFS);
774 if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0)
775 writelfl((pp->crqb_dma & 0xffffffff) | index,
776 port_mmio + EDMA_REQ_Q_OUT_PTR_OFS);
777 else
778 writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS);
781 * initialize response queue
783 index = (pp->resp_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_RSP_Q_PTR_SHIFT;
785 WARN_ON(pp->crpb_dma & 0xff);
786 writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS);
788 if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0)
789 writelfl((pp->crpb_dma & 0xffffffff) | index,
790 port_mmio + EDMA_RSP_Q_IN_PTR_OFS);
791 else
792 writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS);
794 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index,
795 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
799 * mv_start_dma - Enable eDMA engine
800 * @base: port base address
801 * @pp: port private data
803 * Verify the local cache of the eDMA state is accurate with a
804 * WARN_ON.
806 * LOCKING:
807 * Inherited from caller.
809 static void mv_start_dma(void __iomem *base, struct mv_host_priv *hpriv,
810 struct mv_port_priv *pp)
812 if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN)) {
813 /* clear EDMA event indicators, if any */
814 writelfl(0, base + EDMA_ERR_IRQ_CAUSE_OFS);
816 mv_set_edma_ptrs(base, hpriv, pp);
818 writelfl(EDMA_EN, base + EDMA_CMD_OFS);
819 pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
821 WARN_ON(!(EDMA_EN & readl(base + EDMA_CMD_OFS)));
825 * __mv_stop_dma - Disable eDMA engine
826 * @ap: ATA channel to manipulate
828 * Verify the local cache of the eDMA state is accurate with a
829 * WARN_ON.
831 * LOCKING:
832 * Inherited from caller.
834 static int __mv_stop_dma(struct ata_port *ap)
836 void __iomem *port_mmio = mv_ap_base(ap);
837 struct mv_port_priv *pp = ap->private_data;
838 u32 reg;
839 int i, err = 0;
841 if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
842 /* Disable EDMA if active. The disable bit auto clears.
844 writelfl(EDMA_DS, port_mmio + EDMA_CMD_OFS);
845 pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
846 } else {
847 WARN_ON(EDMA_EN & readl(port_mmio + EDMA_CMD_OFS));
850 /* now properly wait for the eDMA to stop */
851 for (i = 1000; i > 0; i--) {
852 reg = readl(port_mmio + EDMA_CMD_OFS);
853 if (!(reg & EDMA_EN))
854 break;
856 udelay(100);
859 if (reg & EDMA_EN) {
860 ata_port_printk(ap, KERN_ERR, "Unable to stop eDMA\n");
861 err = -EIO;
864 return err;
867 static int mv_stop_dma(struct ata_port *ap)
869 unsigned long flags;
870 int rc;
872 spin_lock_irqsave(&ap->host->lock, flags);
873 rc = __mv_stop_dma(ap);
874 spin_unlock_irqrestore(&ap->host->lock, flags);
876 return rc;
879 #ifdef ATA_DEBUG
880 static void mv_dump_mem(void __iomem *start, unsigned bytes)
882 int b, w;
883 for (b = 0; b < bytes; ) {
884 DPRINTK("%p: ", start + b);
885 for (w = 0; b < bytes && w < 4; w++) {
886 printk("%08x ", readl(start + b));
887 b += sizeof(u32);
889 printk("\n");
892 #endif
894 static void mv_dump_pci_cfg(struct pci_dev *pdev, unsigned bytes)
896 #ifdef ATA_DEBUG
897 int b, w;
898 u32 dw;
899 for (b = 0; b < bytes; ) {
900 DPRINTK("%02x: ", b);
901 for (w = 0; b < bytes && w < 4; w++) {
902 (void) pci_read_config_dword(pdev, b, &dw);
903 printk("%08x ", dw);
904 b += sizeof(u32);
906 printk("\n");
908 #endif
910 static void mv_dump_all_regs(void __iomem *mmio_base, int port,
911 struct pci_dev *pdev)
913 #ifdef ATA_DEBUG
914 void __iomem *hc_base = mv_hc_base(mmio_base,
915 port >> MV_PORT_HC_SHIFT);
916 void __iomem *port_base;
917 int start_port, num_ports, p, start_hc, num_hcs, hc;
919 if (0 > port) {
920 start_hc = start_port = 0;
921 num_ports = 8; /* shld be benign for 4 port devs */
922 num_hcs = 2;
923 } else {
924 start_hc = port >> MV_PORT_HC_SHIFT;
925 start_port = port;
926 num_ports = num_hcs = 1;
928 DPRINTK("All registers for port(s) %u-%u:\n", start_port,
929 num_ports > 1 ? num_ports - 1 : start_port);
931 if (NULL != pdev) {
932 DPRINTK("PCI config space regs:\n");
933 mv_dump_pci_cfg(pdev, 0x68);
935 DPRINTK("PCI regs:\n");
936 mv_dump_mem(mmio_base+0xc00, 0x3c);
937 mv_dump_mem(mmio_base+0xd00, 0x34);
938 mv_dump_mem(mmio_base+0xf00, 0x4);
939 mv_dump_mem(mmio_base+0x1d00, 0x6c);
940 for (hc = start_hc; hc < start_hc + num_hcs; hc++) {
941 hc_base = mv_hc_base(mmio_base, hc);
942 DPRINTK("HC regs (HC %i):\n", hc);
943 mv_dump_mem(hc_base, 0x1c);
945 for (p = start_port; p < start_port + num_ports; p++) {
946 port_base = mv_port_base(mmio_base, p);
947 DPRINTK("EDMA regs (port %i):\n", p);
948 mv_dump_mem(port_base, 0x54);
949 DPRINTK("SATA regs (port %i):\n", p);
950 mv_dump_mem(port_base+0x300, 0x60);
952 #endif
955 static unsigned int mv_scr_offset(unsigned int sc_reg_in)
957 unsigned int ofs;
959 switch (sc_reg_in) {
960 case SCR_STATUS:
961 case SCR_CONTROL:
962 case SCR_ERROR:
963 ofs = SATA_STATUS_OFS + (sc_reg_in * sizeof(u32));
964 break;
965 case SCR_ACTIVE:
966 ofs = SATA_ACTIVE_OFS; /* active is not with the others */
967 break;
968 default:
969 ofs = 0xffffffffU;
970 break;
972 return ofs;
975 static int mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val)
977 unsigned int ofs = mv_scr_offset(sc_reg_in);
979 if (ofs != 0xffffffffU) {
980 *val = readl(mv_ap_base(ap) + ofs);
981 return 0;
982 } else
983 return -EINVAL;
986 static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
988 unsigned int ofs = mv_scr_offset(sc_reg_in);
990 if (ofs != 0xffffffffU) {
991 writelfl(val, mv_ap_base(ap) + ofs);
992 return 0;
993 } else
994 return -EINVAL;
997 static void mv_edma_cfg(struct ata_port *ap, struct mv_host_priv *hpriv,
998 void __iomem *port_mmio)
1000 u32 cfg = readl(port_mmio + EDMA_CFG_OFS);
1002 /* set up non-NCQ EDMA configuration */
1003 cfg &= ~(1 << 9); /* disable eQue */
1005 if (IS_GEN_I(hpriv)) {
1006 cfg &= ~0x1f; /* clear queue depth */
1007 cfg |= (1 << 8); /* enab config burst size mask */
1010 else if (IS_GEN_II(hpriv)) {
1011 cfg &= ~0x1f; /* clear queue depth */
1012 cfg |= EDMA_CFG_RD_BRST_EXT | EDMA_CFG_WR_BUFF_LEN;
1013 cfg &= ~(EDMA_CFG_NCQ | EDMA_CFG_NCQ_GO_ON_ERR); /* clear NCQ */
1016 else if (IS_GEN_IIE(hpriv)) {
1017 cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */
1018 cfg |= (1 << 22); /* enab 4-entry host queue cache */
1019 cfg &= ~(1 << 19); /* dis 128-entry queue (for now?) */
1020 cfg |= (1 << 18); /* enab early completion */
1021 cfg |= (1 << 17); /* enab cut-through (dis stor&forwrd) */
1022 cfg &= ~(1 << 16); /* dis FIS-based switching (for now) */
1023 cfg &= ~(EDMA_CFG_NCQ); /* clear NCQ */
1026 writelfl(cfg, port_mmio + EDMA_CFG_OFS);
1030 * mv_port_start - Port specific init/start routine.
1031 * @ap: ATA channel to manipulate
1033 * Allocate and point to DMA memory, init port private memory,
1034 * zero indices.
1036 * LOCKING:
1037 * Inherited from caller.
1039 static int mv_port_start(struct ata_port *ap)
1041 struct device *dev = ap->host->dev;
1042 struct mv_host_priv *hpriv = ap->host->private_data;
1043 struct mv_port_priv *pp;
1044 void __iomem *port_mmio = mv_ap_base(ap);
1045 void *mem;
1046 dma_addr_t mem_dma;
1047 unsigned long flags;
1048 int rc;
1050 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1051 if (!pp)
1052 return -ENOMEM;
1054 mem = dmam_alloc_coherent(dev, MV_PORT_PRIV_DMA_SZ, &mem_dma,
1055 GFP_KERNEL);
1056 if (!mem)
1057 return -ENOMEM;
1058 memset(mem, 0, MV_PORT_PRIV_DMA_SZ);
1060 rc = ata_pad_alloc(ap, dev);
1061 if (rc)
1062 return rc;
1064 /* First item in chunk of DMA memory:
1065 * 32-slot command request table (CRQB), 32 bytes each in size
1067 pp->crqb = mem;
1068 pp->crqb_dma = mem_dma;
1069 mem += MV_CRQB_Q_SZ;
1070 mem_dma += MV_CRQB_Q_SZ;
1072 /* Second item:
1073 * 32-slot command response table (CRPB), 8 bytes each in size
1075 pp->crpb = mem;
1076 pp->crpb_dma = mem_dma;
1077 mem += MV_CRPB_Q_SZ;
1078 mem_dma += MV_CRPB_Q_SZ;
1080 /* Third item:
1081 * Table of scatter-gather descriptors (ePRD), 16 bytes each
1083 pp->sg_tbl = mem;
1084 pp->sg_tbl_dma = mem_dma;
1086 spin_lock_irqsave(&ap->host->lock, flags);
1088 mv_edma_cfg(ap, hpriv, port_mmio);
1090 mv_set_edma_ptrs(port_mmio, hpriv, pp);
1092 spin_unlock_irqrestore(&ap->host->lock, flags);
1094 /* Don't turn on EDMA here...do it before DMA commands only. Else
1095 * we'll be unable to send non-data, PIO, etc due to restricted access
1096 * to shadow regs.
1098 ap->private_data = pp;
1099 return 0;
1103 * mv_port_stop - Port specific cleanup/stop routine.
1104 * @ap: ATA channel to manipulate
1106 * Stop DMA, cleanup port memory.
1108 * LOCKING:
1109 * This routine uses the host lock to protect the DMA stop.
1111 static void mv_port_stop(struct ata_port *ap)
1113 mv_stop_dma(ap);
1117 * mv_fill_sg - Fill out the Marvell ePRD (scatter gather) entries
1118 * @qc: queued command whose SG list to source from
1120 * Populate the SG list and mark the last entry.
1122 * LOCKING:
1123 * Inherited from caller.
1125 static void mv_fill_sg(struct ata_queued_cmd *qc)
1127 struct mv_port_priv *pp = qc->ap->private_data;
1128 struct scatterlist *sg;
1129 struct mv_sg *mv_sg, *last_sg = NULL;
1131 mv_sg = pp->sg_tbl;
1132 ata_for_each_sg(sg, qc) {
1133 dma_addr_t addr = sg_dma_address(sg);
1134 u32 sg_len = sg_dma_len(sg);
1136 while (sg_len) {
1137 u32 offset = addr & 0xffff;
1138 u32 len = sg_len;
1140 if ((offset + sg_len > 0x10000))
1141 len = 0x10000 - offset;
1143 mv_sg->addr = cpu_to_le32(addr & 0xffffffff);
1144 mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16);
1145 mv_sg->flags_size = cpu_to_le32(len & 0xffff);
1147 sg_len -= len;
1148 addr += len;
1150 last_sg = mv_sg;
1151 mv_sg++;
1155 if (likely(last_sg))
1156 last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);
1159 static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last)
1161 u16 tmp = data | (addr << CRQB_CMD_ADDR_SHIFT) | CRQB_CMD_CS |
1162 (last ? CRQB_CMD_LAST : 0);
1163 *cmdw = cpu_to_le16(tmp);
1167 * mv_qc_prep - Host specific command preparation.
1168 * @qc: queued command to prepare
1170 * This routine simply redirects to the general purpose routine
1171 * if command is not DMA. Else, it handles prep of the CRQB
1172 * (command request block), does some sanity checking, and calls
1173 * the SG load routine.
1175 * LOCKING:
1176 * Inherited from caller.
1178 static void mv_qc_prep(struct ata_queued_cmd *qc)
1180 struct ata_port *ap = qc->ap;
1181 struct mv_port_priv *pp = ap->private_data;
1182 __le16 *cw;
1183 struct ata_taskfile *tf;
1184 u16 flags = 0;
1185 unsigned in_index;
1187 if (qc->tf.protocol != ATA_PROT_DMA)
1188 return;
1190 /* Fill in command request block
1192 if (!(qc->tf.flags & ATA_TFLAG_WRITE))
1193 flags |= CRQB_FLAG_READ;
1194 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
1195 flags |= qc->tag << CRQB_TAG_SHIFT;
1196 flags |= qc->tag << CRQB_IOID_SHIFT; /* 50xx appears to ignore this*/
1198 /* get current queue index from software */
1199 in_index = pp->req_idx & MV_MAX_Q_DEPTH_MASK;
1201 pp->crqb[in_index].sg_addr =
1202 cpu_to_le32(pp->sg_tbl_dma & 0xffffffff);
1203 pp->crqb[in_index].sg_addr_hi =
1204 cpu_to_le32((pp->sg_tbl_dma >> 16) >> 16);
1205 pp->crqb[in_index].ctrl_flags = cpu_to_le16(flags);
1207 cw = &pp->crqb[in_index].ata_cmd[0];
1208 tf = &qc->tf;
1210 /* Sadly, the CRQB cannot accomodate all registers--there are
1211 * only 11 bytes...so we must pick and choose required
1212 * registers based on the command. So, we drop feature and
1213 * hob_feature for [RW] DMA commands, but they are needed for
1214 * NCQ. NCQ will drop hob_nsect.
1216 switch (tf->command) {
1217 case ATA_CMD_READ:
1218 case ATA_CMD_READ_EXT:
1219 case ATA_CMD_WRITE:
1220 case ATA_CMD_WRITE_EXT:
1221 case ATA_CMD_WRITE_FUA_EXT:
1222 mv_crqb_pack_cmd(cw++, tf->hob_nsect, ATA_REG_NSECT, 0);
1223 break;
1224 #ifdef LIBATA_NCQ /* FIXME: remove this line when NCQ added */
1225 case ATA_CMD_FPDMA_READ:
1226 case ATA_CMD_FPDMA_WRITE:
1227 mv_crqb_pack_cmd(cw++, tf->hob_feature, ATA_REG_FEATURE, 0);
1228 mv_crqb_pack_cmd(cw++, tf->feature, ATA_REG_FEATURE, 0);
1229 break;
1230 #endif /* FIXME: remove this line when NCQ added */
1231 default:
1232 /* The only other commands EDMA supports in non-queued and
1233 * non-NCQ mode are: [RW] STREAM DMA and W DMA FUA EXT, none
1234 * of which are defined/used by Linux. If we get here, this
1235 * driver needs work.
1237 * FIXME: modify libata to give qc_prep a return value and
1238 * return error here.
1240 BUG_ON(tf->command);
1241 break;
1243 mv_crqb_pack_cmd(cw++, tf->nsect, ATA_REG_NSECT, 0);
1244 mv_crqb_pack_cmd(cw++, tf->hob_lbal, ATA_REG_LBAL, 0);
1245 mv_crqb_pack_cmd(cw++, tf->lbal, ATA_REG_LBAL, 0);
1246 mv_crqb_pack_cmd(cw++, tf->hob_lbam, ATA_REG_LBAM, 0);
1247 mv_crqb_pack_cmd(cw++, tf->lbam, ATA_REG_LBAM, 0);
1248 mv_crqb_pack_cmd(cw++, tf->hob_lbah, ATA_REG_LBAH, 0);
1249 mv_crqb_pack_cmd(cw++, tf->lbah, ATA_REG_LBAH, 0);
1250 mv_crqb_pack_cmd(cw++, tf->device, ATA_REG_DEVICE, 0);
1251 mv_crqb_pack_cmd(cw++, tf->command, ATA_REG_CMD, 1); /* last */
1253 if (!(qc->flags & ATA_QCFLAG_DMAMAP))
1254 return;
1255 mv_fill_sg(qc);
1259 * mv_qc_prep_iie - Host specific command preparation.
1260 * @qc: queued command to prepare
1262 * This routine simply redirects to the general purpose routine
1263 * if command is not DMA. Else, it handles prep of the CRQB
1264 * (command request block), does some sanity checking, and calls
1265 * the SG load routine.
1267 * LOCKING:
1268 * Inherited from caller.
1270 static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
1272 struct ata_port *ap = qc->ap;
1273 struct mv_port_priv *pp = ap->private_data;
1274 struct mv_crqb_iie *crqb;
1275 struct ata_taskfile *tf;
1276 unsigned in_index;
1277 u32 flags = 0;
1279 if (qc->tf.protocol != ATA_PROT_DMA)
1280 return;
1282 /* Fill in Gen IIE command request block
1284 if (!(qc->tf.flags & ATA_TFLAG_WRITE))
1285 flags |= CRQB_FLAG_READ;
1287 WARN_ON(MV_MAX_Q_DEPTH <= qc->tag);
1288 flags |= qc->tag << CRQB_TAG_SHIFT;
1289 flags |= qc->tag << CRQB_IOID_SHIFT; /* "I/O Id" is -really-
1290 what we use as our tag */
1292 /* get current queue index from software */
1293 in_index = pp->req_idx & MV_MAX_Q_DEPTH_MASK;
1295 crqb = (struct mv_crqb_iie *) &pp->crqb[in_index];
1296 crqb->addr = cpu_to_le32(pp->sg_tbl_dma & 0xffffffff);
1297 crqb->addr_hi = cpu_to_le32((pp->sg_tbl_dma >> 16) >> 16);
1298 crqb->flags = cpu_to_le32(flags);
1300 tf = &qc->tf;
1301 crqb->ata_cmd[0] = cpu_to_le32(
1302 (tf->command << 16) |
1303 (tf->feature << 24)
1305 crqb->ata_cmd[1] = cpu_to_le32(
1306 (tf->lbal << 0) |
1307 (tf->lbam << 8) |
1308 (tf->lbah << 16) |
1309 (tf->device << 24)
1311 crqb->ata_cmd[2] = cpu_to_le32(
1312 (tf->hob_lbal << 0) |
1313 (tf->hob_lbam << 8) |
1314 (tf->hob_lbah << 16) |
1315 (tf->hob_feature << 24)
1317 crqb->ata_cmd[3] = cpu_to_le32(
1318 (tf->nsect << 0) |
1319 (tf->hob_nsect << 8)
1322 if (!(qc->flags & ATA_QCFLAG_DMAMAP))
1323 return;
1324 mv_fill_sg(qc);
1328 * mv_qc_issue - Initiate a command to the host
1329 * @qc: queued command to start
1331 * This routine simply redirects to the general purpose routine
1332 * if command is not DMA. Else, it sanity checks our local
1333 * caches of the request producer/consumer indices then enables
1334 * DMA and bumps the request producer index.
1336 * LOCKING:
1337 * Inherited from caller.
1339 static unsigned int mv_qc_issue(struct ata_queued_cmd *qc)
1341 struct ata_port *ap = qc->ap;
1342 void __iomem *port_mmio = mv_ap_base(ap);
1343 struct mv_port_priv *pp = ap->private_data;
1344 struct mv_host_priv *hpriv = ap->host->private_data;
1345 u32 in_index;
1347 if (qc->tf.protocol != ATA_PROT_DMA) {
1348 /* We're about to send a non-EDMA capable command to the
1349 * port. Turn off EDMA so there won't be problems accessing
1350 * shadow block, etc registers.
1352 __mv_stop_dma(ap);
1353 return ata_qc_issue_prot(qc);
1356 mv_start_dma(port_mmio, hpriv, pp);
1358 in_index = pp->req_idx & MV_MAX_Q_DEPTH_MASK;
1360 /* until we do queuing, the queue should be empty at this point */
1361 WARN_ON(in_index != ((readl(port_mmio + EDMA_REQ_Q_OUT_PTR_OFS)
1362 >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK));
1364 pp->req_idx++;
1366 in_index = (pp->req_idx & MV_MAX_Q_DEPTH_MASK) << EDMA_REQ_Q_PTR_SHIFT;
1368 /* and write the request in pointer to kick the EDMA to life */
1369 writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index,
1370 port_mmio + EDMA_REQ_Q_IN_PTR_OFS);
1372 return 0;
1376 * mv_err_intr - Handle error interrupts on the port
1377 * @ap: ATA channel to manipulate
1378 * @reset_allowed: bool: 0 == don't trigger from reset here
1380 * In most cases, just clear the interrupt and move on. However,
1381 * some cases require an eDMA reset, which is done right before
1382 * the COMRESET in mv_phy_reset(). The SERR case requires a
1383 * clear of pending errors in the SATA SERROR register. Finally,
1384 * if the port disabled DMA, update our cached copy to match.
1386 * LOCKING:
1387 * Inherited from caller.
1389 static void mv_err_intr(struct ata_port *ap, struct ata_queued_cmd *qc)
1391 void __iomem *port_mmio = mv_ap_base(ap);
1392 u32 edma_err_cause, eh_freeze_mask, serr = 0;
1393 struct mv_port_priv *pp = ap->private_data;
1394 struct mv_host_priv *hpriv = ap->host->private_data;
1395 unsigned int edma_enabled = (pp->pp_flags & MV_PP_FLAG_EDMA_EN);
1396 unsigned int action = 0, err_mask = 0;
1397 struct ata_eh_info *ehi = &ap->link.eh_info;
1399 ata_ehi_clear_desc(ehi);
1401 if (!edma_enabled) {
1402 /* just a guess: do we need to do this? should we
1403 * expand this, and do it in all cases?
1405 sata_scr_read(&ap->link, SCR_ERROR, &serr);
1406 sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
1409 edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1411 ata_ehi_push_desc(ehi, "edma_err 0x%08x", edma_err_cause);
1414 * all generations share these EDMA error cause bits
1417 if (edma_err_cause & EDMA_ERR_DEV)
1418 err_mask |= AC_ERR_DEV;
1419 if (edma_err_cause & (EDMA_ERR_D_PAR | EDMA_ERR_PRD_PAR |
1420 EDMA_ERR_CRQB_PAR | EDMA_ERR_CRPB_PAR |
1421 EDMA_ERR_INTRL_PAR)) {
1422 err_mask |= AC_ERR_ATA_BUS;
1423 action |= ATA_EH_HARDRESET;
1424 ata_ehi_push_desc(ehi, "parity error");
1426 if (edma_err_cause & (EDMA_ERR_DEV_DCON | EDMA_ERR_DEV_CON)) {
1427 ata_ehi_hotplugged(ehi);
1428 ata_ehi_push_desc(ehi, edma_err_cause & EDMA_ERR_DEV_DCON ?
1429 "dev disconnect" : "dev connect");
1432 if (IS_GEN_I(hpriv)) {
1433 eh_freeze_mask = EDMA_EH_FREEZE_5;
1435 if (edma_err_cause & EDMA_ERR_SELF_DIS_5) {
1436 struct mv_port_priv *pp = ap->private_data;
1437 pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
1438 ata_ehi_push_desc(ehi, "EDMA self-disable");
1440 } else {
1441 eh_freeze_mask = EDMA_EH_FREEZE;
1443 if (edma_err_cause & EDMA_ERR_SELF_DIS) {
1444 struct mv_port_priv *pp = ap->private_data;
1445 pp->pp_flags &= ~MV_PP_FLAG_EDMA_EN;
1446 ata_ehi_push_desc(ehi, "EDMA self-disable");
1449 if (edma_err_cause & EDMA_ERR_SERR) {
1450 sata_scr_read(&ap->link, SCR_ERROR, &serr);
1451 sata_scr_write_flush(&ap->link, SCR_ERROR, serr);
1452 err_mask = AC_ERR_ATA_BUS;
1453 action |= ATA_EH_HARDRESET;
1457 /* Clear EDMA now that SERR cleanup done */
1458 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
1460 if (!err_mask) {
1461 err_mask = AC_ERR_OTHER;
1462 action |= ATA_EH_HARDRESET;
1465 ehi->serror |= serr;
1466 ehi->action |= action;
1468 if (qc)
1469 qc->err_mask |= err_mask;
1470 else
1471 ehi->err_mask |= err_mask;
1473 if (edma_err_cause & eh_freeze_mask)
1474 ata_port_freeze(ap);
1475 else
1476 ata_port_abort(ap);
1479 static void mv_intr_pio(struct ata_port *ap)
1481 struct ata_queued_cmd *qc;
1482 u8 ata_status;
1484 /* ignore spurious intr if drive still BUSY */
1485 ata_status = readb(ap->ioaddr.status_addr);
1486 if (unlikely(ata_status & ATA_BUSY))
1487 return;
1489 /* get active ATA command */
1490 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1491 if (unlikely(!qc)) /* no active tag */
1492 return;
1493 if (qc->tf.flags & ATA_TFLAG_POLLING) /* polling; we don't own qc */
1494 return;
1496 /* and finally, complete the ATA command */
1497 qc->err_mask |= ac_err_mask(ata_status);
1498 ata_qc_complete(qc);
1501 static void mv_intr_edma(struct ata_port *ap)
1503 void __iomem *port_mmio = mv_ap_base(ap);
1504 struct mv_host_priv *hpriv = ap->host->private_data;
1505 struct mv_port_priv *pp = ap->private_data;
1506 struct ata_queued_cmd *qc;
1507 u32 out_index, in_index;
1508 bool work_done = false;
1510 /* get h/w response queue pointer */
1511 in_index = (readl(port_mmio + EDMA_RSP_Q_IN_PTR_OFS)
1512 >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK;
1514 while (1) {
1515 u16 status;
1516 unsigned int tag;
1518 /* get s/w response queue last-read pointer, and compare */
1519 out_index = pp->resp_idx & MV_MAX_Q_DEPTH_MASK;
1520 if (in_index == out_index)
1521 break;
1523 /* 50xx: get active ATA command */
1524 if (IS_GEN_I(hpriv))
1525 tag = ap->link.active_tag;
1527 /* Gen II/IIE: get active ATA command via tag, to enable
1528 * support for queueing. this works transparently for
1529 * queued and non-queued modes.
1531 else if (IS_GEN_II(hpriv))
1532 tag = (le16_to_cpu(pp->crpb[out_index].id)
1533 >> CRPB_IOID_SHIFT_6) & 0x3f;
1535 else /* IS_GEN_IIE */
1536 tag = (le16_to_cpu(pp->crpb[out_index].id)
1537 >> CRPB_IOID_SHIFT_7) & 0x3f;
1539 qc = ata_qc_from_tag(ap, tag);
1541 /* lower 8 bits of status are EDMA_ERR_IRQ_CAUSE_OFS
1542 * bits (WARNING: might not necessarily be associated
1543 * with this command), which -should- be clear
1544 * if all is well
1546 status = le16_to_cpu(pp->crpb[out_index].flags);
1547 if (unlikely(status & 0xff)) {
1548 mv_err_intr(ap, qc);
1549 return;
1552 /* and finally, complete the ATA command */
1553 if (qc) {
1554 qc->err_mask |=
1555 ac_err_mask(status >> CRPB_FLAG_STATUS_SHIFT);
1556 ata_qc_complete(qc);
1559 /* advance software response queue pointer, to
1560 * indicate (after the loop completes) to hardware
1561 * that we have consumed a response queue entry.
1563 work_done = true;
1564 pp->resp_idx++;
1567 if (work_done)
1568 writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) |
1569 (out_index << EDMA_RSP_Q_PTR_SHIFT),
1570 port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
1574 * mv_host_intr - Handle all interrupts on the given host controller
1575 * @host: host specific structure
1576 * @relevant: port error bits relevant to this host controller
1577 * @hc: which host controller we're to look at
1579 * Read then write clear the HC interrupt status then walk each
1580 * port connected to the HC and see if it needs servicing. Port
1581 * success ints are reported in the HC interrupt status reg, the
1582 * port error ints are reported in the higher level main
1583 * interrupt status register and thus are passed in via the
1584 * 'relevant' argument.
1586 * LOCKING:
1587 * Inherited from caller.
1589 static void mv_host_intr(struct ata_host *host, u32 relevant, unsigned int hc)
1591 void __iomem *mmio = host->iomap[MV_PRIMARY_BAR];
1592 void __iomem *hc_mmio = mv_hc_base(mmio, hc);
1593 u32 hc_irq_cause;
1594 int port, port0;
1596 if (hc == 0)
1597 port0 = 0;
1598 else
1599 port0 = MV_PORTS_PER_HC;
1601 /* we'll need the HC success int register in most cases */
1602 hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
1603 if (!hc_irq_cause)
1604 return;
1606 writelfl(~hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS);
1608 VPRINTK("ENTER, hc%u relevant=0x%08x HC IRQ cause=0x%08x\n",
1609 hc, relevant, hc_irq_cause);
1611 for (port = port0; port < port0 + MV_PORTS_PER_HC; port++) {
1612 struct ata_port *ap = host->ports[port];
1613 struct mv_port_priv *pp = ap->private_data;
1614 int have_err_bits, hard_port, shift;
1616 if ((!ap) || (ap->flags & ATA_FLAG_DISABLED))
1617 continue;
1619 shift = port << 1; /* (port * 2) */
1620 if (port >= MV_PORTS_PER_HC) {
1621 shift++; /* skip bit 8 in the HC Main IRQ reg */
1623 have_err_bits = ((PORT0_ERR << shift) & relevant);
1625 if (unlikely(have_err_bits)) {
1626 struct ata_queued_cmd *qc;
1628 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1629 if (qc && (qc->tf.flags & ATA_TFLAG_POLLING))
1630 continue;
1632 mv_err_intr(ap, qc);
1633 continue;
1636 hard_port = mv_hardport_from_port(port); /* range 0..3 */
1638 if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
1639 if ((CRPB_DMA_DONE << hard_port) & hc_irq_cause)
1640 mv_intr_edma(ap);
1641 } else {
1642 if ((DEV_IRQ << hard_port) & hc_irq_cause)
1643 mv_intr_pio(ap);
1646 VPRINTK("EXIT\n");
1649 static void mv_pci_error(struct ata_host *host, void __iomem *mmio)
1651 struct ata_port *ap;
1652 struct ata_queued_cmd *qc;
1653 struct ata_eh_info *ehi;
1654 unsigned int i, err_mask, printed = 0;
1655 u32 err_cause;
1657 err_cause = readl(mmio + PCI_IRQ_CAUSE_OFS);
1659 dev_printk(KERN_ERR, host->dev, "PCI ERROR; PCI IRQ cause=0x%08x\n",
1660 err_cause);
1662 DPRINTK("All regs @ PCI error\n");
1663 mv_dump_all_regs(mmio, -1, to_pci_dev(host->dev));
1665 writelfl(0, mmio + PCI_IRQ_CAUSE_OFS);
1667 for (i = 0; i < host->n_ports; i++) {
1668 ap = host->ports[i];
1669 if (!ata_link_offline(&ap->link)) {
1670 ehi = &ap->link.eh_info;
1671 ata_ehi_clear_desc(ehi);
1672 if (!printed++)
1673 ata_ehi_push_desc(ehi,
1674 "PCI err cause 0x%08x", err_cause);
1675 err_mask = AC_ERR_HOST_BUS;
1676 ehi->action = ATA_EH_HARDRESET;
1677 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1678 if (qc)
1679 qc->err_mask |= err_mask;
1680 else
1681 ehi->err_mask |= err_mask;
1683 ata_port_freeze(ap);
1689 * mv_interrupt - Main interrupt event handler
1690 * @irq: unused
1691 * @dev_instance: private data; in this case the host structure
1693 * Read the read only register to determine if any host
1694 * controllers have pending interrupts. If so, call lower level
1695 * routine to handle. Also check for PCI errors which are only
1696 * reported here.
1698 * LOCKING:
1699 * This routine holds the host lock while processing pending
1700 * interrupts.
1702 static irqreturn_t mv_interrupt(int irq, void *dev_instance)
1704 struct ata_host *host = dev_instance;
1705 unsigned int hc, handled = 0, n_hcs;
1706 void __iomem *mmio = host->iomap[MV_PRIMARY_BAR];
1707 u32 irq_stat;
1709 irq_stat = readl(mmio + HC_MAIN_IRQ_CAUSE_OFS);
1711 /* check the cases where we either have nothing pending or have read
1712 * a bogus register value which can indicate HW removal or PCI fault
1714 if (!irq_stat || (0xffffffffU == irq_stat))
1715 return IRQ_NONE;
1717 n_hcs = mv_get_hc_count(host->ports[0]->flags);
1718 spin_lock(&host->lock);
1720 if (unlikely(irq_stat & PCI_ERR)) {
1721 mv_pci_error(host, mmio);
1722 handled = 1;
1723 goto out_unlock; /* skip all other HC irq handling */
1726 for (hc = 0; hc < n_hcs; hc++) {
1727 u32 relevant = irq_stat & (HC0_IRQ_PEND << (hc * HC_SHIFT));
1728 if (relevant) {
1729 mv_host_intr(host, relevant, hc);
1730 handled = 1;
1734 out_unlock:
1735 spin_unlock(&host->lock);
1737 return IRQ_RETVAL(handled);
1740 static void __iomem *mv5_phy_base(void __iomem *mmio, unsigned int port)
1742 void __iomem *hc_mmio = mv_hc_base_from_port(mmio, port);
1743 unsigned long ofs = (mv_hardport_from_port(port) + 1) * 0x100UL;
1745 return hc_mmio + ofs;
1748 static unsigned int mv5_scr_offset(unsigned int sc_reg_in)
1750 unsigned int ofs;
1752 switch (sc_reg_in) {
1753 case SCR_STATUS:
1754 case SCR_ERROR:
1755 case SCR_CONTROL:
1756 ofs = sc_reg_in * sizeof(u32);
1757 break;
1758 default:
1759 ofs = 0xffffffffU;
1760 break;
1762 return ofs;
1765 static int mv5_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val)
1767 void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
1768 void __iomem *addr = mv5_phy_base(mmio, ap->port_no);
1769 unsigned int ofs = mv5_scr_offset(sc_reg_in);
1771 if (ofs != 0xffffffffU) {
1772 *val = readl(addr + ofs);
1773 return 0;
1774 } else
1775 return -EINVAL;
1778 static int mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
1780 void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
1781 void __iomem *addr = mv5_phy_base(mmio, ap->port_no);
1782 unsigned int ofs = mv5_scr_offset(sc_reg_in);
1784 if (ofs != 0xffffffffU) {
1785 writelfl(val, addr + ofs);
1786 return 0;
1787 } else
1788 return -EINVAL;
1791 static void mv5_reset_bus(struct pci_dev *pdev, void __iomem *mmio)
1793 int early_5080;
1795 early_5080 = (pdev->device == 0x5080) && (pdev->revision == 0);
1797 if (!early_5080) {
1798 u32 tmp = readl(mmio + MV_PCI_EXP_ROM_BAR_CTL);
1799 tmp |= (1 << 0);
1800 writel(tmp, mmio + MV_PCI_EXP_ROM_BAR_CTL);
1803 mv_reset_pci_bus(pdev, mmio);
1806 static void mv5_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
1808 writel(0x0fcfffff, mmio + MV_FLASH_CTL);
1811 static void mv5_read_preamp(struct mv_host_priv *hpriv, int idx,
1812 void __iomem *mmio)
1814 void __iomem *phy_mmio = mv5_phy_base(mmio, idx);
1815 u32 tmp;
1817 tmp = readl(phy_mmio + MV5_PHY_MODE);
1819 hpriv->signal[idx].pre = tmp & 0x1800; /* bits 12:11 */
1820 hpriv->signal[idx].amps = tmp & 0xe0; /* bits 7:5 */
1823 static void mv5_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
1825 u32 tmp;
1827 writel(0, mmio + MV_GPIO_PORT_CTL);
1829 /* FIXME: handle MV_HP_ERRATA_50XXB2 errata */
1831 tmp = readl(mmio + MV_PCI_EXP_ROM_BAR_CTL);
1832 tmp |= ~(1 << 0);
1833 writel(tmp, mmio + MV_PCI_EXP_ROM_BAR_CTL);
1836 static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
1837 unsigned int port)
1839 void __iomem *phy_mmio = mv5_phy_base(mmio, port);
1840 const u32 mask = (1<<12) | (1<<11) | (1<<7) | (1<<6) | (1<<5);
1841 u32 tmp;
1842 int fix_apm_sq = (hpriv->hp_flags & MV_HP_ERRATA_50XXB0);
1844 if (fix_apm_sq) {
1845 tmp = readl(phy_mmio + MV5_LT_MODE);
1846 tmp |= (1 << 19);
1847 writel(tmp, phy_mmio + MV5_LT_MODE);
1849 tmp = readl(phy_mmio + MV5_PHY_CTL);
1850 tmp &= ~0x3;
1851 tmp |= 0x1;
1852 writel(tmp, phy_mmio + MV5_PHY_CTL);
1855 tmp = readl(phy_mmio + MV5_PHY_MODE);
1856 tmp &= ~mask;
1857 tmp |= hpriv->signal[port].pre;
1858 tmp |= hpriv->signal[port].amps;
1859 writel(tmp, phy_mmio + MV5_PHY_MODE);
1863 #undef ZERO
1864 #define ZERO(reg) writel(0, port_mmio + (reg))
1865 static void mv5_reset_hc_port(struct mv_host_priv *hpriv, void __iomem *mmio,
1866 unsigned int port)
1868 void __iomem *port_mmio = mv_port_base(mmio, port);
1870 writelfl(EDMA_DS, port_mmio + EDMA_CMD_OFS);
1872 mv_channel_reset(hpriv, mmio, port);
1874 ZERO(0x028); /* command */
1875 writel(0x11f, port_mmio + EDMA_CFG_OFS);
1876 ZERO(0x004); /* timer */
1877 ZERO(0x008); /* irq err cause */
1878 ZERO(0x00c); /* irq err mask */
1879 ZERO(0x010); /* rq bah */
1880 ZERO(0x014); /* rq inp */
1881 ZERO(0x018); /* rq outp */
1882 ZERO(0x01c); /* respq bah */
1883 ZERO(0x024); /* respq outp */
1884 ZERO(0x020); /* respq inp */
1885 ZERO(0x02c); /* test control */
1886 writel(0xbc, port_mmio + EDMA_IORDY_TMOUT);
1888 #undef ZERO
1890 #define ZERO(reg) writel(0, hc_mmio + (reg))
1891 static void mv5_reset_one_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
1892 unsigned int hc)
1894 void __iomem *hc_mmio = mv_hc_base(mmio, hc);
1895 u32 tmp;
1897 ZERO(0x00c);
1898 ZERO(0x010);
1899 ZERO(0x014);
1900 ZERO(0x018);
1902 tmp = readl(hc_mmio + 0x20);
1903 tmp &= 0x1c1c1c1c;
1904 tmp |= 0x03030303;
1905 writel(tmp, hc_mmio + 0x20);
1907 #undef ZERO
1909 static int mv5_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
1910 unsigned int n_hc)
1912 unsigned int hc, port;
1914 for (hc = 0; hc < n_hc; hc++) {
1915 for (port = 0; port < MV_PORTS_PER_HC; port++)
1916 mv5_reset_hc_port(hpriv, mmio,
1917 (hc * MV_PORTS_PER_HC) + port);
1919 mv5_reset_one_hc(hpriv, mmio, hc);
1922 return 0;
1925 #undef ZERO
1926 #define ZERO(reg) writel(0, mmio + (reg))
1927 static void mv_reset_pci_bus(struct pci_dev *pdev, void __iomem *mmio)
1929 u32 tmp;
1931 tmp = readl(mmio + MV_PCI_MODE);
1932 tmp &= 0xff00ffff;
1933 writel(tmp, mmio + MV_PCI_MODE);
1935 ZERO(MV_PCI_DISC_TIMER);
1936 ZERO(MV_PCI_MSI_TRIGGER);
1937 writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT);
1938 ZERO(HC_MAIN_IRQ_MASK_OFS);
1939 ZERO(MV_PCI_SERR_MASK);
1940 ZERO(PCI_IRQ_CAUSE_OFS);
1941 ZERO(PCI_IRQ_MASK_OFS);
1942 ZERO(MV_PCI_ERR_LOW_ADDRESS);
1943 ZERO(MV_PCI_ERR_HIGH_ADDRESS);
1944 ZERO(MV_PCI_ERR_ATTRIBUTE);
1945 ZERO(MV_PCI_ERR_COMMAND);
1947 #undef ZERO
1949 static void mv6_reset_flash(struct mv_host_priv *hpriv, void __iomem *mmio)
1951 u32 tmp;
1953 mv5_reset_flash(hpriv, mmio);
1955 tmp = readl(mmio + MV_GPIO_PORT_CTL);
1956 tmp &= 0x3;
1957 tmp |= (1 << 5) | (1 << 6);
1958 writel(tmp, mmio + MV_GPIO_PORT_CTL);
1962 * mv6_reset_hc - Perform the 6xxx global soft reset
1963 * @mmio: base address of the HBA
1965 * This routine only applies to 6xxx parts.
1967 * LOCKING:
1968 * Inherited from caller.
1970 static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
1971 unsigned int n_hc)
1973 void __iomem *reg = mmio + PCI_MAIN_CMD_STS_OFS;
1974 int i, rc = 0;
1975 u32 t;
1977 /* Following procedure defined in PCI "main command and status
1978 * register" table.
1980 t = readl(reg);
1981 writel(t | STOP_PCI_MASTER, reg);
1983 for (i = 0; i < 1000; i++) {
1984 udelay(1);
1985 t = readl(reg);
1986 if (PCI_MASTER_EMPTY & t)
1987 break;
1989 if (!(PCI_MASTER_EMPTY & t)) {
1990 printk(KERN_ERR DRV_NAME ": PCI master won't flush\n");
1991 rc = 1;
1992 goto done;
1995 /* set reset */
1996 i = 5;
1997 do {
1998 writel(t | GLOB_SFT_RST, reg);
1999 t = readl(reg);
2000 udelay(1);
2001 } while (!(GLOB_SFT_RST & t) && (i-- > 0));
2003 if (!(GLOB_SFT_RST & t)) {
2004 printk(KERN_ERR DRV_NAME ": can't set global reset\n");
2005 rc = 1;
2006 goto done;
2009 /* clear reset and *reenable the PCI master* (not mentioned in spec) */
2010 i = 5;
2011 do {
2012 writel(t & ~(GLOB_SFT_RST | STOP_PCI_MASTER), reg);
2013 t = readl(reg);
2014 udelay(1);
2015 } while ((GLOB_SFT_RST & t) && (i-- > 0));
2017 if (GLOB_SFT_RST & t) {
2018 printk(KERN_ERR DRV_NAME ": can't clear global reset\n");
2019 rc = 1;
2021 done:
2022 return rc;
2025 static void mv6_read_preamp(struct mv_host_priv *hpriv, int idx,
2026 void __iomem *mmio)
2028 void __iomem *port_mmio;
2029 u32 tmp;
2031 tmp = readl(mmio + MV_RESET_CFG);
2032 if ((tmp & (1 << 0)) == 0) {
2033 hpriv->signal[idx].amps = 0x7 << 8;
2034 hpriv->signal[idx].pre = 0x1 << 5;
2035 return;
2038 port_mmio = mv_port_base(mmio, idx);
2039 tmp = readl(port_mmio + PHY_MODE2);
2041 hpriv->signal[idx].amps = tmp & 0x700; /* bits 10:8 */
2042 hpriv->signal[idx].pre = tmp & 0xe0; /* bits 7:5 */
2045 static void mv6_enable_leds(struct mv_host_priv *hpriv, void __iomem *mmio)
2047 writel(0x00000060, mmio + MV_GPIO_PORT_CTL);
2050 static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio,
2051 unsigned int port)
2053 void __iomem *port_mmio = mv_port_base(mmio, port);
2055 u32 hp_flags = hpriv->hp_flags;
2056 int fix_phy_mode2 =
2057 hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0);
2058 int fix_phy_mode4 =
2059 hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0);
2060 u32 m2, tmp;
2062 if (fix_phy_mode2) {
2063 m2 = readl(port_mmio + PHY_MODE2);
2064 m2 &= ~(1 << 16);
2065 m2 |= (1 << 31);
2066 writel(m2, port_mmio + PHY_MODE2);
2068 udelay(200);
2070 m2 = readl(port_mmio + PHY_MODE2);
2071 m2 &= ~((1 << 16) | (1 << 31));
2072 writel(m2, port_mmio + PHY_MODE2);
2074 udelay(200);
2077 /* who knows what this magic does */
2078 tmp = readl(port_mmio + PHY_MODE3);
2079 tmp &= ~0x7F800000;
2080 tmp |= 0x2A800000;
2081 writel(tmp, port_mmio + PHY_MODE3);
2083 if (fix_phy_mode4) {
2084 u32 m4;
2086 m4 = readl(port_mmio + PHY_MODE4);
2088 if (hp_flags & MV_HP_ERRATA_60X1B2)
2089 tmp = readl(port_mmio + 0x310);
2091 m4 = (m4 & ~(1 << 1)) | (1 << 0);
2093 writel(m4, port_mmio + PHY_MODE4);
2095 if (hp_flags & MV_HP_ERRATA_60X1B2)
2096 writel(tmp, port_mmio + 0x310);
2099 /* Revert values of pre-emphasis and signal amps to the saved ones */
2100 m2 = readl(port_mmio + PHY_MODE2);
2102 m2 &= ~MV_M2_PREAMP_MASK;
2103 m2 |= hpriv->signal[port].amps;
2104 m2 |= hpriv->signal[port].pre;
2105 m2 &= ~(1 << 16);
2107 /* according to mvSata 3.6.1, some IIE values are fixed */
2108 if (IS_GEN_IIE(hpriv)) {
2109 m2 &= ~0xC30FF01F;
2110 m2 |= 0x0000900F;
2113 writel(m2, port_mmio + PHY_MODE2);
2116 static void mv_channel_reset(struct mv_host_priv *hpriv, void __iomem *mmio,
2117 unsigned int port_no)
2119 void __iomem *port_mmio = mv_port_base(mmio, port_no);
2121 writelfl(ATA_RST, port_mmio + EDMA_CMD_OFS);
2123 if (IS_GEN_II(hpriv)) {
2124 u32 ifctl = readl(port_mmio + SATA_INTERFACE_CTL);
2125 ifctl |= (1 << 7); /* enable gen2i speed */
2126 ifctl = (ifctl & 0xfff) | 0x9b1000; /* from chip spec */
2127 writelfl(ifctl, port_mmio + SATA_INTERFACE_CTL);
2130 udelay(25); /* allow reset propagation */
2132 /* Spec never mentions clearing the bit. Marvell's driver does
2133 * clear the bit, however.
2135 writelfl(0, port_mmio + EDMA_CMD_OFS);
2137 hpriv->ops->phy_errata(hpriv, mmio, port_no);
2139 if (IS_GEN_I(hpriv))
2140 mdelay(1);
2144 * mv_phy_reset - Perform eDMA reset followed by COMRESET
2145 * @ap: ATA channel to manipulate
2147 * Part of this is taken from __sata_phy_reset and modified to
2148 * not sleep since this routine gets called from interrupt level.
2150 * LOCKING:
2151 * Inherited from caller. This is coded to safe to call at
2152 * interrupt level, i.e. it does not sleep.
2154 static void mv_phy_reset(struct ata_port *ap, unsigned int *class,
2155 unsigned long deadline)
2157 struct mv_port_priv *pp = ap->private_data;
2158 struct mv_host_priv *hpriv = ap->host->private_data;
2159 void __iomem *port_mmio = mv_ap_base(ap);
2160 int retry = 5;
2161 u32 sstatus;
2163 VPRINTK("ENTER, port %u, mmio 0x%p\n", ap->port_no, port_mmio);
2165 #ifdef DEBUG
2167 u32 sstatus, serror, scontrol;
2169 mv_scr_read(ap, SCR_STATUS, &sstatus);
2170 mv_scr_read(ap, SCR_ERROR, &serror);
2171 mv_scr_read(ap, SCR_CONTROL, &scontrol);
2172 DPRINTK("S-regs after ATA_RST: SStat 0x%08x SErr 0x%08x "
2173 "SCtrl 0x%08x\n", status, serror, scontrol);
2175 #endif
2177 /* Issue COMRESET via SControl */
2178 comreset_retry:
2179 sata_scr_write_flush(&ap->link, SCR_CONTROL, 0x301);
2180 msleep(1);
2182 sata_scr_write_flush(&ap->link, SCR_CONTROL, 0x300);
2183 msleep(20);
2185 do {
2186 sata_scr_read(&ap->link, SCR_STATUS, &sstatus);
2187 if (((sstatus & 0x3) == 3) || ((sstatus & 0x3) == 0))
2188 break;
2190 msleep(1);
2191 } while (time_before(jiffies, deadline));
2193 /* work around errata */
2194 if (IS_GEN_II(hpriv) &&
2195 (sstatus != 0x0) && (sstatus != 0x113) && (sstatus != 0x123) &&
2196 (retry-- > 0))
2197 goto comreset_retry;
2199 #ifdef DEBUG
2201 u32 sstatus, serror, scontrol;
2203 mv_scr_read(ap, SCR_STATUS, &sstatus);
2204 mv_scr_read(ap, SCR_ERROR, &serror);
2205 mv_scr_read(ap, SCR_CONTROL, &scontrol);
2206 DPRINTK("S-regs after PHY wake: SStat 0x%08x SErr 0x%08x "
2207 "SCtrl 0x%08x\n", sstatus, serror, scontrol);
2209 #endif
2211 if (ata_link_offline(&ap->link)) {
2212 *class = ATA_DEV_NONE;
2213 return;
2216 /* even after SStatus reflects that device is ready,
2217 * it seems to take a while for link to be fully
2218 * established (and thus Status no longer 0x80/0x7F),
2219 * so we poll a bit for that, here.
2221 retry = 20;
2222 while (1) {
2223 u8 drv_stat = ata_check_status(ap);
2224 if ((drv_stat != 0x80) && (drv_stat != 0x7f))
2225 break;
2226 msleep(500);
2227 if (retry-- <= 0)
2228 break;
2229 if (time_after(jiffies, deadline))
2230 break;
2233 /* FIXME: if we passed the deadline, the following
2234 * code probably produces an invalid result
2237 /* finally, read device signature from TF registers */
2238 *class = ata_dev_try_classify(ap->link.device, 1, NULL);
2240 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
2242 WARN_ON(pp->pp_flags & MV_PP_FLAG_EDMA_EN);
2244 VPRINTK("EXIT\n");
2247 static int mv_prereset(struct ata_link *link, unsigned long deadline)
2249 struct ata_port *ap = link->ap;
2250 struct mv_port_priv *pp = ap->private_data;
2251 struct ata_eh_context *ehc = &link->eh_context;
2252 int rc;
2254 rc = mv_stop_dma(ap);
2255 if (rc)
2256 ehc->i.action |= ATA_EH_HARDRESET;
2258 if (!(pp->pp_flags & MV_PP_FLAG_HAD_A_RESET)) {
2259 pp->pp_flags |= MV_PP_FLAG_HAD_A_RESET;
2260 ehc->i.action |= ATA_EH_HARDRESET;
2263 /* if we're about to do hardreset, nothing more to do */
2264 if (ehc->i.action & ATA_EH_HARDRESET)
2265 return 0;
2267 if (ata_link_online(link))
2268 rc = ata_wait_ready(ap, deadline);
2269 else
2270 rc = -ENODEV;
2272 return rc;
2275 static int mv_hardreset(struct ata_link *link, unsigned int *class,
2276 unsigned long deadline)
2278 struct ata_port *ap = link->ap;
2279 struct mv_host_priv *hpriv = ap->host->private_data;
2280 void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
2282 mv_stop_dma(ap);
2284 mv_channel_reset(hpriv, mmio, ap->port_no);
2286 mv_phy_reset(ap, class, deadline);
2288 return 0;
2291 static void mv_postreset(struct ata_link *link, unsigned int *classes)
2293 struct ata_port *ap = link->ap;
2294 u32 serr;
2296 /* print link status */
2297 sata_print_link_status(link);
2299 /* clear SError */
2300 sata_scr_read(link, SCR_ERROR, &serr);
2301 sata_scr_write_flush(link, SCR_ERROR, serr);
2303 /* bail out if no device is present */
2304 if (classes[0] == ATA_DEV_NONE && classes[1] == ATA_DEV_NONE) {
2305 DPRINTK("EXIT, no device\n");
2306 return;
2309 /* set up device control */
2310 iowrite8(ap->ctl, ap->ioaddr.ctl_addr);
2313 static void mv_error_handler(struct ata_port *ap)
2315 ata_do_eh(ap, mv_prereset, ata_std_softreset,
2316 mv_hardreset, mv_postreset);
2319 static void mv_post_int_cmd(struct ata_queued_cmd *qc)
2321 mv_stop_dma(qc->ap);
2324 static void mv_eh_freeze(struct ata_port *ap)
2326 void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
2327 unsigned int hc = (ap->port_no > 3) ? 1 : 0;
2328 u32 tmp, mask;
2329 unsigned int shift;
2331 /* FIXME: handle coalescing completion events properly */
2333 shift = ap->port_no * 2;
2334 if (hc > 0)
2335 shift++;
2337 mask = 0x3 << shift;
2339 /* disable assertion of portN err, done events */
2340 tmp = readl(mmio + HC_MAIN_IRQ_MASK_OFS);
2341 writelfl(tmp & ~mask, mmio + HC_MAIN_IRQ_MASK_OFS);
2344 static void mv_eh_thaw(struct ata_port *ap)
2346 void __iomem *mmio = ap->host->iomap[MV_PRIMARY_BAR];
2347 unsigned int hc = (ap->port_no > 3) ? 1 : 0;
2348 void __iomem *hc_mmio = mv_hc_base(mmio, hc);
2349 void __iomem *port_mmio = mv_ap_base(ap);
2350 u32 tmp, mask, hc_irq_cause;
2351 unsigned int shift, hc_port_no = ap->port_no;
2353 /* FIXME: handle coalescing completion events properly */
2355 shift = ap->port_no * 2;
2356 if (hc > 0) {
2357 shift++;
2358 hc_port_no -= 4;
2361 mask = 0x3 << shift;
2363 /* clear EDMA errors on this port */
2364 writel(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
2366 /* clear pending irq events */
2367 hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
2368 hc_irq_cause &= ~(1 << hc_port_no); /* clear CRPB-done */
2369 hc_irq_cause &= ~(1 << (hc_port_no + 8)); /* clear Device int */
2370 writel(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS);
2372 /* enable assertion of portN err, done events */
2373 tmp = readl(mmio + HC_MAIN_IRQ_MASK_OFS);
2374 writelfl(tmp | mask, mmio + HC_MAIN_IRQ_MASK_OFS);
2378 * mv_port_init - Perform some early initialization on a single port.
2379 * @port: libata data structure storing shadow register addresses
2380 * @port_mmio: base address of the port
2382 * Initialize shadow register mmio addresses, clear outstanding
2383 * interrupts on the port, and unmask interrupts for the future
2384 * start of the port.
2386 * LOCKING:
2387 * Inherited from caller.
2389 static void mv_port_init(struct ata_ioports *port, void __iomem *port_mmio)
2391 void __iomem *shd_base = port_mmio + SHD_BLK_OFS;
2392 unsigned serr_ofs;
2394 /* PIO related setup
2396 port->data_addr = shd_base + (sizeof(u32) * ATA_REG_DATA);
2397 port->error_addr =
2398 port->feature_addr = shd_base + (sizeof(u32) * ATA_REG_ERR);
2399 port->nsect_addr = shd_base + (sizeof(u32) * ATA_REG_NSECT);
2400 port->lbal_addr = shd_base + (sizeof(u32) * ATA_REG_LBAL);
2401 port->lbam_addr = shd_base + (sizeof(u32) * ATA_REG_LBAM);
2402 port->lbah_addr = shd_base + (sizeof(u32) * ATA_REG_LBAH);
2403 port->device_addr = shd_base + (sizeof(u32) * ATA_REG_DEVICE);
2404 port->status_addr =
2405 port->command_addr = shd_base + (sizeof(u32) * ATA_REG_STATUS);
2406 /* special case: control/altstatus doesn't have ATA_REG_ address */
2407 port->altstatus_addr = port->ctl_addr = shd_base + SHD_CTL_AST_OFS;
2409 /* unused: */
2410 port->cmd_addr = port->bmdma_addr = port->scr_addr = NULL;
2412 /* Clear any currently outstanding port interrupt conditions */
2413 serr_ofs = mv_scr_offset(SCR_ERROR);
2414 writelfl(readl(port_mmio + serr_ofs), port_mmio + serr_ofs);
2415 writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
2417 /* unmask all EDMA error interrupts */
2418 writelfl(~0, port_mmio + EDMA_ERR_IRQ_MASK_OFS);
2420 VPRINTK("EDMA cfg=0x%08x EDMA IRQ err cause/mask=0x%08x/0x%08x\n",
2421 readl(port_mmio + EDMA_CFG_OFS),
2422 readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS),
2423 readl(port_mmio + EDMA_ERR_IRQ_MASK_OFS));
2426 static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
2428 struct pci_dev *pdev = to_pci_dev(host->dev);
2429 struct mv_host_priv *hpriv = host->private_data;
2430 u32 hp_flags = hpriv->hp_flags;
2432 switch(board_idx) {
2433 case chip_5080:
2434 hpriv->ops = &mv5xxx_ops;
2435 hp_flags |= MV_HP_GEN_I;
2437 switch (pdev->revision) {
2438 case 0x1:
2439 hp_flags |= MV_HP_ERRATA_50XXB0;
2440 break;
2441 case 0x3:
2442 hp_flags |= MV_HP_ERRATA_50XXB2;
2443 break;
2444 default:
2445 dev_printk(KERN_WARNING, &pdev->dev,
2446 "Applying 50XXB2 workarounds to unknown rev\n");
2447 hp_flags |= MV_HP_ERRATA_50XXB2;
2448 break;
2450 break;
2452 case chip_504x:
2453 case chip_508x:
2454 hpriv->ops = &mv5xxx_ops;
2455 hp_flags |= MV_HP_GEN_I;
2457 switch (pdev->revision) {
2458 case 0x0:
2459 hp_flags |= MV_HP_ERRATA_50XXB0;
2460 break;
2461 case 0x3:
2462 hp_flags |= MV_HP_ERRATA_50XXB2;
2463 break;
2464 default:
2465 dev_printk(KERN_WARNING, &pdev->dev,
2466 "Applying B2 workarounds to unknown rev\n");
2467 hp_flags |= MV_HP_ERRATA_50XXB2;
2468 break;
2470 break;
2472 case chip_604x:
2473 case chip_608x:
2474 hpriv->ops = &mv6xxx_ops;
2475 hp_flags |= MV_HP_GEN_II;
2477 switch (pdev->revision) {
2478 case 0x7:
2479 hp_flags |= MV_HP_ERRATA_60X1B2;
2480 break;
2481 case 0x9:
2482 hp_flags |= MV_HP_ERRATA_60X1C0;
2483 break;
2484 default:
2485 dev_printk(KERN_WARNING, &pdev->dev,
2486 "Applying B2 workarounds to unknown rev\n");
2487 hp_flags |= MV_HP_ERRATA_60X1B2;
2488 break;
2490 break;
2492 case chip_7042:
2493 case chip_6042:
2494 hpriv->ops = &mv6xxx_ops;
2495 hp_flags |= MV_HP_GEN_IIE;
2497 switch (pdev->revision) {
2498 case 0x0:
2499 hp_flags |= MV_HP_ERRATA_XX42A0;
2500 break;
2501 case 0x1:
2502 hp_flags |= MV_HP_ERRATA_60X1C0;
2503 break;
2504 default:
2505 dev_printk(KERN_WARNING, &pdev->dev,
2506 "Applying 60X1C0 workarounds to unknown rev\n");
2507 hp_flags |= MV_HP_ERRATA_60X1C0;
2508 break;
2510 break;
2512 default:
2513 printk(KERN_ERR DRV_NAME ": BUG: invalid board index %u\n", board_idx);
2514 return 1;
2517 hpriv->hp_flags = hp_flags;
2519 return 0;
2523 * mv_init_host - Perform some early initialization of the host.
2524 * @host: ATA host to initialize
2525 * @board_idx: controller index
2527 * If possible, do an early global reset of the host. Then do
2528 * our port init and clear/unmask all/relevant host interrupts.
2530 * LOCKING:
2531 * Inherited from caller.
2533 static int mv_init_host(struct ata_host *host, unsigned int board_idx)
2535 int rc = 0, n_hc, port, hc;
2536 struct pci_dev *pdev = to_pci_dev(host->dev);
2537 void __iomem *mmio = host->iomap[MV_PRIMARY_BAR];
2538 struct mv_host_priv *hpriv = host->private_data;
2540 /* global interrupt mask */
2541 writel(0, mmio + HC_MAIN_IRQ_MASK_OFS);
2543 rc = mv_chip_id(host, board_idx);
2544 if (rc)
2545 goto done;
2547 n_hc = mv_get_hc_count(host->ports[0]->flags);
2549 for (port = 0; port < host->n_ports; port++)
2550 hpriv->ops->read_preamp(hpriv, port, mmio);
2552 rc = hpriv->ops->reset_hc(hpriv, mmio, n_hc);
2553 if (rc)
2554 goto done;
2556 hpriv->ops->reset_flash(hpriv, mmio);
2557 hpriv->ops->reset_bus(pdev, mmio);
2558 hpriv->ops->enable_leds(hpriv, mmio);
2560 for (port = 0; port < host->n_ports; port++) {
2561 if (IS_GEN_II(hpriv)) {
2562 void __iomem *port_mmio = mv_port_base(mmio, port);
2564 u32 ifctl = readl(port_mmio + SATA_INTERFACE_CTL);
2565 ifctl |= (1 << 7); /* enable gen2i speed */
2566 ifctl = (ifctl & 0xfff) | 0x9b1000; /* from chip spec */
2567 writelfl(ifctl, port_mmio + SATA_INTERFACE_CTL);
2570 hpriv->ops->phy_errata(hpriv, mmio, port);
2573 for (port = 0; port < host->n_ports; port++) {
2574 struct ata_port *ap = host->ports[port];
2575 void __iomem *port_mmio = mv_port_base(mmio, port);
2576 unsigned int offset = port_mmio - mmio;
2578 mv_port_init(&ap->ioaddr, port_mmio);
2580 ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio");
2581 ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port");
2584 for (hc = 0; hc < n_hc; hc++) {
2585 void __iomem *hc_mmio = mv_hc_base(mmio, hc);
2587 VPRINTK("HC%i: HC config=0x%08x HC IRQ cause "
2588 "(before clear)=0x%08x\n", hc,
2589 readl(hc_mmio + HC_CFG_OFS),
2590 readl(hc_mmio + HC_IRQ_CAUSE_OFS));
2592 /* Clear any currently outstanding hc interrupt conditions */
2593 writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS);
2596 /* Clear any currently outstanding host interrupt conditions */
2597 writelfl(0, mmio + PCI_IRQ_CAUSE_OFS);
2599 /* and unmask interrupt generation for host regs */
2600 writelfl(PCI_UNMASK_ALL_IRQS, mmio + PCI_IRQ_MASK_OFS);
2602 if (IS_GEN_I(hpriv))
2603 writelfl(~HC_MAIN_MASKED_IRQS_5, mmio + HC_MAIN_IRQ_MASK_OFS);
2604 else
2605 writelfl(~HC_MAIN_MASKED_IRQS, mmio + HC_MAIN_IRQ_MASK_OFS);
2607 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
2608 "PCI int cause/mask=0x%08x/0x%08x\n",
2609 readl(mmio + HC_MAIN_IRQ_CAUSE_OFS),
2610 readl(mmio + HC_MAIN_IRQ_MASK_OFS),
2611 readl(mmio + PCI_IRQ_CAUSE_OFS),
2612 readl(mmio + PCI_IRQ_MASK_OFS));
2614 done:
2615 return rc;
2619 * mv_print_info - Dump key info to kernel log for perusal.
2620 * @host: ATA host to print info about
2622 * FIXME: complete this.
2624 * LOCKING:
2625 * Inherited from caller.
2627 static void mv_print_info(struct ata_host *host)
2629 struct pci_dev *pdev = to_pci_dev(host->dev);
2630 struct mv_host_priv *hpriv = host->private_data;
2631 u8 scc;
2632 const char *scc_s, *gen;
2634 /* Use this to determine the HW stepping of the chip so we know
2635 * what errata to workaround
2637 pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &scc);
2638 if (scc == 0)
2639 scc_s = "SCSI";
2640 else if (scc == 0x01)
2641 scc_s = "RAID";
2642 else
2643 scc_s = "?";
2645 if (IS_GEN_I(hpriv))
2646 gen = "I";
2647 else if (IS_GEN_II(hpriv))
2648 gen = "II";
2649 else if (IS_GEN_IIE(hpriv))
2650 gen = "IIE";
2651 else
2652 gen = "?";
2654 dev_printk(KERN_INFO, &pdev->dev,
2655 "Gen-%s %u slots %u ports %s mode IRQ via %s\n",
2656 gen, (unsigned)MV_MAX_Q_DEPTH, host->n_ports,
2657 scc_s, (MV_HP_FLAG_MSI & hpriv->hp_flags) ? "MSI" : "INTx");
2661 * mv_init_one - handle a positive probe of a Marvell host
2662 * @pdev: PCI device found
2663 * @ent: PCI device ID entry for the matched host
2665 * LOCKING:
2666 * Inherited from caller.
2668 static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2670 static int printed_version;
2671 unsigned int board_idx = (unsigned int)ent->driver_data;
2672 const struct ata_port_info *ppi[] = { &mv_port_info[board_idx], NULL };
2673 struct ata_host *host;
2674 struct mv_host_priv *hpriv;
2675 int n_ports, rc;
2677 if (!printed_version++)
2678 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
2680 /* allocate host */
2681 n_ports = mv_get_hc_count(ppi[0]->flags) * MV_PORTS_PER_HC;
2683 host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
2684 hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
2685 if (!host || !hpriv)
2686 return -ENOMEM;
2687 host->private_data = hpriv;
2689 /* acquire resources */
2690 rc = pcim_enable_device(pdev);
2691 if (rc)
2692 return rc;
2694 rc = pcim_iomap_regions(pdev, 1 << MV_PRIMARY_BAR, DRV_NAME);
2695 if (rc == -EBUSY)
2696 pcim_pin_device(pdev);
2697 if (rc)
2698 return rc;
2699 host->iomap = pcim_iomap_table(pdev);
2701 rc = pci_go_64(pdev);
2702 if (rc)
2703 return rc;
2705 /* initialize adapter */
2706 rc = mv_init_host(host, board_idx);
2707 if (rc)
2708 return rc;
2710 /* Enable interrupts */
2711 if (msi && pci_enable_msi(pdev))
2712 pci_intx(pdev, 1);
2714 mv_dump_pci_cfg(pdev, 0x68);
2715 mv_print_info(host);
2717 pci_set_master(pdev);
2718 pci_try_set_mwi(pdev);
2719 return ata_host_activate(host, pdev->irq, mv_interrupt, IRQF_SHARED,
2720 IS_GEN_I(hpriv) ? &mv5_sht : &mv6_sht);
2723 static int __init mv_init(void)
2725 return pci_register_driver(&mv_pci_driver);
2728 static void __exit mv_exit(void)
2730 pci_unregister_driver(&mv_pci_driver);
2733 MODULE_AUTHOR("Brett Russ");
2734 MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
2735 MODULE_LICENSE("GPL");
2736 MODULE_DEVICE_TABLE(pci, mv_pci_tbl);
2737 MODULE_VERSION(DRV_VERSION);
2739 module_param(msi, int, 0444);
2740 MODULE_PARM_DESC(msi, "Enable use of PCI MSI (0=off, 1=on)");
2742 module_init(mv_init);
2743 module_exit(mv_exit);