Merge remote branch 'crater/master' into net80211-update
[dragonfly.git] / sys / dev / disk / ahci / ahci.c
1 /*
2  * Copyright (c) 2006 David Gwynne <dlg@openbsd.org>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  *
16  *
17  * Copyright (c) 2009 The DragonFly Project.  All rights reserved.
18  *
19  * This code is derived from software contributed to The DragonFly Project
20  * by Matthew Dillon <dillon@backplane.com>
21  *
22  * Redistribution and use in source and binary forms, with or without
23  * modification, are permitted provided that the following conditions
24  * are met:
25  *
26  * 1. Redistributions of source code must retain the above copyright
27  *    notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  *    notice, this list of conditions and the following disclaimer in
30  *    the documentation and/or other materials provided with the
31  *    distribution.
32  * 3. Neither the name of The DragonFly Project nor the names of its
33  *    contributors may be used to endorse or promote products derived
34  *    from this software without specific, prior written permission.
35  *
36  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
37  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
38  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
39  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
40  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
41  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
42  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
44  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  * $OpenBSD: ahci.c,v 1.147 2009/02/16 21:19:07 miod Exp $
50  */
51
52 #include "ahci.h"
53
54 void    ahci_port_interrupt_enable(struct ahci_port *ap);
55
56 int     ahci_load_prdt(struct ahci_ccb *);
57 void    ahci_unload_prdt(struct ahci_ccb *);
58 static void ahci_load_prdt_callback(void *info, bus_dma_segment_t *segs,
59                                     int nsegs, int error);
60 void    ahci_start(struct ahci_ccb *);
61 int     ahci_port_softreset(struct ahci_port *ap);
62 int     ahci_port_hardreset(struct ahci_port *ap, int hard);
63 void    ahci_port_hardstop(struct ahci_port *ap);
64
65 static void ahci_ata_cmd_timeout_unserialized(void *);
66 void    ahci_check_active_timeouts(struct ahci_port *ap);
67
68 void    ahci_beg_exclusive_access(struct ahci_port *ap, struct ata_port *at);
69 void    ahci_end_exclusive_access(struct ahci_port *ap, struct ata_port *at);
70 void    ahci_issue_pending_commands(struct ahci_port *ap, struct ahci_ccb *ccb);
71 void    ahci_issue_saved_commands(struct ahci_port *ap, u_int32_t mask);
72
73 int     ahci_port_read_ncq_error(struct ahci_port *, int);
74
75 struct ahci_dmamem *ahci_dmamem_alloc(struct ahci_softc *, bus_dma_tag_t tag);
76 void    ahci_dmamem_free(struct ahci_softc *, struct ahci_dmamem *);
77 static void ahci_dmamem_saveseg(void *info, bus_dma_segment_t *segs, int nsegs, int error);
78
79 static void ahci_dummy_done(struct ata_xfer *xa);
80 static void ahci_empty_done(struct ahci_ccb *ccb);
81 static void ahci_ata_cmd_done(struct ahci_ccb *ccb);
82
83 /*
84  * Initialize the global AHCI hardware.  This code does not set up any of
85  * its ports.
86  */
87 int
88 ahci_init(struct ahci_softc *sc)
89 {
90         u_int32_t       cap, pi, pleft;
91         int             i;
92         struct ahci_port *ap;
93
94         DPRINTF(AHCI_D_VERBOSE, " GHC 0x%b",
95                 ahci_read(sc, AHCI_REG_GHC), AHCI_FMT_GHC);
96
97         /*
98          * save BIOS initialised parameters, enable staggered spin up
99          */
100         cap = ahci_read(sc, AHCI_REG_CAP);
101         cap &= AHCI_REG_CAP_SMPS;
102         cap |= AHCI_REG_CAP_SSS;
103         pi = ahci_read(sc, AHCI_REG_PI);
104
105         /*
106          * Unconditionally reset the controller, do not conditionalize on
107          * trying to figure it if it was previously active or not.
108          *
109          * NOTE: On AE before HR.  The AHCI-1.1 spec has a note in section
110          *       5.2.2.1 regarding this.  HR should be set to 1 only after
111          *       AE is set to 1.  The reset sequence will clear HR when
112          *       it completes, and will also clear AE if SAM is 0.  AE must
113          *       then be set again.  When SAM is 1 the AE bit typically reads
114          *       as 1 (and is read-only).
115          *
116          * NOTE: Avoid PCI[e] transaction burst by issuing dummy reads,
117          *       otherwise the writes will only be separated by a few
118          *       nanoseconds.
119          *
120          * NOTE BRICKS (1)
121          *
122          *      If you have a port multiplier and it does not have a device
123          *      in target 0, and it probes normally, but a later operation
124          *      mis-probes a target behind that PM, it is possible for the
125          *      port to brick such that only (a) a power cycle of the host
126          *      or (b) placing a device in target 0 will fix the problem.
127          *      Power cycling the PM has no effect (it works fine on another
128          *      host port).  This issue is unrelated to CLO.
129          */
130         /*
131          * Wait for any prior reset sequence to complete
132          */
133         if (ahci_wait_ne(sc, AHCI_REG_GHC,
134                          AHCI_REG_GHC_HR, AHCI_REG_GHC_HR) != 0) {
135                 device_printf(sc->sc_dev, "Controller is stuck in reset\n");
136                 return (1);
137         }
138         ahci_write(sc, AHCI_REG_GHC, AHCI_REG_GHC_AE);
139         ahci_os_sleep(500);
140         ahci_read(sc, AHCI_REG_GHC);            /* flush */
141         ahci_write(sc, AHCI_REG_GHC, AHCI_REG_GHC_AE | AHCI_REG_GHC_HR);
142         ahci_os_sleep(500);
143         ahci_read(sc, AHCI_REG_GHC);            /* flush */
144         if (ahci_wait_ne(sc, AHCI_REG_GHC,
145                          AHCI_REG_GHC_HR, AHCI_REG_GHC_HR) != 0) {
146                 device_printf(sc->sc_dev, "unable to reset controller\n");
147                 return (1);
148         }
149         if (ahci_read(sc, AHCI_REG_GHC) & AHCI_REG_GHC_AE) {
150                 device_printf(sc->sc_dev, "AE did not auto-clear!\n");
151                 ahci_write(sc, AHCI_REG_GHC, 0);
152                 ahci_os_sleep(500);
153         }
154
155         /*
156          * Enable ahci (global interrupts disabled)
157          *
158          * Restore saved parameters.  Avoid pci transaction burst write
159          * by issuing dummy reads.
160          */
161         ahci_os_sleep(500);
162         ahci_write(sc, AHCI_REG_GHC, AHCI_REG_GHC_AE);
163         ahci_os_sleep(500);
164
165         ahci_read(sc, AHCI_REG_GHC);            /* flush */
166         ahci_write(sc, AHCI_REG_CAP, cap);
167         ahci_write(sc, AHCI_REG_PI, pi);
168         ahci_read(sc, AHCI_REG_GHC);            /* flush */
169
170         /*
171          * Intel hocus pocus in case the BIOS has not set the chip up
172          * properly for AHCI operation.
173          */
174         if (pci_get_vendor(sc->sc_dev) == PCI_VENDOR_INTEL) {
175                 if ((pci_read_config(sc->sc_dev, 0x92, 2) & 0x0F) != 0x0F)
176                         device_printf(sc->sc_dev, "Intel hocus pocus\n");
177                 pci_write_config(sc->sc_dev, 0x92,
178                              pci_read_config(sc->sc_dev, 0x92, 2) | 0x0F, 2);
179         }
180
181         /*
182          * This is a hack that currently does not appear to have
183          * a significant effect, but I noticed the port registers
184          * do not appear to be completely cleared after the host
185          * controller is reset.
186          *
187          * Use a temporary ap structure so we can call ahci_pwrite().
188          *
189          * We must be sure to stop the port
190          */
191         ap = kmalloc(sizeof(*ap), M_DEVBUF, M_WAITOK | M_ZERO);
192         ap->ap_sc = sc;
193         pleft = pi;
194         for (i = 0; i < AHCI_MAX_PORTS; ++i) {
195                 if (pleft == 0)
196                         break;
197                 if ((pi & (1 << i)) == 0)
198                         continue;
199                 if (bus_space_subregion(sc->sc_iot, sc->sc_ioh,
200                     AHCI_PORT_REGION(i), AHCI_PORT_SIZE, &ap->ap_ioh) != 0) {
201                         device_printf(sc->sc_dev, "can't map port\n");
202                         return (1);
203                 }
204                 /*
205                  * NOTE!  Setting AHCI_PREG_SCTL_DET_DISABLE on AHCI1.0 or
206                  *        AHCI1.1 can brick the chipset.  Not only brick it,
207                  *        but also crash the PC.  The bit seems unreliable
208                  *        on AHCI1.2 as well.
209                  */
210                 ahci_port_stop(ap, 1);
211                 ahci_pwrite(ap, AHCI_PREG_SCTL, AHCI_PREG_SCTL_IPM_DISABLED);
212                 ahci_pwrite(ap, AHCI_PREG_SERR, -1);
213                 ahci_pwrite(ap, AHCI_PREG_IE, 0);
214                 ahci_write(ap->ap_sc, AHCI_REG_IS, 1 << i);
215                 ahci_pwrite(ap, AHCI_PREG_CMD, 0);
216                 ahci_pwrite(ap, AHCI_PREG_IS, -1);
217                 sc->sc_portmask |= (1 << i);
218                 pleft &= ~(1 << i);
219         }
220         sc->sc_numports = i;
221         kfree(ap, M_DEVBUF);
222
223         return (0);
224 }
225
226 /*
227  * Allocate and initialize an AHCI port.
228  */
229 int
230 ahci_port_alloc(struct ahci_softc *sc, u_int port)
231 {
232         struct ahci_port        *ap;
233         struct ata_port         *at;
234         struct ahci_ccb         *ccb;
235         u_int64_t               dva;
236         u_int32_t               cmd;
237         u_int32_t               data;
238         struct ahci_cmd_hdr     *hdr;
239         struct ahci_cmd_table   *table;
240         int     rc = ENOMEM;
241         int     error;
242         int     i;
243
244         ap = kmalloc(sizeof(*ap), M_DEVBUF, M_WAITOK | M_ZERO);
245         ap->ap_err_scratch = kmalloc(512, M_DEVBUF, M_WAITOK | M_ZERO);
246
247         ksnprintf(ap->ap_name, sizeof(ap->ap_name), "%s%d.%d",
248                   device_get_name(sc->sc_dev),
249                   device_get_unit(sc->sc_dev),
250                   port);
251         sc->sc_ports[port] = ap;
252
253         /*
254          * Allocate enough so we never have to reallocate, it makes
255          * it easier.
256          *
257          * ap_pmcount will be reduced by the scan if we encounter the
258          * port multiplier port prior to target 15.
259          *
260          * kmalloc power-of-2 allocations are guaranteed not to cross
261          * a page boundary.  Make sure the identify sub-structure in the
262          * at structure does not cross a page boundary, just in case the
263          * part is AHCI-1.1 and can't handle multiple DRQ blocks.
264          */
265         if (ap->ap_ata[0] == NULL) {
266                 int pw2;
267
268                 for (pw2 = 1; pw2 < sizeof(*at); pw2 <<= 1)
269                         ;
270                 for (i = 0; i < AHCI_MAX_PMPORTS; ++i) {
271                         at = kmalloc(pw2, M_DEVBUF, M_INTWAIT | M_ZERO);
272                         ap->ap_ata[i] = at;
273                         at->at_ahci_port = ap;
274                         at->at_target = i;
275                         at->at_probe = ATA_PROBE_NEED_INIT;
276                         at->at_features |= ATA_PORT_F_RESCAN;
277                         ksnprintf(at->at_name, sizeof(at->at_name),
278                                   "%s.%d", ap->ap_name, i);
279                 }
280         }
281         if (bus_space_subregion(sc->sc_iot, sc->sc_ioh,
282             AHCI_PORT_REGION(port), AHCI_PORT_SIZE, &ap->ap_ioh) != 0) {
283                 device_printf(sc->sc_dev,
284                               "unable to create register window for port %d\n",
285                               port);
286                 goto freeport;
287         }
288
289         ap->ap_sc = sc;
290         ap->ap_num = port;
291         ap->ap_probe = ATA_PROBE_NEED_INIT;
292         ap->link_pwr_mgmt = AHCI_LINK_PWR_MGMT_NONE;
293         ap->sysctl_tree = NULL;
294         TAILQ_INIT(&ap->ap_ccb_free);
295         TAILQ_INIT(&ap->ap_ccb_pending);
296         lockinit(&ap->ap_ccb_lock, "ahcipo", 0, 0);
297
298         /* Disable port interrupts */
299         ahci_pwrite(ap, AHCI_PREG_IE, 0);
300         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
301
302         /*
303          * Sec 10.1.2 - deinitialise port if it is already running
304          */
305         cmd = ahci_pread(ap, AHCI_PREG_CMD);
306         kprintf("%s: Caps %b\n", PORTNAME(ap), cmd, AHCI_PFMT_CMD);
307
308         if ((cmd & (AHCI_PREG_CMD_ST | AHCI_PREG_CMD_CR |
309                     AHCI_PREG_CMD_FRE | AHCI_PREG_CMD_FR)) ||
310             (ahci_pread(ap, AHCI_PREG_SCTL) & AHCI_PREG_SCTL_DET)) {
311                 int r;
312
313                 r = ahci_port_stop(ap, 1);
314                 if (r) {
315                         device_printf(sc->sc_dev,
316                                   "unable to disable %s, ignoring port %d\n",
317                                   ((r == 2) ? "CR" : "FR"), port);
318                         rc = ENXIO;
319                         goto freeport;
320                 }
321
322                 /* Write DET to zero */
323                 ahci_pwrite(ap, AHCI_PREG_SCTL, AHCI_PREG_SCTL_IPM_DISABLED);
324         }
325
326         /* Allocate RFIS */
327         ap->ap_dmamem_rfis = ahci_dmamem_alloc(sc, sc->sc_tag_rfis);
328         if (ap->ap_dmamem_rfis == NULL) {
329                 kprintf("%s: NORFIS\n", PORTNAME(ap));
330                 goto nomem;
331         }
332
333         /* Setup RFIS base address */
334         ap->ap_rfis = (struct ahci_rfis *) AHCI_DMA_KVA(ap->ap_dmamem_rfis);
335         dva = AHCI_DMA_DVA(ap->ap_dmamem_rfis);
336         ahci_pwrite(ap, AHCI_PREG_FBU, (u_int32_t)(dva >> 32));
337         ahci_pwrite(ap, AHCI_PREG_FB, (u_int32_t)dva);
338
339         /* Clear SERR before starting FIS reception or ST or anything */
340         ahci_flush_tfd(ap);
341         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
342
343         /* Enable FIS reception and activate port. */
344         cmd = ahci_pread(ap, AHCI_PREG_CMD) & ~AHCI_PREG_CMD_ICC;
345         cmd &= ~(AHCI_PREG_CMD_CLO | AHCI_PREG_CMD_PMA);
346         cmd |= AHCI_PREG_CMD_FRE | AHCI_PREG_CMD_POD | AHCI_PREG_CMD_SUD;
347         ahci_pwrite(ap, AHCI_PREG_CMD, cmd | AHCI_PREG_CMD_ICC_ACTIVE);
348
349         /* Check whether port activated.  Skip it if not. */
350         cmd = ahci_pread(ap, AHCI_PREG_CMD) & ~AHCI_PREG_CMD_ICC;
351         if ((cmd & AHCI_PREG_CMD_FRE) == 0) {
352                 kprintf("%s: NOT-ACTIVATED\n", PORTNAME(ap));
353                 rc = ENXIO;
354                 goto freeport;
355         }
356
357         /* Allocate a CCB for each command slot */
358         ap->ap_ccbs = kmalloc(sizeof(struct ahci_ccb) * sc->sc_ncmds, M_DEVBUF,
359                               M_WAITOK | M_ZERO);
360         if (ap->ap_ccbs == NULL) {
361                 device_printf(sc->sc_dev,
362                               "unable to allocate command list for port %d\n",
363                               port);
364                 goto freeport;
365         }
366
367         /* Command List Structures and Command Tables */
368         ap->ap_dmamem_cmd_list = ahci_dmamem_alloc(sc, sc->sc_tag_cmdh);
369         ap->ap_dmamem_cmd_table = ahci_dmamem_alloc(sc, sc->sc_tag_cmdt);
370         if (ap->ap_dmamem_cmd_table == NULL ||
371             ap->ap_dmamem_cmd_list == NULL) {
372 nomem:
373                 device_printf(sc->sc_dev,
374                               "unable to allocate DMA memory for port %d\n",
375                               port);
376                 goto freeport;
377         }
378
379         /* Setup command list base address */
380         dva = AHCI_DMA_DVA(ap->ap_dmamem_cmd_list);
381         ahci_pwrite(ap, AHCI_PREG_CLBU, (u_int32_t)(dva >> 32));
382         ahci_pwrite(ap, AHCI_PREG_CLB, (u_int32_t)dva);
383
384         /* Split CCB allocation into CCBs and assign to command header/table */
385         hdr = AHCI_DMA_KVA(ap->ap_dmamem_cmd_list);
386         table = AHCI_DMA_KVA(ap->ap_dmamem_cmd_table);
387         for (i = 0; i < sc->sc_ncmds; i++) {
388                 ccb = &ap->ap_ccbs[i];
389
390                 error = bus_dmamap_create(sc->sc_tag_data, BUS_DMA_ALLOCNOW,
391                                           &ccb->ccb_dmamap);
392                 if (error) {
393                         device_printf(sc->sc_dev,
394                                       "unable to create dmamap for port %d "
395                                       "ccb %d\n", port, i);
396                         goto freeport;
397                 }
398
399                 callout_init(&ccb->ccb_timeout);
400                 ccb->ccb_slot = i;
401                 ccb->ccb_port = ap;
402                 ccb->ccb_cmd_hdr = &hdr[i];
403                 ccb->ccb_cmd_table = &table[i];
404                 dva = AHCI_DMA_DVA(ap->ap_dmamem_cmd_table) +
405                     ccb->ccb_slot * sizeof(struct ahci_cmd_table);
406                 ccb->ccb_cmd_hdr->ctba_hi = htole32((u_int32_t)(dva >> 32));
407                 ccb->ccb_cmd_hdr->ctba_lo = htole32((u_int32_t)dva);
408
409                 ccb->ccb_xa.fis =
410                     (struct ata_fis_h2d *)ccb->ccb_cmd_table->cfis;
411                 ccb->ccb_xa.packetcmd = ccb->ccb_cmd_table->acmd;
412                 ccb->ccb_xa.tag = i;
413
414                 ccb->ccb_xa.state = ATA_S_COMPLETE;
415
416                 /*
417                  * CCB[1] is the error CCB and is not get or put.  It is
418                  * also used for probing.  Numerous HBAs only load the
419                  * signature from CCB[1] so it MUST be used for the second
420                  * FIS.
421                  */
422                 if (i == 1)
423                         ap->ap_err_ccb = ccb;
424                 else
425                         ahci_put_ccb(ccb);
426         }
427
428         /*
429          * Wait for ICC change to complete
430          */
431         ahci_pwait_clr(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_ICC);
432
433         /*
434          * Calculate the interrupt mask
435          */
436         data = AHCI_PREG_IE_TFEE | AHCI_PREG_IE_HBFE |
437                AHCI_PREG_IE_IFE | AHCI_PREG_IE_OFE |
438                AHCI_PREG_IE_DPE | AHCI_PREG_IE_UFE |
439                AHCI_PREG_IE_PCE | AHCI_PREG_IE_PRCE |
440                AHCI_PREG_IE_DHRE | AHCI_PREG_IE_SDBE;
441         if (ap->ap_sc->sc_cap & AHCI_REG_CAP_SSNTF)
442                 data |= AHCI_PREG_IE_IPME;
443 #ifdef AHCI_COALESCE
444         if (sc->sc_ccc_ports & (1 << port)
445                 data &= ~(AHCI_PREG_IE_SDBE | AHCI_PREG_IE_DHRE);
446 #endif
447         ap->ap_intmask = data;
448
449         /*
450          * Start the port helper thread.  The helper thread will call
451          * ahci_port_init() so the ports can all be started in parallel.
452          * A failure by ahci_port_init() does not deallocate the port
453          * since we still want hot-plug events.
454          */
455         ahci_os_start_port(ap);
456         return(0);
457 freeport:
458         ahci_port_free(sc, port);
459         return (rc);
460 }
461
462 /*
463  * [re]initialize an idle port.  No CCBs should be active.
464  *
465  * This function is called during the initial port allocation sequence
466  * and is also called on hot-plug insertion.  We take no chances and
467  * use a portreset instead of a softreset.
468  *
469  * This function is the only way to move a failed port back to active
470  * status.
471  *
472  * Returns 0 if a device is successfully detected.
473  */
474 int
475 ahci_port_init(struct ahci_port *ap)
476 {
477         /*
478          * Register [re]initialization
479          */
480         if (ap->ap_sc->sc_cap & AHCI_REG_CAP_SSNTF)
481                 ahci_pwrite(ap, AHCI_PREG_SNTF, -1);
482         ap->ap_probe = ATA_PROBE_NEED_HARD_RESET;
483         ap->ap_pmcount = 0;
484
485         /*
486          * Flush the TFD and SERR and make sure the port is stopped before
487          * enabling its interrupt.  We no longer cycle the port start as
488          * the port should not be started unless a device is present.
489          *
490          * XXX should we enable FIS reception? (FRE)?
491          */
492         ahci_flush_tfd(ap);
493         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
494         ahci_port_stop(ap, 0);
495         ahci_port_interrupt_enable(ap);
496         return (0);
497 }
498
499 /*
500  * Enable or re-enable interrupts on a port.
501  *
502  * This routine is called from the port initialization code or from the
503  * helper thread as the real interrupt may be forced to turn off certain
504  * interrupt sources.
505  */
506 void
507 ahci_port_interrupt_enable(struct ahci_port *ap)
508 {
509         ahci_pwrite(ap, AHCI_PREG_IE, ap->ap_intmask);
510 }
511
512 /*
513  * Manage the agressive link power management capability.
514  */
515 void
516 ahci_port_link_pwr_mgmt(struct ahci_port *ap, int link_pwr_mgmt)
517 {
518         u_int32_t cmd, sctl;
519
520         if (link_pwr_mgmt == ap->link_pwr_mgmt)
521                 return;
522
523         if ((ap->ap_sc->sc_cap & AHCI_REG_CAP_SALP) == 0) {
524                 kprintf("%s: link power management not supported.\n",
525                         PORTNAME(ap));
526                 return;
527         }
528
529         ahci_os_lock_port(ap);
530
531         if (link_pwr_mgmt == AHCI_LINK_PWR_MGMT_AGGR &&
532             (ap->ap_sc->sc_cap & AHCI_REG_CAP_SSC)) {
533                 kprintf("%s: enabling aggressive link power management.\n",
534                         PORTNAME(ap));
535
536                 ap->ap_intmask &= ~AHCI_PREG_IE_PRCE;
537                 ahci_port_interrupt_enable(ap);
538
539                 sctl = ahci_pread(ap, AHCI_PREG_SCTL);
540                 sctl &= ~(AHCI_PREG_SCTL_IPM_DISABLED);
541                 ahci_pwrite(ap, AHCI_PREG_SCTL, sctl);
542
543                 cmd = ahci_pread(ap, AHCI_PREG_CMD);
544                 cmd |= AHCI_PREG_CMD_ASP;
545                 cmd |= AHCI_PREG_CMD_ALPE;
546                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
547
548                 ap->link_pwr_mgmt = link_pwr_mgmt;
549
550         } else if (link_pwr_mgmt == AHCI_LINK_PWR_MGMT_MEDIUM &&
551                    (ap->ap_sc->sc_cap & AHCI_REG_CAP_PSC)) {
552                 kprintf("%s: enabling medium link power management.\n",
553                         PORTNAME(ap));
554
555                 ap->ap_intmask &= ~AHCI_PREG_IE_PRCE;
556                 ahci_port_interrupt_enable(ap);
557
558                 sctl = ahci_pread(ap, AHCI_PREG_SCTL);
559                 sctl &= ~(AHCI_PREG_SCTL_IPM_DISABLED);
560                 ahci_pwrite(ap, AHCI_PREG_SCTL, sctl);
561
562                 cmd = ahci_pread(ap, AHCI_PREG_CMD);
563                 cmd &= ~AHCI_PREG_CMD_ASP;
564                 cmd |= AHCI_PREG_CMD_ALPE;
565                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
566
567                 ap->link_pwr_mgmt = link_pwr_mgmt;
568
569         } else if (link_pwr_mgmt == AHCI_LINK_PWR_MGMT_NONE) {
570                 kprintf("%s: disabling link power management.\n",
571                         PORTNAME(ap));
572
573                 cmd = ahci_pread(ap, AHCI_PREG_CMD);
574                 cmd |= AHCI_PREG_CMD_ASP;
575                 cmd &= ~(AHCI_PREG_CMD_ALPE | AHCI_PREG_CMD_ASP);
576                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
577
578                 sctl = ahci_pread(ap, AHCI_PREG_SCTL);
579                 sctl |= AHCI_PREG_SCTL_IPM_DISABLED;
580                 ahci_pwrite(ap, AHCI_PREG_SCTL, sctl);
581
582                 /* let the drive come back to avoid PRCS interrupts later */
583                 ahci_os_unlock_port(ap);
584                 ahci_os_sleep(1000);
585                 ahci_os_lock_port(ap);
586
587                 ahci_pwrite(ap, AHCI_PREG_SERR, AHCI_PREG_SERR_DIAG_N);
588                 ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_PRCS);
589
590                 ap->ap_intmask |= AHCI_PREG_IE_PRCE;
591                 ahci_port_interrupt_enable(ap);
592
593                 ap->link_pwr_mgmt = link_pwr_mgmt;
594         } else {
595                 kprintf("%s: unsupported link power management state %d.\n",
596                         PORTNAME(ap), link_pwr_mgmt);
597         }
598
599         ahci_os_unlock_port(ap);
600 }
601
602
603 /*
604  * Run the port / target state machine from a main context.
605  *
606  * The state machine for the port is always run.
607  *
608  * If atx is non-NULL run the state machine for a particular target.
609  * If atx is NULL run the state machine for all targets.
610  */
611 void
612 ahci_port_state_machine(struct ahci_port *ap, int initial)
613 {
614         struct ata_port *at;
615         u_int32_t data;
616         int target;
617         int didsleep;
618         int loop;
619
620         /*
621          * State machine for port.  Note that CAM is not yet associated
622          * during the initial parallel probe and the port's probe state
623          * will not get past ATA_PROBE_NEED_IDENT.
624          */
625         {
626                 if (initial == 0 && ap->ap_probe <= ATA_PROBE_NEED_HARD_RESET) {
627                         kprintf("%s: Waiting 10 seconds on insertion\n",
628                                 PORTNAME(ap));
629                         ahci_os_sleep(10000);
630                         initial = 1;
631                 }
632                 if (ap->ap_probe == ATA_PROBE_NEED_INIT)
633                         ahci_port_init(ap);
634                 if (ap->ap_probe == ATA_PROBE_NEED_HARD_RESET)
635                         ahci_port_reset(ap, NULL, 1);
636                 if (ap->ap_probe == ATA_PROBE_NEED_SOFT_RESET)
637                         ahci_port_reset(ap, NULL, 0);
638                 if (ap->ap_probe == ATA_PROBE_NEED_IDENT)
639                         ahci_cam_probe(ap, NULL);
640         }
641         if (ap->ap_type != ATA_PORT_T_PM) {
642                 if (ap->ap_probe == ATA_PROBE_FAILED) {
643                         ahci_cam_changed(ap, NULL, 0);
644                 } else if (ap->ap_probe >= ATA_PROBE_NEED_IDENT) {
645                         ahci_cam_changed(ap, NULL, 1);
646                 }
647                 return;
648         }
649
650         /*
651          * Port Multiplier state machine.
652          *
653          * Get a mask of changed targets and combine with any runnable
654          * states already present.
655          */
656         for (loop = 0; ;++loop) {
657                 if (ahci_pm_read(ap, 15, SATA_PMREG_EINFO, &data)) {
658                         kprintf("%s: PM unable to read hot-plug bitmap\n",
659                                 PORTNAME(ap));
660                         break;
661                 }
662
663                 /*
664                  * Do at least one loop, then stop if no more state changes
665                  * have occured.  The PM might not generate a new
666                  * notification until we clear the entire bitmap.
667                  */
668                 if (loop && data == 0)
669                         break;
670
671                 /*
672                  * New devices showing up in the bitmap require some spin-up
673                  * time before we start probing them.  Reset didsleep.  The
674                  * first new device we detect will sleep before probing.
675                  *
676                  * This only applies to devices whos change bit is set in
677                  * the data, and does not apply to the initial boot-time
678                  * probe.
679                  */
680                 didsleep = 0;
681
682                 for (target = 0; target < ap->ap_pmcount; ++target) {
683                         at = ap->ap_ata[target];
684
685                         /*
686                          * Check the target state for targets behind the PM
687                          * which have changed state.  This will adjust
688                          * at_probe and set ATA_PORT_F_RESCAN
689                          *
690                          * We want to wait at least 10 seconds before probing
691                          * a newly inserted device.  If the check status
692                          * indicates a device is present and in need of a
693                          * hard reset, we make sure we have slept before
694                          * continuing.
695                          *
696                          * We also need to wait at least 1 second for the
697                          * PHY state to change after insertion, if we
698                          * haven't already waited the 10 seconds.
699                          *
700                          * NOTE: When pm_check_good finds a good port it
701                          *       typically starts us in probe state
702                          *       NEED_HARD_RESET rather than INIT.
703                          */
704                         if (data & (1 << target)) {
705                                 if (initial == 0 && didsleep == 0)
706                                         ahci_os_sleep(1000);
707                                 ahci_pm_check_good(ap, target);
708                                 if (initial == 0 && didsleep == 0 &&
709                                     at->at_probe <= ATA_PROBE_NEED_HARD_RESET
710                                 ) {
711                                         didsleep = 1;
712                                         kprintf("%s: Waiting 10 seconds on insertion\n", PORTNAME(ap));
713                                         ahci_os_sleep(10000);
714                                 }
715                         }
716
717                         /*
718                          * Report hot-plug events before the probe state
719                          * really gets hot.  Only actual events are reported
720                          * here to reduce spew.
721                          */
722                         if (data & (1 << target)) {
723                                 kprintf("%s: HOTPLUG (PM) - ", ATANAME(ap, at));
724                                 switch(at->at_probe) {
725                                 case ATA_PROBE_NEED_INIT:
726                                 case ATA_PROBE_NEED_HARD_RESET:
727                                         kprintf("Device inserted\n");
728                                         break;
729                                 case ATA_PROBE_FAILED:
730                                         kprintf("Device removed\n");
731                                         break;
732                                 default:
733                                         kprintf("Device probe in progress\n");
734                                         break;
735                                 }
736                         }
737
738                         /*
739                          * Run through the state machine as necessary if
740                          * the port is not marked failed.
741                          *
742                          * The state machine may stop at NEED_IDENT if
743                          * CAM is not yet attached.
744                          *
745                          * Acquire exclusive access to the port while we
746                          * are doing this.  This prevents command-completion
747                          * from queueing commands for non-polled targets
748                          * inbetween our probe steps.  We need to do this
749                          * because the reset probes can generate severe PHY
750                          * and protocol errors and soft-brick the port.
751                          */
752                         if (at->at_probe != ATA_PROBE_FAILED &&
753                             at->at_probe != ATA_PROBE_GOOD) {
754                                 ahci_beg_exclusive_access(ap, at);
755                                 if (at->at_probe == ATA_PROBE_NEED_INIT)
756                                         ahci_pm_port_init(ap, at);
757                                 if (at->at_probe == ATA_PROBE_NEED_HARD_RESET)
758                                         ahci_port_reset(ap, at, 1);
759                                 if (at->at_probe == ATA_PROBE_NEED_SOFT_RESET)
760                                         ahci_port_reset(ap, at, 0);
761                                 if (at->at_probe == ATA_PROBE_NEED_IDENT)
762                                         ahci_cam_probe(ap, at);
763                                 ahci_end_exclusive_access(ap, at);
764                         }
765
766                         /*
767                          * Add or remove from CAM
768                          */
769                         if (at->at_features & ATA_PORT_F_RESCAN) {
770                                 at->at_features &= ~ATA_PORT_F_RESCAN;
771                                 if (at->at_probe == ATA_PROBE_FAILED) {
772                                         ahci_cam_changed(ap, at, 0);
773                                 } else if (at->at_probe >= ATA_PROBE_NEED_IDENT) {
774                                         ahci_cam_changed(ap, at, 1);
775                                 }
776                         }
777                         data &= ~(1 << target);
778                 }
779                 if (data) {
780                         kprintf("%s: WARNING (PM): extra bits set in "
781                                 "EINFO: %08x\n", PORTNAME(ap), data);
782                         while (target < AHCI_MAX_PMPORTS) {
783                                 ahci_pm_check_good(ap, target);
784                                 ++target;
785                         }
786                 }
787         }
788 }
789
790
791 /*
792  * De-initialize and detach a port.
793  */
794 void
795 ahci_port_free(struct ahci_softc *sc, u_int port)
796 {
797         struct ahci_port        *ap = sc->sc_ports[port];
798         struct ahci_ccb         *ccb;
799         int i;
800
801         /*
802          * Ensure port is disabled and its interrupts are all flushed.
803          */
804         if (ap->ap_sc) {
805                 ahci_port_stop(ap, 1);
806                 ahci_os_stop_port(ap);
807                 ahci_pwrite(ap, AHCI_PREG_CMD, 0);
808                 ahci_pwrite(ap, AHCI_PREG_IE, 0);
809                 ahci_pwrite(ap, AHCI_PREG_IS, ahci_pread(ap, AHCI_PREG_IS));
810                 ahci_write(sc, AHCI_REG_IS, 1 << port);
811         }
812
813         if (ap->ap_ccbs) {
814                 while ((ccb = ahci_get_ccb(ap)) != NULL) {
815                         if (ccb->ccb_dmamap) {
816                                 bus_dmamap_destroy(sc->sc_tag_data,
817                                                    ccb->ccb_dmamap);
818                                 ccb->ccb_dmamap = NULL;
819                         }
820                 }
821                 if ((ccb = ap->ap_err_ccb) != NULL) {
822                         if (ccb->ccb_dmamap) {
823                                 bus_dmamap_destroy(sc->sc_tag_data,
824                                                    ccb->ccb_dmamap);
825                                 ccb->ccb_dmamap = NULL;
826                         }
827                         ap->ap_err_ccb = NULL;
828                 }
829                 kfree(ap->ap_ccbs, M_DEVBUF);
830                 ap->ap_ccbs = NULL;
831         }
832
833         if (ap->ap_dmamem_cmd_list) {
834                 ahci_dmamem_free(sc, ap->ap_dmamem_cmd_list);
835                 ap->ap_dmamem_cmd_list = NULL;
836         }
837         if (ap->ap_dmamem_rfis) {
838                 ahci_dmamem_free(sc, ap->ap_dmamem_rfis);
839                 ap->ap_dmamem_rfis = NULL;
840         }
841         if (ap->ap_dmamem_cmd_table) {
842                 ahci_dmamem_free(sc, ap->ap_dmamem_cmd_table);
843                 ap->ap_dmamem_cmd_table = NULL;
844         }
845         if (ap->ap_ata) {
846                 for (i = 0; i < AHCI_MAX_PMPORTS; ++i) {
847                         if (ap->ap_ata[i]) {
848                                 kfree(ap->ap_ata[i], M_DEVBUF);
849                                 ap->ap_ata[i] = NULL;
850                         }
851                 }
852         }
853         if (ap->ap_err_scratch) {
854                 kfree(ap->ap_err_scratch, M_DEVBUF);
855                 ap->ap_err_scratch = NULL;
856         }
857
858         /* bus_space(9) says we dont free the subregions handle */
859
860         kfree(ap, M_DEVBUF);
861         sc->sc_ports[port] = NULL;
862 }
863
864 /*
865  * Start high-level command processing on the port
866  */
867 int
868 ahci_port_start(struct ahci_port *ap)
869 {
870         u_int32_t       r, s, is, tfd;
871
872         /*
873          * FRE must be turned on before ST.  Wait for FR to go active
874          * before turning on ST.  The spec doesn't seem to think this
875          * is necessary but waiting here avoids an on-off race in the
876          * ahci_port_stop() code.
877          */
878         r = ahci_pread(ap, AHCI_PREG_CMD);
879         if ((r & AHCI_PREG_CMD_FRE) == 0) {
880                 r |= AHCI_PREG_CMD_FRE;
881                 ahci_pwrite(ap, AHCI_PREG_CMD, r);
882         }
883         if ((ap->ap_sc->sc_flags & AHCI_F_IGN_FR) == 0) {
884                 if (ahci_pwait_set(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_FR)) {
885                         kprintf("%s: Cannot start FIS reception\n",
886                                 PORTNAME(ap));
887                         return (2);
888                 }
889         } else {
890                 ahci_os_sleep(10);
891         }
892
893         /*
894          * Turn on ST, wait for CR to come up.
895          */
896         r |= AHCI_PREG_CMD_ST;
897         ahci_pwrite(ap, AHCI_PREG_CMD, r);
898         if (ahci_pwait_set_to(ap, 2000, AHCI_PREG_CMD, AHCI_PREG_CMD_CR)) {
899                 s = ahci_pread(ap, AHCI_PREG_SERR);
900                 is = ahci_pread(ap, AHCI_PREG_IS);
901                 tfd = ahci_pread(ap, AHCI_PREG_TFD);
902                 kprintf("%s: Cannot start command DMA\n"
903                         "NCMP=%b NSERR=%b\n"
904                         "NEWIS=%b\n"
905                         "NEWTFD=%b\n",
906                         PORTNAME(ap),
907                         r, AHCI_PFMT_CMD, s, AHCI_PFMT_SERR,
908                         is, AHCI_PFMT_IS,
909                         tfd, AHCI_PFMT_TFD_STS);
910                 return (1);
911         }
912
913 #ifdef AHCI_COALESCE
914         /*
915          * (Re-)enable coalescing on the port.
916          */
917         if (ap->ap_sc->sc_ccc_ports & (1 << ap->ap_num)) {
918                 ap->ap_sc->sc_ccc_ports_cur |= (1 << ap->ap_num);
919                 ahci_write(ap->ap_sc, AHCI_REG_CCC_PORTS,
920                     ap->ap_sc->sc_ccc_ports_cur);
921         }
922 #endif
923
924         return (0);
925 }
926
927 /*
928  * Stop high-level command processing on a port
929  *
930  * WARNING!  If the port is stopped while CR is still active our saved
931  *           CI/SACT will race any commands completed by the command
932  *           processor prior to being able to stop.  Thus we never call
933  *           this function unless we intend to dispose of any remaining
934  *           active commands.  In particular, this complicates the timeout
935  *           code.
936  */
937 int
938 ahci_port_stop(struct ahci_port *ap, int stop_fis_rx)
939 {
940         u_int32_t       r;
941
942 #ifdef AHCI_COALESCE
943         /*
944          * Disable coalescing on the port while it is stopped.
945          */
946         if (ap->ap_sc->sc_ccc_ports & (1 << ap->ap_num)) {
947                 ap->ap_sc->sc_ccc_ports_cur &= ~(1 << ap->ap_num);
948                 ahci_write(ap->ap_sc, AHCI_REG_CCC_PORTS,
949                     ap->ap_sc->sc_ccc_ports_cur);
950         }
951 #endif
952
953         /*
954          * Turn off ST, then wait for CR to go off.
955          */
956         r = ahci_pread(ap, AHCI_PREG_CMD) & ~AHCI_PREG_CMD_ICC;
957         r &= ~AHCI_PREG_CMD_ST;
958         ahci_pwrite(ap, AHCI_PREG_CMD, r);
959
960         if (ahci_pwait_clr(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_CR)) {
961                 kprintf("%s: Port bricked, unable to stop (ST)\n",
962                         PORTNAME(ap));
963                 return (1);
964         }
965
966 #if 0
967         /*
968          * Turn off FRE, then wait for FR to go off.  FRE cannot
969          * be turned off until CR transitions to 0.
970          */
971         if ((r & AHCI_PREG_CMD_FR) == 0) {
972                 kprintf("%s: FR stopped, clear FRE for next start\n",
973                         PORTNAME(ap));
974                 stop_fis_rx = 2;
975         }
976 #endif
977         if (stop_fis_rx) {
978                 r &= ~AHCI_PREG_CMD_FRE;
979                 ahci_pwrite(ap, AHCI_PREG_CMD, r);
980                 if (ahci_pwait_clr(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_FR)) {
981                         kprintf("%s: Port bricked, unable to stop (FRE)\n",
982                                 PORTNAME(ap));
983                         return (2);
984                 }
985         }
986
987         return (0);
988 }
989
990 /*
991  * AHCI command list override -> forcibly clear TFD.STS.{BSY,DRQ}
992  */
993 int
994 ahci_port_clo(struct ahci_port *ap)
995 {
996         struct ahci_softc               *sc = ap->ap_sc;
997         u_int32_t                       cmd;
998
999         /* Only attempt CLO if supported by controller */
1000         if ((ahci_read(sc, AHCI_REG_CAP) & AHCI_REG_CAP_SCLO) == 0)
1001                 return (1);
1002
1003         /* Issue CLO */
1004         cmd = ahci_pread(ap, AHCI_PREG_CMD) & ~AHCI_PREG_CMD_ICC;
1005         ahci_pwrite(ap, AHCI_PREG_CMD, cmd | AHCI_PREG_CMD_CLO);
1006
1007         /* Wait for completion */
1008         if (ahci_pwait_clr(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_CLO)) {
1009                 kprintf("%s: CLO did not complete\n", PORTNAME(ap));
1010                 return (1);
1011         }
1012
1013         return (0);
1014 }
1015
1016 /*
1017  * Reset a port.
1018  *
1019  * If hard is 0 perform a softreset of the port.
1020  * If hard is 1 perform a hard reset of the port.
1021  *
1022  * If at is non-NULL an indirect port via a port-multiplier is being
1023  * reset, otherwise a direct port is being reset.
1024  *
1025  * NOTE: Indirect ports can only be soft-reset.
1026  */
1027 int
1028 ahci_port_reset(struct ahci_port *ap, struct ata_port *at, int hard)
1029 {
1030         int rc;
1031
1032         if (hard) {
1033                 if (at)
1034                         rc = ahci_pm_hardreset(ap, at->at_target, hard);
1035                 else
1036                         rc = ahci_port_hardreset(ap, hard);
1037         } else {
1038                 if (at)
1039                         rc = ahci_pm_softreset(ap, at->at_target);
1040                 else
1041                         rc = ahci_port_softreset(ap);
1042         }
1043         return(rc);
1044 }
1045
1046 /*
1047  * AHCI soft reset, Section 10.4.1
1048  *
1049  * (at) will be NULL when soft-resetting a directly-attached device, and
1050  * non-NULL when soft-resetting a device through a port multiplier.
1051  *
1052  * This function keeps port communications intact and attempts to generate
1053  * a reset to the connected device using device commands.
1054  */
1055 int
1056 ahci_port_softreset(struct ahci_port *ap)
1057 {
1058         struct ahci_ccb         *ccb = NULL;
1059         struct ahci_cmd_hdr     *cmd_slot;
1060         u_int8_t                *fis;
1061         int                     error;
1062
1063         error = EIO;
1064
1065         if (bootverbose) {
1066                 kprintf("%s: START SOFTRESET %b\n", PORTNAME(ap),
1067                         ahci_pread(ap, AHCI_PREG_CMD), AHCI_PFMT_CMD);
1068         }
1069
1070         DPRINTF(AHCI_D_VERBOSE, "%s: soft reset\n", PORTNAME(ap));
1071
1072         crit_enter();
1073         ap->ap_flags |= AP_F_IN_RESET;
1074         ap->ap_state = AP_S_NORMAL;
1075
1076         /*
1077          * Remember port state in cmd (main to restore start/stop)
1078          *
1079          * Idle port.
1080          */
1081         if (ahci_port_stop(ap, 0)) {
1082                 kprintf("%s: failed to stop port, cannot softreset\n",
1083                         PORTNAME(ap));
1084                 goto err;
1085         }
1086
1087         /*
1088          * Request CLO if device appears hung.
1089          */
1090         if (ahci_pread(ap, AHCI_PREG_TFD) &
1091                    (AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
1092                 ahci_port_clo(ap);
1093         }
1094
1095         /*
1096          * This is an attempt to clear errors so a new signature will
1097          * be latched.  It isn't working properly.  XXX
1098          */
1099         ahci_flush_tfd(ap);
1100         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
1101
1102         /* Restart port */
1103         if (ahci_port_start(ap)) {
1104                 kprintf("%s: failed to start port, cannot softreset\n",
1105                         PORTNAME(ap));
1106                 goto err;
1107         }
1108
1109         /* Check whether CLO worked */
1110         if (ahci_pwait_clr(ap, AHCI_PREG_TFD,
1111                                AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
1112                 kprintf("%s: CLO %s, need port reset\n",
1113                         PORTNAME(ap),
1114                         (ahci_read(ap->ap_sc, AHCI_REG_CAP) & AHCI_REG_CAP_SCLO)
1115                         ? "failed" : "unsupported");
1116                 error = EBUSY;
1117                 goto err;
1118         }
1119
1120         /*
1121          * Prep first D2H command with SRST feature & clear busy/reset flags
1122          *
1123          * It is unclear which other fields in the FIS are used.  Just zero
1124          * everything.
1125          *
1126          * NOTE!  This CCB is used for both the first and second commands.
1127          *        The second command must use CCB slot 1 to properly load
1128          *        the signature.
1129          */
1130         ccb = ahci_get_err_ccb(ap);
1131         ccb->ccb_xa.complete = ahci_dummy_done;
1132         ccb->ccb_xa.flags = ATA_F_POLL | ATA_F_EXCLUSIVE;
1133         KKASSERT(ccb->ccb_slot == 1);
1134         ccb->ccb_xa.at = NULL;
1135         cmd_slot = ccb->ccb_cmd_hdr;
1136
1137         fis = ccb->ccb_cmd_table->cfis;
1138         bzero(fis, sizeof(ccb->ccb_cmd_table->cfis));
1139         fis[0] = ATA_FIS_TYPE_H2D;
1140         fis[15] = ATA_FIS_CONTROL_SRST|ATA_FIS_CONTROL_4BIT;
1141
1142         cmd_slot->prdtl = 0;
1143         cmd_slot->flags = htole16(5);   /* FIS length: 5 DWORDS */
1144         cmd_slot->flags |= htole16(AHCI_CMD_LIST_FLAG_C); /* Clear busy on OK */
1145         cmd_slot->flags |= htole16(AHCI_CMD_LIST_FLAG_R); /* Reset */
1146
1147         ccb->ccb_xa.state = ATA_S_PENDING;
1148
1149         if (ahci_poll(ccb, 1000, ahci_quick_timeout) != ATA_S_COMPLETE) {
1150                 kprintf("%s: First FIS failed\n", PORTNAME(ap));
1151                 goto err;
1152         }
1153
1154         /*
1155          * WARNING!     TIME SENSITIVE SPACE!   WARNING!
1156          *
1157          * The two FISes are supposed to be back to back.  Don't issue other
1158          * commands or even delay if we can help it.
1159          */
1160
1161         /*
1162          * Prep second D2H command to read status and complete reset sequence
1163          * AHCI 10.4.1 and "Serial ATA Revision 2.6".  I can't find the ATA
1164          * Rev 2.6 and it is unclear how the second FIS should be set up
1165          * from the AHCI document.
1166          *
1167          * Give the device 3ms before sending the second FIS.
1168          *
1169          * It is unclear which other fields in the FIS are used.  Just zero
1170          * everything.
1171          */
1172         ccb->ccb_xa.flags = ATA_F_POLL | ATA_F_AUTOSENSE | ATA_F_EXCLUSIVE;
1173
1174         bzero(fis, sizeof(ccb->ccb_cmd_table->cfis));
1175         fis[0] = ATA_FIS_TYPE_H2D;
1176         fis[15] = ATA_FIS_CONTROL_4BIT;
1177
1178         cmd_slot->prdtl = 0;
1179         cmd_slot->flags = htole16(5);   /* FIS length: 5 DWORDS */
1180
1181         ccb->ccb_xa.state = ATA_S_PENDING;
1182         if (ahci_poll(ccb, 1000, ahci_quick_timeout) != ATA_S_COMPLETE) {
1183                 kprintf("%s: Second FIS failed\n", PORTNAME(ap));
1184                 goto err;
1185         }
1186
1187         if (ahci_pwait_clr(ap, AHCI_PREG_TFD,
1188                             AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
1189                 kprintf("%s: device didn't come ready after reset, TFD: 0x%b\n",
1190                         PORTNAME(ap),
1191                         ahci_pread(ap, AHCI_PREG_TFD), AHCI_PFMT_TFD_STS);
1192                 error = EBUSY;
1193                 goto err;
1194         }
1195         ahci_os_sleep(10);
1196
1197         /*
1198          * If the softreset is trying to clear a BSY condition after a
1199          * normal portreset we assign the port type.
1200          *
1201          * If the softreset is being run first as part of the ccb error
1202          * processing code then report if the device signature changed
1203          * unexpectedly.
1204          */
1205         if (ap->ap_type == ATA_PORT_T_NONE) {
1206                 ap->ap_type = ahci_port_signature_detect(ap, NULL);
1207         } else {
1208                 if (ahci_port_signature_detect(ap, NULL) != ap->ap_type) {
1209                         kprintf("%s: device signature unexpectedly "
1210                                 "changed\n", PORTNAME(ap));
1211                         error = EBUSY; /* XXX */
1212                 }
1213         }
1214         error = 0;
1215
1216         ahci_os_sleep(3);
1217 err:
1218         if (ccb != NULL) {
1219                 ahci_put_err_ccb(ccb);
1220
1221                 /*
1222                  * If the target is busy use CLO to clear the busy
1223                  * condition.  The BSY should be cleared on the next
1224                  * start.
1225                  */
1226                 if (ahci_pread(ap, AHCI_PREG_TFD) &
1227                     (AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
1228                         ahci_port_clo(ap);
1229                 }
1230         }
1231
1232         /*
1233          * If we failed to softreset make the port quiescent, otherwise
1234          * make sure the port's start/stop state matches what it was on
1235          * entry.
1236          *
1237          * Don't kill the port if the softreset is on a port multiplier
1238          * target, that would kill all the targets!
1239          */
1240         if (error) {
1241                 ahci_port_hardstop(ap);
1242                 /* ap_probe set to failed */
1243         } else {
1244                 ap->ap_probe = ATA_PROBE_NEED_IDENT;
1245                 ap->ap_pmcount = 1;
1246                 ahci_port_start(ap);
1247         }
1248         ap->ap_flags &= ~AP_F_IN_RESET;
1249         crit_exit();
1250
1251         if (bootverbose)
1252                 kprintf("%s: END SOFTRESET\n", PORTNAME(ap));
1253
1254         return (error);
1255 }
1256
1257 /*
1258  * AHCI port reset, Section 10.4.2
1259  *
1260  * This function does a hard reset of the port.  Note that the device
1261  * connected to the port could still end-up hung.
1262  */
1263 int
1264 ahci_port_hardreset(struct ahci_port *ap, int hard)
1265 {
1266         u_int32_t cmd, r;
1267         u_int32_t data;
1268         int     error;
1269         int     loop;
1270
1271         if (bootverbose)
1272                 kprintf("%s: START HARDRESET\n", PORTNAME(ap));
1273         ap->ap_flags |= AP_F_IN_RESET;
1274
1275         /*
1276          * Idle the port,
1277          */
1278         ahci_port_stop(ap, 0);
1279         ap->ap_state = AP_S_NORMAL;
1280
1281         /*
1282          * The port may have been quiescent with its SUD bit cleared, so
1283          * set the SUD (spin up device).
1284          */
1285         cmd = ahci_pread(ap, AHCI_PREG_CMD) & ~AHCI_PREG_CMD_ICC;
1286         cmd |= AHCI_PREG_CMD_SUD;
1287         ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
1288
1289         /*
1290          * Perform device detection.
1291          *
1292          * NOTE!  AHCi_PREG_SCTL_DET_DISABLE seems to be highly unreliable
1293          *        on multiple chipsets and can brick the chipset or even
1294          *        the whole PC.  Never use it.
1295          */
1296         ap->ap_type = ATA_PORT_T_NONE;
1297
1298         r = AHCI_PREG_SCTL_IPM_DISABLED;
1299         ahci_pwrite(ap, AHCI_PREG_SCTL, r);
1300         ahci_os_sleep(10);
1301
1302         /*
1303          * Start transmitting COMRESET.  COMRESET must be sent for at
1304          * least 1ms.
1305          */
1306         r = AHCI_PREG_SCTL_IPM_DISABLED | AHCI_PREG_SCTL_DET_INIT;
1307         if (AhciForceGen1 & (1 << ap->ap_num))
1308                 r |= AHCI_PREG_SCTL_SPD_GEN1;
1309         else
1310                 r |= AHCI_PREG_SCTL_SPD_ANY;
1311         ahci_pwrite(ap, AHCI_PREG_SCTL, r);
1312
1313         /*
1314          * Through trial and error it seems to take around 100ms
1315          * for the detect logic to settle down.  If this is too
1316          * short the softreset code will fail.
1317          */
1318         ahci_os_sleep(100);
1319
1320         /*
1321          * Only SERR_DIAG_X needs to be cleared for TFD updates, but
1322          * since we are hard-resetting the port we might as well clear
1323          * the whole enchillada
1324          */
1325         ahci_flush_tfd(ap);
1326         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
1327         r &= ~AHCI_PREG_SCTL_DET_INIT;
1328         r |= AHCI_PREG_SCTL_DET_NONE;
1329         ahci_pwrite(ap, AHCI_PREG_SCTL, r);
1330
1331         /*
1332          * Try to determine if there is a device on the port.
1333          *
1334          * Give the device 3/10 second to at least be detected.
1335          * If we fail clear PRCS (phy detect) since we may cycled
1336          * the phy and probably caused another PRCS interrupt.
1337          */
1338         loop = 300;
1339         while (loop > 0) {
1340                 r = ahci_pread(ap, AHCI_PREG_SSTS);
1341                 if (r & AHCI_PREG_SSTS_DET)
1342                         break;
1343                 loop -= ahci_os_softsleep();
1344         }
1345         if (loop == 0) {
1346                 ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_PRCS);
1347                 if (bootverbose) {
1348                         kprintf("%s: Port appears to be unplugged\n",
1349                                 PORTNAME(ap));
1350                 }
1351                 error = ENODEV;
1352                 goto done;
1353         }
1354
1355         /*
1356          * There is something on the port.  Give the device 3 seconds
1357          * to fully negotiate.
1358          */
1359         if (ahci_pwait_eq(ap, 3000, AHCI_PREG_SSTS,
1360                           AHCI_PREG_SSTS_DET, AHCI_PREG_SSTS_DET_DEV)) {
1361                 if (bootverbose) {
1362                         kprintf("%s: Device may be powered down\n",
1363                                 PORTNAME(ap));
1364                 }
1365                 error = ENODEV;
1366                 goto pmdetect;
1367         }
1368
1369         /*
1370          * We got something that definitely looks like a device.  Give
1371          * the device time to send us its first D2H FIS.  Waiting for
1372          * BSY to clear accomplishes this.
1373          *
1374          * NOTE that a port multiplier may or may not clear BSY here,
1375          * depending on what is sitting in target 0 behind it.
1376          */
1377         ahci_flush_tfd(ap);
1378
1379         if (ahci_pwait_clr_to(ap, 3000, AHCI_PREG_TFD,
1380                             AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
1381                 error = EBUSY;
1382         } else {
1383                 error = 0;
1384         }
1385
1386 pmdetect:
1387         /*
1388          * Do the PM port probe regardless of how things turned out on
1389          * the BSY check.
1390          */
1391         if (ap->ap_sc->sc_cap & AHCI_REG_CAP_SPM)
1392                 error = ahci_pm_port_probe(ap, error);
1393
1394 done:
1395         /*
1396          * Finish up.
1397          */
1398         switch(error) {
1399         case 0:
1400                 /*
1401                  * All good, make sure the port is running and set the
1402                  * probe state.  Ignore the signature junk (it's unreliable)
1403                  * until we get to the softreset code.
1404                  */
1405                 if (ahci_port_start(ap)) {
1406                         kprintf("%s: failed to start command DMA on port, "
1407                                 "disabling\n", PORTNAME(ap));
1408                         error = EBUSY;
1409                         goto done;
1410                 }
1411                 if (ap->ap_type == ATA_PORT_T_PM)
1412                         ap->ap_probe = ATA_PROBE_GOOD;
1413                 else
1414                         ap->ap_probe = ATA_PROBE_NEED_SOFT_RESET;
1415                 break;
1416         case ENODEV:
1417                 /*
1418                  * Normal device probe failure
1419                  */
1420                 data = ahci_pread(ap, AHCI_PREG_SSTS);
1421
1422                 switch(data & AHCI_PREG_SSTS_DET) {
1423                 case AHCI_PREG_SSTS_DET_DEV_NE:
1424                         kprintf("%s: Device not communicating\n",
1425                                 PORTNAME(ap));
1426                         break;
1427                 case AHCI_PREG_SSTS_DET_PHYOFFLINE:
1428                         kprintf("%s: PHY offline\n",
1429                                 PORTNAME(ap));
1430                         break;
1431                 default:
1432                         kprintf("%s: No device detected\n",
1433                                 PORTNAME(ap));
1434                         break;
1435                 }
1436                 ahci_port_hardstop(ap);
1437                 break;
1438         default:
1439                 /*
1440                  * Abnormal probe (EBUSY)
1441                  */
1442                 kprintf("%s: Device on port is bricked\n",
1443                         PORTNAME(ap));
1444                 ahci_port_hardstop(ap);
1445 #if 0
1446                 rc = ahci_port_reset(ap, atx, 0);
1447                 if (rc) {
1448                         kprintf("%s: Unable unbrick device\n",
1449                                 PORTNAME(ap));
1450                 } else {
1451                         kprintf("%s: Successfully unbricked\n",
1452                                 PORTNAME(ap));
1453                 }
1454 #endif
1455                 break;
1456         }
1457
1458         /*
1459          * Clean up
1460          */
1461         ahci_pwrite(ap, AHCI_PREG_SERR, -1);
1462         ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_PCS | AHCI_PREG_IS_PRCS);
1463
1464         ap->ap_flags &= ~AP_F_IN_RESET;
1465
1466         if (bootverbose)
1467                 kprintf("%s: END HARDRESET %d\n", PORTNAME(ap), error);
1468         return (error);
1469 }
1470
1471 /*
1472  * Hard-stop on hot-swap device removal.  See 10.10.1
1473  *
1474  * Place the port in a mode that will allow it to detect hot-swap insertions.
1475  * This is a bit imprecise because just setting-up SCTL to DET_INIT doesn't
1476  * seem to do the job.
1477  *
1478  * FIS reception is left enabled but command processing is disabled.
1479  * Cycling FIS reception (FRE) can brick ports.
1480  */
1481 void
1482 ahci_port_hardstop(struct ahci_port *ap)
1483 {
1484         struct ahci_ccb *ccb;
1485         struct ata_port *at;
1486         u_int32_t r;
1487         u_int32_t cmd;
1488         int slot;
1489         int i;
1490
1491         /*
1492          * Stop the port.  We can't modify things like SUD if the port
1493          * is running.
1494          */
1495         ap->ap_state = AP_S_FATAL_ERROR;
1496         ap->ap_probe = ATA_PROBE_FAILED;
1497         ap->ap_type = ATA_PORT_T_NONE;
1498         ahci_port_stop(ap, 0);
1499         cmd = ahci_pread(ap, AHCI_PREG_CMD);
1500
1501         /*
1502          * Clean up AT sub-ports on SATA port.
1503          */
1504         for (i = 0; ap->ap_ata && i < AHCI_MAX_PMPORTS; ++i) {
1505                 at = ap->ap_ata[i];
1506                 at->at_type = ATA_PORT_T_NONE;
1507                 at->at_probe = ATA_PROBE_FAILED;
1508         }
1509
1510         /*
1511          * Turn off port-multiplier control bit
1512          */
1513         if (cmd & AHCI_PREG_CMD_PMA) {
1514                 cmd &= ~AHCI_PREG_CMD_PMA;
1515                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
1516         }
1517
1518         /*
1519          * Make sure FRE is active.  There isn't anything we can do if it
1520          * fails so just ignore errors.
1521          */
1522         if ((cmd & AHCI_PREG_CMD_FRE) == 0) {
1523                 cmd |= AHCI_PREG_CMD_FRE;
1524                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
1525                 if ((ap->ap_sc->sc_flags & AHCI_F_IGN_FR) == 0)
1526                         ahci_pwait_set(ap, AHCI_PREG_CMD, AHCI_PREG_CMD_FR);
1527         }
1528
1529         /*
1530          * 10.10.3 DET must be set to 0 before setting SUD to 0.
1531          * 10.10.1 place us in the Listen state.
1532          *
1533          * Deactivating SUD only applies if the controller supports SUD.
1534          */
1535         ahci_pwrite(ap, AHCI_PREG_SCTL, AHCI_PREG_SCTL_IPM_DISABLED);
1536         ahci_os_sleep(1);
1537         if (cmd & AHCI_PREG_CMD_SUD) {
1538                 cmd &= ~AHCI_PREG_CMD_SUD;
1539                 ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
1540         }
1541         ahci_os_sleep(1);
1542
1543         /*
1544          * Transition su to the spin-up state.  HVA shall send COMRESET and
1545          * begin initialization sequence (whatever that means).
1546          *
1547          * This only applies if the controller supports SUD.
1548          * NEVER use AHCI_PREG_DET_DISABLE.
1549          */
1550         cmd |= AHCI_PREG_CMD_SUD;
1551         ahci_pwrite(ap, AHCI_PREG_CMD, cmd);
1552         ahci_os_sleep(1);
1553
1554         /*
1555          * Transition us to the Reset state.  Theoretically we send a
1556          * continuous stream of COMRESETs in this state.
1557          */
1558         r = AHCI_PREG_SCTL_IPM_DISABLED | AHCI_PREG_SCTL_DET_INIT;
1559         if (AhciForceGen1 & (1 << ap->ap_num)) {
1560                 kprintf("%s: Force 1.5Gbits\n", PORTNAME(ap));
1561                 r |= AHCI_PREG_SCTL_SPD_GEN1;
1562         } else {
1563                 r |= AHCI_PREG_SCTL_SPD_ANY;
1564         }
1565         ahci_pwrite(ap, AHCI_PREG_SCTL, r);
1566         ahci_os_sleep(1);
1567
1568         /*
1569          * Flush SERR_DIAG_X so the TFD can update.
1570          */
1571         ahci_flush_tfd(ap);
1572
1573         /*
1574          * Clean out pending ccbs
1575          */
1576         while (ap->ap_active) {
1577                 slot = ffs(ap->ap_active) - 1;
1578                 ap->ap_active &= ~(1 << slot);
1579                 ap->ap_expired &= ~(1 << slot);
1580                 --ap->ap_active_cnt;
1581                 ccb = &ap->ap_ccbs[slot];
1582                 if (ccb->ccb_xa.flags & ATA_F_TIMEOUT_RUNNING) {
1583                         callout_stop(&ccb->ccb_timeout);
1584                         ccb->ccb_xa.flags &= ~ATA_F_TIMEOUT_RUNNING;
1585                 }
1586                 ccb->ccb_xa.flags &= ~(ATA_F_TIMEOUT_DESIRED |
1587                                        ATA_F_TIMEOUT_EXPIRED);
1588                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
1589                 ccb->ccb_done(ccb);
1590                 ccb->ccb_xa.complete(&ccb->ccb_xa);
1591         }
1592         while (ap->ap_sactive) {
1593                 slot = ffs(ap->ap_sactive) - 1;
1594                 ap->ap_sactive &= ~(1 << slot);
1595                 ap->ap_expired &= ~(1 << slot);
1596                 ccb = &ap->ap_ccbs[slot];
1597                 if (ccb->ccb_xa.flags & ATA_F_TIMEOUT_RUNNING) {
1598                         callout_stop(&ccb->ccb_timeout);
1599                         ccb->ccb_xa.flags &= ~ATA_F_TIMEOUT_RUNNING;
1600                 }
1601                 ccb->ccb_xa.flags &= ~(ATA_F_TIMEOUT_DESIRED |
1602                                        ATA_F_TIMEOUT_EXPIRED);
1603                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
1604                 ccb->ccb_done(ccb);
1605                 ccb->ccb_xa.complete(&ccb->ccb_xa);
1606         }
1607         KKASSERT(ap->ap_active_cnt == 0);
1608
1609         while ((ccb = TAILQ_FIRST(&ap->ap_ccb_pending)) != NULL) {
1610                 TAILQ_REMOVE(&ap->ap_ccb_pending, ccb, ccb_entry);
1611                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
1612                 ccb->ccb_xa.flags &= ~ATA_F_TIMEOUT_DESIRED;
1613                 ccb->ccb_done(ccb);
1614                 ccb->ccb_xa.complete(&ccb->ccb_xa);
1615         }
1616
1617         /*
1618          * Leave us in COMRESET (both SUD and INIT active), the HBA should
1619          * hopefully send us a DIAG_X-related interrupt if it receives
1620          * a COMINIT, and if not that then at least a Phy transition
1621          * interrupt.
1622          *
1623          * If we transition INIT from 1->0 to begin the initalization
1624          * sequence it is unclear if that sequence will remain active
1625          * until the next device insertion.
1626          *
1627          * If we go back to the listen state it is unclear if the
1628          * device will actually send us a COMINIT, since we aren't
1629          * sending any COMRESET's
1630          */
1631         /* NOP */
1632 }
1633
1634 /*
1635  * We can't loop on the X bit, a continuous COMINIT received will make
1636  * it loop forever.  Just assume one event has built up and clear X
1637  * so the task file descriptor can update.
1638  */
1639 void
1640 ahci_flush_tfd(struct ahci_port *ap)
1641 {
1642         u_int32_t r;
1643
1644         r = ahci_pread(ap, AHCI_PREG_SERR);
1645         if (r & AHCI_PREG_SERR_DIAG_X)
1646                 ahci_pwrite(ap, AHCI_PREG_SERR, AHCI_PREG_SERR_DIAG_X);
1647 }
1648
1649 /*
1650  * Figure out what type of device is connected to the port, ATAPI or
1651  * DISK.
1652  */
1653 int
1654 ahci_port_signature_detect(struct ahci_port *ap, struct ata_port *at)
1655 {
1656         u_int32_t sig;
1657
1658         sig = ahci_pread(ap, AHCI_PREG_SIG);
1659         if (bootverbose)
1660                 kprintf("%s: sig %08x\n", ATANAME(ap, at), sig);
1661         if ((sig & 0xffff0000) == (SATA_SIGNATURE_ATAPI & 0xffff0000)) {
1662                 return(ATA_PORT_T_ATAPI);
1663         } else if ((sig & 0xffff0000) ==
1664                  (SATA_SIGNATURE_PORT_MULTIPLIER & 0xffff0000)) {
1665                 return(ATA_PORT_T_PM);
1666         } else {
1667                 return(ATA_PORT_T_DISK);
1668         }
1669 }
1670
1671 /*
1672  * Load the DMA descriptor table for a CCB's buffer.
1673  */
1674 int
1675 ahci_load_prdt(struct ahci_ccb *ccb)
1676 {
1677         struct ahci_port                *ap = ccb->ccb_port;
1678         struct ahci_softc               *sc = ap->ap_sc;
1679         struct ata_xfer                 *xa = &ccb->ccb_xa;
1680         struct ahci_prdt                *prdt = ccb->ccb_cmd_table->prdt;
1681         bus_dmamap_t                    dmap = ccb->ccb_dmamap;
1682         struct ahci_cmd_hdr             *cmd_slot = ccb->ccb_cmd_hdr;
1683         int                             error;
1684
1685         if (xa->datalen == 0) {
1686                 ccb->ccb_cmd_hdr->prdtl = 0;
1687                 return (0);
1688         }
1689
1690         error = bus_dmamap_load(sc->sc_tag_data, dmap,
1691                                 xa->data, xa->datalen,
1692                                 ahci_load_prdt_callback,
1693                                 &prdt,
1694                                 ((xa->flags & ATA_F_NOWAIT) ?
1695                                     BUS_DMA_NOWAIT : BUS_DMA_WAITOK));
1696         if (error != 0) {
1697                 kprintf("%s: error %d loading dmamap\n", PORTNAME(ap), error);
1698                 return (1);
1699         }
1700 #if 0
1701         if (xa->flags & ATA_F_PIO)
1702                 prdt->flags |= htole32(AHCI_PRDT_FLAG_INTR);
1703 #endif
1704
1705         cmd_slot->prdtl = htole16(prdt - ccb->ccb_cmd_table->prdt + 1);
1706
1707         if (xa->flags & ATA_F_READ)
1708                 bus_dmamap_sync(sc->sc_tag_data, dmap, BUS_DMASYNC_PREREAD);
1709         if (xa->flags & ATA_F_WRITE)
1710                 bus_dmamap_sync(sc->sc_tag_data, dmap, BUS_DMASYNC_PREWRITE);
1711
1712         return (0);
1713 }
1714
1715 /*
1716  * Callback from BUSDMA system to load the segment list.  The passed segment
1717  * list is a temporary structure.
1718  */
1719 static
1720 void
1721 ahci_load_prdt_callback(void *info, bus_dma_segment_t *segs, int nsegs,
1722                         int error)
1723 {
1724         struct ahci_prdt *prd = *(void **)info;
1725         u_int64_t addr;
1726
1727         KKASSERT(nsegs <= AHCI_MAX_PRDT);
1728
1729         while (nsegs) {
1730                 addr = segs->ds_addr;
1731                 prd->dba_hi = htole32((u_int32_t)(addr >> 32));
1732                 prd->dba_lo = htole32((u_int32_t)addr);
1733                 prd->flags = htole32(segs->ds_len - 1);
1734                 --nsegs;
1735                 if (nsegs)
1736                         ++prd;
1737                 ++segs;
1738         }
1739         *(void **)info = prd;   /* return last valid segment */
1740 }
1741
1742 void
1743 ahci_unload_prdt(struct ahci_ccb *ccb)
1744 {
1745         struct ahci_port                *ap = ccb->ccb_port;
1746         struct ahci_softc               *sc = ap->ap_sc;
1747         struct ata_xfer                 *xa = &ccb->ccb_xa;
1748         bus_dmamap_t                    dmap = ccb->ccb_dmamap;
1749
1750         if (xa->datalen != 0) {
1751                 if (xa->flags & ATA_F_READ) {
1752                         bus_dmamap_sync(sc->sc_tag_data, dmap,
1753                                         BUS_DMASYNC_POSTREAD);
1754                 }
1755                 if (xa->flags & ATA_F_WRITE) {
1756                         bus_dmamap_sync(sc->sc_tag_data, dmap,
1757                                         BUS_DMASYNC_POSTWRITE);
1758                 }
1759                 bus_dmamap_unload(sc->sc_tag_data, dmap);
1760
1761                 /*
1762                  * prdbc is only updated by hardware for non-NCQ commands.
1763                  */
1764                 if (ccb->ccb_xa.flags & ATA_F_NCQ) {
1765                         xa->resid = 0;
1766                 } else {
1767                         if (ccb->ccb_cmd_hdr->prdbc == 0 &&
1768                             ccb->ccb_xa.state == ATA_S_COMPLETE) {
1769                                 kprintf("%s: WARNING!  Unload prdbc resid "
1770                                         "was zero! tag=%d\n",
1771                                         ATANAME(ap, xa->at), ccb->ccb_slot);
1772                         }
1773                         xa->resid = xa->datalen -
1774                             le32toh(ccb->ccb_cmd_hdr->prdbc);
1775                 }
1776         }
1777 }
1778
1779 /*
1780  * Start a command and poll for completion.
1781  *
1782  * timeout is in ms and only counts once the command gets on-chip.
1783  *
1784  * Returns ATA_S_* state, compare against ATA_S_COMPLETE to determine
1785  * that no error occured.
1786  *
1787  * NOTE: If the caller specifies a NULL timeout function the caller is
1788  *       responsible for clearing hardware state on failure, but we will
1789  *       deal with removing the ccb from any pending queue.
1790  *
1791  * NOTE: NCQ should never be used with this function.
1792  *
1793  * NOTE: If the port is in a failed state and stopped we do not try
1794  *       to activate the ccb.
1795  */
1796 int
1797 ahci_poll(struct ahci_ccb *ccb, int timeout,
1798           void (*timeout_fn)(struct ahci_ccb *))
1799 {
1800         struct ahci_port *ap = ccb->ccb_port;
1801
1802         if (ccb->ccb_port->ap_state == AP_S_FATAL_ERROR) {
1803                 ccb->ccb_xa.state = ATA_S_ERROR;
1804                 return(ccb->ccb_xa.state);
1805         }
1806         crit_enter();
1807 #if 0
1808         kprintf("%s: Start command %02x tag=%d\n",
1809                 ATANAME(ccb->ccb_port, ccb->ccb_xa.at),
1810                 ccb->ccb_xa.fis->command, ccb->ccb_slot);
1811 #endif
1812         ahci_start(ccb);
1813
1814         do {
1815                 ahci_port_intr(ap, 1);
1816                 switch(ccb->ccb_xa.state) {
1817                 case ATA_S_ONCHIP:
1818                         timeout -= ahci_os_softsleep();
1819                         break;
1820                 case ATA_S_PENDING:
1821                         ahci_os_softsleep();
1822                         ahci_check_active_timeouts(ap);
1823                         break;
1824                 default:
1825                         crit_exit();
1826                         return (ccb->ccb_xa.state);
1827                 }
1828         } while (timeout > 0);
1829
1830         kprintf("%s: Poll timeout slot %d CMD: %b TFD: 0x%b SERR: %b\n",
1831                 ATANAME(ap, ccb->ccb_xa.at), ccb->ccb_slot,
1832                 ahci_pread(ap, AHCI_PREG_CMD), AHCI_PFMT_CMD,
1833                 ahci_pread(ap, AHCI_PREG_TFD), AHCI_PFMT_TFD_STS,
1834                 ahci_pread(ap, AHCI_PREG_SERR), AHCI_PFMT_SERR);
1835
1836         timeout_fn(ccb);
1837
1838         crit_exit();
1839
1840         return(ccb->ccb_xa.state);
1841 }
1842
1843 /*
1844  * When polling we have to check if the currently active CCB(s)
1845  * have timed out as the callout will be deadlocked while we
1846  * hold the port lock.
1847  */
1848 void
1849 ahci_check_active_timeouts(struct ahci_port *ap)
1850 {
1851         struct ahci_ccb *ccb;
1852         u_int32_t mask;
1853         int tag;
1854
1855         mask = ap->ap_active | ap->ap_sactive;
1856         while (mask) {
1857                 tag = ffs(mask) - 1;
1858                 mask &= ~(1 << tag);
1859                 ccb = &ap->ap_ccbs[tag];
1860                 if (ccb->ccb_xa.flags & ATA_F_TIMEOUT_EXPIRED) {
1861                         ahci_ata_cmd_timeout(ccb);
1862                 }
1863         }
1864 }
1865
1866 static
1867 __inline
1868 void
1869 ahci_start_timeout(struct ahci_ccb *ccb)
1870 {
1871         if (ccb->ccb_xa.flags & ATA_F_TIMEOUT_DESIRED) {
1872                 ccb->ccb_xa.flags |= ATA_F_TIMEOUT_RUNNING;
1873                 callout_reset(&ccb->ccb_timeout,
1874                               (ccb->ccb_xa.timeout * hz + 999) / 1000,
1875                               ahci_ata_cmd_timeout_unserialized, ccb);
1876         }
1877 }
1878
1879 void
1880 ahci_start(struct ahci_ccb *ccb)
1881 {
1882         struct ahci_port                *ap = ccb->ccb_port;
1883         struct ahci_softc               *sc = ap->ap_sc;
1884
1885         KKASSERT(ccb->ccb_xa.state == ATA_S_PENDING);
1886
1887         /* Zero transferred byte count before transfer */
1888         ccb->ccb_cmd_hdr->prdbc = 0;
1889
1890         /* Sync command list entry and corresponding command table entry */
1891         bus_dmamap_sync(sc->sc_tag_cmdh,
1892                         AHCI_DMA_MAP(ap->ap_dmamem_cmd_list),
1893                         BUS_DMASYNC_PREWRITE);
1894         bus_dmamap_sync(sc->sc_tag_cmdt,
1895                         AHCI_DMA_MAP(ap->ap_dmamem_cmd_table),
1896                         BUS_DMASYNC_PREWRITE);
1897
1898         /* Prepare RFIS area for write by controller */
1899         bus_dmamap_sync(sc->sc_tag_rfis,
1900                         AHCI_DMA_MAP(ap->ap_dmamem_rfis),
1901                         BUS_DMASYNC_PREREAD);
1902
1903         /*
1904          * There's no point trying to optimize this, it only shaves a few
1905          * nanoseconds so just queue the command and call our generic issue.
1906          */
1907         ahci_issue_pending_commands(ap, ccb);
1908 }
1909
1910 /*
1911  * While holding the port lock acquire exclusive access to the port.
1912  *
1913  * This is used when running the state machine to initialize and identify
1914  * targets over a port multiplier.  Setting exclusive access prevents
1915  * ahci_port_intr() from activating any requests sitting on the pending
1916  * queue.
1917  */
1918 void
1919 ahci_beg_exclusive_access(struct ahci_port *ap, struct ata_port *at)
1920 {
1921         KKASSERT((ap->ap_flags & AP_F_EXCLUSIVE_ACCESS) == 0);
1922         ap->ap_flags |= AP_F_EXCLUSIVE_ACCESS;
1923         while (ap->ap_active || ap->ap_sactive) {
1924                 ahci_port_intr(ap, 1);
1925                 ahci_os_softsleep();
1926         }
1927 }
1928
1929 void
1930 ahci_end_exclusive_access(struct ahci_port *ap, struct ata_port *at)
1931 {
1932         KKASSERT((ap->ap_flags & AP_F_EXCLUSIVE_ACCESS) != 0);
1933         ap->ap_flags &= ~AP_F_EXCLUSIVE_ACCESS;
1934         ahci_issue_pending_commands(ap, NULL);
1935 }
1936
1937 #if 0
1938
1939 static void
1940 fubar(struct ahci_ccb *ccb)
1941 {
1942         struct ahci_port *ap = ccb->ccb_port;
1943         struct ahci_cmd_hdr     *cmd;
1944         struct ahci_cmd_table   *tab;
1945         struct ahci_prdt        *prdt;
1946         int i;
1947
1948         kprintf("%s: ISSUE %02x\n",
1949                 ATANAME(ap, ccb->ccb_xa.at),
1950                 ccb->ccb_xa.fis->command);
1951         cmd = ccb->ccb_cmd_hdr;
1952         tab = ccb->ccb_cmd_table;
1953         prdt = ccb->ccb_cmd_table->prdt;
1954         kprintf("cmd flags=%04x prdtl=%d prdbc=%d ctba=%08x%08x\n",
1955                 cmd->flags, cmd->prdtl, cmd->prdbc,
1956                 cmd->ctba_hi, cmd->ctba_lo);
1957         for (i = 0; i < cmd->prdtl; ++i) {
1958                 kprintf("\t%d dba=%08x%08x res=%08x flags=%08x\n",
1959                         i, prdt->dba_hi, prdt->dba_lo, prdt->reserved,
1960                         prdt->flags);
1961         }
1962         kprintf("tab\n");
1963 }
1964
1965 #endif
1966
1967 /*
1968  * If ccb is not NULL enqueue and/or issue it.
1969  *
1970  * If ccb is NULL issue whatever we can from the queue.  However, nothing
1971  * new is issued if the exclusive access flag is set or expired ccb's are
1972  * present.
1973  *
1974  * If existing commands are still active (ap_active/ap_sactive) we can only
1975  * issue matching new commands.
1976  */
1977 void
1978 ahci_issue_pending_commands(struct ahci_port *ap, struct ahci_ccb *ccb)
1979 {
1980         u_int32_t               mask;
1981         int                     limit;
1982
1983         /*
1984          * Enqueue the ccb.
1985          *
1986          * If just running the queue and in exclusive access mode we
1987          * just return.  Also in this case if there are any expired ccb's
1988          * we want to clear the queue so the port can be safely stopped.
1989          */
1990         if (ccb) {
1991                 TAILQ_INSERT_TAIL(&ap->ap_ccb_pending, ccb, ccb_entry);
1992         } else if ((ap->ap_flags & AP_F_EXCLUSIVE_ACCESS) || ap->ap_expired) {
1993                 return;
1994         }
1995
1996         /*
1997          * Pull the next ccb off the queue and run it if possible.
1998          */
1999         if ((ccb = TAILQ_FIRST(&ap->ap_ccb_pending)) == NULL)
2000                 return;
2001
2002         /*
2003          * Handle exclusivity requirements.
2004          *
2005          * ATA_F_EXCLUSIVE is used when we want to be the only command
2006          * running.
2007          *
2008          * ATA_F_AUTOSENSE is used when we want the D2H rfis loaded
2009          * back into the ccb on a normal (non-errored) command completion.
2010          * For example, for PM requests to target 15.  Because the AHCI
2011          * spec does not stop the command processor and has only one rfis
2012          * area (for non-FBSS anyway), AUTOSENSE currently implies EXCLUSIVE.
2013          * Otherwise multiple completions can destroy the rfis data before
2014          * we have a chance to copy it.
2015          */
2016         if (ap->ap_active & ~ap->ap_expired) {
2017                 /*
2018                  * There may be multiple ccb's already running,
2019                  * if any are running and ap_run_flags sets
2020                  * one of these flags then we know only one is
2021                  * running.
2022                  *
2023                  * XXX Current AUTOSENSE code forces exclusivity
2024                  *     to simplify the code.
2025                  */
2026                 if (ap->ap_run_flags &
2027                     (ATA_F_EXCLUSIVE | ATA_F_AUTOSENSE)) {
2028                         return;
2029                 }
2030
2031                 if (ccb->ccb_xa.flags &
2032                     (ATA_F_EXCLUSIVE | ATA_F_AUTOSENSE)) {
2033                         return;
2034                 }
2035         }
2036
2037         if (ccb->ccb_xa.flags & ATA_F_NCQ) {
2038                 /*
2039                  * The next command is a NCQ command and can be issued as
2040                  * long as currently active commands are not standard.
2041                  */
2042                 if (ap->ap_active) {
2043                         KKASSERT(ap->ap_active_cnt > 0);
2044                         return;
2045                 }
2046                 KKASSERT(ap->ap_active_cnt == 0);
2047
2048                 mask = 0;
2049                 do {
2050                         TAILQ_REMOVE(&ap->ap_ccb_pending, ccb, ccb_entry);
2051                         mask |= 1 << ccb->ccb_slot;
2052                         ccb->ccb_xa.state = ATA_S_ONCHIP;
2053                         ahci_start_timeout(ccb);
2054                         ap->ap_run_flags = ccb->ccb_xa.flags;
2055                         ccb = TAILQ_FIRST(&ap->ap_ccb_pending);
2056                 } while (ccb && (ccb->ccb_xa.flags & ATA_F_NCQ) &&
2057                          (ap->ap_run_flags &
2058                              (ATA_F_EXCLUSIVE | ATA_F_AUTOSENSE)) == 0);
2059
2060                 ap->ap_sactive |= mask;
2061                 ahci_pwrite(ap, AHCI_PREG_SACT, mask);
2062                 ahci_pwrite(ap, AHCI_PREG_CI, mask);
2063         } else {
2064                 /*
2065                  * The next command is a standard command and can be issued
2066                  * as long as currently active commands are not NCQ.
2067                  *
2068                  * We limit ourself to 1 command if we have a port multiplier,
2069                  * (at least without FBSS support), otherwise timeouts on
2070                  * one port can race completions on other ports (see
2071                  * ahci_ata_cmd_timeout() for more information).
2072                  *
2073                  * If not on a port multiplier generally allow up to 4
2074                  * standard commands to be enqueued.  Remember that the
2075                  * command processor will still process them sequentially.
2076                  */
2077                 if (ap->ap_sactive)
2078                         return;
2079                 if (ap->ap_type == ATA_PORT_T_PM)
2080                         limit = 1;
2081                 else if (ap->ap_sc->sc_ncmds > 4)
2082                         limit = 4;
2083                 else
2084                         limit = 2;
2085
2086                 while (ap->ap_active_cnt < limit && ccb &&
2087                        (ccb->ccb_xa.flags & ATA_F_NCQ) == 0) {
2088                         TAILQ_REMOVE(&ap->ap_ccb_pending, ccb, ccb_entry);
2089 #if 0
2090                         fubar(ccb);
2091 #endif
2092                         ap->ap_active |= 1 << ccb->ccb_slot;
2093                         ap->ap_active_cnt++;
2094                         ap->ap_run_flags = ccb->ccb_xa.flags;
2095                         ccb->ccb_xa.state = ATA_S_ONCHIP;
2096                         ahci_pwrite(ap, AHCI_PREG_CI, 1 << ccb->ccb_slot);
2097                         ahci_start_timeout(ccb);
2098                         if ((ap->ap_run_flags &
2099                             (ATA_F_EXCLUSIVE | ATA_F_AUTOSENSE)) == 0) {
2100                                 break;
2101                         }
2102                         ccb = TAILQ_FIRST(&ap->ap_ccb_pending);
2103                         if (ccb && (ccb->ccb_xa.flags &
2104                                     (ATA_F_EXCLUSIVE | ATA_F_AUTOSENSE))) {
2105                                 break;
2106                         }
2107                 }
2108         }
2109 }
2110
2111 void
2112 ahci_intr(void *arg)
2113 {
2114         struct ahci_softc       *sc = arg;
2115         struct ahci_port        *ap;
2116         u_int32_t               is;
2117         u_int32_t               ack;
2118         int                     port;
2119
2120         /*
2121          * Check if the master enable is up, and whether any interrupts are
2122          * pending.
2123          */
2124         if ((sc->sc_flags & AHCI_F_INT_GOOD) == 0)
2125                 return;
2126         is = ahci_read(sc, AHCI_REG_IS);
2127         if (is == 0 || is == 0xffffffff) {
2128                 return;
2129         }
2130         is &= sc->sc_portmask;
2131
2132 #ifdef AHCI_COALESCE
2133         /* Check coalescing interrupt first */
2134         if (is & sc->sc_ccc_mask) {
2135                 DPRINTF(AHCI_D_INTR, "%s: command coalescing interrupt\n",
2136                     DEVNAME(sc));
2137                 is &= ~sc->sc_ccc_mask;
2138                 is |= sc->sc_ccc_ports_cur;
2139         }
2140 #endif
2141
2142         /*
2143          * Process interrupts for each port in a non-blocking fashion.
2144          *
2145          * The global IS bit is forced on if any unmasked port interrupts
2146          * are pending, even if we clear.
2147          */
2148         for (ack = 0; is; is &= ~(1 << port)) {
2149                 port = ffs(is) - 1;
2150                 ack |= 1 << port;
2151
2152                 ap = sc->sc_ports[port];
2153                 if (ap == NULL)
2154                         continue;
2155
2156                 if (ahci_os_lock_port_nb(ap) == 0) {
2157                         ahci_port_intr(ap, 0);
2158                         ahci_os_unlock_port(ap);
2159                 } else {
2160                         ahci_pwrite(ap, AHCI_PREG_IE, 0);
2161                         ahci_os_signal_port_thread(ap, AP_SIGF_PORTINT);
2162                 }
2163         }
2164         ahci_write(sc, AHCI_REG_IS, ack);
2165 }
2166
2167 /*
2168  * Core called from helper thread.
2169  */
2170 void
2171 ahci_port_thread_core(struct ahci_port *ap, int mask)
2172 {
2173         /*
2174          * Process any expired timedouts.
2175          */
2176         ahci_os_lock_port(ap);
2177         if (mask & AP_SIGF_TIMEOUT) {
2178                 ahci_check_active_timeouts(ap);
2179         }
2180
2181         /*
2182          * Process port interrupts which require a higher level of
2183          * intervention.
2184          */
2185         if (mask & AP_SIGF_PORTINT) {
2186                 ahci_port_intr(ap, 1);
2187                 ahci_port_interrupt_enable(ap);
2188                 ahci_os_unlock_port(ap);
2189         } else if (ap->ap_probe != ATA_PROBE_FAILED) {
2190                 ahci_port_intr(ap, 1);
2191                 ahci_port_interrupt_enable(ap);
2192                 ahci_os_unlock_port(ap);
2193         } else {
2194                 ahci_os_unlock_port(ap);
2195         }
2196 }
2197
2198 /*
2199  * Core per-port interrupt handler.
2200  *
2201  * If blockable is 0 we cannot call ahci_os_sleep() at all and we can only
2202  * deal with normal command completions which do not require blocking.
2203  */
2204 void
2205 ahci_port_intr(struct ahci_port *ap, int blockable)
2206 {
2207         struct ahci_softc       *sc = ap->ap_sc;
2208         u_int32_t               is, ci_saved, ci_masked;
2209         int                     slot;
2210         struct ahci_ccb         *ccb = NULL;
2211         struct ata_port         *ccb_at = NULL;
2212         volatile u_int32_t      *active;
2213         const u_int32_t         blockable_mask = AHCI_PREG_IS_TFES |
2214                                                  AHCI_PREG_IS_IFS |
2215                                                  AHCI_PREG_IS_PCS |
2216                                                  AHCI_PREG_IS_PRCS |
2217                                                  AHCI_PREG_IS_HBFS |
2218                                                  AHCI_PREG_IS_OFS |
2219                                                  AHCI_PREG_IS_UFS;
2220
2221         enum { NEED_NOTHING, NEED_RESTART, NEED_HOTPLUG_INSERT,
2222                NEED_HOTPLUG_REMOVE } need = NEED_NOTHING;
2223
2224         /*
2225          * All basic command completions are always processed.
2226          */
2227         is = ahci_pread(ap, AHCI_PREG_IS);
2228         if (is & AHCI_PREG_IS_DPS)
2229                 ahci_pwrite(ap, AHCI_PREG_IS, is & AHCI_PREG_IS_DPS);
2230
2231         /*
2232          * If we can't block then we can't handle these here.  Disable
2233          * the interrupts in question so we don't live-lock, the helper
2234          * thread will re-enable them.
2235          *
2236          * If the port is in a completely failed state we do not want
2237          * to drop through to failed-command-processing if blockable is 0,
2238          * just let the thread deal with it all.
2239          *
2240          * Otherwise we fall through and still handle DHRS and any commands
2241          * which completed normally.  Even if we are errored we haven't
2242          * stopped the port yet so CI/SACT are still good.
2243          */
2244         if (blockable == 0) {
2245                 if (ap->ap_state == AP_S_FATAL_ERROR) {
2246                         ahci_pwrite(ap, AHCI_PREG_IE, 0);
2247                         ahci_os_signal_port_thread(ap, AP_SIGF_PORTINT);
2248                         return;
2249                 }
2250                 if (is & blockable_mask) {
2251                         ahci_pwrite(ap, AHCI_PREG_IE, 0);
2252                         ahci_os_signal_port_thread(ap, AP_SIGF_PORTINT);
2253                         return;
2254                 }
2255         }
2256
2257         /*
2258          * Either NCQ or non-NCQ commands will be active, never both.
2259          */
2260         if (ap->ap_sactive) {
2261                 KKASSERT(ap->ap_active == 0);
2262                 KKASSERT(ap->ap_active_cnt == 0);
2263                 ci_saved = ahci_pread(ap, AHCI_PREG_SACT);
2264                 active = &ap->ap_sactive;
2265         } else {
2266                 ci_saved = ahci_pread(ap, AHCI_PREG_CI);
2267                 active = &ap->ap_active;
2268         }
2269         KKASSERT(!(ap->ap_sactive && ap->ap_active));
2270 #if 0
2271         kprintf("CHECK act=%08x/%08x sact=%08x/%08x\n",
2272                 ap->ap_active, ahci_pread(ap, AHCI_PREG_CI),
2273                 ap->ap_sactive, ahci_pread(ap, AHCI_PREG_SACT));
2274 #endif
2275
2276         if (is & AHCI_PREG_IS_TFES) {
2277                 /*
2278                  * Command failed (blockable).
2279                  *
2280                  * See AHCI 1.1 spec 6.2.2.1 and 6.2.2.2.
2281                  *
2282                  * This stops command processing.
2283                  */
2284                 u_int32_t tfd, serr;
2285                 int     err_slot;
2286
2287 process_error:
2288                 tfd = ahci_pread(ap, AHCI_PREG_TFD);
2289                 serr = ahci_pread(ap, AHCI_PREG_SERR);
2290
2291                 /*
2292                  * Load the error slot and restart command processing.
2293                  * CLO if we need to.  The error slot may not be valid.
2294                  * MUST BE DONE BEFORE CLEARING ST!
2295                  *
2296                  * Cycle ST.
2297                  *
2298                  * It is unclear but we may have to clear SERR to reenable
2299                  * error processing.
2300                  */
2301                 err_slot = AHCI_PREG_CMD_CCS(ahci_pread(ap, AHCI_PREG_CMD));
2302                 ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_TFES |
2303                                               AHCI_PREG_IS_PSS |
2304                                               AHCI_PREG_IS_DHRS |
2305                                               AHCI_PREG_IS_SDBS);
2306                 is &= ~(AHCI_PREG_IS_TFES | AHCI_PREG_IS_PSS |
2307                         AHCI_PREG_IS_DHRS | AHCI_PREG_IS_SDBS);
2308                 ahci_pwrite(ap, AHCI_PREG_SERR, serr);
2309                 ahci_port_stop(ap, 0);
2310                 ahci_os_hardsleep(10);
2311                 if (tfd & (AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
2312                         kprintf("%s: Issuing CLO\n", PORTNAME(ap));
2313                         ahci_port_clo(ap);
2314                 }
2315                 ahci_port_start(ap);
2316                 need = NEED_RESTART;
2317
2318                 /*
2319                  * ATAPI errors are fairly common from probing, just
2320                  * report disk errors or if bootverbose is on.
2321                  */
2322                 if (bootverbose || ap->ap_type != ATA_PORT_T_ATAPI) {
2323                         kprintf("%s: TFES slot %d ci_saved = %08x\n",
2324                                 PORTNAME(ap), err_slot, ci_saved);
2325                 }
2326
2327                 /*
2328                  * If we got an error on an error CCB just complete it
2329                  * with an error.  ci_saved has the mask to restart
2330                  * (the err_ccb will be removed from it by finish_error).
2331                  */
2332                 if (ap->ap_flags & AP_F_ERR_CCB_RESERVED) {
2333                         err_slot = ap->ap_err_ccb->ccb_slot;
2334                         goto finish_error;
2335                 }
2336
2337                 /*
2338                  * If NCQ commands were active get the error slot from
2339                  * the log page.  NCQ is not supported for PM's so this
2340                  * is a direct-attached target.
2341                  *
2342                  * Otherwise if no commands were active we have a problem.
2343                  *
2344                  * Otherwise if the error slot is bad we have a problem.
2345                  *
2346                  * Otherwise process the error for the slot.
2347                  */
2348                 if (ap->ap_sactive) {
2349                         err_slot = ahci_port_read_ncq_error(ap, 0);
2350                 } else if (ap->ap_active == 0) {
2351                         kprintf("%s: TFES with no commands pending\n",
2352                                 PORTNAME(ap));
2353                         err_slot = -1;
2354                 } else if (err_slot < 0 || err_slot >= ap->ap_sc->sc_ncmds) {
2355                         kprintf("%s: bad error slot %d\n",
2356                                 PORTNAME(ap), err_slot);
2357                         err_slot = -1;
2358                 } else {
2359                         ccb = &ap->ap_ccbs[err_slot];
2360
2361                         /*
2362                          * Validate the errored ccb.  Note that ccb_at can
2363                          * be NULL for direct-attached ccb's.
2364                          *
2365                          * Copy received taskfile data from the RFIS.
2366                          */
2367                         if (ccb->ccb_xa.state == ATA_S_ONCHIP) {
2368                                 ccb_at = ccb->ccb_xa.at;
2369                                 memcpy(&ccb->ccb_xa.rfis, ap->ap_rfis->rfis,
2370                                        sizeof(struct ata_fis_d2h));
2371                                 if (bootverbose) {
2372                                         kprintf("%s: Copying rfis slot %d\n",
2373                                                 ATANAME(ap, ccb_at), err_slot);
2374                                 }
2375                         } else {
2376                                 kprintf("%s: Cannot copy rfis, CCB slot "
2377                                         "%d is not on-chip (state=%d)\n",
2378                                         ATANAME(ap, ccb->ccb_xa.at),
2379                                         err_slot, ccb->ccb_xa.state);
2380                                 err_slot = -1;
2381                         }
2382                 }
2383
2384                 /*
2385                  * If we could not determine the errored slot then
2386                  * reset the port.
2387                  */
2388                 if (err_slot < 0) {
2389                         kprintf("%s: TFES: Unable to determine errored slot\n",
2390                                 PORTNAME(ap));
2391                         if (ap->ap_flags & AP_F_IN_RESET)
2392                                 goto fatal;
2393                         goto failall;
2394                 }
2395
2396                 /*
2397                  * Finish error on slot.  We will restart ci_saved
2398                  * commands except the errored slot which we generate
2399                  * a failure for.
2400                  */
2401 finish_error:
2402                 ccb = &ap->ap_ccbs[err_slot];
2403                 ci_saved &= ~(1 << err_slot);
2404                 KKASSERT(ccb->ccb_xa.state == ATA_S_ONCHIP);
2405                 ccb->ccb_xa.state = ATA_S_ERROR;
2406         } else if (is & AHCI_PREG_IS_DHRS) {
2407                 /*
2408                  * Command posted D2H register FIS to the rfis (non-blocking).
2409                  *
2410                  * A normal completion with an error may set DHRS instead
2411                  * of TFES.  The CCS bits are only valid if ERR was set.
2412                  * If ERR is set command processing was probably stopped.
2413                  *
2414                  * If ERR was not set we can only copy-back data for
2415                  * exclusive-mode commands because otherwise we won't know
2416                  * which tag the rfis belonged to.
2417                  *
2418                  * err_slot must be read from the CCS before any other port
2419                  * action, such as stopping the port.
2420                  *
2421                  * WARNING!     This is not well documented in the AHCI spec.
2422                  *              It can be found in the state machine tables
2423                  *              but not in the explanations.
2424                  */
2425                 u_int32_t tfd;
2426                 u_int32_t cmd;
2427                 int err_slot;
2428
2429                 tfd = ahci_pread(ap, AHCI_PREG_TFD);
2430                 cmd = ahci_pread(ap, AHCI_PREG_CMD);
2431
2432                 if ((tfd & AHCI_PREG_TFD_STS_ERR) &&
2433                     (cmd & AHCI_PREG_CMD_CR) == 0) {
2434                         err_slot = AHCI_PREG_CMD_CCS(
2435                                                 ahci_pread(ap, AHCI_PREG_CMD));
2436                         ccb = &ap->ap_ccbs[err_slot];
2437                         kprintf("%s: DHRS tfd=%b err_slot=%d cmd=%02x\n",
2438                                 PORTNAME(ap),
2439                                 tfd, AHCI_PFMT_TFD_STS,
2440                                 err_slot, ccb->ccb_xa.fis->command);
2441                         goto process_error;
2442                 }
2443                 /*
2444                  * NO ELSE... copy back is in the normal command completion
2445                  * code and only if no error occured and ATA_F_AUTOSENSE
2446                  * was set.
2447                  */
2448                 ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_DHRS);
2449         }
2450
2451         /*
2452          * Device notification to us (non-blocking)
2453          *
2454          * NOTE!  On some parts notification bits can cause an IPMS
2455          *        interrupt instead of a SDBS interrupt.
2456          *
2457          * NOTE!  On some parts (e.g. VBOX, probably intel ICHx),
2458          *        SDBS notifies us of the completion of a NCQ command
2459          *        and DBS does not.
2460          */
2461         if (is & (AHCI_PREG_IS_SDBS | AHCI_PREG_IS_IPMS)) {
2462                 u_int32_t data;
2463
2464                 ahci_pwrite(ap, AHCI_PREG_IS,
2465                                 AHCI_PREG_IS_SDBS | AHCI_PREG_IS_IPMS);
2466                 if (sc->sc_cap & AHCI_REG_CAP_SSNTF) {
2467                         data = ahci_pread(ap, AHCI_PREG_SNTF);
2468                         if (data) {
2469                                 ahci_pwrite(ap, AHCI_PREG_IS,
2470                                                 AHCI_PREG_IS_SDBS);
2471                                 kprintf("%s: NOTIFY %08x\n",
2472                                         PORTNAME(ap), data);
2473                                 ahci_pwrite(ap, AHCI_PREG_SERR,
2474                                                 AHCI_PREG_SERR_DIAG_N);
2475                                 ahci_pwrite(ap, AHCI_PREG_SNTF, data);
2476                                 ahci_cam_changed(ap, NULL, -1);
2477                         }
2478                 }
2479                 is &= ~(AHCI_PREG_IS_SDBS | AHCI_PREG_IS_IPMS);
2480         }
2481
2482         /*
2483          * Spurious IFS errors (blockable).
2484          *
2485          * Spurious IFS errors can occur while we are doing a reset
2486          * sequence through a PM.  Try to recover if we are being asked
2487          * to ignore IFS errors during these periods.
2488          */
2489         if ((is & AHCI_PREG_IS_IFS) && (ap->ap_flags & AP_F_IGNORE_IFS)) {
2490                 u_int32_t serr = ahci_pread(ap, AHCI_PREG_SERR);
2491                 if ((ap->ap_flags & AP_F_IFS_IGNORED) == 0) {
2492                         kprintf("%s: Ignoring IFS (XXX) (IS: %b, SERR: %b)\n",
2493                                 PORTNAME(ap),
2494                                 is, AHCI_PFMT_IS,
2495                                 serr, AHCI_PFMT_SERR);
2496                         ap->ap_flags |= AP_F_IFS_IGNORED;
2497                 }
2498                 ap->ap_flags |= AP_F_IFS_OCCURED;
2499                 ahci_pwrite(ap, AHCI_PREG_SERR, -1);
2500                 ahci_pwrite(ap, AHCI_PREG_IS, AHCI_PREG_IS_IFS);
2501                 is &= ~AHCI_PREG_IS_IFS;
2502                 ahci_port_stop(ap, 0);
2503                 ahci_port_start(ap);
2504                 kprintf("%s: Spurious IFS error\n", PORTNAME(ap));
2505                 goto failall;
2506                 /* need = NEED_RESTART; */
2507         }
2508
2509         /*
2510          * Port change (hot-plug) (blockable).
2511          *
2512          * A PCS interrupt will occur on hot-plug once communication is
2513          * established.
2514          *
2515          * A PRCS interrupt will occur on hot-unplug (and possibly also
2516          * on hot-plug).
2517          *
2518          * XXX We can then check the CPS (Cold Presence State) bit, if
2519          * supported, to determine if a device is plugged in or not and do
2520          * the right thing.
2521          *
2522          * WARNING:  A PCS interrupt is cleared by clearing DIAG_X, and
2523          *           can also occur if an unsolicited COMINIT is received.
2524          *           If this occurs command processing is automatically
2525          *           stopped (CR goes inactive) and the port must be stopped
2526          *           and restarted.
2527          */
2528
2529         /* ignore AHCI_PREG_IS_PRCS when link power management is on */
2530         if (ap->link_pwr_mgmt != AHCI_LINK_PWR_MGMT_NONE) {
2531                 is &= ~AHCI_PREG_IS_PRCS;
2532         }
2533
2534         if (is & (AHCI_PREG_IS_PCS | AHCI_PREG_IS_PRCS)) {
2535                 kprintf("%s: Transient Errors: %b\n",
2536                         PORTNAME(ap), is, AHCI_PFMT_IS);
2537                 ahci_pwrite(ap, AHCI_PREG_SERR,
2538                         (AHCI_PREG_SERR_DIAG_N | AHCI_PREG_SERR_DIAG_X));
2539                 ahci_pwrite(ap, AHCI_PREG_IS,
2540                             is & (AHCI_PREG_IS_PCS | AHCI_PREG_IS_PRCS));
2541                 is &= ~(AHCI_PREG_IS_PCS | AHCI_PREG_IS_PRCS);
2542                 ahci_port_stop(ap, 0);
2543
2544                 switch (ahci_pread(ap, AHCI_PREG_SSTS) & AHCI_PREG_SSTS_DET) {
2545                 case AHCI_PREG_SSTS_DET_DEV:
2546                         if (ap->ap_probe == ATA_PROBE_FAILED) {
2547                                 need = NEED_HOTPLUG_INSERT;
2548                                 goto fatal;
2549                         }
2550                         need = NEED_RESTART;
2551                         break;
2552                 default:
2553                         if (ap->ap_probe != ATA_PROBE_FAILED) {
2554                                 need = NEED_HOTPLUG_REMOVE;
2555                                 goto fatal;
2556                         }
2557                         need = NEED_RESTART;
2558                         break;
2559                 }
2560         }
2561
2562         /*
2563          * Check for remaining errors - they are fatal. (blockable)
2564          */
2565         if (is & (AHCI_PREG_IS_TFES | AHCI_PREG_IS_HBFS | AHCI_PREG_IS_IFS |
2566                   AHCI_PREG_IS_OFS | AHCI_PREG_IS_UFS)) {
2567                 u_int32_t serr;
2568
2569                 ahci_pwrite(ap, AHCI_PREG_IS,
2570                             is & (AHCI_PREG_IS_TFES | AHCI_PREG_IS_HBFS |
2571                                   AHCI_PREG_IS_IFS | AHCI_PREG_IS_OFS |
2572                                   AHCI_PREG_IS_UFS));
2573                 serr = ahci_pread(ap, AHCI_PREG_SERR);
2574                 kprintf("%s: Unrecoverable errors (IS: %b, SERR: %b), "
2575                         "disabling port.\n",
2576                         PORTNAME(ap),
2577                         is, AHCI_PFMT_IS,
2578                         serr, AHCI_PFMT_SERR
2579                 );
2580                 is &= ~(AHCI_PREG_IS_TFES | AHCI_PREG_IS_HBFS |
2581                         AHCI_PREG_IS_IFS | AHCI_PREG_IS_OFS |
2582                         AHCI_PREG_IS_UFS);
2583                 /* XXX try recovery first */
2584                 goto fatal;
2585         }
2586
2587         /*
2588          * Fail all outstanding commands if we know the port won't recover.
2589          *
2590          * We may have a ccb_at if the failed command is known and was
2591          * being sent to a device over a port multiplier (PM).  In this
2592          * case if the port itself has not completely failed we fail just
2593          * the commands related to that target.
2594          *
2595          * ci_saved contains the mask of active commands as of when the
2596          * error occured, prior to any port stops.
2597          */
2598         if (ap->ap_state == AP_S_FATAL_ERROR) {
2599 fatal:
2600                 ap->ap_state = AP_S_FATAL_ERROR;
2601                 ahci_port_stop(ap, 0);
2602 failall:
2603                 kprintf("%s: Failing all commands\n", PORTNAME(ap));
2604
2605                 /*
2606                  * Error all the active slots not already errored.  If
2607                  * running across a PM try to error out just the slots
2608                  * related to the target.
2609                  */
2610                 ci_masked = ci_saved & *active & ~ap->ap_expired;
2611                 while (ci_masked) {
2612                         slot = ffs(ci_masked) - 1;
2613                         ccb = &ap->ap_ccbs[slot];
2614                         if (ccb_at == ccb->ccb_xa.at ||
2615                             ap->ap_state == AP_S_FATAL_ERROR) {
2616                                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
2617                                 ap->ap_expired |= 1 << slot;
2618                                 ci_saved &= ~(1 << slot);
2619                         }
2620                         ci_masked &= ~(1 << slot);
2621                 }
2622
2623                 /*
2624                  * Clear bits in ci_saved (cause completions to be run)
2625                  * for all slots which are not active.
2626                  */
2627                 ci_saved &= ~*active;
2628
2629                 /*
2630                  * Don't restart the port if our problems were deemed fatal.
2631                  *
2632                  * Also acknowlege all fatal interrupt sources to prevent
2633                  * a livelock.
2634                  */
2635                 if (ap->ap_state == AP_S_FATAL_ERROR) {
2636                         if (need == NEED_RESTART)
2637                                 need = NEED_NOTHING;
2638                         ahci_pwrite(ap, AHCI_PREG_IS,
2639                                     AHCI_PREG_IS_TFES | AHCI_PREG_IS_HBFS |
2640                                     AHCI_PREG_IS_IFS | AHCI_PREG_IS_OFS |
2641                                     AHCI_PREG_IS_UFS);
2642                 }
2643         }
2644
2645         /*
2646          * CCB completion (non blocking).
2647          *
2648          * CCB completion is detected by noticing its slot's bit in CI has
2649          * changed to zero some time after we activated it.
2650          * If we are polling, we may only be interested in particular slot(s).
2651          *
2652          * Any active bits not saved are completed within the restrictions
2653          * imposed by the caller.
2654          */
2655         ci_masked = ~ci_saved & *active;
2656         while (ci_masked) {
2657                 slot = ffs(ci_masked) - 1;
2658                 ccb = &ap->ap_ccbs[slot];
2659                 ci_masked &= ~(1 << slot);
2660
2661                 DPRINTF(AHCI_D_INTR, "%s: slot %d is complete%s\n",
2662                     PORTNAME(ap), slot, ccb->ccb_xa.state == ATA_S_ERROR ?
2663                     " (error)" : "");
2664
2665                 bus_dmamap_sync(sc->sc_tag_cmdh,
2666                                 AHCI_DMA_MAP(ap->ap_dmamem_cmd_list),
2667                                 BUS_DMASYNC_POSTWRITE);
2668
2669                 bus_dmamap_sync(sc->sc_tag_cmdt,
2670                                 AHCI_DMA_MAP(ap->ap_dmamem_cmd_table),
2671                                 BUS_DMASYNC_POSTWRITE);
2672
2673                 bus_dmamap_sync(sc->sc_tag_rfis,
2674                                 AHCI_DMA_MAP(ap->ap_dmamem_rfis),
2675                                 BUS_DMASYNC_POSTREAD);
2676
2677                 *active &= ~(1 << ccb->ccb_slot);
2678                 if (active == &ap->ap_active) {
2679                         KKASSERT(ap->ap_active_cnt > 0);
2680                         --ap->ap_active_cnt;
2681                 }
2682
2683                 /*
2684                  * Complete the ccb.  If the ccb was marked expired it
2685                  * was probably already removed from the command processor,
2686                  * so don't take the clear ci_saved bit as meaning the
2687                  * command actually succeeded, it didn't.
2688                  */
2689                 if (ap->ap_expired & (1 << ccb->ccb_slot)) {
2690                         ap->ap_expired &= ~(1 << ccb->ccb_slot);
2691                         ccb->ccb_xa.state = ATA_S_TIMEOUT;
2692                         ccb->ccb_done(ccb);
2693                         ccb->ccb_xa.complete(&ccb->ccb_xa);
2694                 } else {
2695                         if (ccb->ccb_xa.state == ATA_S_ONCHIP) {
2696                                 ccb->ccb_xa.state = ATA_S_COMPLETE;
2697                                 if (ccb->ccb_xa.flags & ATA_F_AUTOSENSE) {
2698                                         memcpy(&ccb->ccb_xa.rfis,
2699                                             ap->ap_rfis->rfis,
2700                                             sizeof(struct ata_fis_d2h));
2701                                         if (ccb->ccb_xa.state == ATA_S_TIMEOUT)
2702                                                 ccb->ccb_xa.state = ATA_S_ERROR;
2703                                 }
2704                         }
2705                         ccb->ccb_done(ccb);
2706                 }
2707         }
2708         ahci_issue_pending_commands(ap, NULL);
2709
2710         /*
2711          * Cleanup.  Will not be set if non-blocking.
2712          */
2713         switch(need) {
2714         case NEED_RESTART:
2715                 /*
2716                  * A recoverable error occured and we can restart outstanding
2717                  * commands on the port.
2718                  */
2719                 ci_saved &= ~ap->ap_expired;
2720                 if (ci_saved) {
2721                         kprintf("%s: Restart %08x\n", PORTNAME(ap), ci_saved);
2722                         ahci_issue_saved_commands(ap, ci_saved);
2723                 }
2724                 break;
2725         case NEED_HOTPLUG_INSERT:
2726                 /*
2727                  * A hot-plug insertion event has occured and all
2728                  * outstanding commands have already been revoked.
2729                  *
2730                  * Don't recurse if this occurs while we are
2731                  * resetting the port.
2732                  */
2733                 if ((ap->ap_flags & AP_F_IN_RESET) == 0) {
2734                         kprintf("%s: HOTPLUG - Device inserted\n",
2735                                 PORTNAME(ap));
2736                         ap->ap_probe = ATA_PROBE_NEED_INIT;
2737                         ahci_cam_changed(ap, NULL, -1);
2738                 }
2739                 break;
2740         case NEED_HOTPLUG_REMOVE:
2741                 /*
2742                  * A hot-plug removal event has occured and all
2743                  * outstanding commands have already been revoked.
2744                  *
2745                  * Don't recurse if this occurs while we are
2746                  * resetting the port.
2747                  */
2748                 if ((ap->ap_flags & AP_F_IN_RESET) == 0) {
2749                         kprintf("%s: HOTPLUG - Device removed\n",
2750                                 PORTNAME(ap));
2751                         ahci_port_hardstop(ap);
2752                         /* ap_probe set to failed */
2753                         ahci_cam_changed(ap, NULL, -1);
2754                 }
2755                 break;
2756         default:
2757                 break;
2758         }
2759 }
2760
2761 struct ahci_ccb *
2762 ahci_get_ccb(struct ahci_port *ap)
2763 {
2764         struct ahci_ccb                 *ccb;
2765
2766         lockmgr(&ap->ap_ccb_lock, LK_EXCLUSIVE);
2767         ccb = TAILQ_FIRST(&ap->ap_ccb_free);
2768         if (ccb != NULL) {
2769                 KKASSERT(ccb->ccb_xa.state == ATA_S_PUT);
2770                 TAILQ_REMOVE(&ap->ap_ccb_free, ccb, ccb_entry);
2771                 ccb->ccb_xa.state = ATA_S_SETUP;
2772                 ccb->ccb_xa.at = NULL;
2773         }
2774         lockmgr(&ap->ap_ccb_lock, LK_RELEASE);
2775
2776         return (ccb);
2777 }
2778
2779 void
2780 ahci_put_ccb(struct ahci_ccb *ccb)
2781 {
2782         struct ahci_port                *ap = ccb->ccb_port;
2783
2784         ccb->ccb_xa.state = ATA_S_PUT;
2785         lockmgr(&ap->ap_ccb_lock, LK_EXCLUSIVE);
2786         TAILQ_INSERT_TAIL(&ap->ap_ccb_free, ccb, ccb_entry);
2787         lockmgr(&ap->ap_ccb_lock, LK_RELEASE);
2788 }
2789
2790 struct ahci_ccb *
2791 ahci_get_err_ccb(struct ahci_port *ap)
2792 {
2793         struct ahci_ccb *err_ccb;
2794         u_int32_t sact;
2795         u_int32_t ci;
2796
2797         /* No commands may be active on the chip. */
2798
2799         if (ap->ap_sc->sc_cap & AHCI_REG_CAP_SNCQ) {
2800                 sact = ahci_pread(ap, AHCI_PREG_SACT);
2801                 if (sact != 0) {
2802                         kprintf("%s: ahci_get_err_ccb but SACT %08x != 0?\n",
2803                                 PORTNAME(ap), sact);
2804                 }
2805         }
2806         ci = ahci_pread(ap, AHCI_PREG_CI);
2807         if (ci) {
2808                 kprintf("%s: ahci_get_err_ccb: ci not 0 (%08x)\n",
2809                         ap->ap_name, ci);
2810         }
2811         KKASSERT(ci == 0);
2812         KKASSERT((ap->ap_flags & AP_F_ERR_CCB_RESERVED) == 0);
2813         ap->ap_flags |= AP_F_ERR_CCB_RESERVED;
2814
2815         /* Save outstanding command state. */
2816         ap->ap_err_saved_active = ap->ap_active;
2817         ap->ap_err_saved_active_cnt = ap->ap_active_cnt;
2818         ap->ap_err_saved_sactive = ap->ap_sactive;
2819
2820         /*
2821          * Pretend we have no commands outstanding, so that completions won't
2822          * run prematurely.
2823          */
2824         ap->ap_active = ap->ap_active_cnt = ap->ap_sactive = 0;
2825
2826         /*
2827          * Grab a CCB to use for error recovery.  This should never fail, as
2828          * we ask atascsi to reserve one for us at init time.
2829          */
2830         err_ccb = ap->ap_err_ccb;
2831         KKASSERT(err_ccb != NULL);
2832         err_ccb->ccb_xa.flags = 0;
2833         err_ccb->ccb_done = ahci_empty_done;
2834
2835         return err_ccb;
2836 }
2837
2838 void
2839 ahci_put_err_ccb(struct ahci_ccb *ccb)
2840 {
2841         struct ahci_port *ap = ccb->ccb_port;
2842         u_int32_t sact;
2843         u_int32_t ci;
2844
2845         KKASSERT((ap->ap_flags & AP_F_ERR_CCB_RESERVED) != 0);
2846
2847         /*
2848          * No commands may be active on the chip
2849          */
2850         if (ap->ap_sc->sc_cap & AHCI_REG_CAP_SNCQ) {
2851                 sact = ahci_pread(ap, AHCI_PREG_SACT);
2852                 if (sact) {
2853                         panic("ahci_port_err_ccb(%d) but SACT %08x != 0\n",
2854                               ccb->ccb_slot, sact);
2855                 }
2856         }
2857         ci = ahci_pread(ap, AHCI_PREG_CI);
2858         if (ci) {
2859                 panic("ahci_put_err_ccb(%d) but CI %08x != 0 "
2860                       "(act=%08x sact=%08x)\n",
2861                       ccb->ccb_slot, ci,
2862                       ap->ap_active, ap->ap_sactive);
2863         }
2864
2865         KKASSERT(ccb == ap->ap_err_ccb);
2866
2867         /* Restore outstanding command state */
2868         ap->ap_sactive = ap->ap_err_saved_sactive;
2869         ap->ap_active_cnt = ap->ap_err_saved_active_cnt;
2870         ap->ap_active = ap->ap_err_saved_active;
2871
2872         ap->ap_flags &= ~AP_F_ERR_CCB_RESERVED;
2873 }
2874
2875 /*
2876  * Read log page to get NCQ error.
2877  *
2878  * NOTE: NCQ not currently supported on port multipliers. XXX
2879  */
2880 int
2881 ahci_port_read_ncq_error(struct ahci_port *ap, int target)
2882 {
2883         struct ata_log_page_10h *log;
2884         struct ahci_ccb         *ccb;
2885         struct ahci_cmd_hdr     *cmd_slot;
2886         struct ata_fis_h2d      *fis;
2887         int                     err_slot;
2888
2889         if (bootverbose) {
2890                 kprintf("%s: READ LOG PAGE target %d\n", PORTNAME(ap),
2891                         target);
2892         }
2893
2894         /*
2895          * Prep error CCB for READ LOG EXT, page 10h, 1 sector.
2896          *
2897          * Getting err_ccb clears active/sactive/active_cnt, putting
2898          * it back restores the fields.
2899          */
2900         ccb = ahci_get_err_ccb(ap);
2901         ccb->ccb_xa.flags = ATA_F_READ | ATA_F_POLL;
2902         ccb->ccb_xa.data = ap->ap_err_scratch;
2903         ccb->ccb_xa.datalen = 512;
2904         ccb->ccb_xa.complete = ahci_dummy_done;
2905         ccb->ccb_xa.at = ap->ap_ata[target];
2906
2907         fis = (struct ata_fis_h2d *)ccb->ccb_cmd_table->cfis;
2908         bzero(fis, sizeof(*fis));
2909         fis->type = ATA_FIS_TYPE_H2D;
2910         fis->flags = ATA_H2D_FLAGS_CMD | target;
2911         fis->command = ATA_C_READ_LOG_EXT;
2912         fis->lba_low = 0x10;            /* queued error log page (10h) */
2913         fis->sector_count = 1;          /* number of sectors (1) */
2914         fis->sector_count_exp = 0;
2915         fis->lba_mid = 0;               /* starting offset */
2916         fis->lba_mid_exp = 0;
2917         fis->device = 0;
2918
2919         cmd_slot = ccb->ccb_cmd_hdr;
2920         cmd_slot->flags = htole16(5);   /* FIS length: 5 DWORDS */
2921
2922         if (ahci_load_prdt(ccb) != 0) {
2923                 err_slot = -1;
2924                 goto err;
2925         }
2926
2927         ccb->ccb_xa.state = ATA_S_PENDING;
2928         if (ahci_poll(ccb, 1000, ahci_quick_timeout) != ATA_S_COMPLETE) {
2929                 err_slot = -1;
2930                 ahci_unload_prdt(ccb);
2931                 goto err;
2932         }
2933         ahci_unload_prdt(ccb);
2934
2935         /*
2936          * Success, extract failed register set and tags from the scratch
2937          * space.
2938          */
2939         log = (struct ata_log_page_10h *)ap->ap_err_scratch;
2940         if (log->err_regs.type & ATA_LOG_10H_TYPE_NOTQUEUED) {
2941                 /* Not queued bit was set - wasn't an NCQ error? */
2942                 kprintf("%s: read NCQ error page, but not an NCQ error?\n",
2943                         PORTNAME(ap));
2944                 err_slot = -1;
2945         } else {
2946                 /* Copy back the log record as a D2H register FIS. */
2947                 err_slot = log->err_regs.type & ATA_LOG_10H_TYPE_TAG_MASK;
2948
2949                 ccb = &ap->ap_ccbs[err_slot];
2950                 if (ccb->ccb_xa.state == ATA_S_ONCHIP) {
2951                         kprintf("%s: read NCQ error page slot=%d\n",
2952                                 ATANAME(ap, ccb->ccb_xa.at),
2953                                 err_slot);
2954                         memcpy(&ccb->ccb_xa.rfis, &log->err_regs,
2955                                 sizeof(struct ata_fis_d2h));
2956                         ccb->ccb_xa.rfis.type = ATA_FIS_TYPE_D2H;
2957                         ccb->ccb_xa.rfis.flags = 0;
2958                 } else {
2959                         kprintf("%s: read NCQ error page slot=%d, "
2960                                 "slot does not match any cmds\n",
2961                                 ATANAME(ccb->ccb_port, ccb->ccb_xa.at),
2962                                 err_slot);
2963                         err_slot = -1;
2964                 }
2965         }
2966 err:
2967         ahci_put_err_ccb(ccb);
2968         kprintf("%s: DONE log page target %d err_slot=%d\n",
2969                 PORTNAME(ap), target, err_slot);
2970         return (err_slot);
2971 }
2972
2973 /*
2974  * Allocate memory for various structures DMAd by hardware.  The maximum
2975  * number of segments for these tags is 1 so the DMA memory will have a
2976  * single physical base address.
2977  */
2978 struct ahci_dmamem *
2979 ahci_dmamem_alloc(struct ahci_softc *sc, bus_dma_tag_t tag)
2980 {
2981         struct ahci_dmamem *adm;
2982         int     error;
2983
2984         adm = kmalloc(sizeof(*adm), M_DEVBUF, M_INTWAIT | M_ZERO);
2985
2986         error = bus_dmamem_alloc(tag, (void **)&adm->adm_kva,
2987                                  BUS_DMA_ZERO, &adm->adm_map);
2988         if (error == 0) {
2989                 adm->adm_tag = tag;
2990                 error = bus_dmamap_load(tag, adm->adm_map,
2991                                         adm->adm_kva,
2992                                         bus_dma_tag_getmaxsize(tag),
2993                                         ahci_dmamem_saveseg, &adm->adm_busaddr,
2994                                         0);
2995         }
2996         if (error) {
2997                 if (adm->adm_map) {
2998                         bus_dmamap_destroy(tag, adm->adm_map);
2999                         adm->adm_map = NULL;
3000                         adm->adm_tag = NULL;
3001                         adm->adm_kva = NULL;
3002                 }
3003                 kfree(adm, M_DEVBUF);
3004                 adm = NULL;
3005         }
3006         return (adm);
3007 }
3008
3009 static
3010 void
3011 ahci_dmamem_saveseg(void *info, bus_dma_segment_t *segs, int nsegs, int error)
3012 {
3013         KKASSERT(error == 0);
3014         KKASSERT(nsegs == 1);
3015         *(bus_addr_t *)info = segs->ds_addr;
3016 }
3017
3018
3019 void
3020 ahci_dmamem_free(struct ahci_softc *sc, struct ahci_dmamem *adm)
3021 {
3022         if (adm->adm_map) {
3023                 bus_dmamap_unload(adm->adm_tag, adm->adm_map);
3024                 bus_dmamap_destroy(adm->adm_tag, adm->adm_map);
3025                 adm->adm_map = NULL;
3026                 adm->adm_tag = NULL;
3027                 adm->adm_kva = NULL;
3028         }
3029         kfree(adm, M_DEVBUF);
3030 }
3031
3032 u_int32_t
3033 ahci_read(struct ahci_softc *sc, bus_size_t r)
3034 {
3035         bus_space_barrier(sc->sc_iot, sc->sc_ioh, r, 4,
3036                           BUS_SPACE_BARRIER_READ);
3037         return (bus_space_read_4(sc->sc_iot, sc->sc_ioh, r));
3038 }
3039
3040 void
3041 ahci_write(struct ahci_softc *sc, bus_size_t r, u_int32_t v)
3042 {
3043         bus_space_write_4(sc->sc_iot, sc->sc_ioh, r, v);
3044         bus_space_barrier(sc->sc_iot, sc->sc_ioh, r, 4,
3045                           BUS_SPACE_BARRIER_WRITE);
3046 }
3047
3048 u_int32_t
3049 ahci_pread(struct ahci_port *ap, bus_size_t r)
3050 {
3051         bus_space_barrier(ap->ap_sc->sc_iot, ap->ap_ioh, r, 4,
3052                           BUS_SPACE_BARRIER_READ);
3053         return (bus_space_read_4(ap->ap_sc->sc_iot, ap->ap_ioh, r));
3054 }
3055
3056 void
3057 ahci_pwrite(struct ahci_port *ap, bus_size_t r, u_int32_t v)
3058 {
3059         bus_space_write_4(ap->ap_sc->sc_iot, ap->ap_ioh, r, v);
3060         bus_space_barrier(ap->ap_sc->sc_iot, ap->ap_ioh, r, 4,
3061                           BUS_SPACE_BARRIER_WRITE);
3062 }
3063
3064 /*
3065  * Wait up to (timeout) milliseconds for the masked port register to
3066  * match the target.
3067  *
3068  * Timeout is in milliseconds.
3069  */
3070 int
3071 ahci_pwait_eq(struct ahci_port *ap, int timeout,
3072               bus_size_t r, u_int32_t mask, u_int32_t target)
3073 {
3074         int     t;
3075
3076         /*
3077          * Loop hard up to 100uS
3078          */
3079         for (t = 0; t < 100; ++t) {
3080                 if ((ahci_pread(ap, r) & mask) == target)
3081                         return (0);
3082                 ahci_os_hardsleep(1);   /* us */
3083         }
3084
3085         do {
3086                 timeout -= ahci_os_softsleep();
3087                 if ((ahci_pread(ap, r) & mask) == target)
3088                         return (0);
3089         } while (timeout > 0);
3090         return (1);
3091 }
3092
3093 int
3094 ahci_wait_ne(struct ahci_softc *sc, bus_size_t r, u_int32_t mask,
3095              u_int32_t target)
3096 {
3097         int     t;
3098
3099         /*
3100          * Loop hard up to 100uS
3101          */
3102         for (t = 0; t < 100; ++t) {
3103                 if ((ahci_read(sc, r) & mask) != target)
3104                         return (0);
3105                 ahci_os_hardsleep(1);   /* us */
3106         }
3107
3108         /*
3109          * And one millisecond the slow way
3110          */
3111         t = 1000;
3112         do {
3113                 t -= ahci_os_softsleep();
3114                 if ((ahci_read(sc, r) & mask) != target)
3115                         return (0);
3116         } while (t > 0);
3117
3118         return (1);
3119 }
3120
3121
3122 /*
3123  * Acquire an ata transfer.
3124  *
3125  * Pass a NULL at for direct-attached transfers, and a non-NULL at for
3126  * targets that go through the port multiplier.
3127  */
3128 struct ata_xfer *
3129 ahci_ata_get_xfer(struct ahci_port *ap, struct ata_port *at)
3130 {
3131         struct ahci_ccb         *ccb;
3132
3133         ccb = ahci_get_ccb(ap);
3134         if (ccb == NULL) {
3135                 DPRINTF(AHCI_D_XFER, "%s: ahci_ata_get_xfer: NULL ccb\n",
3136                     PORTNAME(ap));
3137                 return (NULL);
3138         }
3139
3140         DPRINTF(AHCI_D_XFER, "%s: ahci_ata_get_xfer got slot %d\n",
3141             PORTNAME(ap), ccb->ccb_slot);
3142
3143         bzero(ccb->ccb_xa.fis, sizeof(*ccb->ccb_xa.fis));
3144         ccb->ccb_xa.at = at;
3145         ccb->ccb_xa.fis->type = ATA_FIS_TYPE_H2D;
3146
3147         return (&ccb->ccb_xa);
3148 }
3149
3150 void
3151 ahci_ata_put_xfer(struct ata_xfer *xa)
3152 {
3153         struct ahci_ccb                 *ccb = (struct ahci_ccb *)xa;
3154
3155         DPRINTF(AHCI_D_XFER, "ahci_ata_put_xfer slot %d\n", ccb->ccb_slot);
3156
3157         ahci_put_ccb(ccb);
3158 }
3159
3160 int
3161 ahci_ata_cmd(struct ata_xfer *xa)
3162 {
3163         struct ahci_ccb                 *ccb = (struct ahci_ccb *)xa;
3164         struct ahci_cmd_hdr             *cmd_slot;
3165
3166         KKASSERT(xa->state == ATA_S_SETUP);
3167
3168         if (ccb->ccb_port->ap_state == AP_S_FATAL_ERROR)
3169                 goto failcmd;
3170         ccb->ccb_done = ahci_ata_cmd_done;
3171
3172         cmd_slot = ccb->ccb_cmd_hdr;
3173         cmd_slot->flags = htole16(5); /* FIS length (in DWORDs) */
3174         if (ccb->ccb_xa.at) {
3175                 cmd_slot->flags |= htole16(ccb->ccb_xa.at->at_target <<
3176                                            AHCI_CMD_LIST_FLAG_PMP_SHIFT);
3177         }
3178
3179         if (xa->flags & ATA_F_WRITE)
3180                 cmd_slot->flags |= htole16(AHCI_CMD_LIST_FLAG_W);
3181
3182         if (xa->flags & ATA_F_PACKET)
3183                 cmd_slot->flags |= htole16(AHCI_CMD_LIST_FLAG_A);
3184
3185         if (ahci_load_prdt(ccb) != 0)
3186                 goto failcmd;
3187
3188         xa->state = ATA_S_PENDING;
3189
3190         if (xa->flags & ATA_F_POLL)
3191                 return (ahci_poll(ccb, xa->timeout, ahci_ata_cmd_timeout));
3192
3193         crit_enter();
3194         KKASSERT((xa->flags & ATA_F_TIMEOUT_EXPIRED) == 0);
3195         xa->flags |= ATA_F_TIMEOUT_DESIRED;
3196         ahci_start(ccb);
3197         crit_exit();
3198         return (xa->state);
3199
3200 failcmd:
3201         crit_enter();
3202         xa->state = ATA_S_ERROR;
3203         xa->complete(xa);
3204         crit_exit();
3205         return (ATA_S_ERROR);
3206 }
3207
3208 void
3209 ahci_ata_cmd_done(struct ahci_ccb *ccb)
3210 {
3211         struct ata_xfer                 *xa = &ccb->ccb_xa;
3212
3213         /*
3214          * NOTE: callout does not lock port and may race us modifying
3215          * the flags, so make sure its stopped.
3216          */
3217         if (xa->flags & ATA_F_TIMEOUT_RUNNING) {
3218                 callout_stop(&ccb->ccb_timeout);
3219                 xa->flags &= ~ATA_F_TIMEOUT_RUNNING;
3220         }
3221         xa->flags &= ~(ATA_F_TIMEOUT_DESIRED | ATA_F_TIMEOUT_EXPIRED);
3222
3223         KKASSERT(xa->state != ATA_S_ONCHIP);
3224         ahci_unload_prdt(ccb);
3225
3226         if (xa->state != ATA_S_TIMEOUT)
3227                 xa->complete(xa);
3228 }
3229
3230 /*
3231  * Timeout from callout, MPSAFE - nothing can mess with the CCB's flags
3232  * while the callout is runing.
3233  *
3234  * We can't safely get the port lock here or delay, we could block
3235  * the callout thread.
3236  */
3237 static void
3238 ahci_ata_cmd_timeout_unserialized(void *arg)
3239 {
3240         struct ahci_ccb         *ccb = arg;
3241         struct ahci_port        *ap = ccb->ccb_port;
3242
3243         ccb->ccb_xa.flags &= ~ATA_F_TIMEOUT_RUNNING;
3244         ccb->ccb_xa.flags |= ATA_F_TIMEOUT_EXPIRED;
3245         ahci_os_signal_port_thread(ap, AP_SIGF_TIMEOUT);
3246 }
3247
3248 /*
3249  * Timeout code, typically called when the port command processor is running.
3250  *
3251  * We have to be very very careful here.  We cannot stop the port unless
3252  * CR is already clear or the only active commands remaining are timed-out
3253  * ones.  Otherwise stopping the port will race the command processor and
3254  * we can lose events.  While we can theoretically just restart everything
3255  * that could result in a double-issue which will not work for ATAPI commands.
3256  */
3257 void
3258 ahci_ata_cmd_timeout(struct ahci_ccb *ccb)
3259 {
3260         struct ata_xfer         *xa = &ccb->ccb_xa;
3261         struct ahci_port        *ap = ccb->ccb_port;
3262         struct ata_port         *at;
3263         int                     ci_saved;
3264         int                     slot;
3265
3266         at = ccb->ccb_xa.at;
3267
3268         kprintf("%s: CMD TIMEOUT state=%d slot=%d\n"
3269                 "\tcmd-reg 0x%b\n"
3270                 "\tsactive=%08x active=%08x expired=%08x\n"
3271                 "\t   sact=%08x     ci=%08x\n"
3272                 "\t    STS=%b\n",
3273                 ATANAME(ap, at),
3274                 ccb->ccb_xa.state, ccb->ccb_slot,
3275                 ahci_pread(ap, AHCI_PREG_CMD), AHCI_PFMT_CMD,
3276                 ap->ap_sactive, ap->ap_active, ap->ap_expired,
3277                 ahci_pread(ap, AHCI_PREG_SACT),
3278                 ahci_pread(ap, AHCI_PREG_CI),
3279                 ahci_pread(ap, AHCI_PREG_TFD), AHCI_PFMT_TFD_STS
3280         );
3281
3282
3283         /*
3284          * NOTE: Timeout will not be running if the command was polled.
3285          *       If we got here at least one of these flags should be set.
3286          */
3287         KKASSERT(xa->flags & (ATA_F_POLL | ATA_F_TIMEOUT_DESIRED |
3288                               ATA_F_TIMEOUT_RUNNING));
3289         xa->flags &= ~(ATA_F_TIMEOUT_RUNNING | ATA_F_TIMEOUT_EXPIRED);
3290
3291         if (ccb->ccb_xa.state == ATA_S_PENDING) {
3292                 TAILQ_REMOVE(&ap->ap_ccb_pending, ccb, ccb_entry);
3293                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
3294                 ccb->ccb_done(ccb);
3295                 xa->complete(xa);
3296                 ahci_issue_pending_commands(ap, NULL);
3297                 return;
3298         }
3299         if (ccb->ccb_xa.state != ATA_S_ONCHIP) {
3300                 kprintf("%s: Unexpected state during timeout: %d\n",
3301                         ATANAME(ap, at), ccb->ccb_xa.state);
3302                 return;
3303         }
3304
3305         /*
3306          * Ok, we can only get this command off the chip if CR is inactive
3307          * or if the only commands running on the chip are all expired.
3308          * Otherwise we have to wait until the port is in a safe state.
3309          *
3310          * Do not set state here, it will cause polls to return when the
3311          * ccb is not yet off the chip.
3312          */
3313         ap->ap_expired |= 1 << ccb->ccb_slot;
3314
3315         if ((ahci_pread(ap, AHCI_PREG_CMD) & AHCI_PREG_CMD_CR) &&
3316             (ap->ap_active | ap->ap_sactive) != ap->ap_expired) {
3317                 /*
3318                  * If using FBSS or NCQ we can't safely stop the port
3319                  * right now.
3320                  */
3321                 kprintf("%s: Deferred timeout until its safe, slot %d\n",
3322                         ATANAME(ap, at), ccb->ccb_slot);
3323                 return;
3324         }
3325
3326         /*
3327          * We can safely stop the port and process all expired ccb's,
3328          * which will include our current ccb.
3329          */
3330         ci_saved = (ap->ap_sactive) ? ahci_pread(ap, AHCI_PREG_SACT) :
3331                                       ahci_pread(ap, AHCI_PREG_CI);
3332         ahci_port_stop(ap, 0);
3333
3334         while (ap->ap_expired) {
3335                 slot = ffs(ap->ap_expired) - 1;
3336                 ap->ap_expired &= ~(1 << slot);
3337                 ci_saved &= ~(1 << slot);
3338                 ccb = &ap->ap_ccbs[slot];
3339                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
3340                 if (ccb->ccb_xa.flags & ATA_F_NCQ) {
3341                         KKASSERT(ap->ap_sactive & (1 << slot));
3342                         ap->ap_sactive &= ~(1 << slot);
3343                 } else {
3344                         KKASSERT(ap->ap_active & (1 << slot));
3345                         ap->ap_active &= ~(1 << slot);
3346                         --ap->ap_active_cnt;
3347                 }
3348                 ccb->ccb_done(ccb);
3349                 ccb->ccb_xa.complete(&ccb->ccb_xa);
3350         }
3351         /* ccb invalid now */
3352
3353         /*
3354          * We can safely CLO the port to clear any BSY/DRQ, a case which
3355          * can occur with port multipliers.  This will unbrick the port
3356          * and allow commands to other targets behind the PM continue.
3357          * (FBSS).
3358          *
3359          * Finally, once the port has been restarted we can issue any
3360          * previously saved pending commands, and run the port interrupt
3361          * code to handle any completions which may have occured when
3362          * we saved CI.
3363          */
3364         if (ahci_pread(ap, AHCI_PREG_TFD) &
3365                    (AHCI_PREG_TFD_STS_BSY | AHCI_PREG_TFD_STS_DRQ)) {
3366                 kprintf("%s: Warning, issuing CLO after timeout\n",
3367                         ATANAME(ap, at));
3368                 ahci_port_clo(ap);
3369         }
3370         ahci_port_start(ap);
3371         ahci_issue_saved_commands(ap, ci_saved & ~ap->ap_expired);
3372         ahci_issue_pending_commands(ap, NULL);
3373         ahci_port_intr(ap, 0);
3374 }
3375
3376 /*
3377  * Issue a previously saved set of commands
3378  */
3379 void
3380 ahci_issue_saved_commands(struct ahci_port *ap, u_int32_t ci_saved)
3381 {
3382         if (ci_saved) {
3383                 KKASSERT(!((ap->ap_active & ci_saved) &&
3384                            (ap->ap_sactive & ci_saved)));
3385                 KKASSERT((ci_saved & ap->ap_expired) == 0);
3386                 if (ap->ap_sactive & ci_saved)
3387                         ahci_pwrite(ap, AHCI_PREG_SACT, ci_saved);
3388                 ahci_pwrite(ap, AHCI_PREG_CI, ci_saved);
3389         }
3390 }
3391
3392 /*
3393  * Used by the softreset, pmprobe, and read_ncq_error only, in very
3394  * specialized, controlled circumstances.
3395  *
3396  * Only one command may be pending.
3397  */
3398 void
3399 ahci_quick_timeout(struct ahci_ccb *ccb)
3400 {
3401         struct ahci_port *ap = ccb->ccb_port;
3402
3403         switch (ccb->ccb_xa.state) {
3404         case ATA_S_PENDING:
3405                 TAILQ_REMOVE(&ap->ap_ccb_pending, ccb, ccb_entry);
3406                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
3407                 break;
3408         case ATA_S_ONCHIP:
3409                 KKASSERT(ap->ap_active == (1 << ccb->ccb_slot) &&
3410                          ap->ap_sactive == 0);
3411                 ahci_port_stop(ap, 0);
3412                 ahci_port_start(ap);
3413
3414                 ccb->ccb_xa.state = ATA_S_TIMEOUT;
3415                 ap->ap_active &= ~(1 << ccb->ccb_slot);
3416                 KKASSERT(ap->ap_active_cnt > 0);
3417                 --ap->ap_active_cnt;
3418                 break;
3419         default:
3420                 panic("%s: ahci_quick_timeout: ccb in bad state %d",
3421                       ATANAME(ap, ccb->ccb_xa.at), ccb->ccb_xa.state);
3422         }
3423 }
3424
3425 static void
3426 ahci_dummy_done(struct ata_xfer *xa)
3427 {
3428 }
3429
3430 static void
3431 ahci_empty_done(struct ahci_ccb *ccb)
3432 {
3433 }