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
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)
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
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"
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 */
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
,
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
),
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
),
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 */
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),
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),
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 */
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
|
191 HC_MAIN_MASKED_IRQS_5
= (PORTS_0_3_COAL_DONE
| PORTS_4_7_COAL_DONE
|
194 /* SATAHC registers */
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 */
204 SHD_CTL_AST_OFS
= 0x20, /* ofs from SHD_BLK_OFS */
207 SATA_STATUS_OFS
= 0x300, /* ctrl, err regs follow status */
208 SATA_ACTIVE_OFS
= 0x350,
215 SATA_INTERFACE_CTL
= 0x050,
217 MV_M2_PREAMP_MASK
= 0x7e0,
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
|
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
|
270 EDMA_ERR_UNDERRUN_5
|
271 EDMA_ERR_SELF_DIS_5
|
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,
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)
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
,
341 /* Command ReQuest Block: 32B */
357 /* Command ResPonse Block: 8B */
364 /* EDMA Physical Region Descriptor (ePRD); A.K.A. SG */
372 struct mv_port_priv
{
373 struct mv_crqb
*crqb
;
375 struct mv_crpb
*crpb
;
377 struct mv_sg
*sg_tbl
;
378 dma_addr_t sg_tbl_dma
;
380 unsigned int req_idx
;
381 unsigned int resp_idx
;
386 struct mv_port_signal
{
393 void (*phy_errata
)(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
395 void (*enable_leds
)(struct mv_host_priv
*hpriv
, void __iomem
*mmio
);
396 void (*read_preamp
)(struct mv_host_priv
*hpriv
, int idx
,
398 int (*reset_hc
)(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
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
{
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
,
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
,
431 static int mv5_reset_hc(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
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
,
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
,
441 static int mv6_reset_hc(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
[] = {
570 .flags
= MV_COMMON_FLAGS
,
571 .pio_mask
= 0x1f, /* pio0-4 */
572 .udma_mask
= ATA_UDMA6
,
573 .port_ops
= &mv5_ops
,
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
,
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
,
588 .flags
= MV_COMMON_FLAGS
| MV_6XXX_FLAGS
,
589 .pio_mask
= 0x1f, /* pio0-4 */
590 .udma_mask
= ATA_UDMA6
,
591 .port_ops
= &mv6_ops
,
594 .flags
= MV_COMMON_FLAGS
| MV_6XXX_FLAGS
|
596 .pio_mask
= 0x1f, /* pio0-4 */
597 .udma_mask
= ATA_UDMA6
,
598 .port_ops
= &mv6_ops
,
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
,
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
},
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
= {
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
,
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
)
678 if (!pci_set_dma_mask(pdev
, DMA_64BIT_MASK
)) {
679 rc
= pci_set_consistent_dma_mask(pdev
, DMA_64BIT_MASK
);
681 rc
= pci_set_consistent_dma_mask(pdev
, DMA_32BIT_MASK
);
683 dev_printk(KERN_ERR
, &pdev
->dev
,
684 "64-bit DMA enable failed\n");
689 rc
= pci_set_dma_mask(pdev
, DMA_32BIT_MASK
);
691 dev_printk(KERN_ERR
, &pdev
->dev
,
692 "32-bit DMA enable failed\n");
695 rc
= pci_set_consistent_dma_mask(pdev
, DMA_32BIT_MASK
);
697 dev_printk(KERN_ERR
, &pdev
->dev
,
698 "32-bit consistent DMA enable failed\n");
710 static inline void writelfl(unsigned long data
, void __iomem
*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
,
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
)
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
);
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
);
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
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
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
;
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
;
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
))
860 ata_port_printk(ap
, KERN_ERR
, "Unable to stop eDMA\n");
867 static int mv_stop_dma(struct ata_port
*ap
)
872 spin_lock_irqsave(&ap
->host
->lock
, flags
);
873 rc
= __mv_stop_dma(ap
);
874 spin_unlock_irqrestore(&ap
->host
->lock
, flags
);
880 static void mv_dump_mem(void __iomem
*start
, unsigned bytes
)
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
));
894 static void mv_dump_pci_cfg(struct pci_dev
*pdev
, unsigned bytes
)
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
);
910 static void mv_dump_all_regs(void __iomem
*mmio_base
, int port
,
911 struct pci_dev
*pdev
)
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
;
920 start_hc
= start_port
= 0;
921 num_ports
= 8; /* shld be benign for 4 port devs */
924 start_hc
= port
>> MV_PORT_HC_SHIFT
;
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
);
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);
955 static unsigned int mv_scr_offset(unsigned int sc_reg_in
)
963 ofs
= SATA_STATUS_OFS
+ (sc_reg_in
* sizeof(u32
));
966 ofs
= SATA_ACTIVE_OFS
; /* active is not with the others */
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
);
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
);
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,
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
);
1047 unsigned long flags
;
1050 pp
= devm_kzalloc(dev
, sizeof(*pp
), GFP_KERNEL
);
1054 mem
= dmam_alloc_coherent(dev
, MV_PORT_PRIV_DMA_SZ
, &mem_dma
,
1058 memset(mem
, 0, MV_PORT_PRIV_DMA_SZ
);
1060 rc
= ata_pad_alloc(ap
, dev
);
1064 /* First item in chunk of DMA memory:
1065 * 32-slot command request table (CRQB), 32 bytes each in size
1068 pp
->crqb_dma
= mem_dma
;
1069 mem
+= MV_CRQB_Q_SZ
;
1070 mem_dma
+= MV_CRQB_Q_SZ
;
1073 * 32-slot command response table (CRPB), 8 bytes each in size
1076 pp
->crpb_dma
= mem_dma
;
1077 mem
+= MV_CRPB_Q_SZ
;
1078 mem_dma
+= MV_CRPB_Q_SZ
;
1081 * Table of scatter-gather descriptors (ePRD), 16 bytes each
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
1098 ap
->private_data
= pp
;
1103 * mv_port_stop - Port specific cleanup/stop routine.
1104 * @ap: ATA channel to manipulate
1106 * Stop DMA, cleanup port memory.
1109 * This routine uses the host lock to protect the DMA stop.
1111 static void mv_port_stop(struct ata_port
*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.
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
;
1132 ata_for_each_sg(sg
, qc
) {
1133 dma_addr_t addr
= sg_dma_address(sg
);
1134 u32 sg_len
= sg_dma_len(sg
);
1137 u32 offset
= addr
& 0xffff;
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);
1155 if (likely(last_sg
))
1156 last_sg
->flags_size
|= cpu_to_le32(EPRD_FLAG_END_OF_TBL
);
1159 static 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.
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
;
1183 struct ata_taskfile
*tf
;
1187 if (qc
->tf
.protocol
!= ATA_PROT_DMA
)
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];
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
) {
1218 case ATA_CMD_READ_EXT
:
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);
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);
1230 #endif /* FIXME: remove this line when NCQ added */
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
);
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
))
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.
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
;
1279 if (qc
->tf
.protocol
!= ATA_PROT_DMA
)
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
);
1301 crqb
->ata_cmd
[0] = cpu_to_le32(
1302 (tf
->command
<< 16) |
1305 crqb
->ata_cmd
[1] = cpu_to_le32(
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(
1319 (tf
->hob_nsect
<< 8)
1322 if (!(qc
->flags
& ATA_QCFLAG_DMAMAP
))
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.
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
;
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.
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
));
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
);
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.
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");
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
);
1461 err_mask
= AC_ERR_OTHER
;
1462 action
|= ATA_EH_HARDRESET
;
1465 ehi
->serror
|= serr
;
1466 ehi
->action
|= action
;
1469 qc
->err_mask
|= err_mask
;
1471 ehi
->err_mask
|= err_mask
;
1473 if (edma_err_cause
& eh_freeze_mask
)
1474 ata_port_freeze(ap
);
1479 static void mv_intr_pio(struct ata_port
*ap
)
1481 struct ata_queued_cmd
*qc
;
1484 /* ignore spurious intr if drive still BUSY */
1485 ata_status
= readb(ap
->ioaddr
.status_addr
);
1486 if (unlikely(ata_status
& ATA_BUSY
))
1489 /* get active ATA command */
1490 qc
= ata_qc_from_tag(ap
, ap
->link
.active_tag
);
1491 if (unlikely(!qc
)) /* no active tag */
1493 if (qc
->tf
.flags
& ATA_TFLAG_POLLING
) /* polling; we don't own qc */
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
;
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
)
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
1546 status
= le16_to_cpu(pp
->crpb
[out_index
].flags
);
1547 if (unlikely(status
& 0xff)) {
1548 mv_err_intr(ap
, qc
);
1552 /* and finally, complete the ATA command */
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.
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.
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
);
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
);
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
))
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
))
1632 mv_err_intr(ap
, qc
);
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
)
1642 if ((DEV_IRQ
<< hard_port
) & hc_irq_cause
)
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;
1657 err_cause
= readl(mmio
+ PCI_IRQ_CAUSE_OFS
);
1659 dev_printk(KERN_ERR
, host
->dev
, "PCI ERROR; PCI IRQ cause=0x%08x\n",
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
);
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
);
1679 qc
->err_mask
|= err_mask
;
1681 ehi
->err_mask
|= err_mask
;
1683 ata_port_freeze(ap
);
1689 * mv_interrupt - Main interrupt event handler
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
1699 * This routine holds the host lock while processing pending
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
];
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
))
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
);
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
));
1729 mv_host_intr(host
, relevant
, hc
);
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
)
1752 switch (sc_reg_in
) {
1756 ofs
= sc_reg_in
* sizeof(u32
);
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
);
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
);
1791 static void mv5_reset_bus(struct pci_dev
*pdev
, void __iomem
*mmio
)
1795 early_5080
= (pdev
->device
== 0x5080) && (pdev
->revision
== 0);
1798 u32 tmp
= readl(mmio
+ MV_PCI_EXP_ROM_BAR_CTL
);
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
,
1814 void __iomem
*phy_mmio
= mv5_phy_base(mmio
, idx
);
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
)
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
);
1833 writel(tmp
, mmio
+ MV_PCI_EXP_ROM_BAR_CTL
);
1836 static void mv5_phy_errata(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
1839 void __iomem
*phy_mmio
= mv5_phy_base(mmio
, port
);
1840 const u32 mask
= (1<<12) | (1<<11) | (1<<7) | (1<<6) | (1<<5);
1842 int fix_apm_sq
= (hpriv
->hp_flags
& MV_HP_ERRATA_50XXB0
);
1845 tmp
= readl(phy_mmio
+ MV5_LT_MODE
);
1847 writel(tmp
, phy_mmio
+ MV5_LT_MODE
);
1849 tmp
= readl(phy_mmio
+ MV5_PHY_CTL
);
1852 writel(tmp
, phy_mmio
+ MV5_PHY_CTL
);
1855 tmp
= readl(phy_mmio
+ MV5_PHY_MODE
);
1857 tmp
|= hpriv
->signal
[port
].pre
;
1858 tmp
|= hpriv
->signal
[port
].amps
;
1859 writel(tmp
, phy_mmio
+ MV5_PHY_MODE
);
1864 #define ZERO(reg) writel(0, port_mmio + (reg))
1865 static void mv5_reset_hc_port(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
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
);
1890 #define ZERO(reg) writel(0, hc_mmio + (reg))
1891 static void mv5_reset_one_hc(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
1894 void __iomem
*hc_mmio
= mv_hc_base(mmio
, hc
);
1902 tmp
= readl(hc_mmio
+ 0x20);
1905 writel(tmp
, hc_mmio
+ 0x20);
1909 static int mv5_reset_hc(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
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
);
1926 #define ZERO(reg) writel(0, mmio + (reg))
1927 static void mv_reset_pci_bus(struct pci_dev
*pdev
, void __iomem
*mmio
)
1931 tmp
= readl(mmio
+ MV_PCI_MODE
);
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
);
1949 static void mv6_reset_flash(struct mv_host_priv
*hpriv
, void __iomem
*mmio
)
1953 mv5_reset_flash(hpriv
, mmio
);
1955 tmp
= readl(mmio
+ MV_GPIO_PORT_CTL
);
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.
1968 * Inherited from caller.
1970 static int mv6_reset_hc(struct mv_host_priv
*hpriv
, void __iomem
*mmio
,
1973 void __iomem
*reg
= mmio
+ PCI_MAIN_CMD_STS_OFS
;
1977 /* Following procedure defined in PCI "main command and status
1981 writel(t
| STOP_PCI_MASTER
, reg
);
1983 for (i
= 0; i
< 1000; i
++) {
1986 if (PCI_MASTER_EMPTY
& t
)
1989 if (!(PCI_MASTER_EMPTY
& t
)) {
1990 printk(KERN_ERR DRV_NAME
": PCI master won't flush\n");
1998 writel(t
| GLOB_SFT_RST
, reg
);
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");
2009 /* clear reset and *reenable the PCI master* (not mentioned in spec) */
2012 writel(t
& ~(GLOB_SFT_RST
| STOP_PCI_MASTER
), reg
);
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");
2025 static void mv6_read_preamp(struct mv_host_priv
*hpriv
, int idx
,
2028 void __iomem
*port_mmio
;
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;
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
,
2053 void __iomem
*port_mmio
= mv_port_base(mmio
, port
);
2055 u32 hp_flags
= hpriv
->hp_flags
;
2057 hp_flags
& (MV_HP_ERRATA_60X1B2
| MV_HP_ERRATA_60X1C0
);
2059 hp_flags
& (MV_HP_ERRATA_60X1B2
| MV_HP_ERRATA_60X1C0
);
2062 if (fix_phy_mode2
) {
2063 m2
= readl(port_mmio
+ PHY_MODE2
);
2066 writel(m2
, port_mmio
+ PHY_MODE2
);
2070 m2
= readl(port_mmio
+ PHY_MODE2
);
2071 m2
&= ~((1 << 16) | (1 << 31));
2072 writel(m2
, port_mmio
+ PHY_MODE2
);
2077 /* who knows what this magic does */
2078 tmp
= readl(port_mmio
+ PHY_MODE3
);
2081 writel(tmp
, port_mmio
+ PHY_MODE3
);
2083 if (fix_phy_mode4
) {
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
;
2107 /* according to mvSata 3.6.1, some IIE values are fixed */
2108 if (IS_GEN_IIE(hpriv
)) {
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
))
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.
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
);
2163 VPRINTK("ENTER, port %u, mmio 0x%p\n", ap
->port_no
, port_mmio
);
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
);
2177 /* Issue COMRESET via SControl */
2179 sata_scr_write_flush(&ap
->link
, SCR_CONTROL
, 0x301);
2182 sata_scr_write_flush(&ap
->link
, SCR_CONTROL
, 0x300);
2186 sata_scr_read(&ap
->link
, SCR_STATUS
, &sstatus
);
2187 if (((sstatus
& 0x3) == 3) || ((sstatus
& 0x3) == 0))
2191 } while (time_before(jiffies
, deadline
));
2193 /* work around errata */
2194 if (IS_GEN_II(hpriv
) &&
2195 (sstatus
!= 0x0) && (sstatus
!= 0x113) && (sstatus
!= 0x123) &&
2197 goto comreset_retry
;
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
);
2211 if (ata_link_offline(&ap
->link
)) {
2212 *class = ATA_DEV_NONE
;
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.
2223 u8 drv_stat
= ata_check_status(ap
);
2224 if ((drv_stat
!= 0x80) && (drv_stat
!= 0x7f))
2229 if (time_after(jiffies
, deadline
))
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
);
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
;
2254 rc
= mv_stop_dma(ap
);
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
)
2267 if (ata_link_online(link
))
2268 rc
= ata_wait_ready(ap
, deadline
);
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
];
2284 mv_channel_reset(hpriv
, mmio
, ap
->port_no
);
2286 mv_phy_reset(ap
, class, deadline
);
2291 static void mv_postreset(struct ata_link
*link
, unsigned int *classes
)
2293 struct ata_port
*ap
= link
->ap
;
2296 /* print link status */
2297 sata_print_link_status(link
);
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");
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;
2331 /* FIXME: handle coalescing completion events properly */
2333 shift
= ap
->port_no
* 2;
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;
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.
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
;
2394 /* PIO related setup
2396 port
->data_addr
= shd_base
+ (sizeof(u32
) * ATA_REG_DATA
);
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
);
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
;
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
) {
2434 hpriv
->ops
= &mv5xxx_ops
;
2435 hp_flags
|= MV_HP_GEN_I
;
2437 switch (pdev
->revision
) {
2439 hp_flags
|= MV_HP_ERRATA_50XXB0
;
2442 hp_flags
|= MV_HP_ERRATA_50XXB2
;
2445 dev_printk(KERN_WARNING
, &pdev
->dev
,
2446 "Applying 50XXB2 workarounds to unknown rev\n");
2447 hp_flags
|= MV_HP_ERRATA_50XXB2
;
2454 hpriv
->ops
= &mv5xxx_ops
;
2455 hp_flags
|= MV_HP_GEN_I
;
2457 switch (pdev
->revision
) {
2459 hp_flags
|= MV_HP_ERRATA_50XXB0
;
2462 hp_flags
|= MV_HP_ERRATA_50XXB2
;
2465 dev_printk(KERN_WARNING
, &pdev
->dev
,
2466 "Applying B2 workarounds to unknown rev\n");
2467 hp_flags
|= MV_HP_ERRATA_50XXB2
;
2474 hpriv
->ops
= &mv6xxx_ops
;
2475 hp_flags
|= MV_HP_GEN_II
;
2477 switch (pdev
->revision
) {
2479 hp_flags
|= MV_HP_ERRATA_60X1B2
;
2482 hp_flags
|= MV_HP_ERRATA_60X1C0
;
2485 dev_printk(KERN_WARNING
, &pdev
->dev
,
2486 "Applying B2 workarounds to unknown rev\n");
2487 hp_flags
|= MV_HP_ERRATA_60X1B2
;
2494 hpriv
->ops
= &mv6xxx_ops
;
2495 hp_flags
|= MV_HP_GEN_IIE
;
2497 switch (pdev
->revision
) {
2499 hp_flags
|= MV_HP_ERRATA_XX42A0
;
2502 hp_flags
|= MV_HP_ERRATA_60X1C0
;
2505 dev_printk(KERN_WARNING
, &pdev
->dev
,
2506 "Applying 60X1C0 workarounds to unknown rev\n");
2507 hp_flags
|= MV_HP_ERRATA_60X1C0
;
2513 dev_printk(KERN_ERR
, &pdev
->dev
,
2514 "BUG: invalid board index %u\n", board_idx
);
2518 hpriv
->hp_flags
= hp_flags
;
2524 * mv_init_host - Perform some early initialization of the host.
2525 * @host: ATA host to initialize
2526 * @board_idx: controller index
2528 * If possible, do an early global reset of the host. Then do
2529 * our port init and clear/unmask all/relevant host interrupts.
2532 * Inherited from caller.
2534 static int mv_init_host(struct ata_host
*host
, unsigned int board_idx
)
2536 int rc
= 0, n_hc
, port
, hc
;
2537 struct pci_dev
*pdev
= to_pci_dev(host
->dev
);
2538 void __iomem
*mmio
= host
->iomap
[MV_PRIMARY_BAR
];
2539 struct mv_host_priv
*hpriv
= host
->private_data
;
2541 /* global interrupt mask */
2542 writel(0, mmio
+ HC_MAIN_IRQ_MASK_OFS
);
2544 rc
= mv_chip_id(host
, board_idx
);
2548 n_hc
= mv_get_hc_count(host
->ports
[0]->flags
);
2550 for (port
= 0; port
< host
->n_ports
; port
++)
2551 hpriv
->ops
->read_preamp(hpriv
, port
, mmio
);
2553 rc
= hpriv
->ops
->reset_hc(hpriv
, mmio
, n_hc
);
2557 hpriv
->ops
->reset_flash(hpriv
, mmio
);
2558 hpriv
->ops
->reset_bus(pdev
, mmio
);
2559 hpriv
->ops
->enable_leds(hpriv
, mmio
);
2561 for (port
= 0; port
< host
->n_ports
; port
++) {
2562 if (IS_GEN_II(hpriv
)) {
2563 void __iomem
*port_mmio
= mv_port_base(mmio
, port
);
2565 u32 ifctl
= readl(port_mmio
+ SATA_INTERFACE_CTL
);
2566 ifctl
|= (1 << 7); /* enable gen2i speed */
2567 ifctl
= (ifctl
& 0xfff) | 0x9b1000; /* from chip spec */
2568 writelfl(ifctl
, port_mmio
+ SATA_INTERFACE_CTL
);
2571 hpriv
->ops
->phy_errata(hpriv
, mmio
, port
);
2574 for (port
= 0; port
< host
->n_ports
; port
++) {
2575 struct ata_port
*ap
= host
->ports
[port
];
2576 void __iomem
*port_mmio
= mv_port_base(mmio
, port
);
2577 unsigned int offset
= port_mmio
- mmio
;
2579 mv_port_init(&ap
->ioaddr
, port_mmio
);
2581 ata_port_pbar_desc(ap
, MV_PRIMARY_BAR
, -1, "mmio");
2582 ata_port_pbar_desc(ap
, MV_PRIMARY_BAR
, offset
, "port");
2585 for (hc
= 0; hc
< n_hc
; hc
++) {
2586 void __iomem
*hc_mmio
= mv_hc_base(mmio
, hc
);
2588 VPRINTK("HC%i: HC config=0x%08x HC IRQ cause "
2589 "(before clear)=0x%08x\n", hc
,
2590 readl(hc_mmio
+ HC_CFG_OFS
),
2591 readl(hc_mmio
+ HC_IRQ_CAUSE_OFS
));
2593 /* Clear any currently outstanding hc interrupt conditions */
2594 writelfl(0, hc_mmio
+ HC_IRQ_CAUSE_OFS
);
2597 /* Clear any currently outstanding host interrupt conditions */
2598 writelfl(0, mmio
+ PCI_IRQ_CAUSE_OFS
);
2600 /* and unmask interrupt generation for host regs */
2601 writelfl(PCI_UNMASK_ALL_IRQS
, mmio
+ PCI_IRQ_MASK_OFS
);
2603 if (IS_GEN_I(hpriv
))
2604 writelfl(~HC_MAIN_MASKED_IRQS_5
, mmio
+ HC_MAIN_IRQ_MASK_OFS
);
2606 writelfl(~HC_MAIN_MASKED_IRQS
, mmio
+ HC_MAIN_IRQ_MASK_OFS
);
2608 VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
2609 "PCI int cause/mask=0x%08x/0x%08x\n",
2610 readl(mmio
+ HC_MAIN_IRQ_CAUSE_OFS
),
2611 readl(mmio
+ HC_MAIN_IRQ_MASK_OFS
),
2612 readl(mmio
+ PCI_IRQ_CAUSE_OFS
),
2613 readl(mmio
+ PCI_IRQ_MASK_OFS
));
2620 * mv_print_info - Dump key info to kernel log for perusal.
2621 * @host: ATA host to print info about
2623 * FIXME: complete this.
2626 * Inherited from caller.
2628 static void mv_print_info(struct ata_host
*host
)
2630 struct pci_dev
*pdev
= to_pci_dev(host
->dev
);
2631 struct mv_host_priv
*hpriv
= host
->private_data
;
2633 const char *scc_s
, *gen
;
2635 /* Use this to determine the HW stepping of the chip so we know
2636 * what errata to workaround
2638 pci_read_config_byte(pdev
, PCI_CLASS_DEVICE
, &scc
);
2641 else if (scc
== 0x01)
2646 if (IS_GEN_I(hpriv
))
2648 else if (IS_GEN_II(hpriv
))
2650 else if (IS_GEN_IIE(hpriv
))
2655 dev_printk(KERN_INFO
, &pdev
->dev
,
2656 "Gen-%s %u slots %u ports %s mode IRQ via %s\n",
2657 gen
, (unsigned)MV_MAX_Q_DEPTH
, host
->n_ports
,
2658 scc_s
, (MV_HP_FLAG_MSI
& hpriv
->hp_flags
) ? "MSI" : "INTx");
2662 * mv_init_one - handle a positive probe of a Marvell host
2663 * @pdev: PCI device found
2664 * @ent: PCI device ID entry for the matched host
2667 * Inherited from caller.
2669 static int mv_init_one(struct pci_dev
*pdev
, const struct pci_device_id
*ent
)
2671 static int printed_version
;
2672 unsigned int board_idx
= (unsigned int)ent
->driver_data
;
2673 const struct ata_port_info
*ppi
[] = { &mv_port_info
[board_idx
], NULL
};
2674 struct ata_host
*host
;
2675 struct mv_host_priv
*hpriv
;
2678 if (!printed_version
++)
2679 dev_printk(KERN_INFO
, &pdev
->dev
, "version " DRV_VERSION
"\n");
2682 n_ports
= mv_get_hc_count(ppi
[0]->flags
) * MV_PORTS_PER_HC
;
2684 host
= ata_host_alloc_pinfo(&pdev
->dev
, ppi
, n_ports
);
2685 hpriv
= devm_kzalloc(&pdev
->dev
, sizeof(*hpriv
), GFP_KERNEL
);
2686 if (!host
|| !hpriv
)
2688 host
->private_data
= hpriv
;
2690 /* acquire resources */
2691 rc
= pcim_enable_device(pdev
);
2695 rc
= pcim_iomap_regions(pdev
, 1 << MV_PRIMARY_BAR
, DRV_NAME
);
2697 pcim_pin_device(pdev
);
2700 host
->iomap
= pcim_iomap_table(pdev
);
2702 rc
= pci_go_64(pdev
);
2706 /* initialize adapter */
2707 rc
= mv_init_host(host
, board_idx
);
2711 /* Enable interrupts */
2712 if (msi
&& pci_enable_msi(pdev
))
2715 mv_dump_pci_cfg(pdev
, 0x68);
2716 mv_print_info(host
);
2718 pci_set_master(pdev
);
2719 pci_try_set_mwi(pdev
);
2720 return ata_host_activate(host
, pdev
->irq
, mv_interrupt
, IRQF_SHARED
,
2721 IS_GEN_I(hpriv
) ? &mv5_sht
: &mv6_sht
);
2724 static int __init
mv_init(void)
2726 return pci_register_driver(&mv_pci_driver
);
2729 static void __exit
mv_exit(void)
2731 pci_unregister_driver(&mv_pci_driver
);
2734 MODULE_AUTHOR("Brett Russ");
2735 MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
2736 MODULE_LICENSE("GPL");
2737 MODULE_DEVICE_TABLE(pci
, mv_pci_tbl
);
2738 MODULE_VERSION(DRV_VERSION
);
2740 module_param(msi
, int, 0444);
2741 MODULE_PARM_DESC(msi
, "Enable use of PCI MSI (0=off, 1=on)");
2743 module_init(mv_init
);
2744 module_exit(mv_exit
);