2 * Calxeda Highbank AHCI SATA platform driver
3 * Copyright 2012 Calxeda, Inc.
5 * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms and conditions of the GNU General Public License,
9 * version 2, as published by the Free Software Foundation.
11 * This program is distributed in the hope it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * You should have received a copy of the GNU General Public License along with
17 * this program. If not, see <http://www.gnu.org/licenses/>.
19 #include <linux/kernel.h>
20 #include <linux/gfp.h>
21 #include <linux/module.h>
22 #include <linux/init.h>
23 #include <linux/types.h>
24 #include <linux/err.h>
26 #include <linux/spinlock.h>
27 #include <linux/device.h>
28 #include <linux/of_device.h>
29 #include <linux/of_address.h>
30 #include <linux/platform_device.h>
31 #include <linux/libata.h>
32 #include <linux/ahci_platform.h>
33 #include <linux/interrupt.h>
34 #include <linux/delay.h>
35 #include <linux/export.h>
36 #include <linux/gpio.h>
37 #include <linux/of_gpio.h>
41 #define CPHY_MAP(dev, addr) ((((dev) & 0x1f) << 7) | (((addr) >> 9) & 0x7f))
42 #define CPHY_ADDR(addr) (((addr) & 0x1ff) << 2)
43 #define SERDES_CR_CTL 0x80a0
44 #define SERDES_CR_ADDR 0x80a1
45 #define SERDES_CR_DATA 0x80a2
46 #define CR_BUSY 0x0001
47 #define CR_START 0x0001
48 #define CR_WR_RDN 0x0002
49 #define CPHY_TX_INPUT_STS 0x2001
50 #define CPHY_RX_INPUT_STS 0x2002
51 #define CPHY_SATA_TX_OVERRIDE 0x8000
52 #define CPHY_SATA_RX_OVERRIDE 0x4000
53 #define CPHY_TX_OVERRIDE 0x2004
54 #define CPHY_RX_OVERRIDE 0x2005
55 #define SPHY_LANE 0x100
56 #define SPHY_HALF_RATE 0x0001
57 #define CPHY_SATA_DPLL_MODE 0x0700
58 #define CPHY_SATA_DPLL_SHIFT 8
59 #define CPHY_SATA_DPLL_RESET (1 << 11)
60 #define CPHY_SATA_TX_ATTEN 0x1c00
61 #define CPHY_SATA_TX_ATTEN_SHIFT 10
62 #define CPHY_PHY_COUNT 6
63 #define CPHY_LANE_COUNT 4
64 #define CPHY_PORT_COUNT (CPHY_PHY_COUNT * CPHY_LANE_COUNT)
66 static DEFINE_SPINLOCK(cphy_lock
);
67 /* Each of the 6 phys can have up to 4 sata ports attached to i. Map 0-based
68 * sata ports to their phys and then to their lanes within the phys
70 struct phy_lane_info
{
71 void __iomem
*phy_base
;
76 static struct phy_lane_info port_data
[CPHY_PORT_COUNT
];
78 static DEFINE_SPINLOCK(sgpio_lock
);
85 struct ecx_plat_data
{
87 /* number of extra clocks that the SGPIO PIC controller expects */
90 unsigned sgpio_gpio
[SGPIO_PINS
];
92 u32 port_to_sgpio
[SGPIO_PORTS
];
95 #define SGPIO_SIGNALS 3
96 #define ECX_ACTIVITY_BITS 0x300000
97 #define ECX_ACTIVITY_SHIFT 0
98 #define ECX_LOCATE_BITS 0x80000
99 #define ECX_LOCATE_SHIFT 1
100 #define ECX_FAULT_BITS 0x400000
101 #define ECX_FAULT_SHIFT 2
102 static inline int sgpio_bit_shift(struct ecx_plat_data
*pdata
, u32 port
,
105 return 1 << (3 * pdata
->port_to_sgpio
[port
] + shift
);
108 static void ecx_parse_sgpio(struct ecx_plat_data
*pdata
, u32 port
, u32 state
)
110 if (state
& ECX_ACTIVITY_BITS
)
111 pdata
->sgpio_pattern
|= sgpio_bit_shift(pdata
, port
,
114 pdata
->sgpio_pattern
&= ~sgpio_bit_shift(pdata
, port
,
116 if (state
& ECX_LOCATE_BITS
)
117 pdata
->sgpio_pattern
|= sgpio_bit_shift(pdata
, port
,
120 pdata
->sgpio_pattern
&= ~sgpio_bit_shift(pdata
, port
,
122 if (state
& ECX_FAULT_BITS
)
123 pdata
->sgpio_pattern
|= sgpio_bit_shift(pdata
, port
,
126 pdata
->sgpio_pattern
&= ~sgpio_bit_shift(pdata
, port
,
131 * Tell the LED controller that the signal has changed by raising the clock
132 * line for 50 uS and then lowering it for 50 uS.
134 static void ecx_led_cycle_clock(struct ecx_plat_data
*pdata
)
136 gpio_set_value(pdata
->sgpio_gpio
[SCLOCK
], 1);
138 gpio_set_value(pdata
->sgpio_gpio
[SCLOCK
], 0);
142 static ssize_t
ecx_transmit_led_message(struct ata_port
*ap
, u32 state
,
145 struct ahci_host_priv
*hpriv
= ap
->host
->private_data
;
146 struct ecx_plat_data
*pdata
= (struct ecx_plat_data
*) hpriv
->plat_data
;
147 struct ahci_port_priv
*pp
= ap
->private_data
;
150 struct ahci_em_priv
*emp
;
153 /* get the slot number from the message */
154 pmp
= (state
& EM_MSG_LED_PMP_SLOT
) >> 8;
155 if (pmp
< EM_MAX_SLOTS
)
156 emp
= &pp
->em_priv
[pmp
];
160 if (!(hpriv
->em_msg_type
& EM_MSG_TYPE_LED
))
163 spin_lock_irqsave(&sgpio_lock
, flags
);
164 ecx_parse_sgpio(pdata
, ap
->port_no
, state
);
165 sgpio_out
= pdata
->sgpio_pattern
;
166 for (i
= 0; i
< pdata
->pre_clocks
; i
++)
167 ecx_led_cycle_clock(pdata
);
169 gpio_set_value(pdata
->sgpio_gpio
[SLOAD
], 1);
170 ecx_led_cycle_clock(pdata
);
171 gpio_set_value(pdata
->sgpio_gpio
[SLOAD
], 0);
173 * bit-bang out the SGPIO pattern, by consuming a bit and then
176 for (i
= 0; i
< (SGPIO_SIGNALS
* pdata
->n_ports
); i
++) {
177 gpio_set_value(pdata
->sgpio_gpio
[SDATA
], sgpio_out
& 1);
179 ecx_led_cycle_clock(pdata
);
181 for (i
= 0; i
< pdata
->post_clocks
; i
++)
182 ecx_led_cycle_clock(pdata
);
184 /* save off new led state for port/slot */
185 emp
->led_state
= state
;
187 spin_unlock_irqrestore(&sgpio_lock
, flags
);
191 static void highbank_set_em_messages(struct device
*dev
,
192 struct ahci_host_priv
*hpriv
,
193 struct ata_port_info
*pi
)
195 struct device_node
*np
= dev
->of_node
;
196 struct ecx_plat_data
*pdata
= hpriv
->plat_data
;
200 for (i
= 0; i
< SGPIO_PINS
; i
++) {
201 err
= of_get_named_gpio(np
, "calxeda,sgpio-gpio", i
);
202 if (IS_ERR_VALUE(err
))
205 pdata
->sgpio_gpio
[i
] = err
;
206 err
= gpio_request(pdata
->sgpio_gpio
[i
], "CX SGPIO");
208 pr_err("sata_highbank gpio_request %d failed: %d\n",
212 gpio_direction_output(pdata
->sgpio_gpio
[i
], 1);
214 of_property_read_u32_array(np
, "calxeda,led-order",
215 pdata
->port_to_sgpio
,
217 if (of_property_read_u32(np
, "calxeda,pre-clocks", &pdata
->pre_clocks
))
218 pdata
->pre_clocks
= 0;
219 if (of_property_read_u32(np
, "calxeda,post-clocks",
220 &pdata
->post_clocks
))
221 pdata
->post_clocks
= 0;
225 hpriv
->em_buf_sz
= 4;
226 hpriv
->em_msg_type
= EM_MSG_TYPE_LED
;
227 pi
->flags
|= ATA_FLAG_EM
| ATA_FLAG_SW_ACTIVITY
;
230 static u32
__combo_phy_reg_read(u8 sata_port
, u32 addr
)
233 u8 dev
= port_data
[sata_port
].phy_devs
;
234 spin_lock(&cphy_lock
);
235 writel(CPHY_MAP(dev
, addr
), port_data
[sata_port
].phy_base
+ 0x800);
236 data
= readl(port_data
[sata_port
].phy_base
+ CPHY_ADDR(addr
));
237 spin_unlock(&cphy_lock
);
241 static void __combo_phy_reg_write(u8 sata_port
, u32 addr
, u32 data
)
243 u8 dev
= port_data
[sata_port
].phy_devs
;
244 spin_lock(&cphy_lock
);
245 writel(CPHY_MAP(dev
, addr
), port_data
[sata_port
].phy_base
+ 0x800);
246 writel(data
, port_data
[sata_port
].phy_base
+ CPHY_ADDR(addr
));
247 spin_unlock(&cphy_lock
);
250 static void combo_phy_wait_for_ready(u8 sata_port
)
252 while (__combo_phy_reg_read(sata_port
, SERDES_CR_CTL
) & CR_BUSY
)
256 static u32
combo_phy_read(u8 sata_port
, u32 addr
)
258 combo_phy_wait_for_ready(sata_port
);
259 __combo_phy_reg_write(sata_port
, SERDES_CR_ADDR
, addr
);
260 __combo_phy_reg_write(sata_port
, SERDES_CR_CTL
, CR_START
);
261 combo_phy_wait_for_ready(sata_port
);
262 return __combo_phy_reg_read(sata_port
, SERDES_CR_DATA
);
265 static void combo_phy_write(u8 sata_port
, u32 addr
, u32 data
)
267 combo_phy_wait_for_ready(sata_port
);
268 __combo_phy_reg_write(sata_port
, SERDES_CR_ADDR
, addr
);
269 __combo_phy_reg_write(sata_port
, SERDES_CR_DATA
, data
);
270 __combo_phy_reg_write(sata_port
, SERDES_CR_CTL
, CR_WR_RDN
| CR_START
);
273 static void highbank_cphy_disable_overrides(u8 sata_port
)
275 u8 lane
= port_data
[sata_port
].lane_mapping
;
277 if (unlikely(port_data
[sata_port
].phy_base
== NULL
))
279 tmp
= combo_phy_read(sata_port
, CPHY_RX_INPUT_STS
+ lane
* SPHY_LANE
);
280 tmp
&= ~CPHY_SATA_RX_OVERRIDE
;
281 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
284 static void cphy_override_tx_attenuation(u8 sata_port
, u32 val
)
286 u8 lane
= port_data
[sata_port
].lane_mapping
;
292 tmp
= combo_phy_read(sata_port
, CPHY_TX_INPUT_STS
+ lane
* SPHY_LANE
);
293 tmp
&= ~CPHY_SATA_TX_OVERRIDE
;
294 combo_phy_write(sata_port
, CPHY_TX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
296 tmp
|= CPHY_SATA_TX_OVERRIDE
;
297 combo_phy_write(sata_port
, CPHY_TX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
299 tmp
|= (val
<< CPHY_SATA_TX_ATTEN_SHIFT
) & CPHY_SATA_TX_ATTEN
;
300 combo_phy_write(sata_port
, CPHY_TX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
303 static void cphy_override_rx_mode(u8 sata_port
, u32 val
)
305 u8 lane
= port_data
[sata_port
].lane_mapping
;
307 tmp
= combo_phy_read(sata_port
, CPHY_RX_INPUT_STS
+ lane
* SPHY_LANE
);
308 tmp
&= ~CPHY_SATA_RX_OVERRIDE
;
309 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
311 tmp
|= CPHY_SATA_RX_OVERRIDE
;
312 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
314 tmp
&= ~CPHY_SATA_DPLL_MODE
;
315 tmp
|= val
<< CPHY_SATA_DPLL_SHIFT
;
316 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
318 tmp
|= CPHY_SATA_DPLL_RESET
;
319 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
321 tmp
&= ~CPHY_SATA_DPLL_RESET
;
322 combo_phy_write(sata_port
, CPHY_RX_OVERRIDE
+ lane
* SPHY_LANE
, tmp
);
327 static void highbank_cphy_override_lane(u8 sata_port
)
329 u8 lane
= port_data
[sata_port
].lane_mapping
;
332 if (unlikely(port_data
[sata_port
].phy_base
== NULL
))
335 tmp
= combo_phy_read(sata_port
, CPHY_RX_INPUT_STS
+
337 } while ((tmp
& SPHY_HALF_RATE
) && (k
++ < 1000));
338 cphy_override_rx_mode(sata_port
, 3);
339 cphy_override_tx_attenuation(sata_port
, port_data
[sata_port
].tx_atten
);
342 static int highbank_initialize_phys(struct device
*dev
, void __iomem
*addr
)
344 struct device_node
*sata_node
= dev
->of_node
;
345 int phy_count
= 0, phy
, port
= 0, i
;
346 void __iomem
*cphy_base
[CPHY_PHY_COUNT
];
347 struct device_node
*phy_nodes
[CPHY_PHY_COUNT
];
348 u32 tx_atten
[CPHY_PORT_COUNT
];
350 memset(port_data
, 0, sizeof(struct phy_lane_info
) * CPHY_PORT_COUNT
);
351 memset(phy_nodes
, 0, sizeof(struct device_node
*) * CPHY_PHY_COUNT
);
352 memset(tx_atten
, 0xff, CPHY_PORT_COUNT
);
356 struct of_phandle_args phy_data
;
357 if (of_parse_phandle_with_args(sata_node
,
358 "calxeda,port-phys", "#phy-cells",
361 for (phy
= 0; phy
< phy_count
; phy
++) {
362 if (phy_nodes
[phy
] == phy_data
.np
)
365 if (phy_nodes
[phy
] == NULL
) {
366 phy_nodes
[phy
] = phy_data
.np
;
367 cphy_base
[phy
] = of_iomap(phy_nodes
[phy
], 0);
368 if (cphy_base
[phy
] == NULL
) {
373 port_data
[port
].lane_mapping
= phy_data
.args
[0];
374 of_property_read_u32(phy_nodes
[phy
], "phydev", &tmp
);
375 port_data
[port
].phy_devs
= tmp
;
376 port_data
[port
].phy_base
= cphy_base
[phy
];
377 of_node_put(phy_data
.np
);
379 } while (port
< CPHY_PORT_COUNT
);
380 of_property_read_u32_array(sata_node
, "calxeda,tx-atten",
382 for (i
= 0; i
< port
; i
++)
383 port_data
[i
].tx_atten
= (u8
) tx_atten
[i
];
388 * The Calxeda SATA phy intermittently fails to bring up a link with Gen3
389 * Retrying the phy hard reset can work around the issue, but the drive
390 * may fail again. In less than 150 out of 15000 test runs, it took more
391 * than 10 tries for the link to be established (but never more than 35).
392 * Triple the maximum observed retry count to provide plenty of margin for
393 * rare events and to guarantee that the link is established.
395 * Also, the default 2 second time-out on a failed drive is too long in
396 * this situation. The uboot implementation of the same driver function
397 * uses a much shorter time-out period and never experiences a time out
398 * issue. Reducing the time-out to 500ms improves the responsiveness.
399 * The other timing constants were kept the same as the stock AHCI driver.
400 * This change was also tested 15000 times on 24 drives and none of them
401 * experienced a time out.
403 static int ahci_highbank_hardreset(struct ata_link
*link
, unsigned int *class,
404 unsigned long deadline
)
406 static const unsigned long timing
[] = { 5, 100, 500};
407 struct ata_port
*ap
= link
->ap
;
408 struct ahci_port_priv
*pp
= ap
->private_data
;
409 u8
*d2h_fis
= pp
->rx_fis
+ RX_FIS_D2H_REG
;
410 struct ata_taskfile tf
;
416 ahci_stop_engine(ap
);
418 /* clear D2H reception area to properly wait for D2H FIS */
419 ata_tf_init(link
->device
, &tf
);
420 tf
.command
= ATA_BUSY
;
421 ata_tf_to_fis(&tf
, 0, 0, d2h_fis
);
424 highbank_cphy_disable_overrides(link
->ap
->port_no
);
425 rc
= sata_link_hardreset(link
, timing
, deadline
, &online
, NULL
);
426 highbank_cphy_override_lane(link
->ap
->port_no
);
428 /* If the status is 1, we are connected, but the link did not
429 * come up. So retry resetting the link again.
431 if (sata_scr_read(link
, SCR_STATUS
, &sstatus
))
433 if (!(sstatus
& 0x3))
435 } while (!online
&& retry
--);
437 ahci_start_engine(ap
);
440 *class = ahci_dev_classify(ap
);
445 static struct ata_port_operations ahci_highbank_ops
= {
446 .inherits
= &ahci_ops
,
447 .hardreset
= ahci_highbank_hardreset
,
448 .transmit_led_message
= ecx_transmit_led_message
,
451 static const struct ata_port_info ahci_highbank_port_info
= {
452 .flags
= AHCI_FLAG_COMMON
,
453 .pio_mask
= ATA_PIO4
,
454 .udma_mask
= ATA_UDMA6
,
455 .port_ops
= &ahci_highbank_ops
,
458 static struct scsi_host_template ahci_highbank_platform_sht
= {
459 AHCI_SHT("sata_highbank"),
462 static const struct of_device_id ahci_of_match
[] = {
463 { .compatible
= "calxeda,hb-ahci" },
466 MODULE_DEVICE_TABLE(of
, ahci_of_match
);
468 static int ahci_highbank_probe(struct platform_device
*pdev
)
470 struct device
*dev
= &pdev
->dev
;
471 struct ahci_host_priv
*hpriv
;
472 struct ecx_plat_data
*pdata
;
473 struct ata_host
*host
;
474 struct resource
*mem
;
479 struct ata_port_info pi
= ahci_highbank_port_info
;
480 const struct ata_port_info
*ppi
[] = { &pi
, NULL
};
482 mem
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
484 dev_err(dev
, "no mmio space\n");
488 irq
= platform_get_irq(pdev
, 0);
490 dev_err(dev
, "no irq\n");
494 hpriv
= devm_kzalloc(dev
, sizeof(*hpriv
), GFP_KERNEL
);
496 dev_err(dev
, "can't alloc ahci_host_priv\n");
499 pdata
= devm_kzalloc(dev
, sizeof(*pdata
), GFP_KERNEL
);
501 dev_err(dev
, "can't alloc ecx_plat_data\n");
505 hpriv
->flags
|= (unsigned long)pi
.private_data
;
507 hpriv
->mmio
= devm_ioremap(dev
, mem
->start
, resource_size(mem
));
509 dev_err(dev
, "can't map %pR\n", mem
);
513 rc
= highbank_initialize_phys(dev
, hpriv
->mmio
);
518 ahci_save_initial_config(dev
, hpriv
, 0, 0);
521 if (hpriv
->cap
& HOST_CAP_NCQ
)
522 pi
.flags
|= ATA_FLAG_NCQ
;
524 if (hpriv
->cap
& HOST_CAP_PMP
)
525 pi
.flags
|= ATA_FLAG_PMP
;
527 if (hpriv
->cap
& HOST_CAP_64
)
528 dma_set_coherent_mask(dev
, DMA_BIT_MASK(64));
530 /* CAP.NP sometimes indicate the index of the last enabled
531 * port, at other times, that of the last possible port, so
532 * determining the maximum port number requires looking at
533 * both CAP.NP and port_map.
535 n_ports
= max(ahci_nr_ports(hpriv
->cap
), fls(hpriv
->port_map
));
537 pdata
->n_ports
= n_ports
;
538 hpriv
->plat_data
= pdata
;
539 highbank_set_em_messages(dev
, hpriv
, &pi
);
541 host
= ata_host_alloc_pinfo(dev
, ppi
, n_ports
);
547 host
->private_data
= hpriv
;
549 if (!(hpriv
->cap
& HOST_CAP_SSS
) || ahci_ignore_sss
)
550 host
->flags
|= ATA_HOST_PARALLEL_SCAN
;
552 for (i
= 0; i
< host
->n_ports
; i
++) {
553 struct ata_port
*ap
= host
->ports
[i
];
555 ata_port_desc(ap
, "mmio %pR", mem
);
556 ata_port_desc(ap
, "port 0x%x", 0x100 + ap
->port_no
* 0x80);
558 /* set enclosure management message type */
559 if (ap
->flags
& ATA_FLAG_EM
)
560 ap
->em_message_type
= hpriv
->em_msg_type
;
562 /* disabled/not-implemented port */
563 if (!(hpriv
->port_map
& (1 << i
)))
564 ap
->ops
= &ata_dummy_port_ops
;
567 rc
= ahci_reset_controller(host
);
571 ahci_init_controller(host
);
572 ahci_print_info(host
, "platform");
574 rc
= ata_host_activate(host
, irq
, ahci_interrupt
, 0,
575 &ahci_highbank_platform_sht
);
584 #ifdef CONFIG_PM_SLEEP
585 static int ahci_highbank_suspend(struct device
*dev
)
587 struct ata_host
*host
= dev_get_drvdata(dev
);
588 struct ahci_host_priv
*hpriv
= host
->private_data
;
589 void __iomem
*mmio
= hpriv
->mmio
;
593 if (hpriv
->flags
& AHCI_HFLAG_NO_SUSPEND
) {
594 dev_err(dev
, "firmware update required for suspend/resume\n");
599 * AHCI spec rev1.1 section 8.3.3:
600 * Software must disable interrupts prior to requesting a
601 * transition of the HBA to D3 state.
603 ctl
= readl(mmio
+ HOST_CTL
);
605 writel(ctl
, mmio
+ HOST_CTL
);
606 readl(mmio
+ HOST_CTL
); /* flush */
608 rc
= ata_host_suspend(host
, PMSG_SUSPEND
);
615 static int ahci_highbank_resume(struct device
*dev
)
617 struct ata_host
*host
= dev_get_drvdata(dev
);
620 if (dev
->power
.power_state
.event
== PM_EVENT_SUSPEND
) {
621 rc
= ahci_reset_controller(host
);
625 ahci_init_controller(host
);
628 ata_host_resume(host
);
634 static SIMPLE_DEV_PM_OPS(ahci_highbank_pm_ops
,
635 ahci_highbank_suspend
, ahci_highbank_resume
);
637 static struct platform_driver ahci_highbank_driver
= {
638 .remove
= ata_platform_remove_one
,
640 .name
= "highbank-ahci",
641 .owner
= THIS_MODULE
,
642 .of_match_table
= ahci_of_match
,
643 .pm
= &ahci_highbank_pm_ops
,
645 .probe
= ahci_highbank_probe
,
648 module_platform_driver(ahci_highbank_driver
);
650 MODULE_DESCRIPTION("Calxeda Highbank AHCI SATA platform driver");
651 MODULE_AUTHOR("Mark Langsdorf <mark.langsdorf@calxeda.com>");
652 MODULE_LICENSE("GPL");
653 MODULE_ALIAS("sata:highbank");